summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAdrian Dudau <adrian.dudau@enea.com>2013-12-12 17:36:38 +0100
committerAdrian Dudau <adrian.dudau@enea.com>2013-12-12 17:36:38 +0100
commit2a7348129a42f21095fcd62e47a035f78d254130 (patch)
tree544dc8019a8f8cb684ace8674193605e607f9964
downloadmeta-enea-master.tar.gz
initial commit of Enea Linux 3.1HEADmaster
Migrated from the internal git server on the dora-enea branch Signed-off-by: Adrian Dudau <adrian.dudau@enea.com>
-rw-r--r--.gitignore1
-rw-r--r--README13
-rw-r--r--conf/conf-notes.txt7
-rw-r--r--conf/distro/enea-tiny.conf121
-rw-r--r--conf/distro/enea.conf67
-rw-r--r--conf/layer.conf12
-rw-r--r--conf/machine/acp3448v2.conf28
-rw-r--r--conf/machine/bsc9131rdb.conf22
-rw-r--r--conf/machine/bsc9132qds.conf20
-rw-r--r--conf/machine/ebony.conf27
-rw-r--r--conf/machine/include/tune-ppc440.inc11
-rw-r--r--conf/machine/include/tune-ppc476.inc11
-rw-r--r--images/enea-image-demo.bb61
-rw-r--r--images/enea-image-minimal.bb29
-rw-r--r--images/enea-image-test-bash.bb21
-rw-r--r--images/enea-image-test-busybox.bb13
-rw-r--r--recipes-append/bash/bash_4.2.bbappend13
-rw-r--r--recipes-append/busybox/busybox_1.21.1.bbappend5
-rw-r--r--recipes-append/hv-cfg/hv-cfg_git.bbappend2
-rw-r--r--recipes-append/oprofile/files/oprofile-e500mc.patch2095
-rw-r--r--recipes-append/oprofile/oprofile_0.9.8.bbappend3
-rw-r--r--recipes-bsp/fm-ucode/fm-ucode_git.bb46
-rw-r--r--recipes-bsp/i2c-tools/i2c-tools-3.0.3/Module.mk72
-rw-r--r--recipes-bsp/i2c-tools/i2c-tools_3.0.3.bb24
-rw-r--r--recipes-bsp/libuio/libuio/run-ptest3
-rw-r--r--recipes-bsp/libuio/libuio_git.bb27
-rw-r--r--recipes-bsp/rtl8168/files/r8168-8.031.00.tar.bz2bin0 -> 68024 bytes
-rw-r--r--recipes-bsp/rtl8168/rtl8168_8.031.00.bb35
-rw-r--r--recipes-core/packagegroups/packagegroup-core-standalone-sdk-target.bbappend1
-rw-r--r--recipes-core/packagegroups/packagegroup-enea-core-boot.bb65
-rw-r--r--recipes-core/packagegroups/packagegroup-enea-ddt.bb23
-rw-r--r--recipes-core/packagegroups/packagegroup-enea-debug.bb36
-rw-r--r--recipes-core/packagegroups/packagegroup-enea-profile.bb66
-rw-r--r--recipes-core/packagegroups/packagegroup-enea-ptest.bb112
-rw-r--r--recipes-core/packagegroups/packagegroup-enea-sys.bb18
-rw-r--r--recipes-enea/linx/linx-2.6.5/liblinx_nobase.patch29
-rw-r--r--recipes-enea/linx/linx-2.6.5/linxcfg_nobase.patch38
-rw-r--r--recipes-enea/linx/linx-mod-2.6.5/linx-kernel-modules.patch288
-rw-r--r--recipes-enea/linx/linx-mod-2.6.5/support-for-3.11-kernel-versions.patch206
-rw-r--r--recipes-enea/linx/linx-mod_2.6.5.bb26
-rw-r--r--recipes-enea/linx/linx.inc22
-rw-r--r--recipes-enea/linx/linx_2.6.5.bb9
-rw-r--r--recipes-kernel/linux/files/add-no-error-array-bounds.patch13
-rw-r--r--recipes-kernel/linux/files/add-no-error-uninitialized.patch69
-rw-r--r--recipes-kernel/linux/files/add-no-unused-but-set-variable.patch13
-rw-r--r--recipes-kernel/linux/files/cfg/bootlogd.cfg2
-rw-r--r--recipes-kernel/linux/files/cfg/debug.cfg27
-rw-r--r--recipes-kernel/linux/files/cfg/devtmpfs.cfg2
-rw-r--r--recipes-kernel/linux/files/cfg/dpa.cfg1
-rw-r--r--recipes-kernel/linux/files/cfg/e500mc_debug.cfg6
-rw-r--r--recipes-kernel/linux/files/cfg/embedded.cfg1
-rw-r--r--recipes-kernel/linux/files/cfg/i2c.cfg1
-rw-r--r--recipes-kernel/linux/files/cfg/igb_drv.cfg3
-rw-r--r--recipes-kernel/linux/files/cfg/ikconfig.cfg2
-rw-r--r--recipes-kernel/linux/files/cfg/kgdb.cfg9
-rw-r--r--recipes-kernel/linux/files/cfg/kprobes.cfg1
-rw-r--r--recipes-kernel/linux/files/cfg/latencytop.cfg1
-rw-r--r--recipes-kernel/linux/files/cfg/localversion.cfg2
-rw-r--r--recipes-kernel/linux/files/cfg/ltp.cfg3
-rw-r--r--recipes-kernel/linux/files/cfg/lttng.cfg20
-rw-r--r--recipes-kernel/linux/files/cfg/mtd_tests.cfg1
-rw-r--r--recipes-kernel/linux/files/cfg/oprofile.cfg4
-rw-r--r--recipes-kernel/linux/files/cfg/perf.cfg2
-rw-r--r--recipes-kernel/linux/files/cfg/powertop.cfg13
-rw-r--r--recipes-kernel/linux/files/cfg/pramfs-bsc913x.cfg5
-rw-r--r--recipes-kernel/linux/files/cfg/pramfs.cfg4
-rw-r--r--recipes-kernel/linux/files/cfg/preempt.cfg1
-rw-r--r--recipes-kernel/linux/files/cfg/root_nfs.cfg7
-rw-r--r--recipes-kernel/linux/files/cfg/rt.cfg3
-rw-r--r--recipes-kernel/linux/files/cfg/systemtap.cfg6
-rw-r--r--recipes-kernel/linux/files/cfg/uio.cfg3
-rw-r--r--recipes-kernel/linux/files/cfg/uio_m.cfg3
-rw-r--r--recipes-kernel/linux/files/cfg/with_modules.cfg5
-rw-r--r--recipes-kernel/linux/files/disable_hw_checksum_offload.patch19
-rw-r--r--recipes-kernel/linux/files/enea_image.cfg1
-rw-r--r--recipes-kernel/linux/files/fix_for_CVE-2013-2094.patch36
-rwxr-xr-xrecipes-kernel/linux/files/merge_config.sh142
-rw-r--r--recipes-kernel/linux/files/pramfs-1.2.9-3.0Patched.tar.gzbin0 -> 53380 bytes
-rw-r--r--recipes-kernel/linux/files/pramfs-1.4.2-3.10_patched.tar.gzbin0 -> 508369 bytes
-rw-r--r--recipes-kernel/linux/files/pramfs-2.6.33-1.1.6.tar.gzbin0 -> 23004 bytes
-rw-r--r--recipes-kernel/linux/files/set-keystone2-clock-frequency.patch26
-rw-r--r--recipes-kernel/linux/files/setlocalversion.patch63
-rw-r--r--recipes-kernel/linux/kernel-configure.inc32
-rw-r--r--recipes-kernel/linux/linux-3.0.6.inc24
-rw-r--r--recipes-kernel/linux/linux-3.0.6/acp3448v2/0001-add-lsi-acp3448v2-bsp-patches.patch29202
-rw-r--r--recipes-kernel/linux/linux-3.0.6/acp3448v2/0002-Patch-to-head_44x.S-to-support-lsi-acp3448v2.patch246
-rw-r--r--recipes-kernel/linux/linux-3.0.6/acp3448v2/0003-Patch-drivers_dma_Makefile.patch22
-rw-r--r--recipes-kernel/linux/linux-3.0.6/acp3448v2/0004-change-arch_powerpc_kernel_setup_32_c.patch56
-rw-r--r--recipes-kernel/linux/linux-3.0.6/acp3448v2/0005-Patch-arch_powerpc_mm_tlb_nohash_c.patch85
-rw-r--r--recipes-kernel/linux/linux-3.0.6/acp3448v2/0006-backport-mmu_clear_feature-function.patch29
-rw-r--r--recipes-kernel/linux/linux-3.0.6/acp3448v2/0007-Enable-CONFIG_RELOCATABLE-for-ppc47x.patch26
-rw-r--r--recipes-kernel/linux/linux-3.0.6/acp3448v2/0008-change-serial-baudrate_to_115200.patch45
-rw-r--r--recipes-kernel/linux/linux-3.0.6/acp3448v2/0009-add-acp3448-PCIe-controller-driver.patch1081
-rw-r--r--recipes-kernel/linux/linux-3.0.6/acp3448v2/0010-fix-typo-error-for-acp-pcie.patch21
-rw-r--r--recipes-kernel/linux/linux-3.0.6/acp3448v2/0011-fix-compiler.h-__attribute_const__-redefined-problem.patch26
-rw-r--r--recipes-kernel/linux/linux-3.0.6/acp3448v2/defconfig1862
-rwxr-xr-xrecipes-kernel/linux/linux-3.0.6/merge_config.sh142
-rw-r--r--recipes-kernel/linux/linux-bsc913x-headers.bb62
-rw-r--r--recipes-kernel/linux/linux-bsc913x.bb30
-rw-r--r--recipes-kernel/linux/linux-bsc913x.inc22
-rw-r--r--recipes-kernel/linux/linux-bsc913x/bsc9131rdb/0001-add-options-to-KBUILD_CFLAGS.patch25
-rw-r--r--recipes-kernel/linux/linux-bsc913x/bsc9131rdb/0002-take-back-DECLARE_MUTEX-for-linx.patch26
-rw-r--r--recipes-kernel/linux/linux-bsc913x/bsc9131rdb/0003-fix-nonexistant-type-u8-issue.patch31
-rw-r--r--recipes-kernel/linux/linux-bsc913x/bsc9131rdb/0004-fix-wrong-WDTP_MASK-in-booke_wdt_c.patch26
-rw-r--r--recipes-kernel/linux/linux-bsc913x/bsc9131rdb/0007-perf-makefile.patch11
-rw-r--r--recipes-kernel/linux/linux-bsc913x/bsc9131rdb/0008-solve-bsc9131-MExtUtils-error.patch31
-rw-r--r--recipes-kernel/linux/linux-bsc913x/bsc9131rdb/defconfig1958
-rw-r--r--recipes-kernel/linux/linux-bsc913x/bsc9131rdb/linux-bsc9131rdb-2.6.33.tar.bz2bin0 -> 67952701 bytes
-rw-r--r--recipes-kernel/linux/linux-bsc913x/bsc9132qds/0001-add-options-to-KBUILD_CFLAGS.patch25
-rw-r--r--recipes-kernel/linux/linux-bsc913x/bsc9132qds/0002-take-back-DECLARE_MUTEX-for-linx.patch26
-rw-r--r--recipes-kernel/linux/linux-bsc913x/bsc9132qds/0003-fix-nonexistant-type-u8-issue.patch31
-rw-r--r--recipes-kernel/linux/linux-bsc913x/bsc9132qds/0004-fix-wrong-WDTP_MASK-in-booke_wdt_c.patch26
-rw-r--r--recipes-kernel/linux/linux-bsc913x/bsc9132qds/0007-perf-makefile.patch11
-rw-r--r--recipes-kernel/linux/linux-bsc913x/bsc9132qds/defconfig1958
-rw-r--r--recipes-kernel/linux/linux-bsc913x/bsc9132qds/linux-bsc9132qds-2.6.33.tar.bz2bin0 -> 67968733 bytes
-rw-r--r--recipes-kernel/linux/linux-davinci-mainline.bbappend18
-rw-r--r--recipes-kernel/linux/linux-kernel-headers_3.0.6.bb66
-rw-r--r--recipes-kernel/linux/linux-keystone_3.8.4.bbappend24
-rw-r--r--recipes-kernel/linux/linux-omap4_3.4.bbappend22
-rw-r--r--recipes-kernel/linux/linux-qoriq-sdk.bbappend27
-rw-r--r--recipes-kernel/linux/linux-raspberrypi_3.6.11.bbappend16
-rw-r--r--recipes-kernel/linux/linux-xlnx_3.8.bbappend11
-rw-r--r--recipes-kernel/linux/linux-yocto_3.10.bbappend4
-rw-r--r--recipes-kernel/linux/linux-yocto_3.8.bbappend5
-rw-r--r--recipes-kernel/linux/linux_3.0.6.bb21
-rw-r--r--recipes-kernel/linux/pramfs-2.6.33.inc16
-rw-r--r--recipes-kernel/linux/pramfs-3.0.inc21
-rw-r--r--recipes-kernel/linux/staging-kernel.inc156
-rw-r--r--recipes-kernel/pramfs-init/files/pramfs_init80
-rw-r--r--recipes-kernel/pramfs-init/pramfs-init_1.0.bb20
-rw-r--r--recipes-test/ddt-runner/ddt-runner.bb24
-rw-r--r--recipes-test/ddt-runner/files/ddt-runner19
-rwxr-xr-xrecipes-test/ddt-runner/files/scripts/acp3448v2/ethernet97
-rwxr-xr-xrecipes-test/ddt-runner/files/scripts/acp3448v2/flash45
-rwxr-xr-xrecipes-test/ddt-runner/files/scripts/acp3448v2/pci-express109
-rwxr-xr-xrecipes-test/ddt-runner/files/scripts/acp3448v2/usb100
-rwxr-xr-xrecipes-test/ddt-runner/files/scripts/bsc9131rdb/ethernet89
-rwxr-xr-xrecipes-test/ddt-runner/files/scripts/bsc9131rdb/flash48
-rwxr-xr-xrecipes-test/ddt-runner/files/scripts/bsc9131rdb/i2c75
-rwxr-xr-xrecipes-test/ddt-runner/files/scripts/bsc9131rdb/preempt_rt33
-rwxr-xr-xrecipes-test/ddt-runner/files/scripts/bsc9131rdb/spi56
-rwxr-xr-xrecipes-test/ddt-runner/files/scripts/bsc9131rdb/watchdog64
-rwxr-xr-xrecipes-test/ddt-runner/files/scripts/bsc9132qds/ethernet89
-rwxr-xr-xrecipes-test/ddt-runner/files/scripts/bsc9132qds/flash48
-rwxr-xr-xrecipes-test/ddt-runner/files/scripts/bsc9132qds/i2c75
-rwxr-xr-xrecipes-test/ddt-runner/files/scripts/bsc9132qds/preempt_rt33
-rw-r--r--recipes-test/ddt-runner/files/scripts/bsc9132qds/sdhc77
-rwxr-xr-xrecipes-test/ddt-runner/files/scripts/bsc9132qds/spi56
-rwxr-xr-xrecipes-test/ddt-runner/files/scripts/bsc9132qds/watchdog64
-rwxr-xr-xrecipes-test/ddt-runner/files/scripts/p2020rdb/ethernet88
-rwxr-xr-xrecipes-test/ddt-runner/files/scripts/p2041rdb/ethernet88
-rwxr-xr-xrecipes-test/ddt-runner/files/scripts/p2041rdb/flash49
-rwxr-xr-xrecipes-test/ddt-runner/files/scripts/p2041rdb/i2c44
-rwxr-xr-xrecipes-test/ddt-runner/files/scripts/p2041rdb/pci-express109
-rwxr-xr-xrecipes-test/ddt-runner/files/scripts/p2041rdb/sata81
-rwxr-xr-xrecipes-test/ddt-runner/files/scripts/p2041rdb/sdhc41
-rwxr-xr-xrecipes-test/ddt-runner/files/scripts/p2041rdb/usb48
-rwxr-xr-xrecipes-test/ddt-runner/files/scripts/p4080ds/ethernet88
-rwxr-xr-xrecipes-test/ddt-runner/files/scripts/p4080ds/flash20
-rwxr-xr-xrecipes-test/ddt-runner/files/scripts/p4080ds/i2c24
-rwxr-xr-xrecipes-test/ddt-runner/files/scripts/p4080ds/rtc42
-rwxr-xr-xrecipes-test/ddt-runner/files/scripts/p4080ds/sdhc65
-rwxr-xr-xrecipes-test/ddt-runner/files/scripts/p4080ds/spi48
-rwxr-xr-xrecipes-test/ddt-runner/files/scripts/p4080ds/usb100
-rwxr-xr-xrecipes-test/perf-networking/files/perf-networking14
-rw-r--r--recipes-test/perf-networking/perf-networking_1.0.bb19
-rw-r--r--recipes-test/systest-runner/files/systest-runner16
-rwxr-xr-xrecipes-test/systest-runner/files/tests/ltp23
-rwxr-xr-xrecipes-test/systest-runner/files/tests/perf-network13
-rwxr-xr-xrecipes-test/systest-runner/files/tests/posixtest40
-rw-r--r--recipes-test/systest-runner/systest-runner.bb28
171 files changed, 44242 insertions, 0 deletions
diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..e4e5f6c
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1 @@
*~ \ No newline at end of file
diff --git a/README b/README
new file mode 100644
index 0000000..617d899
--- /dev/null
+++ b/README
@@ -0,0 +1,13 @@
1OpenEmbedded/Yocto BSP layer for Enea Linux reconfigurable platforms
2====================================================================
3
4This layer provides support for Enea Linux reconfigurables platforms
5for use with OpenEmbedded and/or Yocto.
6
7 This layer depends on:
8
9 URI: git://git.yoctoproject.org/poky.git
10 branch: denzil-7.0
11
12 URI: git://git.yoctoproject.org/meta-fsl-ppc
13 branch: denzil \ No newline at end of file
diff --git a/conf/conf-notes.txt b/conf/conf-notes.txt
new file mode 100644
index 0000000..55281bd
--- /dev/null
+++ b/conf/conf-notes.txt
@@ -0,0 +1,7 @@
1Common targets are:
2 enea-image-minimal
3 enea-image-demo
4 meta-toolchain
5
6You can also run generated qemu images with a command like 'runqemu qemuppc'
7
diff --git a/conf/distro/enea-tiny.conf b/conf/distro/enea-tiny.conf
new file mode 100644
index 0000000..ab7ab40
--- /dev/null
+++ b/conf/distro/enea-tiny.conf
@@ -0,0 +1,121 @@
1DISTRO = "enea"
2DISTRO_NAME = "ENEA Linux distribution (Built by Poky 6.0)"
3DISTRO_VERSION = "0.1"
4SDK_VENDOR = "-eneasdk"
5SDK_VERSION := "${@'${DISTRO_VERSION}'.replace('snapshot-${DATE}','snapshot')}"
6
7MAINTAINER = "ENEA <issues@enea.com>"
8
9TARGET_VENDOR = "-enea"
10
11LOCALCONF_VERSION = "1"
12
13DISTRO_FEATURES = ""
14# libc-big-macros \
15# libc-catgets \
16# libc-charsets \
17# libc-db-aliases \
18# libc-fcvt \
19# libc-fstab \
20# libc-ftraverse \
21# libc-libm-big \
22# libc-locales \
23# libc-locale-code \
24# libc-rcmd \
25# libc-sunrpc \
26# libc-utmp \
27# libc-utmpx \
28# libc-wordexp \
29# libc-posix-clang-wchar \
30# libc-posix-wchar-io"
31DISTRO_FEATURES_LIBC = "ipv4 \
32 ipv6 \
33 libc-backtrace \
34 libc-bsd \
35 libc-cxx-tests \
36 libc-crypt \
37 libc-crypt-ufc \
38 libc-envz \
39 libc-fmtmsg \
40 libc-getlogin \
41 libc-idn \
42 libc-inet-anl \
43 libc-libm \
44 libc-memusage \
45 libc-nis \
46 libc-nsswitch \
47 libc-rtld-debug \
48 libc-spawn \
49 libc-streams \
50 libc-posix-regexp \
51 libc-posix-regexp-glibc \
52"
53
54DISTRO_FEATURES = "argp ext2 largefile xattr nfs pci ${DISTRO_FEATURES_LIBC} "
55
56#
57# dany: Needed for meta-toolchain
58#
59#DISTRO_FEATURES_append = " x11 alsa "
60
61# dany: Set to minimize image further
62#VIRTUAL-RUNTIME_login_manager = ""
63VIRTUAL-RUNTIME_dev_manager = ""
64#VIRTUAL-RUNTIME_update-alternatives = ""
65
66SDK_NAME = "${DISTRO}-${TCLIBC}-${SDK_ARCH}-${PACKAGE_ARCH}"
67SDKPATH = "/opt/${DISTRO}/${SDK_VERSION}"
68
69DISTRO_EXTRA_RDEPENDS += "task-core-boot"
70DISTRO_EXTRA_RRECOMMENDS += ""
71
72POKYQEMUDEPS = "${@base_contains("INCOMPATIBLE_LICENSE", "GPLv3", "", "qemu-config",d)}"
73DISTRO_EXTRA_RDEPENDS_append_qemuarm = " ${POKYQEMUDEPS}"
74DISTRO_EXTRA_RDEPENDS_append_qemumips = " ${POKYQEMUDEPS}"
75DISTRO_EXTRA_RDEPENDS_append_qemuppc = " ${POKYQEMUDEPS}"
76DISTRO_EXTRA_RDEPENDS_append_qemux86 = " ${POKYQEMUDEPS}"
77DISTRO_EXTRA_RDEPENDS_append_qemux86-64 = " ${POKYQEMUDEPS}"
78
79TCLIBCAPPEND = ""
80
81QEMU_TARGETS ?= "arm i386 mips mipsel ppc x86_64"
82
83# Other QEMU_TARGETS "mips64 mips64el sh4"
84
85PREMIRRORS ?= "\
86bzr://.*/.* http://autobuilder.yoctoproject.org/sources/ \n \
87cvs://.*/.* http://autobuilder.yoctoproject.org/sources/ \n \
88git://.*/.* http://autobuilder.yoctoproject.org/sources/ \n \
89hg://.*/.* http://autobuilder.yoctoproject.org/sources/ \n \
90osc://.*/.* http://autobuilder.yoctoproject.org/sources/ \n \
91p4://.*/.* http://autobuilder.yoctoproject.org/sources/ \n \
92svk://.*/.* http://autobuilder.yoctoproject.org/sources/ \n \
93svn://.*/.* http://autobuilder.yoctoproject.org/sources/ \n"
94
95MIRRORS =+ "\
96ftp://.*/.* http://autobuilder.yoctoproject.org/sources/ \n \
97http://.*/.* http://autobuilder.yoctoproject.org/sources/ \n \
98https://.*/.* http://autobuilder.yoctoproject.org/sources/ \n"
99
100#KERNEL_IMAGETYPE = "uImage"
101IMAGE_FSTYPES = "ext2.gz.u-boot tar.gz"
102IMAGE_CLASSES += "image_types_uboot"
103# Generate source packages
104# PACKAGE_CLASSES += " src-dist "
105
106# Distribute unpatched sources
107#SRC_DIST_LOCAL ?= "symlink"
108#INHERIT += "src_distribute_enea"
109
110INHERIT += "image_types_uboot"
111# INHERIT := "sourcepkg"
112
113#PREFERRED_VERSION_u-boot-mkimage-native_powerpc = "2011.06"
114#PREFERRED_VERSION_u-boot-mkimage-native = "2011.06"
115#PREFERRED_PROVIDER_vitual/libc = "eglibc"
116#PREFERRED_VERSION_netbase = "4.45"
117
118CONNECTIVITY_CHECK_URIS ?= "git://git.yoctoproject.org/yocto-firewall-test;protocol=git;rev=HEAD \
119 https://eula-downloads.yoctoproject.org/index.php \
120 http://bugzilla.yoctoproject.org/report.cgi"
121
diff --git a/conf/distro/enea.conf b/conf/distro/enea.conf
new file mode 100644
index 0000000..05eef59
--- /dev/null
+++ b/conf/distro/enea.conf
@@ -0,0 +1,67 @@
1require conf/distro/poky.conf
2DISTRO = "enea"
3DISTRO_NAME = "Enea Linux"
4DISTRO_VERSION = "3.1"
5SDK_VENDOR = "-eneasdk"
6SDK_VERSION := "${@'${DISTRO_VERSION}'.replace('snapshot-${DATE}','snapshot')}"
7
8MAINTAINER = "ENEA <issues@enea.com>"
9
10TARGET_VENDOR = "-enea"
11TARGET_VENDOR_virtclass-multilib-lib32 = "-enea"
12TARGET_VENDOR_virtclass-multilib-lib64 = "-enea"
13
14DISTRO_FEATURES_LIBC = "\
15 ipv4 \
16 ipv6 \
17 libc-backtrace \
18 libc-big-macros \
19 libc-bsd \
20 libc-cxx-tests \
21 libc-catgets \
22 libc-charsets \
23 libc-crypt \
24 libc-crypt-ufc \
25 libc-db-aliases \
26 libc-envz \
27 libc-fcvt \
28 libc-fmtmsg \
29 libc-fstab \
30 libc-ftraverse \
31 libc-getlogin \
32 libc-idn \
33 libc-inet-anl \
34 libc-libm \
35 libc-libm-big \
36 libc-locales \
37 libc-locale-code \
38 libc-memusage libc-nis \
39 libc-nsswitch \
40 libc-rcmd \
41 libc-rtld-debug \
42 libc-spawn \
43 libc-streams \
44 libc-sunrpc \
45 libc-utmp \
46 libc-utmpx \
47 libc-wordexp \
48 libc-posix-clang-wchar \
49 libc-posix-regexp \
50 libc-posix-regexp-glibc \
51 libc-posix-wchar-io \
52 "
53
54DISTRO_FEATURES = "ptest argp ext2 largefile xattr nfs pci ${DISTRO_FEATURES_LIBC} "
55
56# dany: Set to minimize image further
57#VIRTUAL-RUNTIME_login_manager = ""
58#VIRTUAL-RUNTIME_dev_manager = ""
59#VIRTUAL-RUNTIME_update-alternatives = ""
60
61SDK_NAME = "${DISTRO}-${TCLIBC}-${SDK_ARCH}-${PACKAGE_ARCH}"
62
63#For meta-ti and meta-fsl-ppc, update BBMASK to avoid some known build errors
64BBMASK ?= ""
65OLDBBMASK := "${BBMASK}"
66BBMASK = "${@base_conditional('OLDBBMASK', "", ".*/meta-(ti/recipes-misc|fsl-ppc/recipes-test)/", "${OLDBBMASK}", d)}"
67BB_DANGLINGAPPENDS_WARNONLY ?= "1"
diff --git a/conf/layer.conf b/conf/layer.conf
new file mode 100644
index 0000000..bfd4ef2
--- /dev/null
+++ b/conf/layer.conf
@@ -0,0 +1,12 @@
1# We have a packages directory, add to BBFILES
2BBPATH .= ":${LAYERDIR}"
3
4BBFILES += "${LAYERDIR}/recipes-*/*/*.bb*"
5BBFILES += "${LAYERDIR}/images/*.bb*"
6
7BBFILE_COLLECTIONS += "enea"
8BBFILE_PATTERN_enea := "^${LAYERDIR}/"
9BBFILE_PRIORITY_enea = "6"
10
11BB_ENV_EXTRAWHITE := "KSRC USRC"
12BB_DANGLINGAPPENDS_WARNONLY = "yes"
diff --git a/conf/machine/acp3448v2.conf b/conf/machine/acp3448v2.conf
new file mode 100644
index 0000000..7fa628f
--- /dev/null
+++ b/conf/machine/acp3448v2.conf
@@ -0,0 +1,28 @@
1#@TYPE: Machine
2#@DESCRIPTION: Machine configuration for running
3
4require include/tune-ppc476.inc
5
6MACHINE_FEATURES = "usbhost pci ext2 ext3"
7
8PREFERRED_PROVIDER_virtual/kernel ?= "linux"
9PREFERRED_VERSION_virtual/kernel ?= "3.0.6"
10
11PREFERRED_PROVIDER_linux-libc-headers ?= "linux-kernel-headers"
12PREFERRED_PROVIDER_linux-libc-headers-nativesdk ?= "linux-kernel-headers-nativesdk"
13PREFERRED_VERSION_linux-kernel-headers ?= "3.0.6"
14PREFERRED_VERSION_linux-kernel-headers-nativesdk ?= "3.0.6"
15
16KERNEL_EXTRA_OEMAKE = "V=1"
17#KERNEL_DEVICETREE = "${S}/arch/powerpc/boot/dts/acp.dts"
18#KERNEL_DEFCONFIG = "${S}/arch/powerpc/configs/acp_dbgconfig"
19KERNEL_IMAGETYPE = "uImage"
20UBOOT_ENTRYPOINT = "0x00400000"
21UBOOT_LOADADDRESS = "0x00400000"
22IMAGE_FSTYPES = "tar.gz ext2.gz ext2.gz.u-boot"
23USE_VT = "0"
24SERIAL_CONSOLE = "115200 ttyS0"
25
26# override version preference in tcmode-default.inc
27#PREFERRED_VERSION_u-boot-mkimage-native_powerpc = ""
28
diff --git a/conf/machine/bsc9131rdb.conf b/conf/machine/bsc9131rdb.conf
new file mode 100644
index 0000000..72a4532
--- /dev/null
+++ b/conf/machine/bsc9131rdb.conf
@@ -0,0 +1,22 @@
1TARGET_FPU = "ppc-efd"
2
3require conf/machine/include/tune-ppce500v2.inc
4
5MACHINE_FEATURES = "kernel26 pci ext2 ext3 serial"
6MACHINE_EXTRA_RRECOMMENDS = ""
7
8PREFERRED_PROVIDER_virtual/kernel ?= "linux-bsc913x"
9PREFERRED_VERSION_virtual/kernel ?= "2.6.33"
10PREFERRED_PROVIDER_linux-libc-headers ?= "linux-bsc913x-headers"
11PREFERRED_PROVIDER_linux-libc-headers-nativesdk ?= "linux-bsc913x-headers-nativesdk"
12
13KERNEL_DEVICETREE = "${S}/arch/powerpc/boot/dts/bsc9131rdb.dts"
14
15KERNEL_IMAGETYPE ?= "uImage"
16# disable the images below for now
17# ext2.bz2 ext2.lzma \
18# ext2.gz.u-boot ext2.bz2.u-boot ext2.lzma.u-boot"
19
20MACHINEOVERRIDES .= ":e500v2"
21SERIAL_CONSOLE = "115200 ttyS0"
22USE_VT = "0"
diff --git a/conf/machine/bsc9132qds.conf b/conf/machine/bsc9132qds.conf
new file mode 100644
index 0000000..1c4aab3
--- /dev/null
+++ b/conf/machine/bsc9132qds.conf
@@ -0,0 +1,20 @@
1TARGET_FPU = "ppc-efd"
2
3require conf/machine/include/tune-ppce500v2.inc
4
5MACHINE_FEATURES = "kernel26 pci ext2 ext3 serial"
6MACHINE_EXTRA_RRECOMMENDS = ""
7
8PREFERRED_PROVIDER_virtual/kernel ?= "linux-bsc913x"
9PREFERRED_VERSION_virtual/kernel ?= "2.6.33"
10PREFERRED_PROVIDER_linux-libc-headers ?= "linux-bsc913x-headers"
11PREFERRED_PROVIDER_linux-libc-headers-nativesdk ?= "linux-bsc913x-headers-nativesdk"
12
13KERNEL_DEVICETREE = "${S}/arch/powerpc/boot/dts/bsc9132qds.dts"
14
15KERNEL_IMAGETYPE ?= "uImage"
16# disable the images below for now
17# ext2.bz2 ext2.lzma \
18# ext2.gz.u-boot ext2.bz2.u-boot ext2.lzma.u-boot"
19
20MACHINEOVERRIDES .= ":e500v2"
diff --git a/conf/machine/ebony.conf b/conf/machine/ebony.conf
new file mode 100644
index 0000000..25734be
--- /dev/null
+++ b/conf/machine/ebony.conf
@@ -0,0 +1,27 @@
1#@TYPE: Machine
2#@DESCRIPTION: Machine configuration for running
3
4require include/tune-ppc440.inc
5
6PREFERRED_PROVIDER_virtual/kernel ?= "kernel-org"
7PREFERRED_VERSION_kernel-org ?= "3.0.6"
8
9PREFERRED_PROVIDER_linux-libc-headers ?= "kernel-org-headers"
10PREFERRED_PROVIDER_linux-libc-headers-nativesdk ?= "kernel-org-headers-nativesdk"
11
12PREFERRED_VERSION_kernel-org-headers ?= "3.0.6"
13PREFERRED_VERSION_kernel-org-headers-nativesdk ?= "3.0.6"
14
15#PREFERRED_VERSION_linx = "2.6.3"
16#PREFERRED_VERSION_linx-mod = "2.6.3"
17
18IMAGE_FSTYPES = "tar.gz ext2.gz ext2.gz.u-boot"
19
20UBOOT_MACHINES = "ebony_config"
21KERNEL_DEVICETREE = "${S}/arch/powerpc/boot/dts/ebony.dts"
22KERNEL_DEFCONFIG = "${S}/arch/powerpc/configs/44x/ebony_defconfig"
23KERNEL_IMAGETYPE = "uImage"
24MACHINE_FEATURES = "kernel26 ext3 serial"
25
26# override version preference in tcmode-default.inc
27PREFERRED_VERSION_u-boot-mkimage-native_powerpc = ""
diff --git a/conf/machine/include/tune-ppc440.inc b/conf/machine/include/tune-ppc440.inc
new file mode 100644
index 0000000..6262fb7
--- /dev/null
+++ b/conf/machine/include/tune-ppc440.inc
@@ -0,0 +1,11 @@
1DEFAULTTUNE ?= "ppc440"
2
3require conf/machine/include/powerpc/arch-powerpc.inc
4
5TUNEVALID[ppc440] = "Enable ppc440 specific processor optimizations"
6TUNE_CCARGS += "${@bb.utils.contains("TUNE_FEATURES", "ppc440", "-mcpu=440", "", d)}"
7TUNE_PKGARCH = "${@bb.utils.contains("TUNE_FEATURES", "ppc440", "ppc440", "", d)}"
8
9AVAILTUNES = "ppc440"
10TUNE_FEATURES_tune-ppc440 = "m32 fpu-soft ppc440"
11PACKAGE_EXTRA_ARCHS_tune-ppc440 = "powerpc-nf ppc440 ppc405"
diff --git a/conf/machine/include/tune-ppc476.inc b/conf/machine/include/tune-ppc476.inc
new file mode 100644
index 0000000..a34690f
--- /dev/null
+++ b/conf/machine/include/tune-ppc476.inc
@@ -0,0 +1,11 @@
1DEFAULTTUNE ?= "ppc476"
2
3require conf/machine/include/powerpc/arch-powerpc.inc
4
5AVAILTUNES += "ppc476"
6TUNE_FEATURES_tune-ppc476 = "m32 fpu-hard ppc476"
7TUNEVALID[ppc476] = "Enable ppc476 specific processor optimizations"
8TUNE_CCARGS += "${@bb.utils.contains("TUNE_FEATURES", "ppc476", "-mcpu=476", "", d)}"
9TUNE_PKGARCH_tune-ppc476 = "ppc476"
10
11PACKAGE_EXTRA_ARCHS_tune-ppc476 = "powerpc-nf ppc476 ppc440 ppc405"
diff --git a/images/enea-image-demo.bb b/images/enea-image-demo.bb
new file mode 100644
index 0000000..1f73d43
--- /dev/null
+++ b/images/enea-image-demo.bb
@@ -0,0 +1,61 @@
1# Uncomment for opkg/dpkg/rpm on available on target
2IMAGE_FSTYPES += "ext2.gz.u-boot ext3 tar.gz"
3IMAGE_FEATURES += "package-management"
4
5IMAGE_FEATURES += "eclipse-debug tools-debug tools-profile dbg-pkgs ssh-server-openssh"
6
7ENEA_GPL = " \
8 linx \
9 linx-mod"
10
11ENEA_GPL_qemux86 = ""
12ENEA_GPL_qemuppc = ""
13ENEA_GPL_armv5 = ""
14ENEA_GPL_armv7a = ""
15
16VALGRIND ?= ""
17VALGRIND_powerpc ?= "valgrind"
18VALGRIND_e500v2 ?= ""
19VALGRIND_x86 ?= "valgrind"
20VALGRIND_x86_64 ?= "valgrind"
21VALGRIND_armv7a ?= "valgrind"
22
23IMAGE_INSTALL = " \
24 packagegroup-enea-core-boot \
25 packagegroup-enea-debug \
26 packagegroup-enea-profile \
27 ${ROOTFS_PKGMANAGE_BOOTSTRAP} \
28 kexec-tools \
29 openssl \
30 bc \
31 dhcp-client \
32 sqlite3 \
33 pramfs-init \
34 zip \
35 gettext \
36 gettext-runtime \
37 mtd-utils \
38 net-tools \
39 pciutils \
40 ltp \
41 libuio \
42 usbutils \
43 lttng-tools \
44 lttng-modules \
45 babeltrace \
46 netbase \
47 sudo \
48 ${ENEA_GPL} \
49 ${VALGRIND} \
50 "
51
52IMAGE_INSTALL += "kernel-modules "
53
54IMAGE_LINGUAS = ""
55
56inherit core-image
57inherit image_types_uboot
58
59IMAGE_ROOTFS_SIZE = "1"
60# Increased the overhead factor to be able to build via nfs.
61IMAGE_OVERHEAD_FACTOR = "2"
diff --git a/images/enea-image-minimal.bb b/images/enea-image-minimal.bb
new file mode 100644
index 0000000..85920db
--- /dev/null
+++ b/images/enea-image-minimal.bb
@@ -0,0 +1,29 @@
1#
2# Poky specific package kits.
3#
4
5# no need for udev
6VIRTUAL-RUNTIME_dev_manager = ""
7
8
9#
10# Enea Specific Packages
11#
12IMAGE_INSTALL = " \
13 packagegroup-enea-core-boot \
14 pramfs-init \
15 "
16
17IMAGE_LINGUAS = ""
18
19LICENSE = "MIT"
20
21inherit core-image
22inherit image_types_uboot
23
24IMAGE_FSTYPES += "ext2.gz.u-boot ext3 tar.gz"
25
26# The bigger of below two will be chosen
27IMAGE_ROOTFS_SIZE = "1"
28# Increased the overhead factor to be able to build via nfs.
29IMAGE_OVERHEAD_FACTOR = "2"
diff --git a/images/enea-image-test-bash.bb b/images/enea-image-test-bash.bb
new file mode 100644
index 0000000..9e05e19
--- /dev/null
+++ b/images/enea-image-test-bash.bb
@@ -0,0 +1,21 @@
1IMAGE_FSTYPES += "ext2.gz.u-boot ext3 tar.gz"
2IMAGE_FEATURES += "ptest-pkgs"
3IMAGE_FEATURES += "ssh-server-openssh"
4
5PERF ?= "perf"
6PERF_armv5 ?= ""
7PERF_armv6 ?= ""
8PERF_armv7a ?= ""
9
10IMAGE_INSTALL = " \
11 packagegroup-enea-core-boot \
12 packagegroup-enea-ptest \
13 packagegroup-enea-ddt \
14 packagegroup-enea-sys \
15 openssh \
16 console-tools \
17 ${PERF}\
18 "
19
20inherit core-image
21inherit image_types_uboot
diff --git a/images/enea-image-test-busybox.bb b/images/enea-image-test-busybox.bb
new file mode 100644
index 0000000..04b67e3
--- /dev/null
+++ b/images/enea-image-test-busybox.bb
@@ -0,0 +1,13 @@
1IMAGE_FSTYPES += "ext2.gz.u-boot ext3 tar.gz"
2IMAGE_FEATURES += "ptest-pkgs"
3IMAGE_FEATURES += "ssh-server-dropbear"
4
5IMAGE_INSTALL = " \
6 packagegroup-enea-core-boot \
7 packagegroup-enea-ptest \
8 packagegroup-enea-sys \
9 dropbear \
10 "
11
12inherit core-image
13inherit image_types_uboot
diff --git a/recipes-append/bash/bash_4.2.bbappend b/recipes-append/bash/bash_4.2.bbappend
new file mode 100644
index 0000000..0b5ad7f
--- /dev/null
+++ b/recipes-append/bash/bash_4.2.bbappend
@@ -0,0 +1,13 @@
1# Fixup for broken ENEA environment with bash under /usr/bin/bash
2# RPM nativesdk packaging breaks for meta-toolchain without this append.
3
4FILES_${PN} += "${base_bindir}/* ${exec_prefix}/bin/*"
5
6do_install_append () {
7 mkdir -p ${D}/usr/bin
8 cd ${D}/usr/bin && ln -sf /bin/bash bash
9}
10
11BBCLASSEXTEND = "native nativesdk"
12
13
diff --git a/recipes-append/busybox/busybox_1.21.1.bbappend b/recipes-append/busybox/busybox_1.21.1.bbappend
new file mode 100644
index 0000000..33ffdc5
--- /dev/null
+++ b/recipes-append/busybox/busybox_1.21.1.bbappend
@@ -0,0 +1,5 @@
1do_prepare_config_append () {
2 sed -i -e 's/# CONFIG_CHRT is not set/CONFIG_CHRT=y/' .config
3 sed -i -e 's/# CONFIG_TASKSET is not set/CONFIG_TASKSET=y/' .config
4 sed -i -e 's/# CONFIG_FEATURE_TASKSET_FANCY is not set/CONFIG_FEATURE_TASKSET_FANCY=y/' .config
5} \ No newline at end of file
diff --git a/recipes-append/hv-cfg/hv-cfg_git.bbappend b/recipes-append/hv-cfg/hv-cfg_git.bbappend
new file mode 100644
index 0000000..ff749c9
--- /dev/null
+++ b/recipes-append/hv-cfg/hv-cfg_git.bbappend
@@ -0,0 +1,2 @@
1# Set to SDK 1.2 release, and override AUTOREV
2SRCREV = "102ab848d94f3c04f364ed273d0e00b21b0266f4"
diff --git a/recipes-append/oprofile/files/oprofile-e500mc.patch b/recipes-append/oprofile/files/oprofile-e500mc.patch
new file mode 100644
index 0000000..f784ae6
--- /dev/null
+++ b/recipes-append/oprofile/files/oprofile-e500mc.patch
@@ -0,0 +1,2095 @@
1diff -uNr a/events/Makefile.am b/events/Makefile.am
2--- a/events/Makefile.am 2012-08-27 20:59:13.000000000 +0200
3+++ b/events/Makefile.am 2013-02-07 07:06:04.168567619 +0100
4@@ -72,6 +72,7 @@
5 ppc/7450/events ppc/7450/unit_masks \
6 ppc/e500/events ppc/e500/unit_masks \
7 ppc/e500v2/events ppc/e500v2/unit_masks \
8+ ppc/e500mc/events ppc/e500mc/unit_masks \
9 ppc/e300/events ppc/e300/unit_masks \
10 tile/tile64/events tile/tile64/unit_masks \
11 tile/tilepro/events tile/tilepro/unit_masks \
12diff -uNr a/events/ppc/e500mc/events b/events/ppc/e500mc/events
13--- a/events/ppc/e500mc/events 1970-01-01 01:00:00.000000000 +0100
14+++ b/events/ppc/e500mc/events 2013-02-07 07:03:57.990063725 +0100
15@@ -0,0 +1,83 @@
16+# e500 Events
17+#
18+event:0x1 counters:0,1,2,3 um:zero minimum:100 name:CPU_CLK : Cycles
19+event:0x2 counters:0,1,2,3 um:zero minimum:500 name:COMPLETED_INSNS : Completed Instructions (0, 1, or 2 per cycle)
20+event:0x3 counters:0,1,2,3 um:zero minimum:500 name:COMPLETED_OPS : Completed Micro-ops (counts 2 for load/store w/update)
21+event:0x4 counters:0,1,2,3 um:zero minimum:500 name:INSTRUCTION_FETCHES : Instruction fetches
22+event:0x5 counters:0,1,2,3 um:zero minimum:500 name:DECODED_OPS : Micro-ops decoded
23+event:0x8 counters:0,1,2,3 um:zero minimum:500 name:COMPLETED_BRANCHES : Branch Instructions completed
24+event:0x9 counters:0,1,2,3 um:zero minimum:500 name:COMPLETED_LOAD_OPS : Load micro-ops completed
25+event:0xa counters:0,1,2,3 um:zero minimum:500 name:COMPLETED_STORE_OPS : Store micro-ops completed
26+event:0xb counters:0,1,2,3 um:zero minimum:500 name:COMPLETION_REDIRECTS : Number of completion buffer redirects
27+event:0xc counters:0,1,2,3 um:zero minimum:500 name:BRANCHES_FINISHED : Branches finished
28+event:0xd counters:0,1,2,3 um:zero minimum:500 name:TAKEN_BRANCHES_FINISHED : Taken branches finished
29+event:0xe counters:0,1,2,3 um:zero minimum:500 name:BIFFED_BRANCHES_FINISHED : Biffed branches finished
30+event:0xf counters:0,1,2,3 um:zero minimum:500 name:BRANCHES_MISPREDICTED : Branch instructions mispredicted due to direction, target, or IAB prediction
31+event:0x10 counters:0,1,2,3 um:zero minimum:500 name:BRANCHES_MISPREDICTED_DIRECTION : Branches mispredicted due to direction prediction
32+event:0x11 counters:0,1,2,3 um:zero minimum:500 name:BTB_HITS : Branches that hit in the BTB, or missed but are not taken
33+event:0x12 counters:0,1,2,3 um:zero minimum:500 name:DECODE_STALLED : Cycles the instruction buffer was not empty, but 0 instructions decoded
34+event:0x13 counters:0,1,2,3 um:zero minimum:500 name:ISSUE_STALLED : Cycles the issue buffer is not empty but 0 instructions issued
35+event:0x14 counters:0,1,2,3 um:zero minimum:500 name:BRANCH_ISSUE_STALLED : Cycles the branch buffer is not empty but 0 instructions issued
36+event:0x15 counters:0,1,2,3 um:zero minimum:500 name:SRS0_SCHEDULE_STALLED : Cycles SRS0 is not empty but 0 instructions scheduled
37+event:0x16 counters:0,1,2,3 um:zero minimum:500 name:SRS1_SCHEDULE_STALLED : Cycles SRS1 is not empty but 0 instructions scheduled
38+event:0x17 counters:0,1,2,3 um:zero minimum:500 name:VRS_SCHEDULE_STALLED : Cycles VRS is not empty but 0 instructions scheduled
39+event:0x18 counters:0,1,2,3 um:zero minimum:500 name:LRS_SCHEDULE_STALLED : Cycles LRS is not empty but 0 instructions scheduled
40+event:0x19 counters:0,1,2,3 um:zero minimum:500 name:BRS_SCHEDULE_STALLED : Cycles BRS is not empty but 0 instructions scheduled Load/Store, Data Cache, and dLFB Events
41+event:0x1a counters:0,1,2,3 um:zero minimum:500 name:TOTAL_TRANSLATED : Total Ldst microops translated.
42+event:0x1b counters:0,1,2,3 um:zero minimum:500 name:LOADS_TRANSLATED : Number of cacheable L* or EVL* microops translated. (This includes microops from load-multiple, load-update, and load-context instructions.)
43+event:0x1c counters:0,1,2,3 um:zero minimum:500 name:STORES_TRANSLATED : Number of cacheable ST* or EVST* microops translated. (This includes microops from store-multiple, store-update, and save-context instructions.)
44+event:0x1d counters:0,1,2,3 um:zero minimum:500 name:TOUCHES_TRANSLATED : Number of cacheable DCBT and DCBTST instructions translated (L1 only) (Does not count touches that are converted to nops i.e. exceptions, noncacheable, hid0[nopti] bit is set.)
45+event:0x1e counters:0,1,2,3 um:zero minimum:500 name:CACHEOPS_TRANSLATED : Number of dcba, dcbf, dcbst, and dcbz instructions translated (e500 traps on dcbi)
46+event:0x1f counters:0,1,2,3 um:zero minimum:500 name:CACHEINHIBITED_ACCESSES_TRANSLATED : Number of cache inhibited accesses translated
47+event:0x20 counters:0,1,2,3 um:zero minimum:500 name:GUARDED_LOADS_TRANSLATED : Number of guarded loads translated
48+event:0x21 counters:0,1,2,3 um:zero minimum:500 name:WRITETHROUGH_STORES_TRANSLATED : Number of write-through stores translated
49+event:0x22 counters:0,1,2,3 um:zero minimum:500 name:MISALIGNED_ACCESSES_TRANSLATED : Number of misaligned load or store accesses translated.
50+event:0x23 counters:0,1,2,3 um:zero minimum:500 name:TOTAL_ALLOCATED_DLFB : Total allocated to dLFB
51+event:0x24 counters:0,1,2,3 um:zero minimum:500 name:LOADS_TRANSLATED_ALLOCATED_DLFB : Loads translated and allocated to dLFB (Applies to same class of instructions as loads translated.)
52+event:0x25 counters:0,1,2,3 um:zero minimum:500 name:STORES_COMPLETED_ALLOCATED_DLFB : Stores completed and allocated to dLFB (Applies to same class of instructions as stores translated.)
53+event:0x26 counters:0,1,2,3 um:zero minimum:500 name:TOUCHES_TRANSLATED_ALLOCATED_DLFB : Touches translated and allocated to dLFB (Applies to same class of instructions as touches translated.)
54+event:0x27 counters:0,1,2,3 um:zero minimum:500 name:STORES_COMPLETED : Number of cacheable ST* or EVST* microops completed. (Applies to the same class of instructions as stores translated.)
55+event:0x28 counters:0,1,2,3 um:zero minimum:500 name:DL1_LOCKS : Number of cache lines locked in the dL1. (Counts a lock even if an overlock condition is encountered.)
56+event:0x29 counters:0,1,2,3 um:zero minimum:500 name:DL1_RELOADS : This is historically used to determine dcache miss rate (along with loads/stores completed). This counts dL1 reloads for any reason.
57+event:0x2a counters:0,1,2,3 um:zero minimum:500 name:DL1_CASTOUTS : dL1 castouts. Does not count castouts due to DCBF.
58+event:0x2b counters:0,1,2,3 um:zero minimum:500 name:DETECTED_REPLAYS : Times detected replay condition - Load miss with dLFB full.
59+event:0x2c counters:0,1,2,3 um:zero minimum:500 name:LOAD_MISS_QUEUE_FULL_REPLAYS : Load miss with load queue full.
60+event:0x2d counters:0,1,2,3 um:zero minimum:500 name:LOAD_GUARDED_MISS_NOT_LAST_REPLAYS : Load guarded miss when the load is not yet at the bottom of the completion buffer.
61+event:0x2e counters:0,1,2,3 um:zero minimum:500 name:STORE_TRANSLATED_QUEUE_FULL_REPLAYS : Translate a store when the StQ is full.
62+event:0x2f counters:0,1,2,3 um:zero minimum:500 name:ADDRESS_COLLISION_REPLAYS : Address collision.
63+event:0x30 counters:0,1,2,3 um:zero minimum:500 name:DMMU_MISS_REPLAYS : DMMU_MISS_REPLAYS : DMMU miss.
64+event:0x31 counters:0,1,2,3 um:zero minimum:500 name:DMMU_BUSY_REPLAYS : DMMU_BUSY_REPLAYS : DMMU busy.
65+event:0x32 counters:0,1,2,3 um:zero minimum:500 name:SECOND_PART_MISALIGNED_AFTER_MISS_REPLAYS : Second part of misaligned access when first part missed in cache.
66+event:0x33 counters:0,1,2,3 um:zero minimum:500 name:LOAD_MISS_DLFB_FULL_CYCLES : Cycles stalled on replay condition - Load miss with dLFB full.
67+event:0x34 counters:0,1,2,3 um:zero minimum:500 name:LOAD_MISS_QUEUE_FULL_CYCLES : Cycles stalled on replay condition - Load miss with load queue full.
68+event:0x35 counters:0,1,2,3 um:zero minimum:500 name:LOAD_GUARDED_MISS_NOT_LAST_CYCLES : Cycles stalled on replay condition - Load guarded miss when the load is not yet at the bottom of the completion buffer.
69+event:0x36 counters:0,1,2,3 um:zero minimum:500 name:STORE_TRANSLATED_QUEUE_FULL_CYCLES : Cycles stalled on replay condition - Translate a store when the StQ is full.
70+event:0x37 counters:0,1,2,3 um:zero minimum:500 name:ADDRESS_COLLISION_CYCLES : Cycles stalled on replay condition - Address collision.
71+event:0x38 counters:0,1,2,3 um:zero minimum:500 name:DMMU_MISS_CYCLES : Cycles stalled on replay condition - DMMU miss.
72+event:0x39 counters:0,1,2,3 um:zero minimum:500 name:DMMU_BUSY_CYCLES : Cycles stalled on replay condition - DMMU busy.
73+event:0x3a counters:0,1,2,3 um:zero minimum:500 name:SECOND_PART_MISALIGNED_AFTER_MISS_CYCLES : Cycles stalled on replay condition - Second part of misaligned access when first part missed in cache.
74+event:0x3b counters:0,1,2,3 um:zero minimum:500 name:IL1_LOCKS : Number of cache lines locked in the iL1. (Counts a lock even if an overlock condition is encountered.)
75+event:0x3c counters:0,1,2,3 um:zero minimum:500 name:IL1_FETCH_RELOADS : This is historically used to determine icache miss rate (along with instructions completed) Reloads due to demand fetch.
76+event:0x3d counters:0,1,2,3 um:zero minimum:500 name:FETCHES : Counts the number of fetches that write at least one instruction to the instruction buffer. (With instruction fetched, can used to compute instructions-per-fetch)
77+event:0x3e counters:0,1,2,3 um:zero minimum:500 name:IMMU_TLB4K_RELOADS : iMMU TLB4K reloads
78+event:0x3f counters:0,1,2,3 um:zero minimum:500 name:IMMU_VSP_RELOADS : iMMU VSP reloads
79+event:0x40 counters:0,1,2,3 um:zero minimum:500 name:DMMU_TLB4K_RELOADS : dMMU TLB4K reloads
80+event:0x41 counters:0,1,2,3 um:zero minimum:500 name:DMMU_VSP_RELOADS : dMMU VSP reloads
81+event:0x42 counters:0,1,2,3 um:zero minimum:500 name:L2MMU_MISSES : Counts iTLB/dTLB error interrupt
82+event:0x43 counters:0,1,2,3 um:zero minimum:500 name:BIU_MASTER_REQUESTS : Number of master transactions. (Number of master TSs.)
83+event:0x44 counters:0,1,2,3 um:zero minimum:500 name:BIU_MASTER_I_REQUESTS : Number of master I-Side transactions. (Number of master I-Side TSs.)
84+event:0x45 counters:0,1,2,3 um:zero minimum:500 name:BIU_MASTER_D_REQUESTS : Number of master D-Side transactions. (Number of master D-Side TSs.)
85+event:0x46 counters:0,1,2,3 um:zero minimum:500 name:BIU_MASTER_D_CASTOUT_REQUESTS : Number of master D-Side non-program-demand castout transactions. This counts replacement pushes and snoop pushes. This does not count DCBF castouts. (Number of master D-side non-program-demand castout TSs.)
86+event:0x47 counters:0,1,2,3 um:zero minimum:500 name:BIU_MASTER_RETRIES : Number of transactions which were initiated by this processor which were retried on the BIU interface. (Number of master ARTRYs.)
87+event:0x48 counters:0,1,2,3 um:zero minimum:500 name:SNOOP_REQUESTS : Number of externally generated snoop requests. (Counts snoop TSs.)
88+event:0x49 counters:0,1,2,3 um:zero minimum:500 name:SNOOP_HITS : Number of snoop hits on all D-side resources regardless of the cache state (modified, exclusive, or shared)
89+event:0x4a counters:0,1,2,3 um:zero minimum:500 name:SNOOP_PUSHES : Number of snoop pushes from all D-side resources. (Counts snoop ARTRY/WOPs.)
90+event:0x4b counters:0,1,2,3 um:zero minimum:500 name:SNOOP_RETRIES : Number of snoop requests retried. (Counts snoop ARTRYs.)
91+event:0x52 counters:0,1,2,3 um:zero minimum:500 name:PMC0_OVERFLOW : Counts the number of times PMC0[32] transitioned from 1 to 0.
92+event:0x53 counters:0,1,2,3 um:zero minimum:500 name:PMC1_OVERFLOW : Counts the number of times PMC1[32] transitioned from 1 to 0.
93+event:0x54 counters:0,1,2,3 um:zero minimum:500 name:PMC2_OVERFLOW : Counts the number of times PMC2[32] transitioned from 1 to 0.
94+event:0x55 counters:0,1,2,3 um:zero minimum:500 name:PMC3_OVERFLOW : Counts the number of times PMC3[32] transitioned from 1 to 0.
95+event:0x56 counters:0,1,2,3 um:zero minimum:500 name:INTERRUPTS : Number of interrupts taken
96+event:0x57 counters:0,1,2,3 um:zero minimum:500 name:EXTERNAL_INTERRUPTS : Number of external input interrupts taken
97+event:0x58 counters:0,1,2,3 um:zero minimum:500 name:CRITICAL_INTERRUPTS : Number of critical input interrupts taken
98+event:0x59 counters:0,1,2,3 um:zero minimum:500 name:SC_TRAP_INTERRUPTS : Number of system call and trap interrupts
99diff -uNr a/events/ppc/e500mc/unit_masks b/events/ppc/e500mc/unit_masks
100--- a/events/ppc/e500mc/unit_masks 1970-01-01 01:00:00.000000000 +0100
101+++ b/events/ppc/e500mc/unit_masks 2013-02-07 07:03:57.994063551 +0100
102@@ -0,0 +1,4 @@
103+# e500 possible unit masks
104+#
105+name:zero type:mandatory default:0x0
106+ 0x0 No unit mask
107diff -uNr a/libop/op_cpu_type.c b/libop/op_cpu_type.c
108--- a/libop/op_cpu_type.c 2012-08-27 20:59:14.000000000 +0200
109+++ b/libop/op_cpu_type.c 2013-02-07 07:03:57.994063551 +0100
110@@ -66,6 +66,7 @@
111 { "NEC VR5500", "mips/vr5500", CPU_MIPS_VR5500, 2 },
112 { "e500", "ppc/e500", CPU_PPC_E500, 4 },
113 { "e500v2", "ppc/e500v2", CPU_PPC_E500_2, 4 },
114+ { "e500mc", "ppc/e500mc", CPU_PPC_E500MC, 4 },
115 { "Core Solo / Duo", "i386/core", CPU_CORE, 2 },
116 { "PowerPC G4", "ppc/7450", CPU_PPC_7450, 6 },
117 { "Core 2", "i386/core_2", CPU_CORE_2, 2 },
118diff -uNr a/libop/op_cpu_type.c.orig b/libop/op_cpu_type.c.orig
119--- a/libop/op_cpu_type.c.orig 1970-01-01 01:00:00.000000000 +0100
120+++ b/libop/op_cpu_type.c.orig 2013-02-07 07:01:39.408100801 +0100
121@@ -0,0 +1,621 @@
122+/**
123+ * @file op_cpu_type.c
124+ * CPU type determination
125+ *
126+ * @remark Copyright 2002 OProfile authors
127+ * @remark Read the file COPYING
128+ *
129+ * @author John Levon
130+ * @author Philippe Elie
131+ */
132+
133+#include <stdio.h>
134+#include <stdlib.h>
135+#include <string.h>
136+#include <sys/utsname.h>
137+#include <ctype.h>
138+#include <errno.h>
139+#include <fnmatch.h>
140+
141+#include "op_cpu_type.h"
142+#include "op_hw_specific.h"
143+
144+struct cpu_descr {
145+ char const * pretty;
146+ char const * name;
147+ op_cpu cpu;
148+ unsigned int nr_counters;
149+};
150+
151+static struct cpu_descr const cpu_descrs[MAX_CPU_TYPE] = {
152+ { "Pentium Pro", "i386/ppro", CPU_PPRO, 2 },
153+ { "PII", "i386/pii", CPU_PII, 2 },
154+ { "PIII", "i386/piii", CPU_PIII, 2 },
155+ { "Athlon", "i386/athlon", CPU_ATHLON, 4 },
156+ { "CPU with timer interrupt", "timer", CPU_TIMER_INT, 1 },
157+ { "CPU with RTC device", "rtc", CPU_RTC, 1 },
158+ { "P4 / Xeon", "i386/p4", CPU_P4, 8 },
159+ { "IA64", "ia64/ia64", CPU_IA64, 4 },
160+ { "Itanium", "ia64/itanium", CPU_IA64_1, 4 },
161+ { "Itanium 2", "ia64/itanium2", CPU_IA64_2, 4 },
162+ { "AMD64 processors", "x86-64/hammer", CPU_HAMMER, 4 },
163+ { "P4 / Xeon with 2 hyper-threads", "i386/p4-ht", CPU_P4_HT2, 4 },
164+ { "Alpha EV4", "alpha/ev4", CPU_AXP_EV4, 2 },
165+ { "Alpha EV5", "alpha/ev5", CPU_AXP_EV5, 3 },
166+ { "Alpha PCA56", "alpha/pca56", CPU_AXP_PCA56, 3 },
167+ { "Alpha EV6", "alpha/ev6", CPU_AXP_EV6, 2 },
168+ { "Alpha EV67", "alpha/ev67", CPU_AXP_EV67, 20 },
169+ { "Pentium M (P6 core)", "i386/p6_mobile", CPU_P6_MOBILE, 2 },
170+ { "ARM/XScale PMU1", "arm/xscale1", CPU_ARM_XSCALE1, 3 },
171+ { "ARM/XScale PMU2", "arm/xscale2", CPU_ARM_XSCALE2, 5 },
172+ { "ppc64 POWER4", "ppc64/power4", CPU_PPC64_POWER4, 8 },
173+ { "ppc64 POWER5", "ppc64/power5", CPU_PPC64_POWER5, 6 },
174+ { "ppc64 POWER5+", "ppc64/power5+", CPU_PPC64_POWER5p, 6 },
175+ { "ppc64 970", "ppc64/970", CPU_PPC64_970, 8 },
176+ { "MIPS 20K", "mips/20K", CPU_MIPS_20K, 1},
177+ { "MIPS 24K", "mips/24K", CPU_MIPS_24K, 2},
178+ { "MIPS 25K", "mips/25K", CPU_MIPS_25K, 2},
179+ { "MIPS 34K", "mips/34K", CPU_MIPS_34K, 2},
180+ { "MIPS 5K", "mips/5K", CPU_MIPS_5K, 2},
181+ { "MIPS R10000", "mips/r10000", CPU_MIPS_R10000, 2 },
182+ { "MIPS R12000", "mips/r12000", CPU_MIPS_R12000, 4 },
183+ { "QED RM7000", "mips/rm7000", CPU_MIPS_RM7000, 1 },
184+ { "PMC-Sierra RM9000", "mips/rm9000", CPU_MIPS_RM9000, 2 },
185+ { "Sibyte SB1", "mips/sb1", CPU_MIPS_SB1, 4 },
186+ { "NEC VR5432", "mips/vr5432", CPU_MIPS_VR5432, 2 },
187+ { "NEC VR5500", "mips/vr5500", CPU_MIPS_VR5500, 2 },
188+ { "e500", "ppc/e500", CPU_PPC_E500, 4 },
189+ { "e500v2", "ppc/e500v2", CPU_PPC_E500_2, 4 },
190+ { "Core Solo / Duo", "i386/core", CPU_CORE, 2 },
191+ { "PowerPC G4", "ppc/7450", CPU_PPC_7450, 6 },
192+ { "Core 2", "i386/core_2", CPU_CORE_2, 2 },
193+ { "ppc64 POWER6", "ppc64/power6", CPU_PPC64_POWER6, 4 },
194+ { "ppc64 970MP", "ppc64/970MP", CPU_PPC64_970MP, 8 },
195+ { "ppc64 Cell Broadband Engine", "ppc64/cell-be", CPU_PPC64_CELL, 8 },
196+ { "AMD64 family10", "x86-64/family10", CPU_FAMILY10, 4 },
197+ { "ppc64 PA6T", "ppc64/pa6t", CPU_PPC64_PA6T, 6 },
198+ { "ARM 11MPCore", "arm/mpcore", CPU_ARM_MPCORE, 2 },
199+ { "ARM V6 PMU", "arm/armv6", CPU_ARM_V6, 3 },
200+ { "ppc64 POWER5++", "ppc64/power5++", CPU_PPC64_POWER5pp, 6 },
201+ { "e300", "ppc/e300", CPU_PPC_E300, 4 },
202+ { "AVR32", "avr32", CPU_AVR32, 3 },
203+ { "ARM Cortex-A8", "arm/armv7", CPU_ARM_V7, 5 },
204+ { "Intel Architectural Perfmon", "i386/arch_perfmon", CPU_ARCH_PERFMON, 0},
205+ { "AMD64 family11h", "x86-64/family11h", CPU_FAMILY11H, 4 },
206+ { "ppc64 POWER7", "ppc64/power7", CPU_PPC64_POWER7, 6 },
207+ { "ppc64 compat version 1", "ppc64/ibm-compat-v1", CPU_PPC64_IBM_COMPAT_V1, 4 },
208+ { "Intel Core/i7", "i386/core_i7", CPU_CORE_I7, 4 },
209+ { "Intel Atom", "i386/atom", CPU_ATOM, 2 },
210+ { "Loongson2", "mips/loongson2", CPU_MIPS_LOONGSON2, 2 },
211+ { "Intel Nehalem microarchitecture", "i386/nehalem", CPU_NEHALEM, 4 },
212+ { "ARM Cortex-A9", "arm/armv7-ca9", CPU_ARM_V7_CA9, 7 },
213+ { "MIPS 74K", "mips/74K", CPU_MIPS_74K, 4},
214+ { "MIPS 1004K", "mips/1004K", CPU_MIPS_1004K, 2},
215+ { "AMD64 family12h", "x86-64/family12h", CPU_FAMILY12H, 4 },
216+ { "AMD64 family14h", "x86-64/family14h", CPU_FAMILY14H, 4 },
217+ { "AMD64 family15h", "x86-64/family15h", CPU_FAMILY15H, 6 },
218+ { "Intel Westmere microarchitecture", "i386/westmere", CPU_WESTMERE, 4 },
219+ { "ARMv7 Scorpion", "arm/armv7-scorpion", CPU_ARM_SCORPION, 5 },
220+ { "ARMv7 ScorpionMP", "arm/armv7-scorpionmp", CPU_ARM_SCORPIONMP, 5 },
221+ { "Intel Sandy Bridge microarchitecture", "i386/sandybridge", CPU_SANDYBRIDGE, 8 },
222+ { "TILE64", "tile/tile64", CPU_TILE_TILE64, 2 },
223+ { "TILEPro", "tile/tilepro", CPU_TILE_TILEPRO, 4 },
224+ { "TILE-GX", "tile/tilegx", CPU_TILE_TILEGX, 4 },
225+ { "IBM System z10", "s390/z10", CPU_S390_Z10, 1 },
226+ { "IBM zEnterprise z196", "s390/z196", CPU_S390_Z196, 1 },
227+ { "Intel Ivy Bridge microarchitecture", "i386/ivybridge", CPU_IVYBRIDGE, 8 },
228+ { "ARM Cortex-A5", "arm/armv7-ca5", CPU_ARM_V7_CA5, 3 },
229+ { "ARM Cortex-A7", "arm/armv7-ca7", CPU_ARM_V7_CA7, 5 },
230+ { "ARM Cortex-A15", "arm/armv7-ca15", CPU_ARM_V7_CA15, 7 },
231+};
232+
233+static size_t const nr_cpu_descrs = sizeof(cpu_descrs) / sizeof(struct cpu_descr);
234+
235+static char * _get_cpuinfo_cpu_type_line(char * buf, int len, const char * prefix, int token)
236+{
237+ char * ret = NULL;
238+ char * end = NULL;
239+ int prefix_len = strlen(prefix);
240+ FILE * fp = fopen("/proc/cpuinfo", "r");
241+
242+ if (!fp) {
243+ perror("Unable to open /proc/cpuinfo\n");
244+ return ret;
245+ }
246+
247+ memset(buf, 0, len);
248+
249+ while (!ret) {
250+ if (fgets(buf, len, fp) == NULL) {
251+ fprintf(stderr, "Did not find processor type in /proc/cpuinfo.\n");
252+ break;
253+ }
254+ if (!strncmp(buf, prefix, prefix_len)) {
255+ ret = buf + prefix_len;
256+ /* Strip leading whitespace and ':' delimiter */
257+ while (*ret && (*ret == ':' || isspace(*ret)))
258+ ++ret;
259+ buf = ret;
260+ /* if token param 0 then read the whole line else
261+ * first token only. */
262+ if (token == 0) {
263+ /* Trim trailing whitespace */
264+ end = buf + strlen(buf) - 1;
265+ while (isspace(*end))
266+ --end;
267+ *(++end) = '\0';
268+ break;
269+ } else {
270+ /* Scan ahead to the end of the token */
271+ while (*buf && !isspace(*buf))
272+ ++buf;
273+ /* Trim trailing whitespace */
274+ *buf = '\0';
275+ break;
276+ }
277+ }
278+ }
279+
280+ fclose(fp);
281+ return ret;
282+}
283+
284+static char * _get_cpuinfo_cpu_type(char * buf, int len, const char * prefix)
285+{
286+ return _get_cpuinfo_cpu_type_line(buf, len, prefix, 1);
287+}
288+
289+static op_cpu _get_ppc64_cpu_type(void)
290+{
291+ int i;
292+ size_t len;
293+ char line[100], cpu_type_str[64], cpu_name_lowercase[64], * cpu_name;
294+
295+ cpu_name = _get_cpuinfo_cpu_type(line, 100, "cpu");
296+ if (!cpu_name)
297+ return CPU_NO_GOOD;
298+
299+ len = strlen(cpu_name);
300+ for (i = 0; i < (int)len ; i++)
301+ cpu_name_lowercase[i] = tolower(cpu_name[i]);
302+
303+ cpu_type_str[0] = '\0';
304+ strcat(cpu_type_str, "ppc64/");
305+ strncat(cpu_type_str, cpu_name_lowercase, len);
306+ return op_get_cpu_number(cpu_type_str);
307+}
308+
309+static op_cpu _get_arm_cpu_type(void)
310+{
311+ unsigned long cpuid, vendorid;
312+ char line[100];
313+ char * cpu_part, * cpu_implementer;
314+
315+ cpu_implementer = _get_cpuinfo_cpu_type(line, 100, "CPU implementer");
316+ if (!cpu_implementer)
317+ return CPU_NO_GOOD;
318+
319+ errno = 0;
320+ vendorid = strtoul(cpu_implementer, NULL, 16);
321+ if (errno) {
322+ fprintf(stderr, "Unable to parse CPU implementer %s\n", cpu_implementer);
323+ return CPU_NO_GOOD;
324+ }
325+
326+ cpu_part = _get_cpuinfo_cpu_type(line, 100, "CPU part");
327+ if (!cpu_part)
328+ return CPU_NO_GOOD;
329+
330+ errno = 0;
331+ cpuid = strtoul(cpu_part, NULL, 16);
332+ if (errno) {
333+ fprintf(stderr, "Unable to parse CPU part %s\n", cpu_part);
334+ return CPU_NO_GOOD;
335+ }
336+
337+ if (vendorid == 0x41) { /* ARM Ltd. */
338+ switch (cpuid) {
339+ case 0xb36:
340+ case 0xb56:
341+ case 0xb76:
342+ return op_get_cpu_number("arm/armv6");
343+ case 0xb02:
344+ return op_get_cpu_number("arm/mpcore");
345+ case 0xc05:
346+ return op_get_cpu_number("arm/armv7-ca5");
347+ case 0xc07:
348+ return op_get_cpu_number("arm/armv7-ca7");
349+ case 0xc08:
350+ return op_get_cpu_number("arm/armv7");
351+ case 0xc09:
352+ return op_get_cpu_number("arm/armv7-ca9");
353+ case 0xc0f:
354+ return op_get_cpu_number("arm/armv7-ca15");
355+ }
356+ } else if (vendorid == 0x69) { /* Intel xscale */
357+ switch (cpuid >> 9) {
358+ case 1:
359+ return op_get_cpu_number("arm/xscale1");
360+ case 2:
361+ return op_get_cpu_number("arm/xscale2");
362+ }
363+ }
364+
365+ return CPU_NO_GOOD;
366+}
367+
368+static op_cpu _get_tile_cpu_type(void)
369+{
370+ int i;
371+ size_t len;
372+ char line[100], cpu_type_str[64], cpu_name_lowercase[64], * cpu_name;
373+
374+ cpu_name = _get_cpuinfo_cpu_type(line, 100, "model name");
375+ if (!cpu_name)
376+ return CPU_NO_GOOD;
377+
378+ len = strlen(cpu_name);
379+ for (i = 0; i < (int)len ; i++)
380+ cpu_name_lowercase[i] = tolower(cpu_name[i]);
381+
382+ cpu_type_str[0] = '\0';
383+ strcat(cpu_type_str, "tile/");
384+ strncat(cpu_type_str, cpu_name_lowercase, len);
385+ return op_get_cpu_number(cpu_type_str);
386+}
387+
388+#if defined(__x86_64__) || defined(__i386__)
389+int op_is_cpu_vendor(char * vendor)
390+{
391+ return cpuid_vendor(vendor);
392+}
393+
394+static unsigned cpuid_eax(unsigned func)
395+{
396+ cpuid_data d;
397+
398+ cpuid(func, &d);
399+ return d.eax;
400+}
401+
402+static inline int perfmon_available(void)
403+{
404+ unsigned eax;
405+ if (cpuid_eax(0) < 10)
406+ return 0;
407+ eax = cpuid_eax(10);
408+ if ((eax & 0xff) == 0)
409+ return 0;
410+ return (eax >> 8) & 0xff;
411+}
412+
413+static int cpu_info_number(char *name, unsigned long *number)
414+{
415+ char buf[100];
416+ char *end;
417+
418+ if (!_get_cpuinfo_cpu_type(buf, sizeof buf, name))
419+ return 0;
420+ *number = strtoul(buf, &end, 0);
421+ return end > buf;
422+}
423+
424+static op_cpu _get_intel_cpu_type(void)
425+{
426+ unsigned eax, family, model;
427+
428+ if (perfmon_available())
429+ return op_cpu_specific_type(CPU_ARCH_PERFMON);
430+
431+ /* Handle old non arch perfmon CPUs */
432+ eax = cpuid_signature();
433+ family = cpu_family(eax);
434+ model = cpu_model(eax);
435+
436+ if (family == 6) {
437+ /* Reproduce kernel p6_init logic. Only for non arch perfmon cpus */
438+ switch (model) {
439+ case 0 ... 2:
440+ return op_get_cpu_number("i386/ppro");
441+ case 3 ... 5:
442+ return op_get_cpu_number("i386/pii");
443+ case 6 ... 8:
444+ case 10 ... 11:
445+ return op_get_cpu_number("i386/piii");
446+ case 9:
447+ case 13:
448+ return op_get_cpu_number("i386/p6_mobile");
449+ }
450+ } else if (family == 15) {
451+ unsigned long siblings;
452+
453+ /* Reproduce kernel p4_init() logic */
454+ if (model > 6 || model == 5)
455+ return CPU_NO_GOOD;
456+ if (!cpu_info_number("siblings", &siblings) ||
457+ siblings == 1)
458+ return op_get_cpu_number("i386/p4");
459+ if (siblings == 2)
460+ return op_get_cpu_number("i386/p4-ht");
461+ }
462+ return CPU_NO_GOOD;
463+}
464+
465+static op_cpu _get_amd_cpu_type(void)
466+{
467+ unsigned eax, family, model;
468+ op_cpu ret = CPU_NO_GOOD;
469+
470+ eax = cpuid_signature();
471+ family = cpu_family(eax);
472+ model = cpu_model(eax);
473+
474+ switch (family) {
475+ case 0x0f:
476+ ret = op_get_cpu_number("x86-64/hammer");
477+ break;
478+ case 0x10:
479+ ret = op_get_cpu_number("x86-64/family10");
480+ break;
481+ case 0x11:
482+ ret = op_get_cpu_number("x86-64/family11h");
483+ break;
484+ case 0x12:
485+ ret = op_get_cpu_number("x86-64/family12h");
486+ break;
487+ case 0x14:
488+ ret = op_get_cpu_number("x86-64/family14h");
489+ break;
490+ case 0x15:
491+ switch (model) {
492+ case 0x00 ... 0x0f:
493+ ret = op_get_cpu_number("x86-64/family15h");
494+ break;
495+ default:
496+ break;
497+ }
498+ break;
499+ default:
500+ break;
501+ }
502+
503+ return ret;
504+}
505+
506+static op_cpu _get_x86_64_cpu_type(void)
507+{
508+ op_cpu ret = CPU_NO_GOOD;
509+
510+ if (cpuid_vendor("GenuineIntel")) {
511+ ret = _get_intel_cpu_type();
512+ } else if (cpuid_vendor("AuthenticAMD")) {
513+ ret = _get_amd_cpu_type();
514+ }
515+
516+ return ret;
517+}
518+
519+#else
520+static op_cpu _get_x86_64_cpu_type(void)
521+{
522+ return CPU_NO_GOOD;
523+}
524+#endif
525+
526+struct mips_cpu_descr
527+{
528+ const char * key;
529+ const char * value;
530+};
531+
532+static struct mips_cpu_descr mips_cpu_descrs[] = {
533+ { .key = "MIPS 5Kc", .value = "mips/5K" }, /* CPU_5KC */
534+ { .key = "MIPS 20Kc", .value = "mips/20K" }, /* CPU_20KC */
535+ { .key = "MIPS 24Kc", .value = "mips/24K" }, /* CPU_24K */
536+ { .key = "MIPS 25Kc", .value = "mips/25K" }, /* CPU_25KF */
537+ { .key = "MIPS 34Kc", .value = "mips/34K" }, /* CPU_34K */
538+ { .key = "MIPS 74Kc", .value = "mips/74K" }, /* CPU_74K */
539+ { .key = "MIPS M14Kc", .value = "mips/M14Kc" }, /* CPU_M14KC */
540+ { .key = "RM9000", .value = "mips/rm9000" }, /* CPU_RM9000 */
541+ { .key = "R10000", .value = "mips/r10000" }, /* CPU_R10000 */
542+ { .key = "R12000", .value = "mips/r12000" }, /* CPU_R12000 */
543+ { .key = "R14000", .value = "mips/r12000" }, /* CPU_R14000 */
544+ { .key = "ICT Loongson-2", .value = "mips/loongson2" }, /* CPU_LOONGSON2 */
545+ { .key = NULL, .value = NULL }
546+};
547+
548+static const char * _get_mips_op_name(const char * key)
549+{
550+ struct mips_cpu_descr * p_it = mips_cpu_descrs;
551+ size_t len;
552+
553+
554+ while (p_it->key != NULL) {
555+ len = strlen(p_it->key);
556+ if (0 == strncmp(key, p_it->key, len))
557+ return p_it->value;
558+ ++p_it;
559+ }
560+ return NULL;
561+}
562+
563+static op_cpu _get_mips_cpu_type(void)
564+{
565+ char line[100];
566+ char * cpu_model;
567+ const char * op_name = NULL;
568+
569+ cpu_model = _get_cpuinfo_cpu_type_line(line, 100, "cpu model", 0);
570+ if (!cpu_model)
571+ return CPU_NO_GOOD;
572+
573+ op_name = _get_mips_op_name(cpu_model);
574+
575+ if (op_name)
576+ return op_get_cpu_number(op_name);
577+ return CPU_NO_GOOD;
578+}
579+
580+static op_cpu __get_cpu_type_alt_method(void)
581+{
582+ struct utsname uname_info;
583+ if (uname(&uname_info) < 0) {
584+ perror("uname failed");
585+ return CPU_NO_GOOD;
586+ }
587+ if (strncmp(uname_info.machine, "x86_64", 6) == 0 ||
588+ fnmatch("i?86", uname_info.machine, 0) == 0) {
589+ return _get_x86_64_cpu_type();
590+ }
591+ if (strncmp(uname_info.machine, "ppc64", 5) == 0) {
592+ return _get_ppc64_cpu_type();
593+ }
594+ if (strncmp(uname_info.machine, "arm", 3) == 0) {
595+ return _get_arm_cpu_type();
596+ }
597+ if (strncmp(uname_info.machine, "tile", 4) == 0) {
598+ return _get_tile_cpu_type();
599+ }
600+ if (strncmp(uname_info.machine, "mips", 4) == 0) {
601+ return _get_mips_cpu_type();
602+ }
603+ return CPU_NO_GOOD;
604+}
605+
606+int op_cpu_variations(op_cpu cpu_type)
607+{
608+ switch (cpu_type) {
609+ case CPU_ARCH_PERFMON:
610+ return 1;
611+ default:
612+ return 0;
613+ }
614+}
615+
616+
617+op_cpu op_cpu_base_type(op_cpu cpu_type)
618+{
619+ /* All the processors that support CPU_ARCH_PERFMON */
620+ switch (cpu_type) {
621+ case CPU_CORE_2:
622+ case CPU_CORE_I7:
623+ case CPU_ATOM:
624+ case CPU_NEHALEM:
625+ case CPU_WESTMERE:
626+ case CPU_SANDYBRIDGE:
627+ case CPU_IVYBRIDGE:
628+ return CPU_ARCH_PERFMON;
629+ default:
630+ /* assume processor in a class by itself */
631+ return cpu_type;
632+ }
633+}
634+
635+op_cpu op_get_cpu_type(void)
636+{
637+ int cpu_type = CPU_NO_GOOD;
638+ char str[100];
639+ FILE * fp;
640+
641+ fp = fopen("/proc/sys/dev/oprofile/cpu_type", "r");
642+ if (!fp) {
643+ /* Try 2.6's oprofilefs one instead. */
644+ fp = fopen("/dev/oprofile/cpu_type", "r");
645+ if (!fp) {
646+ if ((cpu_type = __get_cpu_type_alt_method()) == CPU_NO_GOOD) {
647+ fprintf(stderr, "Unable to open cpu_type file for reading\n");
648+ fprintf(stderr, "Make sure you have done opcontrol --init\n");
649+ }
650+ return cpu_type;
651+ }
652+ }
653+
654+ if (!fgets(str, 99, fp)) {
655+ fprintf(stderr, "Could not read cpu type.\n");
656+ fclose(fp);
657+ return cpu_type;
658+ }
659+
660+ cpu_type = op_get_cpu_number(str);
661+
662+ if (op_cpu_variations(cpu_type))
663+ cpu_type = op_cpu_specific_type(cpu_type);
664+
665+ fclose(fp);
666+
667+ return cpu_type;
668+}
669+
670+
671+op_cpu op_get_cpu_number(char const * cpu_string)
672+{
673+ int cpu_type = CPU_NO_GOOD;
674+ size_t i;
675+
676+ for (i = 0; i < nr_cpu_descrs; ++i) {
677+ if (!strcmp(cpu_descrs[i].name, cpu_string)) {
678+ cpu_type = cpu_descrs[i].cpu;
679+ break;
680+ }
681+ }
682+
683+ /* Attempt to convert into a number */
684+ if (cpu_type == CPU_NO_GOOD)
685+ sscanf(cpu_string, "%d\n", &cpu_type);
686+
687+ if (cpu_type <= CPU_NO_GOOD || cpu_type >= MAX_CPU_TYPE)
688+ cpu_type = CPU_NO_GOOD;
689+
690+ return cpu_type;
691+}
692+
693+
694+char const * op_get_cpu_type_str(op_cpu cpu_type)
695+{
696+ if (cpu_type <= CPU_NO_GOOD || cpu_type >= MAX_CPU_TYPE)
697+ return "invalid cpu type";
698+
699+ return cpu_descrs[cpu_type].pretty;
700+}
701+
702+
703+char const * op_get_cpu_name(op_cpu cpu_type)
704+{
705+ if (cpu_type <= CPU_NO_GOOD || cpu_type >= MAX_CPU_TYPE)
706+ return "invalid cpu type";
707+
708+ return cpu_descrs[cpu_type].name;
709+}
710+
711+
712+int op_get_nr_counters(op_cpu cpu_type)
713+{
714+ int cnt;
715+
716+ if (cpu_type <= CPU_NO_GOOD || cpu_type >= MAX_CPU_TYPE)
717+ return 0;
718+
719+ cnt = arch_num_counters(cpu_type);
720+ if (cnt >= 0)
721+ return cnt;
722+
723+ return op_cpu_has_timer_fs()
724+ ? cpu_descrs[cpu_type].nr_counters + 1
725+ : cpu_descrs[cpu_type].nr_counters;
726+}
727+
728+int op_cpu_has_timer_fs(void)
729+{
730+ static int cached_has_timer_fs_p = -1;
731+ FILE * fp;
732+
733+ if (cached_has_timer_fs_p != -1)
734+ return cached_has_timer_fs_p;
735+
736+ fp = fopen("/dev/oprofile/timer", "r");
737+ cached_has_timer_fs_p = !!fp;
738+ if (fp)
739+ fclose(fp);
740+
741+ return cached_has_timer_fs_p;
742+}
743diff -uNr a/libop/op_cpu_type.h b/libop/op_cpu_type.h
744--- a/libop/op_cpu_type.h 2012-08-27 20:59:14.000000000 +0200
745+++ b/libop/op_cpu_type.h 2013-02-07 07:03:57.994063551 +0100
746@@ -59,6 +59,7 @@
747 CPU_MIPS_VR5500, /**< MIPS VR5500, VR5532 and VR7701 */
748 CPU_PPC_E500, /**< e500 */
749 CPU_PPC_E500_2, /**< e500v2 */
750+ CPU_PPC_E500MC, /**< e500mc */
751 CPU_CORE, /**< Core Solo / Duo series */
752 CPU_PPC_7450, /**< PowerPC G4 */
753 CPU_CORE_2, /**< Intel Core 2 */
754diff -uNr a/libop/op_events.c b/libop/op_events.c
755--- a/libop/op_events.c 2012-08-27 20:59:14.000000000 +0200
756+++ b/libop/op_events.c 2013-02-07 07:03:57.994063551 +0100
757@@ -1182,6 +1182,7 @@
758
759 case CPU_PPC_E500:
760 case CPU_PPC_E500_2:
761+ case CPU_PPC_E500MC:
762 case CPU_PPC_E300:
763 descr->name = "CPU_CLK";
764 break;
765diff -uNr a/libop/op_events.c.orig b/libop/op_events.c.orig
766--- a/libop/op_events.c.orig 1970-01-01 01:00:00.000000000 +0100
767+++ b/libop/op_events.c.orig 2013-02-07 07:01:39.408100801 +0100
768@@ -0,0 +1,1327 @@
769+/**
770+ * @file op_events.c
771+ * Details of PMC profiling events
772+ *
773+ * You can have silliness here.
774+ *
775+ * @remark Copyright 2002 OProfile authors
776+ * @remark Read the file COPYING
777+ *
778+ * @author John Levon
779+ * @author Philippe Elie
780+ */
781+
782+#include "op_events.h"
783+#include "op_libiberty.h"
784+#include "op_fileio.h"
785+#include "op_string.h"
786+#include "op_cpufreq.h"
787+#include "op_hw_specific.h"
788+#include "op_parse_event.h"
789+
790+#include <string.h>
791+#include <stdlib.h>
792+#include <stdio.h>
793+#include <ctype.h>
794+
795+static LIST_HEAD(events_list);
796+static LIST_HEAD(um_list);
797+
798+static char const * filename;
799+static unsigned int line_nr;
800+
801+static void delete_event(struct op_event * event);
802+static void read_events(char const * file);
803+static void read_unit_masks(char const * file);
804+static void free_unit_mask(struct op_unit_mask * um);
805+
806+static char *build_fn(const char *cpu_name, const char *fn)
807+{
808+ char *s;
809+ static const char *dir;
810+ if (dir == NULL)
811+ dir = getenv("OPROFILE_EVENTS_DIR");
812+ if (dir == NULL)
813+ dir = OP_DATADIR;
814+ s = xmalloc(strlen(dir) + strlen(cpu_name) + strlen(fn) + 5);
815+ sprintf(s, "%s/%s/%s", dir, cpu_name, fn);
816+ return s;
817+}
818+
819+static void parse_error(char const * context)
820+{
821+ fprintf(stderr, "oprofile: parse error in %s, line %u\n",
822+ filename, line_nr);
823+ fprintf(stderr, "%s\n", context);
824+ exit(EXIT_FAILURE);
825+}
826+
827+
828+static int parse_int(char const * str)
829+{
830+ int value;
831+ if (sscanf(str, "%d", &value) != 1)
832+ parse_error("expected decimal value");
833+
834+ return value;
835+}
836+
837+
838+static int parse_hex(char const * str)
839+{
840+ int value;
841+ /* 0x/0X to force the use of hexa notation for field intended to
842+ be in hexadecimal */
843+ if (sscanf(str, "0x%x", &value) != 1 &&
844+ sscanf(str, "0X%x", &value) != 1)
845+ parse_error("expected hexadecimal value");
846+
847+ return value;
848+}
849+
850+
851+static u64 parse_long_hex(char const * str)
852+{
853+ u64 value;
854+ if (sscanf(str, "%Lx", &value) != 1)
855+ parse_error("expected long hexadecimal value");
856+
857+ fflush(stderr);
858+ return value;
859+}
860+
861+static void include_um(const char *start, const char *end)
862+{
863+ char *s;
864+ char cpu[end - start + 1];
865+ int old_line_nr;
866+ const char *old_filename;
867+
868+ strncpy(cpu, start, end - start);
869+ cpu[end - start] = 0;
870+ s = build_fn(cpu, "unit_masks");
871+ old_line_nr = line_nr;
872+ old_filename = filename;
873+ read_unit_masks(s);
874+ line_nr = old_line_nr;
875+ filename = old_filename;
876+ free(s);
877+}
878+
879+/* extra:cmask=12,inv,edge */
880+unsigned parse_extra(const char *s)
881+{
882+ unsigned v, w;
883+ int o;
884+
885+ v = 0;
886+ while (*s) {
887+ if (isspace(*s))
888+ break;
889+ if (strisprefix(s, "edge")) {
890+ v |= EXTRA_EDGE;
891+ s += 4;
892+ } else if (strisprefix(s, "inv")) {
893+ v |= EXTRA_INV;
894+ s += 3;
895+ } else if (sscanf(s, "cmask=%x%n", &w, &o) >= 1) {
896+ v |= (w & EXTRA_CMASK_MASK) << EXTRA_CMASK_SHIFT;
897+ s += o;
898+ } else if (strisprefix(s, "any")) {
899+ v |= EXTRA_ANY;
900+ s += 3;
901+ } else {
902+ parse_error("Illegal extra field modifier");
903+ }
904+ if (*s == ',')
905+ ++s;
906+ }
907+ return v;
908+}
909+
910+/* name:MESI type:bitmask default:0x0f */
911+static void parse_um(struct op_unit_mask * um, char const * line)
912+{
913+ int seen_name = 0;
914+ int seen_type = 0;
915+ int seen_default = 0;
916+ char const * valueend = line + 1;
917+ char const * tagend = line + 1;
918+ char const * start = line;
919+
920+ while (*valueend) {
921+ valueend = skip_nonws(valueend);
922+
923+ while (*tagend != ':' && *tagend)
924+ ++tagend;
925+
926+ if (valueend == tagend)
927+ break;
928+
929+ if (!*tagend)
930+ parse_error("parse_um() expected :value");
931+
932+ ++tagend;
933+
934+ if (strisprefix(start, "include")) {
935+ if (seen_name + seen_type + seen_default > 0)
936+ parse_error("include must be on its own");
937+ free_unit_mask(um);
938+ include_um(tagend, valueend);
939+ return;
940+ }
941+
942+ if (strisprefix(start, "name")) {
943+ if (seen_name)
944+ parse_error("duplicate name: tag");
945+ seen_name = 1;
946+ um->name = op_xstrndup(tagend, valueend - tagend);
947+ } else if (strisprefix(start, "type")) {
948+ if (seen_type)
949+ parse_error("duplicate type: tag");
950+ seen_type = 1;
951+ if (strisprefix(tagend, "mandatory")) {
952+ um->unit_type_mask = utm_mandatory;
953+ } else if (strisprefix(tagend, "bitmask")) {
954+ um->unit_type_mask = utm_bitmask;
955+ } else if (strisprefix(tagend, "exclusive")) {
956+ um->unit_type_mask = utm_exclusive;
957+ } else {
958+ parse_error("invalid unit mask type");
959+ }
960+ } else if (strisprefix(start, "default")) {
961+ if (seen_default)
962+ parse_error("duplicate default: tag");
963+ seen_default = 1;
964+ um->default_mask = parse_hex(tagend);
965+ } else {
966+ parse_error("invalid unit mask tag");
967+ }
968+
969+ valueend = skip_ws(valueend);
970+ tagend = valueend;
971+ start = valueend;
972+ }
973+
974+ if (!um->name)
975+ parse_error("Missing name for unit mask");
976+ if (!seen_type)
977+ parse_error("Missing type for unit mask");
978+}
979+
980+
981+/* \t0x08 (M)odified cache state */
982+/* \t0x08 extra:inv,cmask=... (M)odified cache state */
983+static void parse_um_entry(struct op_described_um * entry, char const * line)
984+{
985+ char const * c = line;
986+
987+ c = skip_ws(c);
988+ entry->value = parse_hex(c);
989+ c = skip_nonws(c);
990+
991+ c = skip_ws(c);
992+ if (strisprefix(c, "extra:")) {
993+ c += 6;
994+ entry->extra = parse_extra(c);
995+ c = skip_nonws(c);
996+ } else
997+ entry->extra = 0;
998+
999+ if (!*c)
1000+ parse_error("invalid unit mask entry");
1001+
1002+ c = skip_ws(c);
1003+
1004+ if (!*c)
1005+ parse_error("invalid unit mask entry");
1006+
1007+ entry->desc = xstrdup(c);
1008+}
1009+
1010+
1011+static struct op_unit_mask * new_unit_mask(void)
1012+{
1013+ struct op_unit_mask * um = xmalloc(sizeof(struct op_unit_mask));
1014+ memset(um, '\0', sizeof(struct op_unit_mask));
1015+ list_add_tail(&um->um_next, &um_list);
1016+
1017+ return um;
1018+}
1019+
1020+static void free_unit_mask(struct op_unit_mask * um)
1021+{
1022+ list_del(&um->um_next);
1023+ free(um);
1024+}
1025+
1026+/*
1027+ * name:zero type:mandatory default:0x0
1028+ * \t0x0 No unit mask
1029+ */
1030+static void read_unit_masks(char const * file)
1031+{
1032+ struct op_unit_mask * um = NULL;
1033+ char * line;
1034+ FILE * fp = fopen(file, "r");
1035+
1036+ if (!fp) {
1037+ fprintf(stderr,
1038+ "oprofile: could not open unit mask description file %s\n", file);
1039+ exit(EXIT_FAILURE);
1040+ }
1041+
1042+ filename = file;
1043+ line_nr = 1;
1044+
1045+ line = op_get_line(fp);
1046+
1047+ while (line) {
1048+ if (empty_line(line) || comment_line(line))
1049+ goto next;
1050+
1051+ if (line[0] != '\t') {
1052+ um = new_unit_mask();
1053+ parse_um(um, line);
1054+ } else {
1055+ if (!um)
1056+ parse_error("no unit mask name line");
1057+ if (um->num >= MAX_UNIT_MASK)
1058+ parse_error("oprofile: maximum unit mask entries exceeded");
1059+
1060+ parse_um_entry(&um->um[um->num], line);
1061+ ++(um->num);
1062+ }
1063+
1064+next:
1065+ free(line);
1066+ line = op_get_line(fp);
1067+ ++line_nr;
1068+ }
1069+
1070+ fclose(fp);
1071+}
1072+
1073+
1074+static u32 parse_counter_mask(char const * str)
1075+{
1076+ u32 mask = 0;
1077+ char const * numstart = str;
1078+
1079+ while (*numstart) {
1080+ mask |= 1 << parse_int(numstart);
1081+
1082+ while (*numstart && *numstart != ',')
1083+ ++numstart;
1084+ /* skip , unless we reach eos */
1085+ if (*numstart)
1086+ ++numstart;
1087+
1088+ numstart = skip_ws(numstart);
1089+ }
1090+
1091+ return mask;
1092+}
1093+
1094+static struct op_unit_mask * try_find_um(char const * value)
1095+{
1096+ struct list_head * pos;
1097+
1098+ list_for_each(pos, &um_list) {
1099+ struct op_unit_mask * um = list_entry(pos, struct op_unit_mask, um_next);
1100+ if (strcmp(value, um->name) == 0) {
1101+ um->used = 1;
1102+ return um;
1103+ }
1104+ }
1105+ return NULL;
1106+}
1107+
1108+static struct op_unit_mask * find_um(char const * value)
1109+{
1110+ struct op_unit_mask * um = try_find_um(value);
1111+ if (um)
1112+ return um;
1113+ fprintf(stderr, "oprofile: could not find unit mask %s\n", value);
1114+ exit(EXIT_FAILURE);
1115+}
1116+
1117+/* um:a,b,c,d merge multiple unit masks */
1118+static struct op_unit_mask * merge_um(char * value)
1119+{
1120+ int num;
1121+ char *s;
1122+ struct op_unit_mask *new, *um;
1123+ enum unit_mask_type type = -1U;
1124+
1125+ um = try_find_um(value);
1126+ if (um)
1127+ return um;
1128+
1129+ new = new_unit_mask();
1130+ new->name = xstrdup(value);
1131+ new->used = 1;
1132+ num = 0;
1133+ while ((s = strsep(&value, ",")) != NULL) {
1134+ unsigned c;
1135+ um = find_um(s);
1136+ if (type == -1U)
1137+ type = um->unit_type_mask;
1138+ if (um->unit_type_mask != type)
1139+ parse_error("combined unit mask must be all the same types");
1140+ if (type != utm_bitmask && type != utm_exclusive)
1141+ parse_error("combined unit mask must be all bitmasks or exclusive");
1142+ new->default_mask |= um->default_mask;
1143+ new->num += um->num;
1144+ if (new->num > MAX_UNIT_MASK)
1145+ parse_error("too many members in combined unit mask");
1146+ for (c = 0; c < um->num; c++, num++) {
1147+ new->um[num] = um->um[c];
1148+ new->um[num].desc = xstrdup(new->um[num].desc);
1149+ }
1150+ }
1151+ if (type == -1U)
1152+ parse_error("Empty unit mask");
1153+ new->unit_type_mask = type;
1154+ return new;
1155+}
1156+
1157+/* parse either a "tag:value" or a ": trailing description string" */
1158+static int next_token(char const ** cp, char ** name, char ** value)
1159+{
1160+ size_t tag_len;
1161+ size_t val_len;
1162+ char const * c = *cp;
1163+ char const * end;
1164+ char const * colon;
1165+
1166+ c = skip_ws(c);
1167+ end = colon = c;
1168+ end = skip_nonws(end);
1169+
1170+ colon = strchr(colon, ':');
1171+
1172+ if (!colon) {
1173+ if (*c)
1174+ parse_error("next_token(): garbage at end of line");
1175+ return 0;
1176+ }
1177+
1178+ if (colon >= end)
1179+ parse_error("next_token() expected ':'");
1180+
1181+ tag_len = colon - c;
1182+ val_len = end - (colon + 1);
1183+
1184+ if (!tag_len) {
1185+ /* : trailing description */
1186+ end = skip_ws(end);
1187+ *name = xstrdup("desc");
1188+ *value = xstrdup(end);
1189+ end += strlen(end);
1190+ } else {
1191+ /* tag:value */
1192+ *name = op_xstrndup(c, tag_len);
1193+ *value = op_xstrndup(colon + 1, val_len);
1194+ end = skip_ws(end);
1195+ }
1196+
1197+ *cp = end;
1198+ return 1;
1199+}
1200+
1201+static void include_events (char *value)
1202+{
1203+ char * event_file;
1204+ const char *old_filename;
1205+ int old_line_nr;
1206+
1207+ event_file = build_fn(value, "events");
1208+ old_line_nr = line_nr;
1209+ old_filename = filename;
1210+ read_events(event_file);
1211+ line_nr = old_line_nr;
1212+ filename = old_filename;
1213+ free(event_file);
1214+}
1215+
1216+static struct op_event * new_event(void)
1217+{
1218+ struct op_event * event = xmalloc(sizeof(struct op_event));
1219+ memset(event, '\0', sizeof(struct op_event));
1220+ list_add_tail(&event->event_next, &events_list);
1221+
1222+ return event;
1223+}
1224+
1225+static void free_event(struct op_event * event)
1226+{
1227+ list_del(&event->event_next);
1228+ free(event);
1229+}
1230+
1231+/* event:0x00 counters:0 um:zero minimum:4096 name:ISSUES : Total issues */
1232+/* event:0x00 ext:xxxxxx um:zero minimum:4096 name:ISSUES : Total issues */
1233+static void read_events(char const * file)
1234+{
1235+ struct op_event * event = NULL;
1236+ char * line;
1237+ char * name;
1238+ char * value;
1239+ char const * c;
1240+ int seen_event, seen_counters, seen_um, seen_minimum, seen_name, seen_ext;
1241+ FILE * fp = fopen(file, "r");
1242+ int tags;
1243+
1244+ if (!fp) {
1245+ fprintf(stderr, "oprofile: could not open event description file %s\n", file);
1246+ exit(EXIT_FAILURE);
1247+ }
1248+
1249+ filename = file;
1250+ line_nr = 1;
1251+
1252+ line = op_get_line(fp);
1253+
1254+ while (line) {
1255+ if (empty_line(line) || comment_line(line))
1256+ goto next;
1257+
1258+ tags = 0;
1259+ seen_name = 0;
1260+ seen_event = 0;
1261+ seen_counters = 0;
1262+ seen_ext = 0;
1263+ seen_um = 0;
1264+ seen_minimum = 0;
1265+ event = new_event();
1266+ event->filter = -1;
1267+ event->ext = NULL;
1268+
1269+ c = line;
1270+ while (next_token(&c, &name, &value)) {
1271+ if (strcmp(name, "name") == 0) {
1272+ if (seen_name)
1273+ parse_error("duplicate name: tag");
1274+ seen_name = 1;
1275+ if (strchr(value, '/') != NULL)
1276+ parse_error("invalid event name");
1277+ if (strchr(value, '.') != NULL)
1278+ parse_error("invalid event name");
1279+ event->name = value;
1280+ } else if (strcmp(name, "event") == 0) {
1281+ if (seen_event)
1282+ parse_error("duplicate event: tag");
1283+ seen_event = 1;
1284+ event->val = parse_hex(value);
1285+ free(value);
1286+ } else if (strcmp(name, "counters") == 0) {
1287+ if (seen_counters)
1288+ parse_error("duplicate counters: tag");
1289+ seen_counters = 1;
1290+ if (!strcmp(value, "cpuid"))
1291+ event->counter_mask = arch_get_counter_mask();
1292+ else
1293+ event->counter_mask = parse_counter_mask(value);
1294+ free(value);
1295+ } else if (strcmp(name, "ext") == 0) {
1296+ if (seen_ext)
1297+ parse_error("duplicate ext: tag");
1298+ seen_ext = 1;
1299+ event->ext = value;
1300+ } else if (strcmp(name, "um") == 0) {
1301+ if (seen_um)
1302+ parse_error("duplicate um: tag");
1303+ seen_um = 1;
1304+ if (strchr(value, ','))
1305+ event->unit = merge_um(value);
1306+ else
1307+ event->unit = find_um(value);
1308+ free(value);
1309+ } else if (strcmp(name, "minimum") == 0) {
1310+ if (seen_minimum)
1311+ parse_error("duplicate minimum: tag");
1312+ seen_minimum = 1;
1313+ event->min_count = parse_int(value);
1314+ free(value);
1315+ } else if (strcmp(name, "desc") == 0) {
1316+ event->desc = value;
1317+ } else if (strcmp(name, "filter") == 0) {
1318+ event->filter = parse_int(value);
1319+ free(value);
1320+ } else if (strcmp(name, "include") == 0) {
1321+ if (tags > 0)
1322+ parse_error("tags before include:");
1323+ free_event(event);
1324+ include_events(value);
1325+ free(value);
1326+ c = skip_ws(c);
1327+ if (*c != '\0' && *c != '#')
1328+ parse_error("non whitespace after include:");
1329+ } else {
1330+ parse_error("unknown tag");
1331+ }
1332+ tags++;
1333+
1334+ free(name);
1335+ }
1336+next:
1337+ free(line);
1338+ line = op_get_line(fp);
1339+ ++line_nr;
1340+ }
1341+
1342+ fclose(fp);
1343+}
1344+
1345+
1346+/* usefull for make check */
1347+static int check_unit_mask(struct op_unit_mask const * um,
1348+ char const * cpu_name)
1349+{
1350+ u32 i;
1351+ int err = 0;
1352+
1353+ if (!um->used) {
1354+ fprintf(stderr, "um %s is not used\n", um->name);
1355+ err = EXIT_FAILURE;
1356+ }
1357+
1358+ if (um->unit_type_mask == utm_mandatory && um->num != 1) {
1359+ fprintf(stderr, "mandatory um %s doesn't contain exactly one "
1360+ "entry (%s)\n", um->name, cpu_name);
1361+ err = EXIT_FAILURE;
1362+ } else if (um->unit_type_mask == utm_bitmask) {
1363+ u32 default_mask = um->default_mask;
1364+ for (i = 0; i < um->num; ++i)
1365+ default_mask &= ~um->um[i].value;
1366+
1367+ if (default_mask) {
1368+ fprintf(stderr, "um %s default mask is not valid "
1369+ "(%s)\n", um->name, cpu_name);
1370+ err = EXIT_FAILURE;
1371+ }
1372+ } else {
1373+ for (i = 0; i < um->num; ++i) {
1374+ if (um->default_mask == um->um[i].value)
1375+ break;
1376+ }
1377+
1378+ if (i == um->num) {
1379+ fprintf(stderr, "exclusive um %s default value is not "
1380+ "valid (%s)\n", um->name, cpu_name);
1381+ err = EXIT_FAILURE;
1382+ }
1383+ }
1384+ return err;
1385+}
1386+
1387+static void arch_filter_events(op_cpu cpu_type)
1388+{
1389+ struct list_head * pos, * pos2;
1390+ unsigned filter = arch_get_filter(cpu_type);
1391+ if (!filter)
1392+ return;
1393+ list_for_each_safe (pos, pos2, &events_list) {
1394+ struct op_event * event = list_entry(pos, struct op_event, event_next);
1395+ if (event->filter >= 0 && ((1U << event->filter) & filter))
1396+ delete_event(event);
1397+ }
1398+}
1399+
1400+static void load_events_name(const char *cpu_name)
1401+{
1402+ char * event_file;
1403+ char * um_file;
1404+
1405+ event_file = build_fn(cpu_name, "events");
1406+ um_file = build_fn(cpu_name, "unit_masks");
1407+
1408+ read_unit_masks(um_file);
1409+ read_events(event_file);
1410+
1411+ free(um_file);
1412+ free(event_file);
1413+}
1414+
1415+static void load_events(op_cpu cpu_type)
1416+{
1417+ const char * cpu_name = op_get_cpu_name(cpu_type);
1418+ struct list_head * pos;
1419+ struct op_event *event;
1420+ struct op_unit_mask *unit_mask;
1421+ int err = 0;
1422+
1423+ if (!list_empty(&events_list))
1424+ return;
1425+
1426+ load_events_name(cpu_name);
1427+
1428+ arch_filter_events(cpu_type);
1429+
1430+ /* sanity check: all unit mask must be used */
1431+ list_for_each(pos, &um_list) {
1432+ struct op_unit_mask * um = list_entry(pos, struct op_unit_mask, um_next);
1433+ err |= check_unit_mask(um, cpu_name);
1434+ }
1435+ if (err)
1436+ exit(err);
1437+
1438+ if (!op_cpu_has_timer_fs())
1439+ return;
1440+
1441+ /* sanity check: Don't use event `TIMER' since it is predefined. */
1442+ list_for_each(pos, &events_list) {
1443+ struct op_event * event = list_entry(pos, struct op_event,
1444+ event_next);
1445+
1446+ if (strcmp(event->name, TIMER_EVENT_NAME) == 0) {
1447+ fprintf(stderr, "Error: " TIMER_EVENT_NAME
1448+ " event cannot be redefined.\n");
1449+ exit(EXIT_FAILURE);
1450+ }
1451+ if (event->val == TIMER_EVENT_VALUE) {
1452+ fprintf(stderr, "Error: Event %s uses " TIMER_EVENT_NAME
1453+ " which is reserverd for timer based sampling.\n",
1454+ event->name);
1455+ exit(EXIT_FAILURE);
1456+ }
1457+ }
1458+
1459+ list_for_each(pos, &um_list) {
1460+ struct op_unit_mask * um = list_entry(pos, struct op_unit_mask,
1461+ um_next);
1462+ if (strcmp(um->name, TIMER_EVENT_UNIT_MASK_NAME) == 0) {
1463+ fprintf(stderr, "Error: " TIMER_EVENT_UNIT_MASK_NAME
1464+ " unit mask cannot be redefined.\n");
1465+ exit(EXIT_FAILURE);
1466+ }
1467+ }
1468+
1469+ unit_mask = new_unit_mask();
1470+ unit_mask->name = xstrdup(TIMER_EVENT_UNIT_MASK_NAME);
1471+ unit_mask->num = 1;
1472+ unit_mask->unit_type_mask = utm_mandatory;
1473+ unit_mask->um[0].extra = 0;
1474+ unit_mask->um[0].value = 0;
1475+ unit_mask->um[0].desc = xstrdup("No unit mask");
1476+ unit_mask->used = 1;
1477+
1478+ event = new_event();
1479+ event->name = xstrdup(TIMER_EVENT_NAME);
1480+ event->desc = xstrdup(TIMER_EVENT_DESC);
1481+ event->val = TIMER_EVENT_VALUE;
1482+ event->unit = unit_mask;
1483+ event->min_count = 0;
1484+ event->filter = 0;
1485+ event->counter_mask = 1 << (op_get_nr_counters(cpu_type) - 1);
1486+ event->ext = NULL;
1487+ event->filter = -1;
1488+}
1489+
1490+struct list_head * op_events(op_cpu cpu_type)
1491+{
1492+ load_events(cpu_type);
1493+ arch_filter_events(cpu_type);
1494+ return &events_list;
1495+}
1496+
1497+
1498+static void delete_unit_mask(struct op_unit_mask * unit)
1499+{
1500+ u32 cur;
1501+ for (cur = 0 ; cur < unit->num ; ++cur) {
1502+ if (unit->um[cur].desc)
1503+ free(unit->um[cur].desc);
1504+ }
1505+
1506+ if (unit->name)
1507+ free(unit->name);
1508+
1509+ list_del(&unit->um_next);
1510+ free(unit);
1511+}
1512+
1513+
1514+static void delete_event(struct op_event * event)
1515+{
1516+ if (event->name)
1517+ free(event->name);
1518+ if (event->desc)
1519+ free(event->desc);
1520+
1521+ list_del(&event->event_next);
1522+ free(event);
1523+}
1524+
1525+
1526+void op_free_events(void)
1527+{
1528+ struct list_head * pos, * pos2;
1529+ list_for_each_safe(pos, pos2, &events_list) {
1530+ struct op_event * event = list_entry(pos, struct op_event, event_next);
1531+ delete_event(event);
1532+ }
1533+
1534+ list_for_each_safe(pos, pos2, &um_list) {
1535+ struct op_unit_mask * unit = list_entry(pos, struct op_unit_mask, um_next);
1536+ delete_unit_mask(unit);
1537+ }
1538+}
1539+
1540+/* There can be actually multiple events here, so this is not quite correct */
1541+static struct op_event * find_event_any(u32 nr)
1542+{
1543+ struct list_head * pos;
1544+
1545+ list_for_each(pos, &events_list) {
1546+ struct op_event * event = list_entry(pos, struct op_event, event_next);
1547+ if (event->val == nr)
1548+ return event;
1549+ }
1550+
1551+ return NULL;
1552+}
1553+
1554+static struct op_event * find_event_um(u32 nr, u32 um)
1555+{
1556+ struct list_head * pos;
1557+ unsigned int i;
1558+
1559+ list_for_each(pos, &events_list) {
1560+ struct op_event * event = list_entry(pos, struct op_event, event_next);
1561+ if (event->val == nr) {
1562+ for (i = 0; i < event->unit->num; i++) {
1563+ if (event->unit->um[i].value == um)
1564+ return event;
1565+ }
1566+ }
1567+ }
1568+
1569+ return NULL;
1570+}
1571+
1572+static FILE * open_event_mapping_file(char const * cpu_name)
1573+{
1574+ char * ev_map_file;
1575+ char * dir;
1576+ dir = getenv("OPROFILE_EVENTS_DIR");
1577+ if (dir == NULL)
1578+ dir = OP_DATADIR;
1579+
1580+ ev_map_file = xmalloc(strlen(dir) + strlen("/") + strlen(cpu_name) +
1581+ strlen("/") + + strlen("event_mappings") + 1);
1582+ strcpy(ev_map_file, dir);
1583+ strcat(ev_map_file, "/");
1584+
1585+ strcat(ev_map_file, cpu_name);
1586+ strcat(ev_map_file, "/");
1587+ strcat(ev_map_file, "event_mappings");
1588+ filename = ev_map_file;
1589+ return (fopen(ev_map_file, "r"));
1590+}
1591+
1592+
1593+/**
1594+ * This function is PPC64-specific.
1595+ */
1596+static char const * get_mapping(u32 nr, FILE * fp)
1597+{
1598+ char * line;
1599+ char * name;
1600+ char * value;
1601+ char const * c;
1602+ char * map = NULL;
1603+ int seen_event = 0, seen_mmcr0 = 0, seen_mmcr1 = 0, seen_mmcra = 0;
1604+ u32 mmcr0 = 0;
1605+ u64 mmcr1 = 0;
1606+ u32 mmcra = 0;
1607+ int event_found = 0;
1608+
1609+ line_nr = 1;
1610+ line = op_get_line(fp);
1611+ while (line && !event_found) {
1612+ if (empty_line(line) || comment_line(line))
1613+ goto next;
1614+
1615+ seen_event = 0;
1616+ seen_mmcr0 = 0;
1617+ seen_mmcr1 = 0;
1618+ seen_mmcra = 0;
1619+ mmcr0 = 0;
1620+ mmcr1 = 0;
1621+ mmcra = 0;
1622+
1623+ c = line;
1624+ while (next_token(&c, &name, &value)) {
1625+ if (strcmp(name, "event") == 0) {
1626+ u32 evt;
1627+ if (seen_event)
1628+ parse_error("duplicate event tag");
1629+ seen_event = 1;
1630+ evt = parse_hex(value);
1631+ if (evt == nr)
1632+ event_found = 1;
1633+ free(value);
1634+ } else if (strcmp(name, "mmcr0") == 0) {
1635+ if (seen_mmcr0)
1636+ parse_error("duplicate mmcr0 tag");
1637+ seen_mmcr0 = 1;
1638+ mmcr0 = parse_hex(value);
1639+ free(value);
1640+ } else if (strcmp(name, "mmcr1") == 0) {
1641+ if (seen_mmcr1)
1642+ parse_error("duplicate mmcr1: tag");
1643+ seen_mmcr1 = 1;
1644+ mmcr1 = parse_long_hex(value);
1645+ free(value);
1646+ } else if (strcmp(name, "mmcra") == 0) {
1647+ if (seen_mmcra)
1648+ parse_error("duplicate mmcra: tag");
1649+ seen_mmcra = 1;
1650+ mmcra = parse_hex(value);
1651+ free(value);
1652+ } else {
1653+ parse_error("unknown tag");
1654+ }
1655+
1656+ free(name);
1657+ }
1658+next:
1659+ free(line);
1660+ line = op_get_line(fp);
1661+ ++line_nr;
1662+ }
1663+ if (event_found) {
1664+ if (!seen_mmcr0 || !seen_mmcr1 || !seen_mmcra) {
1665+ fprintf(stderr, "Error: Missing information in line %d of event mapping file %s\n", line_nr, filename);
1666+ exit(EXIT_FAILURE);
1667+ }
1668+ map = xmalloc(70);
1669+ snprintf(map, 70, "mmcr0:%u mmcr1:%Lu mmcra:%u",
1670+ mmcr0, mmcr1, mmcra);
1671+ }
1672+
1673+ return map;
1674+}
1675+
1676+
1677+char const * find_mapping_for_event(u32 nr, op_cpu cpu_type)
1678+{
1679+ char const * cpu_name = op_get_cpu_name(cpu_type);
1680+ FILE * fp = open_event_mapping_file(cpu_name);
1681+ char const * map = NULL;
1682+ switch (cpu_type) {
1683+ case CPU_PPC64_PA6T:
1684+ case CPU_PPC64_970:
1685+ case CPU_PPC64_970MP:
1686+ case CPU_PPC64_POWER4:
1687+ case CPU_PPC64_POWER5:
1688+ case CPU_PPC64_POWER5p:
1689+ case CPU_PPC64_POWER5pp:
1690+ case CPU_PPC64_POWER6:
1691+ case CPU_PPC64_POWER7:
1692+ case CPU_PPC64_IBM_COMPAT_V1:
1693+ if (!fp) {
1694+ fprintf(stderr, "oprofile: could not open event mapping file %s\n", filename);
1695+ exit(EXIT_FAILURE);
1696+ } else {
1697+ map = get_mapping(nr, fp);
1698+ }
1699+ break;
1700+ default:
1701+ break;
1702+ }
1703+
1704+ if (fp)
1705+ fclose(fp);
1706+
1707+ return map;
1708+}
1709+
1710+static int match_event(int i, struct op_event *event, unsigned um)
1711+{
1712+ unsigned v = event->unit->um[i].value;
1713+
1714+ switch (event->unit->unit_type_mask) {
1715+ case utm_exclusive:
1716+ case utm_mandatory:
1717+ return v == um;
1718+
1719+ case utm_bitmask:
1720+ return (v & um) || (!v && v == 0);
1721+ }
1722+
1723+ abort();
1724+}
1725+
1726+struct op_event * find_event_by_name(char const * name, unsigned um, int um_valid)
1727+{
1728+ struct list_head * pos;
1729+
1730+ list_for_each(pos, &events_list) {
1731+ struct op_event * event = list_entry(pos, struct op_event, event_next);
1732+ if (strcmp(event->name, name) == 0) {
1733+ if (um_valid) {
1734+ unsigned i;
1735+
1736+ for (i = 0; i < event->unit->num; i++)
1737+ if (match_event(i, event, um))
1738+ return event;
1739+ continue;
1740+ }
1741+ return event;
1742+ }
1743+ }
1744+
1745+ return NULL;
1746+}
1747+
1748+
1749+static struct op_event * find_next_event(struct op_event * e)
1750+{
1751+ struct list_head * n;
1752+
1753+ for (n = e->event_next.next; n != &events_list; n = n->next) {
1754+ struct op_event * ne = list_entry(n, struct op_event, event_next);
1755+ if (!strcmp(e->name, ne->name))
1756+ return ne;
1757+ }
1758+ return NULL;
1759+}
1760+
1761+struct op_event * op_find_event(op_cpu cpu_type, u32 nr, u32 um)
1762+{
1763+ struct op_event * event;
1764+
1765+ load_events(cpu_type);
1766+
1767+ event = find_event_um(nr, um);
1768+
1769+ return event;
1770+}
1771+
1772+struct op_event * op_find_event_any(op_cpu cpu_type, u32 nr)
1773+{
1774+ load_events(cpu_type);
1775+
1776+ return find_event_any(nr);
1777+}
1778+
1779+int op_check_events(int ctr, u32 nr, u32 um, op_cpu cpu_type)
1780+{
1781+ int ret = OP_INVALID_EVENT;
1782+ size_t i;
1783+ u32 ctr_mask = 1 << ctr;
1784+ struct list_head * pos;
1785+
1786+ load_events(cpu_type);
1787+
1788+ list_for_each(pos, &events_list) {
1789+ struct op_event * event = list_entry(pos, struct op_event, event_next);
1790+ if (event->val != nr)
1791+ continue;
1792+
1793+ ret = OP_OK_EVENT;
1794+
1795+ if ((event->counter_mask & ctr_mask) == 0)
1796+ ret |= OP_INVALID_COUNTER;
1797+
1798+ if (event->unit->unit_type_mask == utm_bitmask) {
1799+ for (i = 0; i < event->unit->num; ++i)
1800+ um &= ~(event->unit->um[i].value);
1801+
1802+ if (um)
1803+ ret |= OP_INVALID_UM;
1804+
1805+ } else {
1806+ for (i = 0; i < event->unit->num; ++i) {
1807+ if (event->unit->um[i].value == um)
1808+ break;
1809+ }
1810+
1811+ if (i == event->unit->num)
1812+ ret |= OP_INVALID_UM;
1813+
1814+ }
1815+
1816+ if (ret == OP_OK_EVENT)
1817+ return ret;
1818+ }
1819+
1820+ return ret;
1821+}
1822+
1823+
1824+void op_default_event(op_cpu cpu_type, struct op_default_event_descr * descr)
1825+{
1826+ descr->name = "";
1827+ descr->um = 0x0;
1828+ /* A fixed value of CPU cycles; this should ensure good
1829+ * granulity even on faster CPUs, though it will generate more
1830+ * interrupts.
1831+ */
1832+ descr->count = 100000;
1833+
1834+ switch (cpu_type) {
1835+ case CPU_PPRO:
1836+ case CPU_PII:
1837+ case CPU_PIII:
1838+ case CPU_P6_MOBILE:
1839+ case CPU_CORE:
1840+ case CPU_CORE_2:
1841+ case CPU_ATHLON:
1842+ case CPU_HAMMER:
1843+ case CPU_FAMILY10:
1844+ case CPU_ARCH_PERFMON:
1845+ case CPU_FAMILY11H:
1846+ case CPU_ATOM:
1847+ case CPU_CORE_I7:
1848+ case CPU_NEHALEM:
1849+ case CPU_WESTMERE:
1850+ case CPU_SANDYBRIDGE:
1851+ case CPU_IVYBRIDGE:
1852+ case CPU_MIPS_LOONGSON2:
1853+ case CPU_FAMILY12H:
1854+ case CPU_FAMILY14H:
1855+ case CPU_FAMILY15H:
1856+ descr->name = "CPU_CLK_UNHALTED";
1857+ break;
1858+
1859+ case CPU_RTC:
1860+ descr->name = "RTC_INTERRUPTS";
1861+ descr->count = 1024;
1862+ break;
1863+
1864+ case CPU_P4:
1865+ case CPU_P4_HT2:
1866+ descr->name = "GLOBAL_POWER_EVENTS";
1867+ descr->um = 0x1;
1868+ break;
1869+
1870+ case CPU_IA64:
1871+ case CPU_IA64_1:
1872+ case CPU_IA64_2:
1873+ descr->count = 1000000;
1874+ descr->name = "CPU_CYCLES";
1875+ break;
1876+
1877+ case CPU_AXP_EV4:
1878+ case CPU_AXP_EV5:
1879+ case CPU_AXP_PCA56:
1880+ case CPU_AXP_EV6:
1881+ case CPU_AXP_EV67:
1882+ descr->name = "CYCLES";
1883+ break;
1884+
1885+ // we could possibly use the CCNT
1886+ case CPU_ARM_XSCALE1:
1887+ case CPU_ARM_XSCALE2:
1888+ case CPU_ARM_MPCORE:
1889+ case CPU_ARM_V6:
1890+ case CPU_ARM_V7:
1891+ case CPU_ARM_V7_CA5:
1892+ case CPU_ARM_V7_CA7:
1893+ case CPU_ARM_V7_CA9:
1894+ case CPU_ARM_V7_CA15:
1895+ case CPU_AVR32:
1896+ case CPU_ARM_SCORPION:
1897+ case CPU_ARM_SCORPIONMP:
1898+ descr->name = "CPU_CYCLES";
1899+ break;
1900+
1901+ case CPU_PPC64_PA6T:
1902+ case CPU_PPC64_970:
1903+ case CPU_PPC64_970MP:
1904+ case CPU_PPC_7450:
1905+ case CPU_PPC64_POWER4:
1906+ case CPU_PPC64_POWER5:
1907+ case CPU_PPC64_POWER6:
1908+ case CPU_PPC64_POWER5p:
1909+ case CPU_PPC64_POWER5pp:
1910+ case CPU_PPC64_CELL:
1911+ case CPU_PPC64_POWER7:
1912+ case CPU_PPC64_IBM_COMPAT_V1:
1913+ descr->name = "CYCLES";
1914+ break;
1915+
1916+ case CPU_MIPS_20K:
1917+ descr->name = "CYCLES";
1918+ break;
1919+
1920+ case CPU_MIPS_24K:
1921+ case CPU_MIPS_34K:
1922+ case CPU_MIPS_74K:
1923+ case CPU_MIPS_1004K:
1924+ descr->name = "INSTRUCTIONS";
1925+ break;
1926+
1927+ case CPU_MIPS_5K:
1928+ case CPU_MIPS_25K:
1929+ descr->name = "CYCLES";
1930+ break;
1931+
1932+ case CPU_MIPS_R10000:
1933+ case CPU_MIPS_R12000:
1934+ descr->name = "INSTRUCTIONS_GRADUATED";
1935+ break;
1936+
1937+ case CPU_MIPS_RM7000:
1938+ case CPU_MIPS_RM9000:
1939+ descr->name = "INSTRUCTIONS_ISSUED";
1940+ break;
1941+
1942+ case CPU_MIPS_SB1:
1943+ descr->name = "INSN_SURVIVED_STAGE7";
1944+ break;
1945+
1946+ case CPU_MIPS_VR5432:
1947+ case CPU_MIPS_VR5500:
1948+ descr->name = "INSTRUCTIONS_EXECUTED";
1949+ break;
1950+
1951+ case CPU_PPC_E500:
1952+ case CPU_PPC_E500_2:
1953+ case CPU_PPC_E300:
1954+ descr->name = "CPU_CLK";
1955+ break;
1956+ case CPU_S390_Z10:
1957+ case CPU_S390_Z196:
1958+ if (op_get_nr_counters(cpu_type) > 1) {
1959+ descr->name = "HWSAMPLING";
1960+ descr->count = 4127518;
1961+ } else {
1962+ descr->name = TIMER_EVENT_NAME;
1963+ descr->count = 10000;
1964+ }
1965+ break;
1966+
1967+ case CPU_TILE_TILE64:
1968+ case CPU_TILE_TILEPRO:
1969+ case CPU_TILE_TILEGX:
1970+ descr->name = "ONE";
1971+ break;
1972+
1973+ // don't use default, if someone add a cpu he wants a compiler
1974+ // warning if he forgets to handle it here.
1975+ case CPU_TIMER_INT:
1976+ case CPU_NO_GOOD:
1977+ case MAX_CPU_TYPE:
1978+ break;
1979+ }
1980+}
1981+
1982+static void extra_check(struct op_event *e, u32 unit_mask)
1983+{
1984+ unsigned i;
1985+ int found = 0;
1986+
1987+ for (i = 0; i < e->unit->num; i++)
1988+ if (e->unit->um[i].value == unit_mask)
1989+ found++;
1990+ if (found > 1) {
1991+ fprintf(stderr,
1992+"Named unit masks not allowed for events without 'extra:' values.\n"
1993+"Please specify the numerical value for the unit mask. See 'opcontrol'"
1994+" man page for more info.\n");
1995+ exit(EXIT_FAILURE);
1996+ }
1997+}
1998+
1999+static void another_extra_check(struct op_event *e, char *name, unsigned w)
2000+{
2001+ int found;
2002+ unsigned i;
2003+
2004+ if (!e->unit->um[w].extra) {
2005+ fprintf(stderr,
2006+"Named unit mask (%s) not allowed for event without 'extra:' values.\n"
2007+"Please specify the numerical value for the unit mask. See 'opcontrol'"
2008+" man page for more info.\n", name);
2009+ exit(EXIT_FAILURE);
2010+ }
2011+
2012+ found = 0;
2013+ for (i = 0; i < e->unit->num; i++) {
2014+ int len = strcspn(e->unit->um[i].desc, " \t");
2015+ if (!strncmp(name, e->unit->um[i].desc, len) &&
2016+ name[len] == '\0')
2017+ found++;
2018+ }
2019+ if (found > 1) {
2020+ fprintf(stderr,
2021+ "Unit mask name `%s' not unique. Sorry please use a numerical unit mask\n", name);
2022+ exit(EXIT_FAILURE);
2023+ }
2024+}
2025+
2026+static void do_resolve_unit_mask(struct op_event *e, struct parsed_event *pe,
2027+ u32 *extra)
2028+{
2029+ unsigned i;
2030+ int found;
2031+
2032+ for (;;) {
2033+ if (pe->unit_mask_name == NULL) {
2034+ int had_unit_mask = pe->unit_mask_valid;
2035+
2036+ found = 0;
2037+ for (i = 0; i < e->unit->num; i++) {
2038+ if (!pe->unit_mask_valid &&
2039+ e->unit->um[i].value == e->unit->default_mask) {
2040+ pe->unit_mask_valid = 1;
2041+ pe->unit_mask = e->unit->default_mask;
2042+ break;
2043+ }
2044+ }
2045+ if (found > 1 && had_unit_mask) {
2046+ fprintf(stderr,
2047+ "Non unique numerical unit mask.\n"
2048+ "Please specify the unit mask using the first word of the description\n");
2049+ exit(EXIT_FAILURE);
2050+ }
2051+ extra_check(e, pe->unit_mask);
2052+ if (i == e->unit->num) {
2053+ e = find_next_event(e);
2054+ if (e != NULL)
2055+ continue;
2056+ } else {
2057+ if (extra)
2058+ *extra = e->unit->um[i].extra;
2059+ }
2060+ return;
2061+ }
2062+ for (i = 0; i < e->unit->num; i++) {
2063+ int len = strcspn(e->unit->um[i].desc, " \t");
2064+ if (!strncmp(pe->unit_mask_name, e->unit->um[i].desc,
2065+ len) && pe->unit_mask_name[len] == '\0')
2066+ break;
2067+ }
2068+ if (i == e->unit->num) {
2069+ e = find_next_event(e);
2070+ if (e != NULL)
2071+ continue;
2072+ fprintf(stderr, "Cannot find unit mask %s for %s\n",
2073+ pe->unit_mask_name, pe->name);
2074+ exit(EXIT_FAILURE);
2075+ }
2076+ another_extra_check(e, pe->unit_mask_name, i);
2077+ pe->unit_mask_valid = 1;
2078+ pe->unit_mask = e->unit->um[i].value;
2079+ if (extra)
2080+ *extra = e->unit->um[i].extra;
2081+ return;
2082+ }
2083+}
2084+
2085+void op_resolve_unit_mask(struct parsed_event *pe, u32 *extra)
2086+{
2087+ struct op_event *e;
2088+
2089+ e = find_event_by_name(pe->name, 0, 0);
2090+ if (!e) {
2091+ fprintf(stderr, "Cannot find event %s\n", pe->name);
2092+ exit(EXIT_FAILURE);
2093+ }
2094+ return do_resolve_unit_mask(e, pe, extra);
2095+}
diff --git a/recipes-append/oprofile/oprofile_0.9.8.bbappend b/recipes-append/oprofile/oprofile_0.9.8.bbappend
new file mode 100644
index 0000000..c631963
--- /dev/null
+++ b/recipes-append/oprofile/oprofile_0.9.8.bbappend
@@ -0,0 +1,3 @@
1FILESEXTRAPATHS_prepend := "${THISDIR}/files:"
2
3SRC_URI += "file://oprofile-e500mc.patch"
diff --git a/recipes-bsp/fm-ucode/fm-ucode_git.bb b/recipes-bsp/fm-ucode/fm-ucode_git.bb
new file mode 100644
index 0000000..89c43ba
--- /dev/null
+++ b/recipes-bsp/fm-ucode/fm-ucode_git.bb
@@ -0,0 +1,46 @@
1DESCRIPTION = "Fman microcode binary"
2SECTION = "fm-ucode"
3LICENSE = "Freescale EULA"
4LIC_FILES_CHKSUM = "file://EULA;md5=60037ccba533a5995e8d1a838d85799c"
5
6FMAN_UCODE_INSTALL_FILE = "fsl_fman_ucode"
7FMAN_UCODE_INSTALL_FILE_append_p2041rdb = "_P2041"
8FMAN_UCODE_INSTALL_FILE_append_p4080ds= "_P4080"
9FMAN_UCODE_INSTALL_FILE_append_p1023rds = "_*1023"
10FMAN_UCODE_INSTALL_FILE_append_p5020ds = "_P5020"
11FMAN_UCODE_INSTALL_FILE_append_p5020ds-64b = "_P5020"
12FMAN_UCODE_INSTALL_FILE_append_p5040ds = "_P5040"
13FMAN_UCODE_INSTALL_FILE_append_p5040ds-64b = "_P5040"
14FMAN_UCODE_INSTALL_FILE_append_p3041ds = "_P3041"
15FMAN_UCODE_INSTALL_FILE_append_b4420qds = "_B4860"
16FMAN_UCODE_INSTALL_FILE_append_b4420qds-64b = "_B4860"
17FMAN_UCODE_INSTALL_FILE_append_b4860qds = "_B4860"
18FMAN_UCODE_INSTALL_FILE_append_b4860qds-64b = "_B4860"
19FMAN_UCODE_INSTALL_FILE_append_t4160qds = "_T4240"
20FMAN_UCODE_INSTALL_FILE_append_t4160qds-64b = "_T4240"
21FMAN_UCODE_INSTALL_FILE_append_t4240qds = "_T4240"
22FMAN_UCODE_INSTALL_FILE_append_t4240qds-64b = "_T4240"
23
24COMPATIBLE_MACHINE = "(p1023rds|p4080ds|p5020ds|p5040ds|p5020ds-64b|p5040ds-64b|p3041ds|p2041rdb|b4420qds|b4420qds-64b|b4860qds|b4860qds-64b|t4160qds|t4160qds-64b|t4240qds|t4240qds-64b)"
25inherit deploy
26
27SRC_URI = "git://git.freescale.com/ppc/sdk/fm-ucode.git"
28SRCREV = "f4a43e8ad6a6e5fdedff6e1484386f963bccfdff"
29
30S = "${WORKDIR}/git"
31
32ALLOW_EMPTY_${PN} = "1"
33do_install () {
34 install -d ${D}/boot
35 install -m 644 ${FMAN_UCODE_INSTALL_FILE}*.bin ${D}/boot/
36}
37
38do_deploy () {
39 install -d ${DEPLOYDIR}/
40 install -m 644 ${FMAN_UCODE_INSTALL_FILE}*.bin ${DEPLOYDIR}/
41}
42addtask deploy before do_build after do_install
43
44PACKAGES += "${PN}-image"
45FILES_${PN}-image += "/boot"
46
diff --git a/recipes-bsp/i2c-tools/i2c-tools-3.0.3/Module.mk b/recipes-bsp/i2c-tools/i2c-tools-3.0.3/Module.mk
new file mode 100644
index 0000000..fcaf72f
--- /dev/null
+++ b/recipes-bsp/i2c-tools/i2c-tools-3.0.3/Module.mk
@@ -0,0 +1,72 @@
1# EEPROMER
2#
3# Licensed under the GNU General Public License.
4
5EEPROMER_DIR := eepromer
6
7EEPROMER_CFLAGS := -Wstrict-prototypes -Wshadow -Wpointer-arith -Wcast-qual \
8 -Wcast-align -Wwrite-strings -Wnested-externs -Winline \
9 -W -Wundef -Wmissing-prototypes -Iinclude
10
11EEPROMER_TARGETS := eepromer eeprom eeprog
12
13#
14# Programs
15#
16
17$(EEPROMER_DIR)/eepromer: $(EEPROMER_DIR)/eepromer.o
18 $(CC) $(LDFLAGS) -o $@ $^
19
20$(EEPROMER_DIR)/eeprom: $(EEPROMER_DIR)/eeprom.o
21 $(CC) $(LDFLAGS) -o $@ $^
22
23$(EEPROMER_DIR)/eeprog: $(EEPROMER_DIR)/eeprog.o $(EEPROMER_DIR)/24cXX.o
24 $(CC) $(LDFLAGS) -o $@ $^
25
26#
27# Objects
28#
29
30$(EEPROMER_DIR)/eepromer.o: $(EEPROMER_DIR)/eepromer.c
31 $(CC) $(CFLAGS) $(EEPROMER_CFLAGS) -c $< -o $@
32
33$(EEPROMER_DIR)/eeprom.o: $(EEPROMER_DIR)/eeprom.c
34 $(CC) $(CFLAGS) $(EEPROMER_CFLAGS) -c $< -o $@
35
36$(EEPROMER_DIR)/eeprog.o: $(EEPROMER_DIR)/eeprog.c
37 $(CC) $(CFLAGS) $(EEPROMER_CFLAGS) -c $< -o $@
38
39$(EEPROMER_DIR)/24cXX.o: $(EEPROMER_DIR)/24cXX.c
40 $(CC) $(CFLAGS) $(EEPROMER_CFLAGS) -c $< -o $@
41
42#
43# Commands
44#
45
46all-eepromer: $(addprefix $(EEPROMER_DIR)/,$(EEPROMER_TARGETS))
47
48strip-eepromer: $(addprefix $(EEPROMER_DIR)/,$(EEPROMER_TARGETS))
49 strip $(addprefix $(EEPROMER_DIR)/,$(EEPROMER_TARGETS))
50
51clean-eepromer:
52 $(RM) $(addprefix $(EEPROMER_DIR)/,*.o $(EEPROMER_TARGETS))
53
54install-eepromer: $(addprefix $(EEPROMER_DIR)/,$(EEPROMER_TARGETS))
55 $(INSTALL_DIR) $(DESTDIR)$(sbindir) $(DESTDIR)$(man8dir)
56 for program in $(EEPROMER_TARGETS) ; do \
57 $(INSTALL_PROGRAM) $(EEPROMER_DIR)/$$program $(DESTDIR)$(sbindir) ; done
58
59uninstall-eepromer:
60 for program in $(EEPROMER_TARGETS) ; do \
61 $(RM) $(DESTDIR)$(sbindir)/$$program ; \
62 $(RM) $(DESTDIR)$(man8dir)/$$program.8 ; done
63
64all: all-eepromer
65
66strip: strip-eepromer
67
68clean: clean-eepromer
69
70install: install-eepromer
71
72uninstall: uninstall-eepromer
diff --git a/recipes-bsp/i2c-tools/i2c-tools_3.0.3.bb b/recipes-bsp/i2c-tools/i2c-tools_3.0.3.bb
new file mode 100644
index 0000000..021090c
--- /dev/null
+++ b/recipes-bsp/i2c-tools/i2c-tools_3.0.3.bb
@@ -0,0 +1,24 @@
1DESCRIPTION = "Set of i2c tools for linux"
2SECTION = "base"
3LICENSE = "GPLv2"
4LIC_FILES_CHKSUM = "file://COPYING;md5=751419260aa954499f7abaabaa882bbe"
5
6SRC_URI = "http://dl.lm-sensors.org/i2c-tools/releases/i2c-tools-${PV}.tar.bz2 \
7 file://Module.mk \
8 "
9SRC_URI[md5sum] = "511376eed04455cdb277ef19c5f73bb4"
10SRC_URI[sha256sum] = "23b28e474741834e3f1b35b0686528769a13adc92d2ff5603cbda1d6bd5e5629"
11
12inherit autotools
13
14do_compile_prepend() {
15 cp ${WORKDIR}/Module.mk ${S}/eepromer/
16 sed -i 's#/usr/local#/usr#' Makefile
17 echo "include eepromer/Module.mk" >> Makefile
18}
19
20do_install_append() {
21 install -d ${D}${includedir}/linux
22 install -m 0644 include/linux/i2c-dev.h ${D}${includedir}/linux/i2c-dev-user.h
23 rm -f ${D}${includedir}/linux/i2c-dev.h
24}
diff --git a/recipes-bsp/libuio/libuio/run-ptest b/recipes-bsp/libuio/libuio/run-ptest
new file mode 100644
index 0000000..46c80b5
--- /dev/null
+++ b/recipes-bsp/libuio/libuio/run-ptest
@@ -0,0 +1,3 @@
1#!/bin/sh
2echo "SKIP: no upstream test"
3
diff --git a/recipes-bsp/libuio/libuio_git.bb b/recipes-bsp/libuio/libuio_git.bb
new file mode 100644
index 0000000..6b004c7
--- /dev/null
+++ b/recipes-bsp/libuio/libuio_git.bb
@@ -0,0 +1,27 @@
1SUMMARY = "libUIO"
2DESCRIPTION = "Provide a generic framework for handling devices in userspace."
3HOMEPAGE = "https://www.osadl.org/UIO.uio.0.html"
4SECTION = "libs"
5LICENSE = "GPLv2"
6
7LIC_FILES_CHKSUM = "file://COPYING;md5=4fbd65380cdd255951079008b364516c"
8
9SRCREV = "cc233857ba1613801e7218d07127d19608a99702"
10PR = "r0"
11PV = "1.0+git${SRCPV}"
12
13SRC_URI = "git://git.linutronix.de/projects/libUIO;protocol=git \
14 file://run-ptest"
15
16DEPENDS = "virtual/libc"
17
18S = "${WORKDIR}/git"
19
20inherit autotools
21
22do_install_append () {
23 if [ "${PN}" = "${BPN}" -a ${PTEST_ENABLED} = "1" ]; then
24 mkdir -p ${D}${PTEST_PATH}
25 install -m 0755 ${WORKDIR}/run-ptest ${D}${PTEST_PATH}
26 fi
27}
diff --git a/recipes-bsp/rtl8168/files/r8168-8.031.00.tar.bz2 b/recipes-bsp/rtl8168/files/r8168-8.031.00.tar.bz2
new file mode 100644
index 0000000..114d5a1
--- /dev/null
+++ b/recipes-bsp/rtl8168/files/r8168-8.031.00.tar.bz2
Binary files differ
diff --git a/recipes-bsp/rtl8168/rtl8168_8.031.00.bb b/recipes-bsp/rtl8168/rtl8168_8.031.00.bb
new file mode 100644
index 0000000..e5831c6
--- /dev/null
+++ b/recipes-bsp/rtl8168/rtl8168_8.031.00.bb
@@ -0,0 +1,35 @@
1SUMMARY = "RTL8111/8168 PCI Express 10/100/1000M Gigabit Ethernet"
2DESCRIPTION = "http://www.realtek.com.tw/"
3SECTION = "kernel/modules"
4
5LICENSE = "GPLv2"
6LIC_FILES_CHKSUM = "file://Makefile;md5=27208bd930c8f7f55db149f659059e10"
7
8DEPENDS = "linux-libc-headers module-init-tools"
9
10SRC_URI = "file://r8168-${PV}.tar.bz2"
11
12SRC_URI[md5sum] = "ec1654f02e2dad930bbeb0210ddab7e5"
13SRC_URI[sha256sum] = "5c617b3c08aca18d1eb24d33f77df40020eb64fb32c8e4008265e08b7ffe5779"
14
15S = "${WORKDIR}/r8168-${PV}/src"
16
17inherit module
18
19do_compile () {
20 cd ${S}
21 do_make_scripts
22 unset CFLAGS CPPFLAGS CXXFLAGS LDFLAGS
23 oe_runmake KERNELDIR=${STAGING_KERNEL_DIR} \
24 KERNEL_SRC=${STAGING_KERNEL_DIR} \
25 KERNEL_VERSION=${KERNEL_VERSION} \
26 CC="${KERNEL_CC}" LD="${KERNEL_LD}" \
27 AR="${KERNEL_AR}" \
28 modules
29}
30
31do_install () {
32 mkdir -p ${D}/lib/modules/${KERNEL_VERSION}/kernel/drivers/net
33 cp ${S}/*ko ${D}/lib/modules/${KERNEL_VERSION}/kernel/drivers/net
34}
35
diff --git a/recipes-core/packagegroups/packagegroup-core-standalone-sdk-target.bbappend b/recipes-core/packagegroups/packagegroup-core-standalone-sdk-target.bbappend
new file mode 100644
index 0000000..3e1516c
--- /dev/null
+++ b/recipes-core/packagegroups/packagegroup-core-standalone-sdk-target.bbappend
@@ -0,0 +1 @@
RDEPENDS_${PN} += "libstdc++-staticdev eglibc-staticdev"
diff --git a/recipes-core/packagegroups/packagegroup-enea-core-boot.bb b/recipes-core/packagegroups/packagegroup-enea-core-boot.bb
new file mode 100644
index 0000000..9006a3d
--- /dev/null
+++ b/recipes-core/packagegroups/packagegroup-enea-core-boot.bb
@@ -0,0 +1,65 @@
1#
2# Copyright (C) 2007 OpenedHand Ltd.
3#
4
5SUMMARY = "Minimal boot requirements"
6DESCRIPTION = "The minimal and busybox set of packages required to boot the system"
7LICENSE = "MIT"
8DEPENDS = "virtual/kernel"
9PR = "r11"
10
11inherit packagegroup
12
13PACKAGE_ARCH = "${MACHINE_ARCH}"
14
15#
16# Set by the machine configuration with packages essential for device bootup
17#
18MACHINE_ESSENTIAL_EXTRA_RDEPENDS ?= ""
19MACHINE_ESSENTIAL_EXTRA_RRECOMMENDS ?= ""
20
21# For backwards compatibility after rename
22RPROVIDES_${PN} = "task-core-boot"
23RREPLACES_${PN} = "task-core-boot"
24RCONFLICTS_${PN} = "task-core-boot"
25
26# Distro can override the following VIRTUAL-RUNTIME providers:
27VIRTUAL-RUNTIME_dev_manager ?= "udev"
28VIRTUAL-RUNTIME_login_manager ?= "busybox"
29VIRTUAL-RUNTIME_init_manager ?= "sysvinit"
30VIRTUAL-RUNTIME_initscripts ?= "initscripts"
31VIRTUAL-RUNTIME_keymaps ?= "keymaps"
32
33RDEPENDS_${PN} += "\
34 base-files \
35 base-passwd \
36 ${@base_contains("MACHINE_FEATURES", "keyboard", "${VIRTUAL-RUNTIME_keymaps}", "", d)} \
37 modutils-initscripts \
38 netbase \
39 init-ifupdown \
40 ${VIRTUAL-RUNTIME_login_manager} \
41 ${VIRTUAL-RUNTIME_init_manager} \
42 ${VIRTUAL-RUNTIME_initscripts} \
43 ${VIRTUAL-RUNTIME_dev_manager} \
44 ${VIRTUAL-RUNTIME_update-alternatives} \
45 ${MACHINE_ESSENTIAL_EXTRA_RDEPENDS}"
46
47RDEPENDS_${PN}_append_fslmachine = " u-boot"
48RDEPENDS_${PN}_append_p2041 = " fm-ucode rcw"
49RDEPENDS_${PN}_append_p4080 = " fm-ucode rcw"
50RDEPENDS_${PN} += "\
51 busybox \
52 ${@base_contains("MACHINE_FEATURES", "rtc", "busybox-hwclock", "", d)} \
53 "
54
55RDEPENDS_${PN}_append_x86 = "\
56 kernel-vmlinux \
57 kernel \
58 "
59RDEPENDS_${PN}_append_x86-64 = "\
60 kernel-vmlinux \
61 kernel \
62 "
63
64RRECOMMENDS_${PN} = "\
65 ${MACHINE_ESSENTIAL_EXTRA_RRECOMMENDS}"
diff --git a/recipes-core/packagegroups/packagegroup-enea-ddt.bb b/recipes-core/packagegroups/packagegroup-enea-ddt.bb
new file mode 100644
index 0000000..86b5dfd
--- /dev/null
+++ b/recipes-core/packagegroups/packagegroup-enea-ddt.bb
@@ -0,0 +1,23 @@
1DESCRIPTION = "Package group for driver test"
2LICENSE = "MIT"
3LIC_FILES_CHKSUM = "file://${COREBASE}/LICENSE;md5=3f40d7994397109285ec7b81fdeb3b58 \
4 file://${COREBASE}/meta/COPYING.MIT;md5=3da9cfbcb788c80a0384361b4de20420"
5PR = "r0"
6
7inherit packagegroup
8
9RDEPENDS_${PN} = "\
10 hdparm \
11 rt-tests \
12 i2c-tools \
13 kernel-modules \
14 mtd-utils \
15 net-tools \
16 pciutils \
17 usbutils \
18 watchdog \
19 "
20
21RRECOMMENDS_${PN} = "\
22 ddt-runner \
23 "
diff --git a/recipes-core/packagegroups/packagegroup-enea-debug.bb b/recipes-core/packagegroups/packagegroup-enea-debug.bb
new file mode 100644
index 0000000..ea67190
--- /dev/null
+++ b/recipes-core/packagegroups/packagegroup-enea-debug.bb
@@ -0,0 +1,36 @@
1DESCRIPTION = "Tools package group for OE-Core"
2LICENSE = "MIT"
3LIC_FILES_CHKSUM = "file://${COREBASE}/LICENSE;md5=3f40d7994397109285ec7b81fdeb3b58 \
4 file://${COREBASE}/meta/COPYING.MIT;md5=3da9cfbcb788c80a0384361b4de20420"
5PR = "r0"
6
7PACKAGES = "\
8 ${PN} \
9 ${PN}-dbg \
10 ${PN}-dev \
11 "
12
13PACKAGE_ARCH = "${MACHINE_ARCH}"
14
15ALLOW_EMPTY_${PN} = "1"
16
17# systemtap needs elfutils which is not fully buildable on uclibc
18# hence we exclude it from uclibc based builds
19SYSTEMTAP = "systemtap"
20SYSTEMTAP_libc-uclibc = ""
21
22# kexec-tools doesn't work on Mips
23KEXECTOOLS ?= "kexec-tools"
24KEXECTOOLS_mips ?= ""
25KEXECTOOLS_mipsel ?= ""
26# No need to remove kexec-tools from powerpc
27#KEXECTOOLS_powerpc ?= ""
28
29RDEPENDS_${PN} = "\
30 gdb \
31 gdbserver \
32 tcf-agent \
33 rsync \
34 strace \
35 ${SYSTEMTAP} \
36 "
diff --git a/recipes-core/packagegroups/packagegroup-enea-profile.bb b/recipes-core/packagegroups/packagegroup-enea-profile.bb
new file mode 100644
index 0000000..bc9bf43
--- /dev/null
+++ b/recipes-core/packagegroups/packagegroup-enea-profile.bb
@@ -0,0 +1,66 @@
1DESCRIPTION = "Profiling package grooup for OE-Core"
2LICENSE = "MIT"
3LIC_FILES_CHKSUM = "file://${COREBASE}/LICENSE;md5=3f40d7994397109285ec7b81fdeb3b58 \
4 file://${COREBASE}/meta/COPYING.MIT;md5=3da9cfbcb788c80a0384361b4de20420"
5PR = "r0"
6
7inherit pkgconfig
8
9PACKAGES = "\
10 ${PN} \
11 ${PN}-dbg \
12 ${PN}-dev \
13 "
14
15PACKAGE_ARCH = "${MACHINE_ARCH}"
16
17ALLOW_EMPTY_${PN} = "1"
18
19
20# dany: oprofileui-server
21# lttng-viewer
22# latencytop
23# removed due to their x11 dependency.
24#
25# dany: blktrace
26# sysprof
27# removed due to their x11 dependency.
28RDEPENDS_${PN} = "\
29 oprofile \
30 ${LTTNG} \
31 "
32
33LTTNG ?= "\
34 lttng-tools \
35 lttng-modules \
36 lttng-ust \
37 "
38LTTNG_armv6 ?= ""
39
40# comment out perf since it can not been built in linux-2.6.33.9 kernel
41# perf
42
43# Will fail without a debug flavoured kernel
44# kernel-module-oprofile"
45
46# lttng-ust uses sched_getcpu() which is not there on uclibc
47# for some of the architectures it can be patched to call the
48# syscall directly but for x86_64 __NR_getcpu is a vsyscall
49# which means we can not use syscall() to call it. So we ignore
50# it for x86_64/uclibc
51
52LTTNGUST = "lttng-ust"
53LTTNGUST_libc-uclibc = ""
54
55# exmap-console
56# exmap-server
57
58# At present we only build lttng-ust on
59# qemux86/qemux86-64/qemuppc/qemuarm/emenlow/atom-pc since upstream liburcu
60# (which is required by lttng-ust) may not build on other platforms, like
61# MIPS.
62RDEPENDS_${PN}_append_qemux86 = " valgrind lttng-ust"
63RDEPENDS_${PN}_append_qemux86-64 = " ${LTTNGUST}"
64RDEPENDS_${PN}_append_qemuppc = " ${LTTNGUST}"
65RDEPENDS_${PN}_append_qemuarm = " ${LTTNGUST}"
66RDEPENDS_${PN}_append_powerpc = " ${LTTNGUST}"
diff --git a/recipes-core/packagegroups/packagegroup-enea-ptest.bb b/recipes-core/packagegroups/packagegroup-enea-ptest.bb
new file mode 100644
index 0000000..3c61718
--- /dev/null
+++ b/recipes-core/packagegroups/packagegroup-enea-ptest.bb
@@ -0,0 +1,112 @@
1DESCRIPTION = "Ptest package group"
2LICENSE = "MIT"
3LIC_FILES_CHKSUM = "file://${COREBASE}/LICENSE;md5=3f40d7994397109285ec7b81fdeb3b58 \
4 file://${COREBASE}/meta/COPYING.MIT;md5=3da9cfbcb788c80a0384361b4de20420"
5PR = "r0"
6
7inherit packagegroup
8
9ENEA_DAEMONS = " \
10 at \
11 cronie \
12 "
13
14ENEA_DATABASE = " \
15 sqlite3 \
16 "
17
18ENEA_TRACE = " \
19 babeltrace \
20 ${VALGRIND} \
21 "
22
23VALGRIND ?= ""
24VALGRIND_powerpc ?= "valgrind"
25VALGRIND_e500v2 ?= ""
26VALGRIND_x86 ?= "valgrind"
27VALGRIND_x86_64 ?= "valgrind"
28VALGRIND_armv7a ?= "valgrind"
29
30ENEA_DEV = " \
31 eglibc-locale \
32 "
33
34ENEA_DEVICE = " \
35 libusb1-dbg \
36 libusb-compat-dbg \
37 usbutils \
38 "
39
40ENEA_FSYS = " \
41 acl \
42 pramfs-init \
43 "
44
45ENEA_HIGHAVA = " \
46 kexec \
47 kexec-tools \
48 "
49
50ENEA_LIBS = " \
51 gettext \
52 gettext-runtime \
53 libstdc++ \
54 libuio \
55 zlib \
56 "
57
58ENEA_MESSAGING = " \
59 dbus \
60 "
61
62ENEA_SCRIPTING = " \
63 tcl \
64 python \
65 "
66
67ENEA_SECURITY = " \
68 openssl"
69
70ENEA_SHELL = " \
71 ncurses"
72
73ENEA_UTILS = " \
74 bc \
75 bonnie++ \
76 expat \
77 "
78
79ENEA_GPL ?= " \
80 linx \
81 linx-mod \
82 "
83ENEA_GPL_qemux86 = ""
84ENEA_GPL_qemuppc = ""
85ENEA_GPL_armv5 = ""
86ENEA_GPL_armv7a = ""
87
88RDEPENDS_${PN} = " \
89 ${ENEA_DAEMONS} \
90 ${ENEA_DATABASE} \
91 ${ENEA_TRACE} \
92 ${ENEA_DEV} \
93 ${ENEA_DEVICE} \
94 ${ENEA_FSYS} \
95 ${ENEA_HIGHAVA} \
96 ${ENEA_LIBS} \
97 ${ENEA_MESSAGING} \
98 ${ENEA_SCRIPTING} \
99 ${ENEA_SECURITY} \
100 ${ENEA_SHELL} \
101 ${ENEA_UTILS} \
102 ${ENEA_GPL} \
103 ethtool \
104 libxml2 \
105 gdb \
106 elfutils \
107 "
108
109
110RRECOMMENDS_${PN} = " \
111 ptest-runner \
112 "
diff --git a/recipes-core/packagegroups/packagegroup-enea-sys.bb b/recipes-core/packagegroups/packagegroup-enea-sys.bb
new file mode 100644
index 0000000..bfed070
--- /dev/null
+++ b/recipes-core/packagegroups/packagegroup-enea-sys.bb
@@ -0,0 +1,18 @@
1DESCRIPTION = "Package group for system test"
2LICENSE = "MIT"
3LIC_FILES_CHKSUM = "file://${COREBASE}/LICENSE;md5=3f40d7994397109285ec7b81fdeb3b58 \
4 file://${COREBASE}/meta/COPYING.MIT;md5=3da9cfbcb788c80a0384361b4de20420"
5PR = "r0"
6
7inherit packagegroup
8
9RDEPENDS_${PN} = "\
10 ltp \
11 logrotate \
12 sudo \
13 perf-networking \
14 "
15
16RRECOMMENDS_${PN} = "\
17 systest-runner \
18 "
diff --git a/recipes-enea/linx/linx-2.6.5/liblinx_nobase.patch b/recipes-enea/linx/linx-2.6.5/liblinx_nobase.patch
new file mode 100644
index 0000000..05a4b7e
--- /dev/null
+++ b/recipes-enea/linx/linx-2.6.5/liblinx_nobase.patch
@@ -0,0 +1,29 @@
1From 5ea9763286eb43e01c4ef2f3db59e13367a77138 Mon Sep 17 00:00:00 2001
2From: jack zhang <jack.zhang@enea.com>
3Date: Mon, 17 Dec 2012 03:52:11 +0100
4Subject: [PATCH] LXCR-995 As an Enea sales person, I want LINX added to Enea
5 Linux
6Signed-off-by: jack zhang <jack.zhang@enea.com>
7
8 Upstream-Status: Pending
9 For details, see LINXCR-1518
10---
11 liblinx/Makefile.am | 2 +-
12 1 files changed, 1 insertions(+), 1 deletions(-)
13
14diff --git a/liblinx/Makefile.am b/liblinx/Makefile.am
15index 8559e43..3ce47d6 100644
16--- a/liblinx/Makefile.am
17+++ b/liblinx/Makefile.am
18@@ -47,7 +47,7 @@ dist_man7_MANS = $(LINXROOT)/doc/man7/linx.7
19
20 include $(LINXROOT)/flags.am
21
22-include_HEADERS = \
23+nobase_include_HEADERS = \
24 $(LINXROOT)/include/linx.h \
25 $(LINXROOT)/include/linx_ioctl.h \
26 $(LINXROOT)/include/linx_socket.h \
27--
281.7.5.4
29
diff --git a/recipes-enea/linx/linx-2.6.5/linxcfg_nobase.patch b/recipes-enea/linx/linx-2.6.5/linxcfg_nobase.patch
new file mode 100644
index 0000000..af4b477
--- /dev/null
+++ b/recipes-enea/linx/linx-2.6.5/linxcfg_nobase.patch
@@ -0,0 +1,38 @@
1From a3b3dc8117490ddfcc2081fca5ff663e4157a106 Mon Sep 17 00:00:00 2001
2From: jack zhang <jack.zhang@enea.com>
3Date: Mon, 17 Dec 2012 03:57:15 +0100
4Subject: [PATCH] LXCR-995 As an Enea sales person, I want LINX added to Enea
5 Linux
6Signed-off-by: jack zhang <jack.zhang@enea.com>
7
8 Upstream-Status: Pending
9 For details, see LINXCR-1518
10---
11 linxcfg/Makefile.am | 4 +---
12 1 files changed, 1 insertions(+), 3 deletions(-)
13
14diff --git a/linxcfg/Makefile.am b/linxcfg/Makefile.am
15index 9fc8e84..287c71b 100644
16--- a/linxcfg/Makefile.am
17+++ b/linxcfg/Makefile.am
18@@ -24,16 +24,14 @@ dist_man1_MANS = \
19 $(LINXROOT)/doc/man1/mkcmclcon.1 \
20 $(LINXROOT)/doc/man1/rmcmclcon.1
21
22-include_HEADERS = \
23+nobase_include_HEADERS = \
24 $(LINXROOT)/include/linxcfg.h \
25 $(LINXROOT)/include/linux/ethcm_db_ioctl.h \
26 $(LINXROOT)/include/linux/rlnh_db_ioctl.h \
27 $(LINXROOT)/include/linux/tcpcm_db_ioctl.h \
28 $(LINXROOT)/include/linux/shmcm_db_ioctl.h \
29- $(LINXROOT)/include/linux/riocm_db_ioctl.h \
30 $(LINXROOT)/include/linux/cmcl_db_ioctl.h \
31 $(LINXROOT)/include/linux/riocm_db_ioctl.h \
32- $(LINXROOT)/include/linux/cmcl_db_ioctl.h \
33 $(LINXROOT)/include/db_ioctl.h \
34 $(LINXROOT)/include/ethcm_db_ioctl.h \
35 $(LINXROOT)/include/rlnh_db_ioctl.h \
36--
371.7.5.4
38
diff --git a/recipes-enea/linx/linx-mod-2.6.5/linx-kernel-modules.patch b/recipes-enea/linx/linx-mod-2.6.5/linx-kernel-modules.patch
new file mode 100644
index 0000000..f29019b
--- /dev/null
+++ b/recipes-enea/linx/linx-mod-2.6.5/linx-kernel-modules.patch
@@ -0,0 +1,288 @@
1Use KERNEL_SRC and modules_install to get use of pokys build kernel modules.
2fix version.h problem.
3
4Signed-off-by: Anders Roxell <anders.roxell@enea.com>
5
6Upstream-status: Pending
7---
8diff -uNr a/cmcl/Makefile b/cmcl/Makefile
9--- a/cmcl/Makefile 2013-02-25 15:46:59.777325274 +0100
10+++ b/cmcl/Makefile 2013-02-25 15:57:22.038398316 +0100
11@@ -3,8 +3,8 @@
12 LINX ?= $(CURDIR)/../../..
13 include $(LINX)/net/linx/config.mk
14
15-KERNEL_CODE := $(shell awk '/LINUX_VERSION_CODE/ {print $$3}' $(KERNEL)/include/linux/version.h)
16-VENDOR_VERSION := $(shell awk '/UTS_RELEASE/ {print $$3}' $(KERNEL)/include/linux/version.h)
17+KERNEL_CODE := $(shell awk '/LINUX_VERSION_CODE/ {print $$3}' $(KERNEL_SRC)/include/generated/utsrelease.h)
18+VENDOR_VERSION := $(shell awk '/UTS_RELEASE/ {print $$3}' $(KERNEL_SRC)/include/generated/utsrelease.h)
19
20 ifneq ($(VENDOR_VERSION), "")
21 EXTRA_CFLAGS += -DGFP_IS_INT
22@@ -38,15 +38,17 @@
23
24 linx_cmcl-y += cmcl.o
25
26+SRC := $(shell pwd)
27+
28 modules:
29- $(XMAKE) ARCH=$(ARCH) V=$(V) -C $(KERNEL) M=`pwd` modules
30+ $(XMAKE) ARCH=$(ARCH) V=$(V) -C $(KERNEL_SRC) M=$(SRC) modules
31 $(CP) linx_cmcl.ko ..
32
33 clean:
34- $(XMAKE) ARCH=$(ARCH) V=$(V) -C $(KERNEL) M=`pwd` clean
35+ $(XMAKE) ARCH=$(ARCH) V=$(V) -C $(KERNEL_SRC) M=$(SRC) clean
36 $(LINXRM) Module.symvers Module.markers modules.order ../linx_cmcl.ko
37
38-install: modules
39- $(XMAKE) ARCH=$(ARCH) V=$(V) -C $(KERNEL) M=`pwd` modules_install
40+modules_install: modules
41+ $(XMAKE) ARCH=$(ARCH) V=$(V) -C $(KERNEL_SRC) M=$(SRC) modules_install
42 depmod
43
44diff -uNr a/config.mk b/config.mk
45--- a/config.mk 2013-02-25 15:46:59.781325113 +0100
46+++ b/config.mk 2013-02-25 16:13:30.672459997 +0100
47@@ -3,7 +3,7 @@
48 # CROSS_COMPILE is cross compiler prefix (including full path)
49 CROSS_COMPILE ?=
50 # KERNEL is the path to your kernel sources
51-KERNEL ?=
52+KERNEL_SRC ?=
53
54 # Host architecture
55 HOST_ARCH ?= $(patsubst i%86,i386,$(shell uname -m))
56@@ -26,13 +26,13 @@
57 endif
58
59 ifeq ($(ARCH),$(HOST_ARCH))
60-ifndef KERNEL
61-KERNEL := $(HOST_KERNEL)
62+ifndef KERNEL_SRC
63+KERNEL_SRC := $(HOST_KERNEL)
64 endif
65 else
66-ifndef KERNEL
67+ifndef KERNEL_SRC
68 ifdef NEED_KERNEL
69-$(error Please define KERNEL.)
70+$(error Please define KERNEL_SRC.)
71 endif
72 endif
73 endif
74@@ -53,8 +53,8 @@
75 ifdef CROSS_COMPILE
76 $(ECHO) "# CROSS_COMPILE=$(CROSS_COMPILE)"
77 endif
78-ifdef KERNEL
79- $(ECHO) "# KERNEL=$(KERNEL)"
80+ifdef KERNEL_SRC
81+ $(ECHO) "# KERNEL_SRC=$(KERNEL_SRC)"
82 endif
83 ifdef VERBOSE
84 $(ECHO) "# VERBOSE=$(VERBOSE)"
85@@ -62,7 +62,7 @@
86 $(ECHO) "# VERBOSE=no"
87 endif
88
89-export ARCH CROSS_COMPILE KERNEL LINX
90+export ARCH CROSS_COMPILE KERNEL_SRC LINX
91
92 .PHONY: echo_config
93
94@@ -117,5 +117,5 @@
95 # in the mercury linux distribution.
96 EXTRA_CFLAGS += -I$(KDIR)/arch/ppc -DRLNH_ALIGN_ANY
97 else # x86
98-KDIR := /lib/modules/$(shell uname -r)/build
99+KDIR := /lib/modules/$(KERNEL_VERSION)/build
100 endif
101diff -uNr a/ecm/Makefile b/ecm/Makefile
102--- a/ecm/Makefile 2013-02-25 15:46:59.781325113 +0100
103+++ b/ecm/Makefile 2013-02-25 16:11:13.754388313 +0100
104@@ -5,8 +5,8 @@
105 LINX ?= $(CURDIR)/../../..
106 include $(LINX)/net/linx/config.mk
107
108-KERNEL_CODE := $(shell awk '/LINUX_VERSION_CODE/ {print $$3}' $(KERNEL)/include/linux/version.h)
109-VENDOR_VERSION := $(shell awk '/UTS_RELEASE/ {print $$3}' $(KERNEL)/include/linux/version.h)
110+KERNEL_CODE := $(shell awk '/LINUX_VERSION_CODE/ {print $$3}' $(KERNEL_SRC)/include/generated/utsrelease.h)
111+VENDOR_VERSION := $(shell awk '/UTS_RELEASE/ {print $$3}' $(KERNEL_SRC)/include/generated/utsrelease.h)
112
113 ifneq ($(VENDOR_VERSION), "")
114 EXTRA_CFLAGS += -DGFP_IS_INT
115@@ -43,14 +43,16 @@
116 linx_eth_cm-y += ecm_rx.o
117 linx_eth_cm-y += ecm_kutils.o
118
119+SRC := $(shell pwd)
120+
121 modules:
122- $(XMAKE) ARCH=$(ARCH) V=$(V) -C $(KERNEL) M=`pwd` modules
123+ $(XMAKE) ARCH=$(ARCH) V=$(V) -C $(KERNEL_SRC) M=$(SRC) modules
124 $(CP) linx_eth_cm.ko ..
125
126 clean:
127- $(XMAKE) ARCH=$(ARCH) V=$(V) -C $(KERNEL) M=`pwd` clean
128+ $(XMAKE) ARCH=$(ARCH) V=$(V) -C $(KERNEL_SRC) M=$(SRC) clean
129 $(LINXRM) Module.symvers Module.markers modules.order ../linx_eth_cm.ko
130
131-install: modules
132- $(XMAKE) ARCH=$(ARCH) V=$(V) -C $(KERNEL) M=`pwd` modules_install
133+modules_install: modules
134+ $(XMAKE) ARCH=$(ARCH) V=$(V) -C $(KERNEL_SRC) M=$(SRC) modules_install
135 depmod
136diff -uNr a/Makefile b/Makefile
137--- a/Makefile 2013-02-25 15:46:59.781325113 +0100
138+++ b/Makefile 2013-02-25 15:53:22.752757899 +0100
139@@ -63,9 +63,9 @@
140 2_6_11 := 132619
141
142 # Vendors version of kernel, needed to catch certain back patches
143-VENDOR_VERSION := $(shell awk '/UTS_RELEASE/ {print $$3}' $(KERNEL)/include/linux/version.h)
144+VENDOR_VERSION := $(shell awk '/UTS_RELEASE/ {print $$3}' $(KERNEL_SRC)/include/generated/utsrelease.h)
145 # Main line kernel version
146-KERNEL_CODE := $(shell awk '/LINUX_VERSION_CODE/ {print $$3}' $(KERNEL)/include/linux/version.h)
147+KERNEL_CODE := $(shell awk '/LINUX_VERSION_CODE/ {print $$3}' $(KERNEL_SRC)/include/generated/utsrelease.h)
148
149 #
150 # 'gt_or_eq'
151@@ -140,14 +140,16 @@
152 obj-y += riocm/
153 obj-y += cmcl/
154
155+SRC := $(shell pwd)
156+
157 modules:
158- $(XMAKE) ARCH=$(ARCH) V=$(V) -C $(KERNEL) M=`pwd` modules
159+ $(XMAKE) ARCH=$(ARCH) V=$(V) -C $(KERNEL_SRC) M=$(SRC) modules
160 $(CP) */*.ko .
161 clean:
162- $(XMAKE) ARCH=$(ARCH) V=$(V) -C $(KERNEL) M=`pwd` clean
163+ $(XMAKE) ARCH=$(ARCH) V=$(V) -C $(KERNEL_SRC) M=$(SRC) clean
164 $(LINXRM) Module.symvers Module.markers modules.order
165
166-install: modules
167- $(XMAKE) ARCH=$(ARCH) V=$(V) -C $(KERNEL) M=`pwd` modules_install
168+modules_install: modules
169+ $(XMAKE) ARCH=$(ARCH) V=$(V) -C $(KERNEL_SRC) M=$(SRC) modules_install
170 depmod
171
172diff -uNr a/riocm/Makefile b/riocm/Makefile
173--- a/riocm/Makefile 2013-02-25 15:46:59.781325113 +0100
174+++ b/riocm/Makefile 2013-02-25 16:05:33.381125565 +0100
175@@ -5,8 +5,8 @@
176 LINX ?= $(CURDIR)/../../..
177 include $(LINX)/net/linx/config.mk
178
179-KERNEL_CODE := $(shell awk '/LINUX_VERSION_CODE/ {print $$3}' $(KERNEL)/include/linux/version.h)
180-VENDOR_VERSION := $(shell awk '/UTS_RELEASE/ {print $$3}' $(KERNEL)/include/linux/version.h)
181+KERNEL_CODE := $(shell awk '/LINUX_VERSION_CODE/ {print $$3}' $(KERNEL_SRC)/include/generated/utsrelease.h)
182+VENDOR_VERSION := $(shell awk '/UTS_RELEASE/ {print $$3}' $(KERNEL_SRC)/include/generated/utsrelease.h)
183
184 ifneq ($(VENDOR_VERSION), "")
185 EXTRA_CFLAGS += -DGFP_IS_INT
186@@ -43,15 +43,17 @@
187 linx_rio_cm-y += rio_rx.o
188 linx_rio_cm-y += rio_kutils.o
189
190+SRC := $(shell pwd)
191+
192 modules:
193- $(XMAKE) ARCH=$(ARCH) V=$(V) -C $(KERNEL) M=`pwd` modules
194+ $(XMAKE) ARCH=$(ARCH) V=$(V) -C $(KERNEL_SRC) M=$(SRC) modules
195 $(CP) linx_rio_cm.ko ..
196
197 clean:
198- $(XMAKE) ARCH=$(ARCH) V=$(V) -C $(KERNEL) M=`pwd` clean
199+ $(XMAKE) ARCH=$(ARCH) V=$(V) -C $(KERNEL_SRC) M=$(SRC) clean
200 $(LINXRM) Module.symvers Module.markers modules.order ../linx_rio_cm.ko
201
202-install: modules
203- $(XMAKE) ARCH=$(ARCH) V=$(V) -C $(KERNEL) M=`pwd` modules_install
204+modules_install: modules
205+ $(XMAKE) ARCH=$(ARCH) V=$(V) -C $(KERNEL_SRC) M=$(SRC) modules_install
206 depmod
207
208diff -uNr a/shmcm/Makefile b/shmcm/Makefile
209--- a/shmcm/Makefile 2013-02-25 15:46:59.781325113 +0100
210+++ b/shmcm/Makefile 2013-02-25 16:03:58.113250295 +0100
211@@ -5,8 +5,8 @@
212 LINX ?= $(CURDIR)/../../..
213 include $(LINX)/net/linx/config.mk
214
215-KERNEL_CODE := $(shell awk '/LINUX_VERSION_CODE/ {print $$3}' $(KERNEL)/include/linux/version.h)
216-VENDOR_VERSION := $(shell awk '/UTS_RELEASE/ {print $$3}' $(KERNEL)/include/linux/version.h)
217+KERNEL_CODE := $(shell awk '/LINUX_VERSION_CODE/ {print $$3}' $(KERNEL_SRC)/include/generated/utsrelease.h)
218+VENDOR_VERSION := $(shell awk '/UTS_RELEASE/ {print $$3}' $(KERNEL_SRC)/include/generated/utsrelease.h)
219
220 ifneq ($(VENDOR_VERSION), "")
221 EXTRA_CFLAGS += -DGFP_IS_INT
222@@ -60,7 +60,7 @@
223 -I$(LINX)/net/linx/include \
224 -I$(LINX)/net/linx/shmcm
225
226-INSTALLDIR = /lib/modules/`uname -r`/kernel/net/linx
227+INSTALLDIR = /lib/modules/$(KERNEL_VERSION)/kernel/net/linx
228 MODULES = linx_shm_cm.ko
229
230 obj-m := linx_shm_cm.o
231@@ -70,15 +70,17 @@
232 linx_shm_cm-y += shmcm_tx.o
233 linx_shm_cm-y += shmcm_kutils.o
234
235+SRC := $(shell pwd)
236+
237 modules:
238- $(XMAKE) ARCH=$(ARCH) V=$(V) -C $(KERNEL) M=`pwd` modules
239+ $(XMAKE) ARCH=$(ARCH) V=$(V) -C $(KERNEL_SRC) M=$(SRC) modules
240 $(CP) linx_shm_cm.ko ..
241
242 clean:
243- $(XMAKE) ARCH=$(ARCH) V=$(V) -C $(KERNEL) M=`pwd` clean
244+ $(XMAKE) ARCH=$(ARCH) V=$(V) -C $(KERNEL_SRC) M=$(SRC) clean
245 $(LINXRM) Module.symvers Module.markers modules.order ../linx_shm_cm.ko
246
247-install: modules
248- $(XMAKE) ARCH=$(ARCH) V=$(V) -C $(KERNEL) M=`pwd` modules_install
249+modules_install: modules
250+ $(XMAKE) ARCH=$(ARCH) V=$(V) -C $(KERNEL_SRC) M=$(SRC) modules_install
251 depmod
252
253diff -uNr a/tcp_cm/Makefile b/tcp_cm/Makefile
254--- a/tcp_cm/Makefile 2013-02-25 15:46:59.781325113 +0100
255+++ b/tcp_cm/Makefile 2013-02-25 16:10:09.097187839 +0100
256@@ -3,8 +3,8 @@
257 LINX ?= $(CURDIR)/../../..
258 include $(LINX)/net/linx/config.mk
259
260-KERNEL_CODE := $(shell awk '/LINUX_VERSION_CODE/ {print $$3}' $(KERNEL)/include/linux/version.h)
261-VENDOR_VERSION := $(shell awk '/UTS_RELEASE/ {print $$3}' $(KERNEL)/include/linux/version.h)
262+KERNEL_CODE := $(shell awk '/LINUX_VERSION_CODE/ {print $$3}' $(KERNEL_SRC)/include/generated/utsrelease.h)
263+VENDOR_VERSION := $(shell awk '/UTS_RELEASE/ {print $$3}' $(KERNEL_SRC)/include/generated/utsrelease.h)
264
265 ifneq ($(VENDOR_VERSION), "")
266 EXTRA_CFLAGS += -DGFP_IS_INT
267@@ -38,15 +38,17 @@
268
269 linx_tcp_cm-y += tcp_cm.o
270
271+SRC := $(shell pwd)
272+
273 modules:
274- $(XMAKE) ARCH=$(ARCH) V=$(V) -C $(KERNEL) M=`pwd` modules
275+ $(XMAKE) ARCH=$(ARCH) V=$(V) -C $(KERNEL_SRC) M=$(SRC) modules
276 $(CP) linx_tcp_cm.ko ..
277
278 clean:
279- $(XMAKE) ARCH=$(ARCH) V=$(V) -C $(KERNEL) M=`pwd` clean
280+ $(XMAKE) ARCH=$(ARCH) V=$(V) -C $(KERNEL_SRC) M=$(SRC) clean
281 $(LINXRM) Module.symvers Module.markers modules.order ../linx_tcp_cm.ko
282
283-install: modules
284- $(XMAKE) ARCH=$(ARCH) V=$(V) -C $(KERNEL) M=`pwd` modules_install
285+modules_install: modules
286+ $(XMAKE) ARCH=$(ARCH) V=$(V) -C $(KERNEL_SRC) M=$(SRC) modules_install
287 depmod
288
diff --git a/recipes-enea/linx/linx-mod-2.6.5/support-for-3.11-kernel-versions.patch b/recipes-enea/linx/linx-mod-2.6.5/support-for-3.11-kernel-versions.patch
new file mode 100644
index 0000000..d6f9106
--- /dev/null
+++ b/recipes-enea/linx/linx-mod-2.6.5/support-for-3.11-kernel-versions.patch
@@ -0,0 +1,206 @@
1From 20294330f08283d28b6092b568156e29b1792328 Mon Sep 17 00:00:00 2001
2From: Adrian Dudau <adrian.dudau@enea.com>
3Date: Thu, 12 Dec 2013 11:23:24 +0100
4Subject: [PATCH] support for 3.11 kernel versions
5
6Fixed NULL pointer dereference in ecm_conn.c
7
8Signed-off-by: Adrian Dudau <adrian.dudau@enea.com>
9---
10 cfg/db_proc.c | 23 ++++++++++++++++++-----
11 ecm/ecm_conn.c | 11 ++++++++---
12 ipc/hunt.c | 24 ++++++++++++++++++++++++
13 3 files changed, 50 insertions(+), 8 deletions(-)
14
15diff --git a/cfg/db_proc.c b/cfg/db_proc.c
16index c062a3d..bad0353 100644
17--- a/cfg/db_proc.c
18+++ b/cfg/db_proc.c
19@@ -41,6 +41,12 @@
20 #include "db_format.h"
21 #include <asm/uaccess.h>
22
23+#if (LINUX_VERSION_CODE >= KERNEL_VERSION(3, 10, 0))
24+#define PDE_INODE_NAME(inode) PDE_DATA(inode)
25+#else
26+#define PDE_INODE_NAME(inode) PDE(inode)->name
27+#endif
28+
29 struct db_seq {
30 const struct db_template *template;
31 struct list_head *list;
32@@ -148,11 +154,11 @@ static int db_proc_open(struct inode *inode, struct file *file)
33 if (status != 0)
34 goto out_20;
35
36- status = db_template_get(PDE(inode)->name, &p->template);
37+ status = db_template_get(PDE_INODE_NAME(inode), &p->template);
38 if (status != 0)
39 goto out_20;
40
41- status = db_list_get(PDE(inode)->name, &p->list);
42+ status = db_list_get(PDE_INODE_NAME(inode), &p->list);
43 if (status != 0)
44 goto out_10;
45
46@@ -161,7 +167,7 @@ static int db_proc_open(struct inode *inode, struct file *file)
47 return 0;
48
49 out_10:
50- db_template_put(PDE(inode)->name, &p->template);
51+ db_template_put(PDE_INODE_NAME(inode), &p->template);
52 out_20:
53 kfree(p);
54 return status;
55@@ -217,11 +223,11 @@ static int db_proc_release(struct inode *inode, struct file *file)
56 s = file->private_data;
57 p = s->private;
58
59- status = db_list_put(PDE(inode)->name, &p->list);
60+ status = db_list_put(PDE_INODE_NAME(inode), &p->list);
61 if (status != 0)
62 return status;
63
64- status = db_template_put(PDE(inode)->name, &p->template);
65+ status = db_template_put(PDE_INODE_NAME(inode), &p->template);
66 if (status != 0)
67 return status;
68
69@@ -258,14 +264,21 @@ int db_proc_add(const char *name)
70 {
71 struct proc_dir_entry *pde;
72
73+#if LINUX_VERSION_CODE >= KERNEL_VERSION(3, 10, 0)
74+ pde = proc_create_data(name, 0777, db_proc_root,
75+ &db_proc_file_ops, (void *)name);
76+#else
77 pde = create_proc_entry(name, 0777, db_proc_root);
78+#endif
79 if (pde == NULL)
80 return -EINVAL;
81
82 #if LINUX_VERSION_CODE < KERNEL_VERSION(2, 6, 29)
83 pde->owner = THIS_MODULE;
84 #endif
85+#if LINUX_VERSION_CODE < KERNEL_VERSION(3, 10, 0)
86 pde->proc_fops = &db_proc_file_ops;
87+#endif
88 return 0;
89 }
90 EXPORT_SYMBOL(db_proc_add);
91diff --git a/ecm/ecm_conn.c b/ecm/ecm_conn.c
92index aaf5161..b81abd1 100644
93--- a/ecm/ecm_conn.c
94+++ b/ecm/ecm_conn.c
95@@ -905,8 +905,9 @@ static void free_ecm_connection(struct RlnhLinkObj *co)
96 {
97 /* Undo alloc_ecm_connection(). */
98 if (co != NULL) {
99- if (list_empty(&co->ecm_dev->conn_list))
100- dev_remove_pack(&co->ecm_dev->pt);
101+ if (co->ecm_dev != NULL)
102+ if (list_empty(&co->ecm_dev->conn_list))
103+ dev_remove_pack(&co->ecm_dev->pt);
104 if (co->con_name != NULL)
105 kfree(co->con_name);
106 if (co->dev_name != NULL)
107@@ -1315,7 +1316,11 @@ static int net_event(struct notifier_block *nb, unsigned long event, void *data)
108 struct ecm_work_net_event *p;
109
110 (void)nb;
111- dev = data;
112+#if (LINUX_VERSION_CODE >= KERNEL_VERSION(3,11,0))
113+ dev = netdev_notifier_info_to_dev(data);
114+#else
115+ dev = data;
116+#endif
117
118 w = alloc_ecm_work(sizeof(*p), ECM_WORK_NET_EVENT, GFP_KERNEL);
119 if (w == NULL)
120diff --git a/ipc/hunt.c b/ipc/hunt.c
121index 843a893..f4564eb 100644
122--- a/ipc/hunt.c
123+++ b/ipc/hunt.c
124@@ -743,7 +743,9 @@ static inline struct sock *__locate_name(const char *name,
125 unsigned hash, uint32_t hunter_spid)
126 {
127 struct sock *s, *s_found = NULL;
128+#if (LINUX_VERSION_CODE < KERNEL_VERSION(3,9,0))
129 struct hlist_node *node;
130+#endif
131
132 linx_trace_enter(LINX_TRACEGROUP_IPC,
133 "%s, %d, 0x%x, 0x%x", name, len, hash, hunter_spid);
134@@ -753,7 +755,11 @@ static inline struct sock *__locate_name(const char *name,
135
136 /* Traverse the list of sockets in the specified hash slot to find a
137 match. */
138+#if (LINUX_VERSION_CODE >= KERNEL_VERSION(3,9,0))
139+ sk_for_each(s, &linx_sockets_bound[hash]) {
140+#else
141 sk_for_each(s, node, &linx_sockets_bound[hash]) {
142+#endif
143 linx_check_sock(s);
144
145 /* If the length of the aname are the same, potential match was found. */
146@@ -1122,7 +1128,9 @@ int linx_info_sockets(struct linx_info_sockets *isockets,
147 LINX_SPID __user * spids)
148 {
149 struct sock *sk;
150+#if (LINUX_VERSION_CODE < KERNEL_VERSION(3,9,0))
151 const struct hlist_node *node;
152+#endif
153 int i, tot_sockets = 0, tot_sockets_tmp = 0, max_sockets;
154
155 LINX_ASSERT(isockets != NULL);
156@@ -1131,7 +1139,11 @@ int linx_info_sockets(struct linx_info_sockets *isockets,
157
158 read_lock_bh(&linx_socket_bound_unbound_lock);
159 /* Count the number of sockets the needs to be returned. */
160+#if (LINUX_VERSION_CODE >= KERNEL_VERSION(3,9,0))
161+ sk_for_each(sk, &linx_sockets_unbound) {
162+#else
163 sk_for_each(sk, node, &linx_sockets_unbound) {
164+#endif
165 if (linx_sk(sk)->type == LINX_TYPE_REMOTE && isockets->remote) {
166 tot_sockets_tmp++;
167 } else if (linx_sk(sk)->type == LINX_TYPE_LOCAL &&
168@@ -1156,7 +1168,11 @@ int linx_info_sockets(struct linx_info_sockets *isockets,
169
170 tot_sockets_tmp = 0;
171
172+#if (LINUX_VERSION_CODE >= KERNEL_VERSION(3,9,0))
173+ sk_for_each(sk, &linx_sockets_unbound) {
174+#else
175 sk_for_each(sk, node, &linx_sockets_unbound) {
176+#endif
177 LINX_SPID spid = linx_sock_to_spid(sk);
178 if (linx_sk(sk)->type == LINX_TYPE_REMOTE &&
179 isockets->remote) {
180@@ -1197,7 +1213,11 @@ int linx_info_sockets(struct linx_info_sockets *isockets,
181 for (i = 0; i < LINX_HASH_SIZE; i++) {
182 tot_sockets_tmp = 0;
183 read_lock_bh(&linx_socket_bound_unbound_lock);
184+#if (LINUX_VERSION_CODE >= KERNEL_VERSION(3,9,0))
185+ sk_for_each(sk, &linx_sockets_bound[i]) {
186+#else
187 sk_for_each(sk, node, &linx_sockets_bound[i]) {
188+#endif
189 if (linx_sk(sk)->type == LINX_TYPE_REMOTE &&
190 isockets->remote) {
191 tot_sockets_tmp++;
192@@ -1222,7 +1242,11 @@ int linx_info_sockets(struct linx_info_sockets *isockets,
193 }
194
195 tot_sockets_tmp = 0;
196+#if (LINUX_VERSION_CODE >= KERNEL_VERSION(3,9,0))
197+ sk_for_each(sk, &linx_sockets_bound[i]) {
198+#else
199 sk_for_each(sk, node, &linx_sockets_bound[i]) {
200+#endif
201 LINX_SPID spid = linx_sock_to_spid(sk);
202 if (linx_sk(sk)->type == LINX_TYPE_REMOTE &&
203 isockets->remote) {
204--
2051.8.3.2
206
diff --git a/recipes-enea/linx/linx-mod_2.6.5.bb b/recipes-enea/linx/linx-mod_2.6.5.bb
new file mode 100644
index 0000000..6cb1266
--- /dev/null
+++ b/recipes-enea/linx/linx-mod_2.6.5.bb
@@ -0,0 +1,26 @@
1SUMMARY = "LINX for Linux fast IPC"
2DESCRIPTION = "LINX is a distributed communication protocol stack for transparent inter node and interprocess communication for a heterogeneous mix of systems."
3HOMEPAGE = "http://linx.sourceforge.net/"
4
5SECTION = "kernel/modules"
6
7LICENSE = "GPLv2"
8LIC_FILES_CHKSUM = "file://../../COPYING;md5=59530bdf33659b29e73d4adb9f9f6552"
9
10DEPENDS = "linux-libc-headers linx"
11RRECOMMENDS_${PN} = "linx kmod"
12
13SRC_URI = "http://linux.enea.com/linx/linx-${PV}.tar.gz \
14 file://linx-kernel-modules.patch \
15 file://support-for-3.11-kernel-versions.patch \
16 "
17SRC_URI[md5sum] = "986191fbceff8e15c03dedc5e544e42e"
18SRC_URI[sha256sum] = "ee51c905115dbf6e25b5980006994a81732b1c0aac460f16a6f0582bc1114954"
19
20S = "${WORKDIR}/linx-${PV}/net/linx"
21
22inherit module
23
24module_do_compile_prepend () {
25 do_make_scripts
26}
diff --git a/recipes-enea/linx/linx.inc b/recipes-enea/linx/linx.inc
new file mode 100644
index 0000000..513c020
--- /dev/null
+++ b/recipes-enea/linx/linx.inc
@@ -0,0 +1,22 @@
1SUMMARY = "LINX for Linux fast IPC"
2DESCRIPTION = "LINX is a distributed communication protocol stack for transparent inter node and interprocess communication for a heterogeneous mix of systems."
3HOMEPAGE = "http://linx.sourceforge.net/"
4SECTION = "system/library"
5
6DEPENDS = "linux-libc-headers virtual/libc"
7RRECOMMENDS_${PN} = "linx-mod"
8
9SRC_URI = "http://linux.enea.com/linx/linx-${PV}.tar.gz"
10
11SRC_URI[md5sum] = "986191fbceff8e15c03dedc5e544e42e"
12SRC_URI[sha256sum] = "ee51c905115dbf6e25b5980006994a81732b1c0aac460f16a6f0582bc1114954"
13
14S = "${WORKDIR}/linx-${PV}"
15
16inherit autotools
17
18do_install_append () {
19 mkdir -p ${D}/etc
20 install -m 644 ${S}/linxgw/linxgws/example.conf ${D}/etc/linxgws.conf
21}
22
diff --git a/recipes-enea/linx/linx_2.6.5.bb b/recipes-enea/linx/linx_2.6.5.bb
new file mode 100644
index 0000000..d188eb8
--- /dev/null
+++ b/recipes-enea/linx/linx_2.6.5.bb
@@ -0,0 +1,9 @@
1require linx.inc
2LICENSE = "BSD"
3
4PR = "r0"
5
6SRC_URI += " file://liblinx_nobase.patch \
7 file://linxcfg_nobase.patch "
8
9LIC_FILES_CHKSUM = "file://COPYING;md5=59530bdf33659b29e73d4adb9f9f6552"
diff --git a/recipes-kernel/linux/files/add-no-error-array-bounds.patch b/recipes-kernel/linux/files/add-no-error-array-bounds.patch
new file mode 100644
index 0000000..57b3974
--- /dev/null
+++ b/recipes-kernel/linux/files/add-no-error-array-bounds.patch
@@ -0,0 +1,13 @@
1Index: git/Makefile
2===================================================================
3--- git.orig/Makefile
4+++ git/Makefile
5@@ -558,7 +558,7 @@ endif # $(dot-config)
6 # Defaults to vmlinux, but the arch makefile usually adds further targets
7 all: vmlinux
8
9-KBUILD_CFLAGS += -Wno-unused-but-set-variable
10+KBUILD_CFLAGS += -Wno-unused-but-set-variable -Wno-error=array-bounds
11
12 ifdef CONFIG_CC_OPTIMIZE_FOR_SIZE
13 KBUILD_CFLAGS += -Os
diff --git a/recipes-kernel/linux/files/add-no-error-uninitialized.patch b/recipes-kernel/linux/files/add-no-error-uninitialized.patch
new file mode 100644
index 0000000..a70b089
--- /dev/null
+++ b/recipes-kernel/linux/files/add-no-error-uninitialized.patch
@@ -0,0 +1,69 @@
1diff --git a/Makefile b/Makefile
2index 183eff3..88fd9c1 100644
3--- a/Makefile
4+++ b/Makefile
5@@ -370,6 +370,7 @@ LINUXINCLUDE := \
6 KBUILD_CPPFLAGS := -D__KERNEL__
7
8 KBUILD_CFLAGS := -Wall -Wundef -Wstrict-prototypes -Wno-trigraphs \
9+ -Wno-error=uninitialized \
10 -fno-strict-aliasing -fno-common \
11 -Werror-implicit-function-declaration \
12 -Wno-format-security \
13diff --git a/arch/powerpc/Makefile b/arch/powerpc/Makefile
14index 0624909..5d13d66 100644
15--- a/arch/powerpc/Makefile
16+++ b/arch/powerpc/Makefile
17@@ -17,6 +17,7 @@ HAS_BIARCH := $(call cc-option-yn, -m32)
18 # Set default 32 bits cross compilers for vdso and boot wrapper
19 CROSS32_COMPILE ?=
20
21+KBUILD_CFLAGS += -Wno-error=uninitialized
22 CROSS32CC := $(CROSS32_COMPILE)gcc
23 CROSS32AR := $(CROSS32_COMPILE)ar
24
25@@ -67,7 +68,6 @@ LDFLAGS_vmlinux-y := -Bstatic
26 LDFLAGS_vmlinux-$(CONFIG_RELOCATABLE) := -pie
27 LDFLAGS_vmlinux := $(LDFLAGS_vmlinux-y)
28
29-LIBGCC := $(shell $(CC) $(KBUILD_CFLAGS) -print-libgcc-file-name)
30
31 ifeq ($(CONFIG_PPC64),y)
32 ifeq ($(call cc-option-yn,-mcmodel=medium),y)
33@@ -176,7 +176,6 @@ core-$(CONFIG_PERF_EVENTS) += arch/powerpc/perf/
34
35 drivers-$(CONFIG_OPROFILE) += arch/powerpc/oprofile/
36
37-libs-y += $(LIBGCC)
38
39 # Default to zImage, override when needed
40 all: zImage
41diff --git a/arch/powerpc/perf/Makefile b/arch/powerpc/perf/Makefile
42index 06dd8d5..8bf06fd 100644
43--- a/arch/powerpc/perf/Makefile
44+++ b/arch/powerpc/perf/Makefile
45@@ -1,4 +1,4 @@
46-subdir-ccflags-$(CONFIG_PPC_WERROR) := -Werror
47+subdir-ccflags-$(CONFIG_PPC_WERROR) := -Wno-error=uninitialized
48
49 obj-$(CONFIG_PERF_EVENTS) += callchain.o
50
51diff --git a/arch/powerpc/sysdev/Makefile b/arch/powerpc/sysdev/Makefile
52index fa63186..d592e84 100644
53--- a/arch/powerpc/sysdev/Makefile
54+++ b/arch/powerpc/sysdev/Makefile
55@@ -1,4 +1,4 @@
56-subdir-ccflags-$(CONFIG_PPC_WERROR) := -Werror
57+subdir-ccflags-$(CONFIG_PPC_WERROR) := -Wno-error=uninitialized
58
59 ccflags-$(CONFIG_PPC64) := $(NO_MINIMAL_TOC)
60
61@@ -67,8 +67,6 @@ endif
62
63 obj-$(CONFIG_PPC_SCOM) += scom.o
64
65-subdir-ccflags-$(CONFIG_PPC_WERROR) := -Werror
66-
67 obj-$(CONFIG_PPC_XICS) += xics/
68
69 obj-$(CONFIG_GE_FPGA) += ge/
diff --git a/recipes-kernel/linux/files/add-no-unused-but-set-variable.patch b/recipes-kernel/linux/files/add-no-unused-but-set-variable.patch
new file mode 100644
index 0000000..5133529
--- /dev/null
+++ b/recipes-kernel/linux/files/add-no-unused-but-set-variable.patch
@@ -0,0 +1,13 @@
1diff --git a/Makefile b/Makefile
2index e821f72..cb2fcba 100644
3--- a/Makefile
4+++ b/Makefile
5@@ -526,6 +526,8 @@ endif # $(dot-config)
6 # Defaults vmlinux but it is usually overridden in the arch makefile
7 all: vmlinux
8
9+KBUILD_CFLAGS += -Wno-unused-but-set-variable
10+
11 ifdef CONFIG_CC_OPTIMIZE_FOR_SIZE
12 KBUILD_CFLAGS += -Os
13 else
diff --git a/recipes-kernel/linux/files/cfg/bootlogd.cfg b/recipes-kernel/linux/files/cfg/bootlogd.cfg
new file mode 100644
index 0000000..0d83d11
--- /dev/null
+++ b/recipes-kernel/linux/files/cfg/bootlogd.cfg
@@ -0,0 +1,2 @@
1CONFIG_LEGACY_PTYS=y
2CONFIG_LEGACY_PTY_COUNT=256
diff --git a/recipes-kernel/linux/files/cfg/debug.cfg b/recipes-kernel/linux/files/cfg/debug.cfg
new file mode 100644
index 0000000..e4b87d5
--- /dev/null
+++ b/recipes-kernel/linux/files/cfg/debug.cfg
@@ -0,0 +1,27 @@
1
2CONFIG_STACKTRACE_SUPPORT=n
3CONFIG_TRACE_IRQFLAGS_SUPPORT=y
4CONFIG_LOCKDEP_SUPPORT=n
5
6CONFIG_GENERIC_TBSYNC=y
7CONFIG_GENERIC_BUG=y
8
9CONFIG_PERF_EVENTS=y
10CONFIG_PERF_COUNTERS=y
11
12CONFIG_RCU_TRACE=y
13CONFIG_TREE_RCU_TRACE=y
14
15CONFIG_DEBUG_KERNEL=y
16
17CONFIG_EXT2_FS=y
18CONFIG_EXT3_FS=y
19CONFIG_EXT3_FS_XATTR=y
20CONFIG_SYSFS=y
21CONFIG_TMPFS=y
22CONFIG_DEBUG_FS=y
23
24CONFIG_TRACING_SUPPORT=y
25CONFIG_FTRACE=n
26CONFIG_FTRACE_SYSCALLS=n
27CONFIG_STACK_TRACER=y
diff --git a/recipes-kernel/linux/files/cfg/devtmpfs.cfg b/recipes-kernel/linux/files/cfg/devtmpfs.cfg
new file mode 100644
index 0000000..5e9cf98
--- /dev/null
+++ b/recipes-kernel/linux/files/cfg/devtmpfs.cfg
@@ -0,0 +1,2 @@
1CONFIG_DEVTMPFS=y
2CONFIG_DEVTMPFS_MOUNT=y
diff --git a/recipes-kernel/linux/files/cfg/dpa.cfg b/recipes-kernel/linux/files/cfg/dpa.cfg
new file mode 100644
index 0000000..c873cd5
--- /dev/null
+++ b/recipes-kernel/linux/files/cfg/dpa.cfg
@@ -0,0 +1 @@
CONFIG_FSL_FM_MAX_FRAME_SIZE=9600
diff --git a/recipes-kernel/linux/files/cfg/e500mc_debug.cfg b/recipes-kernel/linux/files/cfg/e500mc_debug.cfg
new file mode 100644
index 0000000..eaddbaf
--- /dev/null
+++ b/recipes-kernel/linux/files/cfg/e500mc_debug.cfg
@@ -0,0 +1,6 @@
1CONFIG_FSL_EMB_PERFMON=y
2CONFIG_FSL_EMB_PERF_EVENT=y
3CONFIG_FSL_EMB_PERF_EVENT_E500=y
4
5CONFIG_PPC_OF=y
6CONFIG_PPC_UDBG_16550=y
diff --git a/recipes-kernel/linux/files/cfg/embedded.cfg b/recipes-kernel/linux/files/cfg/embedded.cfg
new file mode 100644
index 0000000..2f0e6bf
--- /dev/null
+++ b/recipes-kernel/linux/files/cfg/embedded.cfg
@@ -0,0 +1 @@
CONFIG_EMBEDDED=y
diff --git a/recipes-kernel/linux/files/cfg/i2c.cfg b/recipes-kernel/linux/files/cfg/i2c.cfg
new file mode 100644
index 0000000..8dbcc3c
--- /dev/null
+++ b/recipes-kernel/linux/files/cfg/i2c.cfg
@@ -0,0 +1 @@
CONFIG_I2C_CHARDEV=y
diff --git a/recipes-kernel/linux/files/cfg/igb_drv.cfg b/recipes-kernel/linux/files/cfg/igb_drv.cfg
new file mode 100644
index 0000000..3498fd0
--- /dev/null
+++ b/recipes-kernel/linux/files/cfg/igb_drv.cfg
@@ -0,0 +1,3 @@
1CONFIG_IGB=y
2CONFIG_IGB_DCA=y
3CONFIG_IGBVF=y
diff --git a/recipes-kernel/linux/files/cfg/ikconfig.cfg b/recipes-kernel/linux/files/cfg/ikconfig.cfg
new file mode 100644
index 0000000..9e7666c
--- /dev/null
+++ b/recipes-kernel/linux/files/cfg/ikconfig.cfg
@@ -0,0 +1,2 @@
1CONFIG_IKCONFIG=y
2CONFIG_IKCONFIG_PROC=y
diff --git a/recipes-kernel/linux/files/cfg/kgdb.cfg b/recipes-kernel/linux/files/cfg/kgdb.cfg
new file mode 100644
index 0000000..f23cfe3
--- /dev/null
+++ b/recipes-kernel/linux/files/cfg/kgdb.cfg
@@ -0,0 +1,9 @@
1#depends
2CONFIG_DEBUG_KERNEL=y
3CONFIG_EXPERIMENTAL=y
4
5#configs
6CONFIG_KGDB=y
7CONFIG_KGDB_SERIAL_CONSOLE=y
8CONFIG_KGDB_KDB=y
9CONFIG_MAGIC_SYSRQ=y
diff --git a/recipes-kernel/linux/files/cfg/kprobes.cfg b/recipes-kernel/linux/files/cfg/kprobes.cfg
new file mode 100644
index 0000000..e24be27
--- /dev/null
+++ b/recipes-kernel/linux/files/cfg/kprobes.cfg
@@ -0,0 +1 @@
CONFIG_KPROBES=y
diff --git a/recipes-kernel/linux/files/cfg/latencytop.cfg b/recipes-kernel/linux/files/cfg/latencytop.cfg
new file mode 100644
index 0000000..0a42694
--- /dev/null
+++ b/recipes-kernel/linux/files/cfg/latencytop.cfg
@@ -0,0 +1 @@
CONFIG_LATENCYTOP=y
diff --git a/recipes-kernel/linux/files/cfg/localversion.cfg b/recipes-kernel/linux/files/cfg/localversion.cfg
new file mode 100644
index 0000000..71481b4
--- /dev/null
+++ b/recipes-kernel/linux/files/cfg/localversion.cfg
@@ -0,0 +1,2 @@
1CONFIG_LOCALVERSION_AUTO=n
2CONFIG_DEFAULT_HOSTNAME="(none)"
diff --git a/recipes-kernel/linux/files/cfg/ltp.cfg b/recipes-kernel/linux/files/cfg/ltp.cfg
new file mode 100644
index 0000000..e36a9c2
--- /dev/null
+++ b/recipes-kernel/linux/files/cfg/ltp.cfg
@@ -0,0 +1,3 @@
1CONFIG_TUN=y
2CONFIG_KSM=y
3CONFIG_NUMA=y
diff --git a/recipes-kernel/linux/files/cfg/lttng.cfg b/recipes-kernel/linux/files/cfg/lttng.cfg
new file mode 100644
index 0000000..1334194
--- /dev/null
+++ b/recipes-kernel/linux/files/cfg/lttng.cfg
@@ -0,0 +1,20 @@
1CONFIG_MODULES=y
2CONFIG_KALLSYMS=y
3CONFIG_HIGH_RES_TIMERS=y
4CONFIG_TRACEPOINTS=y
5CONFIG_FTRACE=y
6CONFIG_PERF_EVENTS=y
7CONFIG_EVENT_TRACING=y
8CONFIG_KPROBES=y
9CONFIG_KRETPROBES=y
10CONFIG_FUNCTION_TRACER=y
11CONFIG_FUNCTION_GRAPH_TRACER=y
12CONFIG_IRQSOFF_TRACER=y
13CONFIG_PREEMPT_TRACER=y
14CONFIG_SCHED_TRACER=y
15CONFIG_NOP_TRACER=y
16CONFIG_CONTEXT_SWITCH_TRACER=y
17CONFIG_GENERIC_TRACER=y
18CONFIG_TRACER_MAX_TRACE=y
19CONFIG_TRACER_SNAPSHOT=y
20CONFIG_STACK_TRACER=n
diff --git a/recipes-kernel/linux/files/cfg/mtd_tests.cfg b/recipes-kernel/linux/files/cfg/mtd_tests.cfg
new file mode 100644
index 0000000..1477bd7
--- /dev/null
+++ b/recipes-kernel/linux/files/cfg/mtd_tests.cfg
@@ -0,0 +1 @@
CONFIG_MTD_TESTS=m
diff --git a/recipes-kernel/linux/files/cfg/oprofile.cfg b/recipes-kernel/linux/files/cfg/oprofile.cfg
new file mode 100644
index 0000000..959e94b
--- /dev/null
+++ b/recipes-kernel/linux/files/cfg/oprofile.cfg
@@ -0,0 +1,4 @@
1CONFIG_PROFILING=y
2CONFIG_OPROFILE=m
3CONFIG_PROFILE_ALL_BRANCHES=y
4CONFIG_OPROFILE_NMI_TIMER=y
diff --git a/recipes-kernel/linux/files/cfg/perf.cfg b/recipes-kernel/linux/files/cfg/perf.cfg
new file mode 100644
index 0000000..5fddec0
--- /dev/null
+++ b/recipes-kernel/linux/files/cfg/perf.cfg
@@ -0,0 +1,2 @@
1CONFIG_CGROUP_PERF=y
2CONFIG_PERF_EVENTS=y
diff --git a/recipes-kernel/linux/files/cfg/powertop.cfg b/recipes-kernel/linux/files/cfg/powertop.cfg
new file mode 100644
index 0000000..655c101
--- /dev/null
+++ b/recipes-kernel/linux/files/cfg/powertop.cfg
@@ -0,0 +1,13 @@
1CONFIG_EXPERT=y
2CONFIG_PROC_FS=y
3CONFIG_DEBUG_FS=y
4CONFIG_NO_HZ=y
5CONFIG_HIGH_RES_TIMERS=y
6CONFIG_HPET_TIMER=y
7CONFIG_CPU_FREQ=y
8CONFIG_CPU_FREQ_GOV_ONDEMAND=y
9CONFIG_TIMER_STATS=y
10CONFIG_PERF_EVENTS=y
11CONFIG_TRACEPOINTS=y
12CONFIG_TRACING=y
13CONFIG_X86_MSR=y
diff --git a/recipes-kernel/linux/files/cfg/pramfs-bsc913x.cfg b/recipes-kernel/linux/files/cfg/pramfs-bsc913x.cfg
new file mode 100644
index 0000000..1476224
--- /dev/null
+++ b/recipes-kernel/linux/files/cfg/pramfs-bsc913x.cfg
@@ -0,0 +1,5 @@
1CONFIG_MISC_FILESYSTEMS=y
2CONFIG_PRAMFS=y
3CONFIG_PRAMFS_TEST=y
4CONFIG_TEST_MODULE=m
5
diff --git a/recipes-kernel/linux/files/cfg/pramfs.cfg b/recipes-kernel/linux/files/cfg/pramfs.cfg
new file mode 100644
index 0000000..21aabc1
--- /dev/null
+++ b/recipes-kernel/linux/files/cfg/pramfs.cfg
@@ -0,0 +1,4 @@
1CONFIG_MISC_FILESYSTEMS=y
2CONFIG_PRAMFS=y
3CONFIG_PRAMFS_XATTR=y
4CONFIG_PRAMFS_TEST_MODULE=m
diff --git a/recipes-kernel/linux/files/cfg/preempt.cfg b/recipes-kernel/linux/files/cfg/preempt.cfg
new file mode 100644
index 0000000..0d9cc42
--- /dev/null
+++ b/recipes-kernel/linux/files/cfg/preempt.cfg
@@ -0,0 +1 @@
CONFIG_PREEMPT=y
diff --git a/recipes-kernel/linux/files/cfg/root_nfs.cfg b/recipes-kernel/linux/files/cfg/root_nfs.cfg
new file mode 100644
index 0000000..f8d8748
--- /dev/null
+++ b/recipes-kernel/linux/files/cfg/root_nfs.cfg
@@ -0,0 +1,7 @@
1CONFIG_NETWORK_FILESYSTEMS=y
2CONFIG_NFS_USE_KERNEL_DNS=y
3CONFIG_ROOT_NFS=y
4CONFIG_NFS_FS=y
5CONFIG_NFS_V3=y
6CONFIG_NFS_V4=y
7CONFIG_NFSD=y
diff --git a/recipes-kernel/linux/files/cfg/rt.cfg b/recipes-kernel/linux/files/cfg/rt.cfg
new file mode 100644
index 0000000..a15c930
--- /dev/null
+++ b/recipes-kernel/linux/files/cfg/rt.cfg
@@ -0,0 +1,3 @@
1CONFIG_PREEMPT_RT_FULL=y
2CONFIG_HZ_1000=y
3CONFIG_HZ=1000
diff --git a/recipes-kernel/linux/files/cfg/systemtap.cfg b/recipes-kernel/linux/files/cfg/systemtap.cfg
new file mode 100644
index 0000000..88c278c
--- /dev/null
+++ b/recipes-kernel/linux/files/cfg/systemtap.cfg
@@ -0,0 +1,6 @@
1CONFIG_DEBUG_INFO=y
2CONFIG_KPROBES=y
3CONFIG_RELAY=y
4CONFIG_DEBUG_FS=y
5CONFIG_MODULES=y
6CONFIG_MODULE_UNLOAD=y
diff --git a/recipes-kernel/linux/files/cfg/uio.cfg b/recipes-kernel/linux/files/cfg/uio.cfg
new file mode 100644
index 0000000..b26593e
--- /dev/null
+++ b/recipes-kernel/linux/files/cfg/uio.cfg
@@ -0,0 +1,3 @@
1CONFIG_UIO=y
2CONFIG_UIO_PDRV=y
3CONFIG_UIO_PDRV_GENIRQ=y
diff --git a/recipes-kernel/linux/files/cfg/uio_m.cfg b/recipes-kernel/linux/files/cfg/uio_m.cfg
new file mode 100644
index 0000000..d82eee4
--- /dev/null
+++ b/recipes-kernel/linux/files/cfg/uio_m.cfg
@@ -0,0 +1,3 @@
1CONFIG_UIO=m
2CONFIG_UIO_PDRV=m
3CONFIG_UIO_PDRV_GENIRQ=m
diff --git a/recipes-kernel/linux/files/cfg/with_modules.cfg b/recipes-kernel/linux/files/cfg/with_modules.cfg
new file mode 100644
index 0000000..f4b3ae2
--- /dev/null
+++ b/recipes-kernel/linux/files/cfg/with_modules.cfg
@@ -0,0 +1,5 @@
1CONFIG_MODULES=y
2# CONFIG_MODULE_FORCE_LOAD is not set
3CONFIG_MODULE_UNLOAD=y
4CONFIG_MODULE_FORCE_UNLOAD=y
5CONFIG_MODVERSIONS=y
diff --git a/recipes-kernel/linux/files/disable_hw_checksum_offload.patch b/recipes-kernel/linux/files/disable_hw_checksum_offload.patch
new file mode 100644
index 0000000..4b318c1
--- /dev/null
+++ b/recipes-kernel/linux/files/disable_hw_checksum_offload.patch
@@ -0,0 +1,19 @@
1Temporarily disable HW checksum offload
2
3Signed-off-by: Tudor Florea <tudor.florea@enea.com>
4Upstream-Status: Pending
5
6
7diff --git a/arch/arm/boot/dts/k2hk-evm.dts b/arch/arm/boot/dts/k2hk-evm.dts
8index 16cf335..7dc9665 100644
9--- a/arch/arm/boot/dts/k2hk-evm.dts
10+++ b/arch/arm/boot/dts/k2hk-evm.dts
11@@ -2521,7 +2521,7 @@
12 };
13 pa: pa@2000000 {
14 label = "keystone-pa";
15- checksum-offload = <1>; /* 1 - HW offload */
16+ checksum-offload = <2>;
17 txhook-order = <10>;
18 txhook-softcsum = <40>;
19 rxhook-order = <10>;
diff --git a/recipes-kernel/linux/files/enea_image.cfg b/recipes-kernel/linux/files/enea_image.cfg
new file mode 100644
index 0000000..146eff5
--- /dev/null
+++ b/recipes-kernel/linux/files/enea_image.cfg
@@ -0,0 +1 @@
CONFIG_RELAY=y
diff --git a/recipes-kernel/linux/files/fix_for_CVE-2013-2094.patch b/recipes-kernel/linux/files/fix_for_CVE-2013-2094.patch
new file mode 100644
index 0000000..1fbad06
--- /dev/null
+++ b/recipes-kernel/linux/files/fix_for_CVE-2013-2094.patch
@@ -0,0 +1,36 @@
1From 8176cced706b5e5d15887584150764894e94e02f Mon Sep 17 00:00:00 2001
2From: Tommi Rantala <tt.rantala@gmail.com>
3Date: Sat, 13 Apr 2013 19:49:14 +0000
4Subject: perf: Treat attr.config as u64 in perf_swevent_init()
5
6Trinity discovered that we fail to check all 64 bits of
7attr.config passed by user space, resulting to out-of-bounds
8access of the perf_swevent_enabled array in
9sw_perf_event_destroy().
10
11Introduced in commit b0a873ebb ("perf: Register PMU
12implementations").
13
14Signed-off-by: Tommi Rantala <tt.rantala@gmail.com>
15Cc: Peter Zijlstra <a.p.zijlstra@chello.nl>
16Cc: davej@redhat.com
17Cc: Paul Mackerras <paulus@samba.org>
18Cc: Arnaldo Carvalho de Melo <acme@ghostprotocols.net>
19Link: http://lkml.kernel.org/r/1365882554-30259-1-git-send-email-tt.rantala@gmail.com
20Signed-off-by: Ingo Molnar <mingo@kernel.org>
21---
22diff --git a/kernel/events/core.c b/kernel/events/core.c
23index 7e0962e..4d3124b 100644
24--- a/kernel/events/core.c
25+++ b/kernel/events/core.c
26@@ -5331,7 +5331,7 @@ static void sw_perf_event_destroy(struct perf_event *event)
27
28 static int perf_swevent_init(struct perf_event *event)
29 {
30- int event_id = event->attr.config;
31+ u64 event_id = event->attr.config;
32
33 if (event->attr.type != PERF_TYPE_SOFTWARE)
34 return -ENOENT;
35--
36cgit v0.9.1
diff --git a/recipes-kernel/linux/files/merge_config.sh b/recipes-kernel/linux/files/merge_config.sh
new file mode 100755
index 0000000..33f18d4
--- /dev/null
+++ b/recipes-kernel/linux/files/merge_config.sh
@@ -0,0 +1,142 @@
1#!/bin/sh
2# merge_config.sh - Takes a list of config fragment values, and merges
3# them one by one. Provides warnings on overridden values, and specified
4# values that did not make it to the resulting .config file (due to missed
5# dependencies or config symbol removal).
6#
7# Portions reused from kconf_check and generate_cfg:
8# http://git.yoctoproject.org/cgit/cgit.cgi/yocto-kernel-tools/tree/tools/kconf_check
9# http://git.yoctoproject.org/cgit/cgit.cgi/yocto-kernel-tools/tree/tools/generate_cfg
10#
11# Copyright (c) 2009-2010 Wind River Systems, Inc.
12# Copyright 2011 Linaro
13#
14# This program is free software; you can redistribute it and/or modify
15# it under the terms of the GNU General Public License version 2 as
16# published by the Free Software Foundation.
17#
18# This program is distributed in the hope that it will be useful,
19# but WITHOUT ANY WARRANTY; without even the implied warranty of
20# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
21# See the GNU General Public License for more details.
22
23
24usage() {
25 echo "Usage: $0 [OPTIONS] [CONFIG [...]]"
26echo " -h display this help text"
27echo " -m only merge the fragments, do not execute the make command"
28echo " -n use allnoconfig instead of alldefconfig"
29echo " -x use allmodconfig instead of alldefconfig"
30echo " -d debug. Don't cleanup temporary files"
31}
32
33MAKE_FLAG=true
34ALLTARGET=alldefconfig
35
36# There are two variables that impact where the .config will be dropped,
37# O= and KBUILD_OUTPUT=. So we'll respect those variables and use them as
38# an output directory as well. These two variables are not propagating
39# automatically to the kernel build, so always explicitly setting O=
40# and passing it to the kernel build ensures that it is respected.
41if [ -n "$KBUILD_OUTPUT" ]; then
42 O=$KBUILD_OUTPUT
43fi
44if [ -z "$O" ]; then
45 O=.
46fi
47
48while true; do
49 case $1 in
50 "-n")
51 ALLTARGET=allnoconfig
52 shift
53 continue
54 ;;
55 "-m")
56 MAKE_FLAG=false
57 shift
58 continue
59 ;;
60 "-d")
61 DEBUG=true
62 shift
63 continue
64 ;;
65 "-h")
66 usage
67 exit
68 ;;
69 *)
70 break
71 ;;
72 esac
73done
74
75clean_up() {
76 rm -f $TMP_FILE
77 exit
78}
79if [ -z "$DEBUG" ]; then
80 trap clean_up SIGHUP SIGINT SIGTERM
81fi
82
83
84MERGE_LIST=$*
85SED_CONFIG_EXP="s/^\(# \)\{0,1\}\(CONFIG_[a-zA-Z0-9_]*\)[= ].*/\2/p"
86TMP_FILE=$(mktemp $O/.tmp.config.XXXXXXXXXX)
87
88# Merge files, printing warnings on overrided values
89for MERGE_FILE in $MERGE_LIST ; do
90 echo "Merging $MERGE_FILE"
91 CFG_LIST=$(sed -n "$SED_CONFIG_EXP" $MERGE_FILE)
92
93 for CFG in $CFG_LIST ; do
94 grep -q -w $CFG $TMP_FILE
95 if [ $? -eq 0 ] ; then
96 PREV_VAL=$(grep -w $CFG $TMP_FILE)
97 NEW_VAL=$(grep -w $CFG $MERGE_FILE)
98 if [ "x$PREV_VAL" != "x$NEW_VAL" ] ; then
99 echo Value of $CFG is redefined by fragment $MERGE_FILE:
100 echo Previous value: $PREV_VAL
101 echo New value: $NEW_VAL
102 echo
103 fi
104 sed -i "/$CFG[ =]/d" $TMP_FILE
105 fi
106 done
107 cat $MERGE_FILE >> $TMP_FILE
108done
109
110if [ "$MAKE_FLAG" = "false" ]; then
111 cp $TMP_FILE $O/.config
112 echo "#"
113 echo "# merged configuration written to $O/.config (needs make)"
114 echo "#"
115 if [ -z "$DEBUG" ]; then
116 clean_up
117 fi
118 exit
119fi
120
121# Use the merged file as the starting point for:
122# alldefconfig: Fills in any missing symbols with Kconfig default
123# allnoconfig: Fills in any missing symbols with # CONFIG_* is not set
124make KCONFIG_ALLCONFIG=$TMP_FILE O=$O $ALLTARGET
125
126
127# Check all specified config values took (might have missed-dependency issues)
128for CFG in $(sed -n "$SED_CONFIG_EXP" $TMP_FILE); do
129
130 REQUESTED_VAL=$(sed -n "$SED_CONFIG_EXP" $TMP_FILE | grep -w -e "$CFG")
131 ACTUAL_VAL=$(sed -n "$SED_CONFIG_EXP" $O/.config | grep -w -e "$CFG")
132 if [ "x$REQUESTED_VAL" != "x$ACTUAL_VAL" ] ; then
133 echo "Value requested for $CFG not in final .config"
134 echo "Requested value: $REQUESTED_VAL"
135 echo "Actual value: $ACTUAL_VAL"
136 echo ""
137 fi
138done
139
140if [ -z "$DEBUG" ]; then
141 clean_up
142fi
diff --git a/recipes-kernel/linux/files/pramfs-1.2.9-3.0Patched.tar.gz b/recipes-kernel/linux/files/pramfs-1.2.9-3.0Patched.tar.gz
new file mode 100644
index 0000000..895b329
--- /dev/null
+++ b/recipes-kernel/linux/files/pramfs-1.2.9-3.0Patched.tar.gz
Binary files differ
diff --git a/recipes-kernel/linux/files/pramfs-1.4.2-3.10_patched.tar.gz b/recipes-kernel/linux/files/pramfs-1.4.2-3.10_patched.tar.gz
new file mode 100644
index 0000000..0d71064
--- /dev/null
+++ b/recipes-kernel/linux/files/pramfs-1.4.2-3.10_patched.tar.gz
Binary files differ
diff --git a/recipes-kernel/linux/files/pramfs-2.6.33-1.1.6.tar.gz b/recipes-kernel/linux/files/pramfs-2.6.33-1.1.6.tar.gz
new file mode 100644
index 0000000..f25bdd4
--- /dev/null
+++ b/recipes-kernel/linux/files/pramfs-2.6.33-1.1.6.tar.gz
Binary files differ
diff --git a/recipes-kernel/linux/files/set-keystone2-clock-frequency.patch b/recipes-kernel/linux/files/set-keystone2-clock-frequency.patch
new file mode 100644
index 0000000..bc9c105
--- /dev/null
+++ b/recipes-kernel/linux/files/set-keystone2-clock-frequency.patch
@@ -0,0 +1,26 @@
1From ba87988727dcd6202a10f435ba24543410c367e0 Mon Sep 17 00:00:00 2001
2From: Valentin Cobelea <valentin.cobelea@enea.com>
3Date: Tue, 8 Oct 2013 16:55:58 +0200
4Subject: [PATCH] LXCR-1831: set the keystone2 rt clock frequency
5
6
7Signed-off-by: Valentin Cobelea <valentin.cobelea@enea.com>
8---
9 arch/arm/boot/dts/k2hk-evm.dts | 1 +
10 1 file changed, 1 insertion(+)
11
12diff --git a/arch/arm/boot/dts/k2hk-evm.dts b/arch/arm/boot/dts/k2hk-evm.dts
13index dc2ee9a..f535286 100644
14--- a/arch/arm/boot/dts/k2hk-evm.dts
15+++ b/arch/arm/boot/dts/k2hk-evm.dts
16@@ -1291,6 +1291,7 @@
17 timer {
18 compatible = "arm,armv7-timer";
19 interrupts = <1 13 0xf08 1 14 0xf08>;
20+ clock-frequency = <134221720>;
21 };
22
23 uart0: serial@02530c00 {
24--
251.7.10.4
26
diff --git a/recipes-kernel/linux/files/setlocalversion.patch b/recipes-kernel/linux/files/setlocalversion.patch
new file mode 100644
index 0000000..f0925de
--- /dev/null
+++ b/recipes-kernel/linux/files/setlocalversion.patch
@@ -0,0 +1,63 @@
1diff -uNr a/Makefile b/Makefile
2--- a/Makefile 2012-05-11 10:45:09.669169201 +0200
3+++ b/Makefile 2012-05-11 10:44:57.285708701 +0200
4@@ -949,6 +949,7 @@
5 # Store (new) KERNELRELASE string in include/config/kernel.release
6 include/config/kernel.release: include/config/auto.conf FORCE
7 $(Q)rm -f $@
8+ $(Q)rm -f .scmversion
9 $(Q)echo "$(KERNELVERSION)$$($(CONFIG_SHELL) $(srctree)/scripts/setlocalversion $(srctree))" > $@
10
11
12@@ -1463,6 +1464,7 @@
13 $(PERL) $(src)/scripts/checkstack.pl $(CHECKSTACK_ARCH)
14
15 kernelrelease:
16+ $(Q)rm -f .scmversion
17 @echo "$(KERNELVERSION)$$($(CONFIG_SHELL) $(srctree)/scripts/setlocalversion $(srctree))"
18
19 kernelversion:
20diff -uNr a/scripts/setlocalversion b/scripts/setlocalversion
21--- a/scripts/setlocalversion 2012-05-11 10:40:11.926141561 +0200
22+++ b/scripts/setlocalversion 2012-05-11 10:43:04.818608594 +0200
23@@ -49,12 +49,6 @@
24 # it, because this version is defined in the top level Makefile.
25 if [ -z "`git describe --exact-match 2>/dev/null`" ]; then
26
27- # If only the short version is requested, don't bother
28- # running further git commands
29- if $short; then
30- echo "+"
31- return
32- fi
33 # If we are past a tagged commit (like
34 # "v2.6.30-rc5-302-g72357d5"), we pretty print it.
35 if atag="`git describe 2>/dev/null`"; then
36@@ -98,11 +92,6 @@
37 fi
38 fi
39
40- # Are there uncommitted changes?
41- # These are represented by + after the changeset id.
42- case "$hgid" in
43- *+|*+\ *) printf '%s' -dirty ;;
44- esac
45
46 # All done with mercurial
47 return
48@@ -163,15 +152,6 @@
49 if test "$CONFIG_LOCALVERSION_AUTO" = "y"; then
50 # full scm version string
51 res="$res$(scm_version)"
52-else
53- # append a plus sign if the repository is not in a clean
54- # annotated or signed tagged state (as git describe only
55- # looks at signed or annotated tags - git tag -a/-s) and
56- # LOCALVERSION= is not specified
57- if test "${LOCALVERSION+set}" != "set"; then
58- scm=$(scm_version --short)
59- res="$res${scm:++}"
60- fi
61 fi
62
63 echo "$res"
diff --git a/recipes-kernel/linux/kernel-configure.inc b/recipes-kernel/linux/kernel-configure.inc
new file mode 100644
index 0000000..1e4c8a8
--- /dev/null
+++ b/recipes-kernel/linux/kernel-configure.inc
@@ -0,0 +1,32 @@
1
2SRC_URI += "file://cfg \
3 file://merge_config.sh "
4
5configure_kernel() {
6 # Add debug flavour config elements from fragments
7 # Listed in increasing priority order if conflicts are detected.
8 #
9
10 #
11 #combine features cfgs with defconfig
12 #
13 addon_features=""
14 if [ -n "${2}" ]; then
15 for feature in ${2}; do
16 addon_features="${addon_features} ${WORKDIR}/${feature}.cfg"
17 done
18 fi
19
20 O=${B} ${WORKDIR}/merge_config.sh -m ${1} ${addon_features}
21
22 mv -f ${B}/.config ${B}/.mconfig
23
24 #
25 #in linux kernel 2.6.33, kconfig does not support alldefconfig yet.
26 #
27 if [ "x${PV}" = "x2.6.33" ]; then
28 oe_runmake KCONFIG_ALLCONFIG=${B}/.mconfig O=${B} allnoconfig
29 else
30 oe_runmake KCONFIG_ALLCONFIG=${B}/.mconfig O=${B} alldefconfig
31 fi
32}
diff --git a/recipes-kernel/linux/linux-3.0.6.inc b/recipes-kernel/linux/linux-3.0.6.inc
new file mode 100644
index 0000000..dd2a8b2
--- /dev/null
+++ b/recipes-kernel/linux/linux-3.0.6.inc
@@ -0,0 +1,24 @@
1FILESDIR = "${@os.path.dirname(bb.data.getVar('FILE',d,1))}/linux-${PV}/${MACHINE}"
2
3SRC_URI = "http://www.kernel.org/pub/linux/kernel/v3.0/linux-${PV}.tar.bz2 \
4 file://defconfig \
5 file://0001-add-lsi-acp3448v2-bsp-patches.patch \
6 file://0002-Patch-to-head_44x.S-to-support-lsi-acp3448v2.patch \
7 file://0003-Patch-drivers_dma_Makefile.patch \
8 file://0004-change-arch_powerpc_kernel_setup_32_c.patch \
9 file://0005-Patch-arch_powerpc_mm_tlb_nohash_c.patch \
10 file://0006-backport-mmu_clear_feature-function.patch \
11 file://0007-Enable-CONFIG_RELOCATABLE-for-ppc47x.patch \
12 file://0008-change-serial-baudrate_to_115200.patch \
13 file://0009-add-acp3448-PCIe-controller-driver.patch \
14 file://0010-fix-typo-error-for-acp-pcie.patch \
15 file://0011-fix-compiler.h-__attribute_const__-redefined-problem.patch \
16 "
17
18PV = "3.0.6"
19PR = "r0"
20
21S = "${WORKDIR}/linux-${PV}"
22
23COMPATIBLE_MACHINE = "acp3448v2"
24
diff --git a/recipes-kernel/linux/linux-3.0.6/acp3448v2/0001-add-lsi-acp3448v2-bsp-patches.patch b/recipes-kernel/linux/linux-3.0.6/acp3448v2/0001-add-lsi-acp3448v2-bsp-patches.patch
new file mode 100644
index 0000000..33f6a96
--- /dev/null
+++ b/recipes-kernel/linux/linux-3.0.6/acp3448v2/0001-add-lsi-acp3448v2-bsp-patches.patch
@@ -0,0 +1,29202 @@
1From a2385484a70264bfcd06f65242aafcac53cdf661 Mon Sep 17 00:00:00 2001
2From: Jerry Pei <jerry.pei@enea.com>
3Date: Mon, 23 Apr 2012 12:28:50 +0800
4Subject: [PATCH 1/7] add lsi acp3448v2 bsp patches to mainline linux-3.0.6
5
6Signed-off-by: Jerry Pei <jerry.pei@enea.com>
7---
8 Documentation/powerpc/dts-bindings/open-pic.txt | 98 +
9 arch/powerpc/Kconfig | 2 +-
10 arch/powerpc/Makefile | 13 +
11 arch/powerpc/boot/Makefile | 38 +-
12 arch/powerpc/boot/acp.c | 262 ++
13 arch/powerpc/boot/crt0.S | 63 +
14 arch/powerpc/boot/dts/acp.dts | 129 +
15 arch/powerpc/boot/dts/acpiss.dts | 175 +
16 arch/powerpc/boot/dts/acpx1.dts | 129 +
17 arch/powerpc/boot/dts/iss476-amp1.dts | 124 +
18 arch/powerpc/boot/dts/iss476-amp2.dts | 123 +
19 arch/powerpc/boot/dts/iss4xx-mpic.dts | 5 +-
20 arch/powerpc/boot/main.c | 6 +-
21 arch/powerpc/boot/serial.c | 16 +
22 arch/powerpc/boot/treeboot-acp.c | 65 +
23 arch/powerpc/boot/treeboot-acpiss.c | 56 +
24 arch/powerpc/boot/treeboot-iss4xx-hi.c | 65 +
25 arch/powerpc/boot/wrapper | 10 +-
26 arch/powerpc/configs/acp_ACP344xV1_defconfig | 1267 +++++++
27 arch/powerpc/configs/acp_dbgconfig | 1655 +++++++++
28 arch/powerpc/configs/acp_defconfig | 1641 ++++++++
29 arch/powerpc/configs/acp_mel_defconfig | 1859 ++++++++++
30 arch/powerpc/configs/acp_srio_defconfig | 1640 ++++++++
31 arch/powerpc/configs/acpiss_defconfig | 1054 ++++++
32 arch/powerpc/include/asm/asm-compat.h | 23 +
33 arch/powerpc/include/asm/cputable.h | 2 +
34 arch/powerpc/include/asm/dcr-native.h | 26 +-
35 arch/powerpc/include/asm/lsi.h | 6 +
36 arch/powerpc/include/asm/mpic.h | 2 +
37 arch/powerpc/include/asm/ppc-opcode.h | 4 +
38 arch/powerpc/include/asm/reg.h | 3 +-
39 arch/powerpc/include/asm/reg_booke.h | 10 +
40 arch/powerpc/include/asm/spinlock.h | 50 +-
41 arch/powerpc/kernel/cputable.c | 34 +-
42 arch/powerpc/kernel/entry_32.S | 35 +-
43 arch/powerpc/kernel/head_booke.h | 6 +-
44 arch/powerpc/kernel/misc_32.S | 33 +-
45 arch/powerpc/kernel/misc_64.S | 22 +
46 arch/powerpc/kernel/smp.c | 13 +-
47 arch/powerpc/kernel/traps.c | 45 +
48 arch/powerpc/kernel/udbg.c | 2 +
49 arch/powerpc/kernel/udbg_16550.c | 132 +-
50 arch/powerpc/lib/copy_32.S | 7 +-
51 arch/powerpc/mm/44x_mmu.c | 4 -
52 arch/powerpc/mm/init_32.c | 5 +
53 arch/powerpc/platforms/44x/Kconfig | 26 +
54 arch/powerpc/platforms/44x/Makefile | 2 +
55 arch/powerpc/platforms/44x/acpx1.c | 182 +
56 arch/powerpc/sysdev/mpic.c | 31 +-
57 arch/powerpc/sysdev/ppc4xx_soc.c | 90 +
58 drivers/Kconfig | 2 +
59 drivers/Makefile | 2 +
60 drivers/block/Kconfig | 4 +
61 drivers/block/Makefile | 1 +
62 drivers/block/iss_blk.c | 394 ++
63 drivers/dma/Kconfig | 4 +
64 drivers/dma/lsi-dma.c | 549 +++
65 drivers/dma/lsi-dma.h | 42 +
66 drivers/i2c/busses/Kconfig | 6 +
67 drivers/i2c/busses/Makefile | 1 +
68 drivers/i2c/busses/i2c-lsi.c | 352 ++
69 drivers/i2c/busses/i2c-lsi.h | 60 +
70 drivers/lsi/Kconfig | 104 +
71 drivers/lsi/Makefile | 1 +
72 drivers/lsi/acp/Makefile | 13 +
73 drivers/lsi/acp/clocks.c | 253 ++
74 drivers/lsi/acp/nand.c | 3666 ++++++++++++++++++
75 drivers/lsi/acp/ncr.c | 280 ++
76 drivers/lsi/acp/ncr.h | 40 +
77 drivers/lsi/acp/net.c | 4534 +++++++++++++++++++++++
78 drivers/lsi/acp/pci_plx.c | 795 ++++
79 drivers/lsi/acp/serial.c | 1342 +++++++
80 drivers/lsi/acp/test.c | 300 ++
81 drivers/lsi/acp/ubootenv.c | 557 +++
82 drivers/lsi/acp/version.c | 347 ++
83 drivers/lsi/acp/wrappers.c | 257 ++
84 drivers/lsi/common/debug.h | 63 +
85 drivers/lsi/common/version.h | 28 +
86 drivers/mtd/devices/phram.c | 1 +
87 drivers/mtd/nand/nand_base.c | 88 +-
88 drivers/mtd/nand/nand_ids.c | 1 +
89 drivers/rapidio/Kconfig | 2 +
90 drivers/rapidio/Makefile | 1 +
91 drivers/rapidio/mports/Kconfig | 23 +
92 drivers/rapidio/mports/Makefile | 5 +
93 drivers/rapidio/mports/tsi620/Makefile | 6 +
94 drivers/rapidio/mports/tsi620/tsi620.c | 703 ++++
95 drivers/rapidio/mports/tsi620/tsi620.h | 123 +
96 drivers/rapidio/rio-scan.c | 11 +-
97 drivers/rapidio/rio.c | 31 +-
98 drivers/usb/host/Kconfig | 13 +
99 drivers/usb/host/ci13612.h | 887 +++++
100 drivers/usb/host/ehci-ci13612.c | 215 ++
101 drivers/usb/host/ehci-ci13612.h | 54 +
102 drivers/usb/host/ehci-hcd.c | 31 +
103 include/linux/rio.h | 14 +
104 kernel/smp.c | 19 +-
105 scripts/rw.sh | 120 +
106 scripts/tags.sh | 3 +-
107 103 files changed, 28496 insertions(+), 89 deletions(-)
108 create mode 100644 Documentation/powerpc/dts-bindings/open-pic.txt
109 create mode 100644 arch/powerpc/boot/acp.c
110 create mode 100644 arch/powerpc/boot/dts/acp.dts
111 create mode 100644 arch/powerpc/boot/dts/acpiss.dts
112 create mode 100644 arch/powerpc/boot/dts/acpx1.dts
113 create mode 100644 arch/powerpc/boot/dts/iss476-amp1.dts
114 create mode 100644 arch/powerpc/boot/dts/iss476-amp2.dts
115 create mode 100644 arch/powerpc/boot/treeboot-acp.c
116 create mode 100644 arch/powerpc/boot/treeboot-acpiss.c
117 create mode 100644 arch/powerpc/boot/treeboot-iss4xx-hi.c
118 create mode 100644 arch/powerpc/configs/acp_ACP344xV1_defconfig
119 create mode 100644 arch/powerpc/configs/acp_dbgconfig
120 create mode 100644 arch/powerpc/configs/acp_defconfig
121 create mode 100644 arch/powerpc/configs/acp_mel_defconfig
122 create mode 100644 arch/powerpc/configs/acp_srio_defconfig
123 create mode 100644 arch/powerpc/configs/acpiss_defconfig
124 create mode 100644 arch/powerpc/include/asm/lsi.h
125 create mode 100644 arch/powerpc/platforms/44x/acpx1.c
126 create mode 100644 drivers/block/iss_blk.c
127 create mode 100644 drivers/dma/lsi-dma.c
128 create mode 100644 drivers/dma/lsi-dma.h
129 create mode 100644 drivers/i2c/busses/i2c-lsi.c
130 create mode 100644 drivers/i2c/busses/i2c-lsi.h
131 create mode 100644 drivers/lsi/Kconfig
132 create mode 100644 drivers/lsi/Makefile
133 create mode 100644 drivers/lsi/acp/Makefile
134 create mode 100644 drivers/lsi/acp/clocks.c
135 create mode 100644 drivers/lsi/acp/nand.c
136 create mode 100644 drivers/lsi/acp/ncr.c
137 create mode 100644 drivers/lsi/acp/ncr.h
138 create mode 100644 drivers/lsi/acp/net.c
139 create mode 100644 drivers/lsi/acp/pci_plx.c
140 create mode 100644 drivers/lsi/acp/serial.c
141 create mode 100644 drivers/lsi/acp/test.c
142 create mode 100644 drivers/lsi/acp/ubootenv.c
143 create mode 100644 drivers/lsi/acp/version.c
144 create mode 100644 drivers/lsi/acp/wrappers.c
145 create mode 100644 drivers/lsi/common/debug.h
146 create mode 100644 drivers/lsi/common/version.h
147 create mode 100644 drivers/rapidio/mports/Kconfig
148 create mode 100644 drivers/rapidio/mports/Makefile
149 create mode 100644 drivers/rapidio/mports/tsi620/Makefile
150 create mode 100644 drivers/rapidio/mports/tsi620/tsi620.c
151 create mode 100644 drivers/rapidio/mports/tsi620/tsi620.h
152 create mode 100644 drivers/usb/host/ci13612.h
153 create mode 100644 drivers/usb/host/ehci-ci13612.c
154 create mode 100644 drivers/usb/host/ehci-ci13612.h
155 create mode 100644 scripts/rw.sh
156
157diff --git a/Documentation/powerpc/dts-bindings/open-pic.txt b/Documentation/powerpc/dts-bindings/open-pic.txt
158new file mode 100644
159index 0000000..909a902
160--- /dev/null
161+++ b/Documentation/powerpc/dts-bindings/open-pic.txt
162@@ -0,0 +1,98 @@
163+* Open PIC Binding
164+
165+This binding specifies what properties must be available in the device tree
166+representation of an Open PIC compliant interrupt controller. This binding is
167+based on the binding defined for Open PIC in [1] and is a superset of that
168+binding.
169+
170+Required properties:
171+
172+ NOTE: Many of these descriptions were paraphrased here from [1] to aid
173+ readability.
174+
175+ - compatible: Specifies the compatibility list for the PIC. The type
176+ shall be <string> and the value shall include "open-pic".
177+
178+ - reg: Specifies the base physical address(s) and size(s) of this
179+ PIC's addressable register space. The type shall be <prop-encoded-array>.
180+
181+ - interrupt-controller: The presence of this property identifies the node
182+ as an Open PIC. No property value shall be defined.
183+
184+ - #interrupt-cells: Specifies the number of cells needed to encode an
185+ interrupt source. The type shall be a <u32> and the value shall be 2.
186+
187+ - #address-cells: Specifies the number of cells needed to encode an
188+ address. The type shall be <u32> and the value shall be 0. As such,
189+ 'interrupt-map' nodes do not have to specify a parent unit address.
190+
191+Optional properties:
192+
193+ - pic-no-reset: The presence of this property indicates that the PIC
194+ shall not be reset during runtime initialization. No property value shall
195+ be defined. The presence of this property also mandates that any
196+ initialization related to interrupt sources shall be limited to sources
197+ explicitly referenced in the device tree.
198+
199+* Interrupt Specifier Definition
200+
201+ Interrupt specifiers consists of 2 cells encoded as
202+ follows:
203+
204+ - <1st-cell>: The interrupt-number that identifies the interrupt source.
205+
206+ - <2nd-cell>: The level-sense information, encoded as follows:
207+ 0 = low-to-high edge triggered
208+ 1 = active low level-sensitive
209+ 2 = active high level-sensitive
210+ 3 = high-to-low edge triggered
211+
212+* Examples
213+
214+Example 1:
215+
216+ /*
217+ * An Open PIC interrupt controller
218+ */
219+ mpic: pic@40000 {
220+ // This is an interrupt controller node.
221+ interrupt-controller;
222+
223+ // No address cells so that 'interrupt-map' nodes which reference
224+ // this Open PIC node do not need a parent address specifier.
225+ #address-cells = <0>;
226+
227+ // Two cells to encode interrupt sources.
228+ #interrupt-cells = <2>;
229+
230+ // Offset address of 0x40000 and size of 0x40000.
231+ reg = <0x40000 0x40000>;
232+
233+ // Compatible with Open PIC.
234+ compatible = "open-pic";
235+
236+ // The PIC shall not be reset.
237+ pic-no-reset;
238+ };
239+
240+Example 2:
241+
242+ /*
243+ * An interrupt generating device that is wired to an Open PIC.
244+ */
245+ serial0: serial@4500 {
246+ // Interrupt source '42' that is active high level-sensitive.
247+ // Note that there are only two cells as specified in the interrupt
248+ // parent's '#interrupt-cells' property.
249+ interrupts = <42 2>;
250+
251+ // The interrupt controller that this device is wired to.
252+ interrupt-parent = <&mpic>;
253+ };
254+
255+* References
256+
257+[1] Power.org (TM) Standard for Embedded Power Architecture (TM) Platform
258+ Requirements (ePAPR), Version 1.0, July 2008.
259+ (http://www.power.org/resources/downloads/Power_ePAPR_APPROVED_v1.0.pdf)
260+
261diff --git a/arch/powerpc/Kconfig b/arch/powerpc/Kconfig
262index 2729c66..da004ed 100644
263--- a/arch/powerpc/Kconfig
264+++ b/arch/powerpc/Kconfig
265@@ -890,7 +890,7 @@ config KERNEL_START
266
267 config PHYSICAL_START_BOOL
268 bool "Set physical address where the kernel is loaded"
269- depends on ADVANCED_OPTIONS && FLATMEM && FSL_BOOKE
270+ depends on ADVANCED_OPTIONS && FLATMEM && FSL_BOOKE || ACP
271 help
272 This gives the physical address where the kernel is loaded.
273
274diff --git a/arch/powerpc/Makefile b/arch/powerpc/Makefile
275index b7212b6..22019af 100644
276--- a/arch/powerpc/Makefile
277+++ b/arch/powerpc/Makefile
278@@ -130,7 +130,9 @@ ifeq ($(CONFIG_FUNCTION_TRACER),y)
279 KBUILD_CFLAGS += -mno-sched-epilog
280 endif
281
282+ifneq ($(CONFIG_ACP),y)
283 cpu-as-$(CONFIG_4xx) += -Wa,-m405
284+endif
285 cpu-as-$(CONFIG_6xx) += -Wa,-maltivec
286 cpu-as-$(CONFIG_POWER4) += -Wa,-maltivec
287 cpu-as-$(CONFIG_E500) += -Wa,-me500
288@@ -187,6 +189,17 @@ $(BOOT_TARGETS1): vmlinux
289 $(BOOT_TARGETS2): vmlinux
290 $(Q)$(MAKE) ARCH=ppc64 $(build)=$(boot) $(patsubst %,$(boot)/%,$@)
291
292+vmlinux.bin: vmlinux
293+ @echo -e " OBJCOPY => vmlinux.bin"
294+ $(Q)$(OBJCOPY) -O binary -R .note -R .comment -S vmlinux vmlinux.bin
295+#
296+# Generate search path for RISCWatch
297+# ---------------------------------------------------------------------------
298+quiet_cmd_rw = GEN
299+ cmd_rw = $(CONFIG_SHELL) $(srctree)/scripts/rw.sh
300+
301+rw.path:
302+ $(call cmd,rw)
303
304 bootwrapper_install:
305 $(Q)$(MAKE) ARCH=ppc64 $(build)=$(boot) $(patsubst %,$(boot)/%,$@)
306diff --git a/arch/powerpc/boot/Makefile b/arch/powerpc/boot/Makefile
307index c26200b..3d75d98 100644
308--- a/arch/powerpc/boot/Makefile
309+++ b/arch/powerpc/boot/Makefile
310@@ -16,6 +16,8 @@
311 # To make it easier to setup a cross compiler,
312 # CROSS32_COMPILE is setup as a prefix just like CROSS_COMPILE
313 # in the toplevel makefile.
314+#
315+# These patches add ACP3400 support signed-off-by: john.jacques@lsi.com
316
317 all: $(obj)/zImage
318
319@@ -29,6 +31,16 @@ ifdef CONFIG_DEBUG_INFO
320 BOOTCFLAGS += -g
321 endif
322
323+ifdef CONFIG_ACP
324+BOOTCFLAGS += -DCONFIG_ACP
325+BOOTAFLAGS += -DCONFIG_ACP
326+endif
327+
328+ifdef CONFIG_ACPISS
329+BOOTCFLAGS += -DCONFIG_ACPISS
330+BOOTAFLAGS += -DCONFIG_ACPISS
331+endif
332+
333 ifeq ($(call cc-option-yn, -fstack-protector),y)
334 BOOTCFLAGS += -fno-stack-protector
335 endif
336@@ -45,7 +57,11 @@ $(obj)/cuboot-katmai.o: BOOTCFLAGS += -mcpu=405
337 $(obj)/cuboot-acadia.o: BOOTCFLAGS += -mcpu=405
338 $(obj)/treeboot-walnut.o: BOOTCFLAGS += -mcpu=405
339 $(obj)/treeboot-iss4xx.o: BOOTCFLAGS += -mcpu=405
340+$(obj)/treeboot-iss476-amp1.o: BOOTCFLAGS += -mcpu=405
341+$(obj)/treeboot-iss476-amp2.o: BOOTCFLAGS += -mcpu=405
342 $(obj)/virtex405-head.o: BOOTAFLAGS += -mcpu=405
343+$(obj)/treeboot-acpiss.o: BOOTCFLAGS += -mcpu=405
344+$(obj)/treeboot-acp.o: BOOTCFLAGS += -mcpu=405
345
346
347 zlib := inffast.c inflate.c inftrees.c
348@@ -67,7 +83,7 @@ src-wlib := string.S crt0.S crtsavres.S stdio.c main.c \
349 gunzip_util.c elf_util.c $(zlib) devtree.c oflib.c ofconsole.c \
350 4xx.c ebony.c mv64x60.c mpsc.c mv64x60_i2c.c cuboot.c bamboo.c \
351 cpm-serial.c stdlib.c mpc52xx-psc.c planetcore.c uartlite.c \
352- fsl-soc.c mpc8xx.c pq2.c ugecon.c
353+ fsl-soc.c mpc8xx.c pq2.c ugecon.c acp.c
354 src-plat := of.c cuboot-52xx.c cuboot-824x.c cuboot-83xx.c cuboot-85xx.c holly.c \
355 cuboot-ebony.c cuboot-hotfoot.c epapr.c treeboot-ebony.c \
356 prpmc2800.c \
357@@ -79,7 +95,8 @@ src-plat := of.c cuboot-52xx.c cuboot-824x.c cuboot-83xx.c cuboot-85xx.c holly.c
358 cuboot-warp.c cuboot-85xx-cpm2.c cuboot-yosemite.c simpleboot.c \
359 virtex405-head.S virtex.c redboot-83xx.c cuboot-sam440ep.c \
360 cuboot-acadia.c cuboot-amigaone.c cuboot-kilauea.c \
361- gamecube-head.S gamecube.c wii-head.S wii.c treeboot-iss4xx.c
362+ gamecube-head.S gamecube.c wii-head.S wii.c treeboot-iss4xx.c \
363+ treeboot-iss4xx-hi.c treeboot-acpiss.c treeboot-acp.c
364 src-boot := $(src-wlib) $(src-plat) empty.c
365
366 src-boot := $(addprefix $(obj)/, $(src-boot))
367@@ -210,7 +227,12 @@ image-$(CONFIG_KATMAI) += cuImage.katmai
368 image-$(CONFIG_WARP) += cuImage.warp
369 image-$(CONFIG_YOSEMITE) += cuImage.yosemite
370 image-$(CONFIG_ISS4xx) += treeImage.iss4xx \
371- treeImage.iss4xx-mpic
372+ treeImage.iss4xx-mpic \
373+ treeImage.iss476-amp1 \
374+ treeImage.iss476-amp2
375+image-$(CONFIG_ACPISS) += treeImage.acpiss
376+image-$(CONFIG_ACP) += treeImage.acp
377+
378
379 # Board ports in arch/powerpc/platform/8xx/Kconfig
380 image-$(CONFIG_MPC86XADS) += cuImage.mpc866ads
381@@ -283,20 +305,20 @@ initrd-y := $(patsubst zImage%, zImage.initrd%, \
382 initrd-y := $(filter-out $(image-y), $(initrd-y))
383 targets += $(image-y) $(initrd-y)
384
385-$(addprefix $(obj)/, $(initrd-y)): $(obj)/ramdisk.image.gz
386+$(addprefix $(obj)/, $(initrd-y)): $(obj)/ramdisk.image
387
388 # Don't put the ramdisk on the pattern rule; when its missing make will try
389 # the pattern rule with less dependencies that also matches (even with the
390 # hard dependency listed).
391 $(obj)/zImage.initrd.%: vmlinux $(wrapperbits)
392- $(call if_changed,wrap,$*,,,$(obj)/ramdisk.image.gz)
393+ $(call if_changed,wrap,$*,,,$(obj)/ramdisk.image)
394
395 $(obj)/zImage.%: vmlinux $(wrapperbits)
396 $(call if_changed,wrap,$*)
397
398 # dtbImage% - a dtbImage is a zImage with an embedded device tree blob
399 $(obj)/dtbImage.initrd.%: vmlinux $(wrapperbits) $(obj)/%.dtb
400- $(call if_changed,wrap,$*,,$(obj)/$*.dtb,$(obj)/ramdisk.image.gz)
401+ $(call if_changed,wrap,$*,,$(obj)/$*.dtb,$(obj)/ramdisk.image)
402
403 $(obj)/dtbImage.%: vmlinux $(wrapperbits) $(obj)/%.dtb
404 $(call if_changed,wrap,$*,,$(obj)/$*.dtb)
405@@ -322,13 +344,13 @@ $(obj)/cuImage.%: vmlinux $(obj)/%.dtb $(wrapperbits)
406 $(call if_changed,wrap,cuboot-$*,,$(obj)/$*.dtb)
407
408 $(obj)/simpleImage.initrd.%: vmlinux $(obj)/%.dtb $(wrapperbits)
409- $(call if_changed,wrap,simpleboot-$*,,$(obj)/$*.dtb,$(obj)/ramdisk.image.gz)
410+ $(call if_changed,wrap,simpleboot-$*,,$(obj)/$*.dtb,$(obj)/ramdisk.image)
411
412 $(obj)/simpleImage.%: vmlinux $(obj)/%.dtb $(wrapperbits)
413 $(call if_changed,wrap,simpleboot-$*,,$(obj)/$*.dtb)
414
415 $(obj)/treeImage.initrd.%: vmlinux $(obj)/%.dtb $(wrapperbits)
416- $(call if_changed,wrap,treeboot-$*,,$(obj)/$*.dtb,$(obj)/ramdisk.image.gz)
417+ $(call if_changed,wrap,treeboot-$*,,$(obj)/$*.dtb,$(obj)/ramdisk.image)
418
419 $(obj)/treeImage.%: vmlinux $(obj)/%.dtb $(wrapperbits)
420 $(call if_changed,wrap,treeboot-$*,,$(obj)/$*.dtb)
421diff --git a/arch/powerpc/boot/acp.c b/arch/powerpc/boot/acp.c
422new file mode 100644
423index 0000000..a68c8fd
424--- /dev/null
425+++ b/arch/powerpc/boot/acp.c
426@@ -0,0 +1,262 @@
427+/*
428+ * arch/powerpc/boot/acp.c
429+ *
430+ * Copyright (C) 2010 LSI
431+ *
432+ * This program is free software; you can redistribute it and/or modify
433+ * it under the terms of the GNU General Public License as published by
434+ * the Free Software Foundation; either version 2 of the License, or
435+ * (at your option) any later version.
436+ *
437+ * This program is distributed in the hope that it will be useful,
438+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
439+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
440+ * GNU General Public License for more details.
441+ *
442+ * You should have received a copy of the GNU General Public License
443+ * along with this program; if not, write to the Free Software
444+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
445+ */
446+
447+#include "io.h"
448+#include "ops.h"
449+
450+#if 1
451+#define writeapb(offset, value) out_le32((offset), (value))
452+#define readapb(offset) in_le32((offset))
453+#else
454+static inline void
455+writeapb(unsigned *address, int value)
456+{
457+ __asm__ __volatile__("stwbrx %1,0,%2"
458+ : "=m" (*address)
459+ : "r" (value), "r" (address));
460+}
461+static inline unsigned
462+readapb(const unsigned *address)
463+{
464+ unsigned value;
465+
466+ __asm__ __volatile__("lwbrx %0,0,%1; twi 0,%0,0"
467+ : "=r" (value)
468+ : "r" (address), "m" (*address));
469+
470+ return value;
471+}
472+#endif
473+
474+/*
475+ ======================================================================
476+ ======================================================================
477+ Clocks and Divisors...
478+ ======================================================================
479+ ======================================================================
480+*/
481+
482+static void *timer_base;
483+
484+#define TIMER_LOAD 0x00
485+#define TIMER_VALUE 0x04
486+#define TIMER_CONTROL 0x08
487+#define TIMER_CONTROL_ENABLE 0x80
488+#define TIMER_CONTROL_MODE 0x40
489+#define TIMER_CONTROL_INTERRUPT_ENABLE 0x20
490+#define TIMER_CONTROL_OUTPUT_MODE 0x10
491+#define TIMER_CONTROL_PRESCALER 0x0c
492+#define TIMER_CONTROL_SIZE 0x02
493+#define TIMER_CONTROL_ONE_SHOT 0x01
494+#define TIMER_INTCLR 0x0C
495+#define TIMER_RIS 0x10
496+#define TIMER_MIS 0x14
497+#define TIMER_BGLOAD 0x18
498+
499+/*
500+ ======================================================================
501+*/
502+
503+struct clock_stuff {
504+
505+ unsigned char ibrd;
506+ unsigned char fbrd;
507+
508+};
509+
510+/*
511+ ----------------------------------------------------------------------
512+ get_clock_stuff
513+*/
514+
515+static int
516+get_clock_stuff(int baud_rate, struct clock_stuff *clock_stuff)
517+{
518+
519+ unsigned long speed_;
520+ unsigned long divisor_;
521+ unsigned long ibrd_, fbrd_;
522+
523+ speed_ = 6500000;
524+
525+ /*
526+ The UART clock is derived from the ARM core clock using the second
527+ timer (timer 1). Each time timer 1 crosses zero, the UART clock
528+ gets toggled. The timer load value acts as a divisor.
529+
530+ Since the IBDR (integer part of the baud rate divisor) is a 16 bit
531+ quatity, find the minimum load value that will let the IBDR/FBDR
532+ result in the desired baud rate.
533+ */
534+
535+ divisor_ = 1;
536+
537+ do {
538+ ibrd_ = (speed_ / ++divisor_) / (16 * baud_rate);
539+ } while (0xff < ibrd_);
540+
541+ /*
542+ The following forumla is from the ARM document (ARM DDI 0183E).
543+
544+ Baud Rate Divisor = (Uart Clock / (16 * Baud Rate))
545+
546+ Baud Rate Divisor is then split into integral and fractional
547+ parts. The IBRD value is simply the itegral part. The FBRD is
548+ calculated as follows.
549+
550+ FBRD = fractional part of the Baud Rate Divisor * 64 + 0.5
551+
552+ The fractional part of the Baud Rate Divisor can be represented as
553+ follows.
554+
555+ (Uart Clock % (16 * baud_rate)) / (16 * baud_rate)
556+
557+ As long as the division isn't done till the end. So, the above *
558+ 64 + 0.5 is the FBRD. Also note that x/y + 1/2 = (2x+y)/2y. This
559+ leads to
560+
561+ ((Uart Clock % (16 * baud_rate)) * 64 * 2 + (16 * baud_rate))
562+ ---------------------------------------------------------------------
563+ 2 * (16 * baud_rate)
564+ */
565+
566+ fbrd_ = (speed_ / divisor_) % (16 * baud_rate);
567+ fbrd_ *= 128;
568+ fbrd_ += (16 * baud_rate);
569+ fbrd_ /= (2 * (16 * baud_rate));
570+
571+ --divisor_;
572+ clock_stuff->ibrd = ibrd_;
573+ clock_stuff->fbrd = fbrd_;
574+
575+ /*
576+ * Set up the clock.
577+ */
578+
579+ writeapb(timer_base + TIMER_CONTROL, 0);
580+ writeapb(timer_base + TIMER_LOAD, divisor_);
581+ writeapb(timer_base + TIMER_CONTROL,
582+ (TIMER_CONTROL_ENABLE | TIMER_CONTROL_MODE));
583+
584+ return 0;
585+
586+}
587+
588+/*
589+ ======================================================================
590+ ======================================================================
591+ serial
592+ ======================================================================
593+ ======================================================================
594+*/
595+
596+static void *uart0_base;
597+
598+#define UART_DR 0x00
599+#define UART_FR 0x18
600+#define UART_IBRD 0x24
601+#define UART_FBRD 0x28
602+#define UART_LCR_H 0x2c
603+#define UART_CR 0x30
604+#define UART_IFLS 0x34
605+#define UART_IMSC 0x38
606+#define UART_ECR 0x04
607+
608+#define FR_RXFE 0x10
609+#define FR_TXFF 0x20
610+
611+static int
612+acp_serial_open(void)
613+{
614+ struct clock_stuff clock_stuff;
615+
616+ get_clock_stuff(9600, &clock_stuff);
617+ writeapb(uart0_base + UART_IBRD, clock_stuff.ibrd);
618+ writeapb(uart0_base + UART_FBRD, clock_stuff.fbrd);
619+ writeapb(uart0_base + UART_LCR_H, 0x70);
620+ writeapb(uart0_base + UART_CR, 0x301);
621+ writeapb(uart0_base + UART_IFLS, 0);
622+ writeapb(uart0_base + UART_IMSC, 0x700);
623+ writeapb(uart0_base + UART_ECR, 0);
624+
625+ return 0;
626+}
627+
628+static void
629+acp_serial_putc(unsigned char c)
630+{
631+ while (0 != (readapb(uart0_base + UART_FR) & FR_TXFF))
632+ ;
633+
634+ if ('\n' == c) {
635+ writeapb(uart0_base + UART_DR, '\r');
636+ while (0 != (readapb(uart0_base + UART_FR) & FR_TXFF))
637+ ;
638+ }
639+
640+ writeapb(uart0_base + UART_DR, c);
641+
642+ return;
643+}
644+
645+static unsigned char
646+acp_serial_getc(void)
647+{
648+ while (0 != (readapb(uart0_base + UART_FR) & FR_RXFE))
649+ ;
650+ return readapb(uart0_base + UART_DR);
651+}
652+
653+static unsigned char
654+acp_serial_tstc(void)
655+{
656+ return (0 != (readapb(uart0_base + UART_FR) & FR_RXFE));
657+}
658+
659+int
660+acp_console_init(void *devp, struct serial_console_data *scdp)
661+{
662+#if 0
663+ unsigned long reg_offset;
664+
665+ if (dt_get_virtual_reg(devp, (void **) &uart0_base, 1) < 1)
666+ return -1;
667+
668+ if (sizeof(reg_offset) ==
669+ getprop(devp, "reg-offset", &reg_offset, sizeof(reg_offset)))
670+ uart0_base += reg_offset;
671+
672+ if (sizeof(reg_shift) !=
673+ getprop(devp, "reg-shift", &reg_shift, sizeof(reg_shift)))
674+ reg_shift = 0;
675+#else
676+ uart0_base = (void *) 0xf0004000;
677+ /*uart0_base = (void *) 0xf0024000;*/
678+ timer_base = (void *) 0xf0008040;
679+ /*timer_base = (void *) 0xf0029040;*/
680+#endif
681+ scdp->open = acp_serial_open;
682+ scdp->putc = acp_serial_putc;
683+ scdp->getc = acp_serial_getc;
684+ scdp->tstc = acp_serial_tstc;
685+ scdp->close = NULL;
686+
687+ return 0;
688+}
689diff --git a/arch/powerpc/boot/crt0.S b/arch/powerpc/boot/crt0.S
690index 0f7428a..db5db46 100644
691--- a/arch/powerpc/boot/crt0.S
692+++ b/arch/powerpc/boot/crt0.S
693@@ -34,6 +34,69 @@ p_pstack: .long _platform_stack_top
694 _zimage_start:
695 .globl _zimage_start_lib
696 _zimage_start_lib:
697+
698+#ifdef CONFIG_PPC47x
699+ /* Clear all UTLB entries as recommended by IBM (work-around) */
700+
701+ addis r3,0,0x8000
702+ addi r4,0,0
703+ addi r5,0,0
704+ b clear_utlb_entry
705+
706+ #; Align the loop to speed things up a bit.
707+ .align 6
708+
709+clear_utlb_entry:
710+
711+ tlbwe r4,r3,0
712+ tlbwe r5,r3,1
713+ tlbwe r5,r3,2
714+ addo r6,r6,r6
715+ addo r6,r6,r6
716+ addo r6,r6,r6
717+ addo r6,r6,r6
718+ addo r6,r6,r6
719+ addis r3,r3,0x2000
720+ cmpwi r3,0
721+ bne clear_utlb_entry
722+ addis r3,0,0x8000
723+ addis r4,r4,0x100
724+ cmpwi r4,0
725+ bne clear_utlb_entry
726+
727+ #; Restore the inital UTLB entries.
728+ addi r23,0,0
729+ addi r24,0,0xbf0
730+ addi r25,0,0
731+ lis r26,(0x00030307)@h
732+ ori r26,r26,(0x00030307)@l
733+ tlbwe r24,r23,0
734+ tlbwe r25,r23,1
735+ tlbwe r26,r23,2
736+ addo r6,r6,r6
737+ addo r6,r6,r6
738+ addo r6,r6,r6
739+ addo r6,r6,r6
740+ addo r6,r6,r6
741+ lis r23,(0x00f00000)@h
742+ ori r23,r23,(0x00f0000)@l
743+ lis r24,(0xf0000870)@h
744+ ori r24,r24,(0xf0000870)@l
745+ lis r25,(0x00400020)@h
746+ ori r25,r25,(0x00400020)@l
747+ lis r26,(0x00030707)@h
748+ ori r26,r26,(0x00030707)@l
749+ tlbwe r24,r23,0
750+ tlbwe r25,r23,1
751+ tlbwe r26,r23,2
752+ addo r6,r6,r6
753+ addo r6,r6,r6
754+ addo r6,r6,r6
755+ addo r6,r6,r6
756+ addo r6,r6,r6
757+ isync
758+#endif
759+
760 /* Work out the offset between the address we were linked at
761 and the address where we're running. */
762 bl .+4
763diff --git a/arch/powerpc/boot/dts/acp.dts b/arch/powerpc/boot/dts/acp.dts
764new file mode 100644
765index 0000000..90965db
766--- /dev/null
767+++ b/arch/powerpc/boot/dts/acp.dts
768@@ -0,0 +1,129 @@
769+/*
770+ * Device Tree Source for IBM Embedded PPC 476 Platform
771+ *
772+ * Copyright 2009 Torez Smith, IBM Corporation.
773+ *
774+ * Based on earlier code:
775+ * Copyright (c) 2006, 2007 IBM Corp.
776+ * Josh Boyer <jwboyer@linux.vnet.ibm.com>, David Gibson <dwg@au1.ibm.com>
777+ *
778+ * This file is licensed under the terms of the GNU General Public
779+ * License version 2. This program is licensed "as is" without
780+ * any warranty of any kind, whether express or implied.
781+ *
782+ * These patches add ACP3400 support signed-off-by: john.jacques@lsi.com
783+ */
784+
785+/dts-v1/;
786+
787+/memreserve/ 0x01f00000 0x00100000;
788+
789+/ {
790+ #address-cells = <2>;
791+ #size-cells = <1>;
792+ model = "ibm,acpx1-4xx";
793+ compatible = "ibm,acpx1-4xx";
794+ dcr-parent = <&{/cpus/cpu@0}>;
795+
796+ aliases {
797+ serial0 = &UART0;
798+ };
799+
800+ cpus {
801+ #address-cells = <1>;
802+ #size-cells = <0>;
803+
804+ cpu@0 {
805+ device_type = "cpu";
806+ model = "PowerPC,4xx"; // real CPU changed in sim
807+ reg = <0>;
808+ clock-frequency = <12500000>; // 12.5 MHz
809+ //timebase-frequency = <781250>; // CCR1 is div by 16
810+ timebase-frequency = <12500000>; // 12.5 MHz
811+ //timebase-frequency = <50000000>; // 50 MHz
812+ i-cache-line-size = <32>;
813+ d-cache-line-size = <32>;
814+ i-cache-size = <32768>;
815+ d-cache-size = <32768>;
816+ dcr-controller;
817+ dcr-access-method = "native";
818+ status = "ok";
819+ };
820+ };
821+
822+ memory {
823+ device_type = "memory";
824+ /*
825+ * Originally we have 256M of RAM on the system. Start at 4M
826+ * offset and define the RAM to be 252M instead (256M - 4M).
827+ *
828+ * Since we are hard coding RAM, comment out the
829+ * line platform_ops.fixups = iss_4xx_fixups;
830+ * inside file arch/powerpc/boot/treeboot-iss4xx.c
831+ * This allows us to statically define it instead of later calling
832+ * dt_fixup_memory() to define it and re-write found value inside
833+ * device tree.
834+ *
835+ * Using 2 Address Cell and 1 Size Cell notation
836+ */
837+ /*
838+ * This is the original RAM line...filled in later by dt_fixup_memory()
839+ * routine.
840+ reg = <0x00000000 0x00000000 0x00000000>; // Filled in by zImage
841+ */
842+
843+ reg = < 0x0 0x400000 0xFC00000 >; // hardcode 252M starting at 4M
844+ };
845+
846+ MPIC: interrupt-controller {
847+ compatible = "chrp,open-pic";
848+ interrupt-controller;
849+ dcr-reg = <0xffc00000 0x00030000>;
850+ #address-cells = <0>;
851+ #size-cells = <0>;
852+ #interrupt-cells = <2>;
853+
854+ };
855+
856+ plb {
857+ compatible = "ibm,plb-4xx", "ibm,plb4"; /* Could be PLB6, doesn't matter */
858+ #address-cells = <2>;
859+ #size-cells = <1>;
860+ ranges;
861+ clock-frequency = <0>; // Filled in by zImage
862+
863+ POB0: opb {
864+ compatible = "ibm,opb-4xx", "ibm,opb";
865+ #address-cells = <1>;
866+ #size-cells = <1>;
867+ /* Wish there was a nicer way of specifying a full 32-bit
868+ range */
869+ ranges = <0x00000000 0x00000001 0x00000000 0x80000000
870+ 0x80000000 0x00000001 0x80000000 0x80000000>;
871+ clock-frequency = <0>; // Filled in by zImage
872+ UART0: serial@00404000 {
873+ device_type = "serial";
874+ compatible = "acp-uart0";
875+ reg = <0x00404000 0x00001000>;
876+ virtual-reg = <0xf0004000>;
877+ clock-frequency = <33333333>;
878+ current-speed = <9600>;
879+ interrupt-parent = <&MPIC>;
880+ interrupts = <22>;
881+ };
882+ };
883+ };
884+
885+ nvrtc {
886+ compatible = "ds1743-nvram", "ds1743", "rtc-ds1743";
887+ reg = <0 0xEF703000 0x2000>;
888+ };
889+ iss-block {
890+ compatible = "ibm,iss-sim-block-device";
891+ reg = <0 0xEF701000 0x1000>;
892+ };
893+
894+ chosen {
895+ linux,stdout-path = "/plb/opb/serial@40000200";
896+ };
897+};
898diff --git a/arch/powerpc/boot/dts/acpiss.dts b/arch/powerpc/boot/dts/acpiss.dts
899new file mode 100644
900index 0000000..5dbc143
901--- /dev/null
902+++ b/arch/powerpc/boot/dts/acpiss.dts
903@@ -0,0 +1,175 @@
904+/*
905+ * Device Tree Source for IBM Embedded PPC 476 Platform
906+ *
907+ * Copyright 2009 Torez Smith, IBM Corporation.
908+ *
909+ * Based on earlier code:
910+ * Copyright (c) 2006, 2007 IBM Corp.
911+ * Josh Boyer <jwboyer@linux.vnet.ibm.com>, David Gibson <dwg@au1.ibm.com>
912+ *
913+ * This file is licensed under the terms of the GNU General Public
914+ * License version 2. This program is licensed "as is" without
915+ * any warranty of any kind, whether express or implied.
916+ *
917+ * These patches add ACP3400 support signed-off-by: john.jacques@lsi.com
918+ */
919+
920+/dts-v1/;
921+
922+/memreserve/ 0x01f00000 0x00100000;
923+
924+/ {
925+ #address-cells = <2>;
926+ #size-cells = <1>;
927+ model = "ibm,iss-4xx";
928+ compatible = "ibm,iss-4xx";
929+ dcr-parent = <&{/cpus/cpu@0}>;
930+
931+ aliases {
932+ serial0 = &UART0;
933+ serial1 = &UART1;
934+ };
935+
936+ cpus {
937+ #address-cells = <1>;
938+ #size-cells = <0>;
939+
940+ cpu@0 {
941+ device_type = "cpu";
942+ model = "PowerPC,4xx"; // real CPU changed in sim
943+ reg = <0>;
944+ clock-frequency = <0x5f5e1000>; // 1.6Ghz :-)
945+ timebase-frequency = <0x5f5e1000>;
946+ //clock-frequency = <100000000>; // 100Mhz :-)
947+ //timebase-frequency = <100000000>;
948+ i-cache-line-size = <32>; // may need fixup in sim
949+ d-cache-line-size = <32>; // may need fixup in sim
950+ i-cache-size = <32768>; /* may need fixup in sim */
951+ d-cache-size = <32768>; /* may need fixup in sim */
952+ dcr-controller;
953+ dcr-access-method = "native";
954+ status = "ok";
955+ };
956+ cpu@1 {
957+ device_type = "cpu";
958+ model = "PowerPC,4xx"; // real CPU changed in sim
959+ reg = <1>;
960+ clock-frequency = <0x5f5e1000>; // 1.6Ghz :-)
961+ timebase-frequency = <0x5f5e1000>;
962+ //clock-frequency = <100000000>; // 100Mhz :-)
963+ //timebase-frequency = <100000000>;
964+ i-cache-line-size = <32>; // may need fixup in sim
965+ d-cache-line-size = <32>; // may need fixup in sim
966+ i-cache-size = <32768>; /* may need fixup in sim */
967+ d-cache-size = <32768>; /* may need fixup in sim */
968+ dcr-controller;
969+ dcr-access-method = "native";
970+ status = "disabled";
971+ enable-method = "spin-table";
972+ cpu-release-addr = <0 0x01f00100>;
973+ };
974+ cpu@2 {
975+ device_type = "cpu";
976+ model = "PowerPC,4xx"; // real CPU changed in sim
977+ reg = <2>;
978+ clock-frequency = <0x5f5e1000>; // 1.6Ghz :-)
979+ timebase-frequency = <0x5f5e1000>;
980+ //clock-frequency = <100000000>; // 100Mhz :-)
981+ //timebase-frequency = <100000000>;
982+ i-cache-line-size = <32>; // may need fixup in sim
983+ d-cache-line-size = <32>; // may need fixup in sim
984+ i-cache-size = <32768>; /* may need fixup in sim */
985+ d-cache-size = <32768>; /* may need fixup in sim */
986+ dcr-controller;
987+ dcr-access-method = "native";
988+ status = "disabled";
989+ enable-method = "spin-table";
990+ cpu-release-addr = <0 0x01f00200>;
991+ };
992+ cpu@3 {
993+ device_type = "cpu";
994+ model = "PowerPC,4xx"; // real CPU changed in sim
995+ reg = <3>;
996+ clock-frequency = <0x5f5e1000>; // 1.6Ghz :-)
997+ timebase-frequency = <0x5f5e1000>;
998+ //clock-frequency = <100000000>; // 100Mhz :-)
999+ //timebase-frequency = <100000000>;
1000+ i-cache-line-size = <32>; // may need fixup in sim
1001+ d-cache-line-size = <32>; // may need fixup in sim
1002+ i-cache-size = <32768>; /* may need fixup in sim */
1003+ d-cache-size = <32768>; /* may need fixup in sim */
1004+ dcr-controller;
1005+ dcr-access-method = "native";
1006+ status = "disabled";
1007+ enable-method = "spin-table";
1008+ cpu-release-addr = <0 0x01f00300>;
1009+ };
1010+ };
1011+
1012+ memory {
1013+ device_type = "memory";
1014+ reg = <0x00000000 0x00000000 0x00000000>; // Filled in by zImage
1015+ };
1016+
1017+ MPIC: interrupt-controller {
1018+ compatible = "chrp,open-pic";
1019+ interrupt-controller;
1020+ dcr-reg = <0xffc00000 0x00030000>;
1021+ #address-cells = <0>;
1022+ #size-cells = <0>;
1023+ #interrupt-cells = <2>;
1024+
1025+ };
1026+
1027+ plb {
1028+ compatible = "ibm,plb-4xx", "ibm,plb4"; /* Could be PLB6, doesn't matter */
1029+ #address-cells = <2>;
1030+ #size-cells = <1>;
1031+ ranges;
1032+ clock-frequency = <0>; // Filled in by zImage
1033+
1034+ POB0: opb {
1035+ compatible = "ibm,opb-4xx", "ibm,opb";
1036+ #address-cells = <1>;
1037+ #size-cells = <1>;
1038+ /* Wish there was a nicer way of specifying a full 32-bit
1039+ range */
1040+ ranges = <0x00000000 0x00000001 0x00000000 0x80000000
1041+ 0x80000000 0x00000001 0x80000000 0x80000000>;
1042+ clock-frequency = <0>; // Filled in by zImage
1043+ UART0: serial@40000200 {
1044+ device_type = "serial";
1045+ compatible = "ns16550", "ns16550a";
1046+ reg = <0x40000200 0x00000008>;
1047+ virtual-reg = <0xe0000200>;
1048+ clock-frequency = <11059200>;
1049+ current-speed = <115200>;
1050+ interrupt-parent = <&MPIC>;
1051+ interrupts = <0x0 0x2>;
1052+ };
1053+ UART1: serial@40000300 {
1054+ device_type = "serial";
1055+ compatible = "ns16550", "ns16550a";
1056+ reg = <0x40000300 0x00000008>;
1057+ virtual-reg = <0xe0000300>;
1058+ clock-frequency = <11059200>;
1059+ current-speed = <115200>;
1060+ interrupt-parent = <&MPIC>;
1061+ interrupts = <23 0x2>;
1062+ };
1063+ };
1064+ };
1065+
1066+ nvrtc {
1067+ compatible = "ds1743-nvram", "ds1743", "rtc-ds1743";
1068+ reg = <0 0xEF703000 0x2000>;
1069+ };
1070+ iss-block {
1071+ compatible = "ibm,iss-sim-block-device";
1072+ reg = <0 0xEF701000 0x1000>;
1073+ };
1074+
1075+ chosen {
1076+ linux,stdout-path = "/plb/opb/serial@40000200";
1077+ };
1078+};
1079diff --git a/arch/powerpc/boot/dts/acpx1.dts b/arch/powerpc/boot/dts/acpx1.dts
1080new file mode 100644
1081index 0000000..90965db
1082--- /dev/null
1083+++ b/arch/powerpc/boot/dts/acpx1.dts
1084@@ -0,0 +1,129 @@
1085+/*
1086+ * Device Tree Source for IBM Embedded PPC 476 Platform
1087+ *
1088+ * Copyright 2009 Torez Smith, IBM Corporation.
1089+ *
1090+ * Based on earlier code:
1091+ * Copyright (c) 2006, 2007 IBM Corp.
1092+ * Josh Boyer <jwboyer@linux.vnet.ibm.com>, David Gibson <dwg@au1.ibm.com>
1093+ *
1094+ * This file is licensed under the terms of the GNU General Public
1095+ * License version 2. This program is licensed "as is" without
1096+ * any warranty of any kind, whether express or implied.
1097+ *
1098+ * These patches add ACP3400 support signed-off-by: john.jacques@lsi.com
1099+ */
1100+
1101+/dts-v1/;
1102+
1103+/memreserve/ 0x01f00000 0x00100000;
1104+
1105+/ {
1106+ #address-cells = <2>;
1107+ #size-cells = <1>;
1108+ model = "ibm,acpx1-4xx";
1109+ compatible = "ibm,acpx1-4xx";
1110+ dcr-parent = <&{/cpus/cpu@0}>;
1111+
1112+ aliases {
1113+ serial0 = &UART0;
1114+ };
1115+
1116+ cpus {
1117+ #address-cells = <1>;
1118+ #size-cells = <0>;
1119+
1120+ cpu@0 {
1121+ device_type = "cpu";
1122+ model = "PowerPC,4xx"; // real CPU changed in sim
1123+ reg = <0>;
1124+ clock-frequency = <12500000>; // 12.5 MHz
1125+ //timebase-frequency = <781250>; // CCR1 is div by 16
1126+ timebase-frequency = <12500000>; // 12.5 MHz
1127+ //timebase-frequency = <50000000>; // 50 MHz
1128+ i-cache-line-size = <32>;
1129+ d-cache-line-size = <32>;
1130+ i-cache-size = <32768>;
1131+ d-cache-size = <32768>;
1132+ dcr-controller;
1133+ dcr-access-method = "native";
1134+ status = "ok";
1135+ };
1136+ };
1137+
1138+ memory {
1139+ device_type = "memory";
1140+ /*
1141+ * Originally we have 256M of RAM on the system. Start at 4M
1142+ * offset and define the RAM to be 252M instead (256M - 4M).
1143+ *
1144+ * Since we are hard coding RAM, comment out the
1145+ * line platform_ops.fixups = iss_4xx_fixups;
1146+ * inside file arch/powerpc/boot/treeboot-iss4xx.c
1147+ * This allows us to statically define it instead of later calling
1148+ * dt_fixup_memory() to define it and re-write found value inside
1149+ * device tree.
1150+ *
1151+ * Using 2 Address Cell and 1 Size Cell notation
1152+ */
1153+ /*
1154+ * This is the original RAM line...filled in later by dt_fixup_memory()
1155+ * routine.
1156+ reg = <0x00000000 0x00000000 0x00000000>; // Filled in by zImage
1157+ */
1158+
1159+ reg = < 0x0 0x400000 0xFC00000 >; // hardcode 252M starting at 4M
1160+ };
1161+
1162+ MPIC: interrupt-controller {
1163+ compatible = "chrp,open-pic";
1164+ interrupt-controller;
1165+ dcr-reg = <0xffc00000 0x00030000>;
1166+ #address-cells = <0>;
1167+ #size-cells = <0>;
1168+ #interrupt-cells = <2>;
1169+
1170+ };
1171+
1172+ plb {
1173+ compatible = "ibm,plb-4xx", "ibm,plb4"; /* Could be PLB6, doesn't matter */
1174+ #address-cells = <2>;
1175+ #size-cells = <1>;
1176+ ranges;
1177+ clock-frequency = <0>; // Filled in by zImage
1178+
1179+ POB0: opb {
1180+ compatible = "ibm,opb-4xx", "ibm,opb";
1181+ #address-cells = <1>;
1182+ #size-cells = <1>;
1183+ /* Wish there was a nicer way of specifying a full 32-bit
1184+ range */
1185+ ranges = <0x00000000 0x00000001 0x00000000 0x80000000
1186+ 0x80000000 0x00000001 0x80000000 0x80000000>;
1187+ clock-frequency = <0>; // Filled in by zImage
1188+ UART0: serial@00404000 {
1189+ device_type = "serial";
1190+ compatible = "acp-uart0";
1191+ reg = <0x00404000 0x00001000>;
1192+ virtual-reg = <0xf0004000>;
1193+ clock-frequency = <33333333>;
1194+ current-speed = <9600>;
1195+ interrupt-parent = <&MPIC>;
1196+ interrupts = <22>;
1197+ };
1198+ };
1199+ };
1200+
1201+ nvrtc {
1202+ compatible = "ds1743-nvram", "ds1743", "rtc-ds1743";
1203+ reg = <0 0xEF703000 0x2000>;
1204+ };
1205+ iss-block {
1206+ compatible = "ibm,iss-sim-block-device";
1207+ reg = <0 0xEF701000 0x1000>;
1208+ };
1209+
1210+ chosen {
1211+ linux,stdout-path = "/plb/opb/serial@40000200";
1212+ };
1213+};
1214diff --git a/arch/powerpc/boot/dts/iss476-amp1.dts b/arch/powerpc/boot/dts/iss476-amp1.dts
1215new file mode 100644
1216index 0000000..1b4e6e4
1217--- /dev/null
1218+++ b/arch/powerpc/boot/dts/iss476-amp1.dts
1219@@ -0,0 +1,124 @@
1220+/*
1221+ * Device Tree Source for IBM Embedded PPC 476 Platform
1222+ *
1223+ * Copyright 2010 Torez Smith, IBM Corporation.
1224+ *
1225+ * Based on earlier code:
1226+ * Copyright (c) 2006, 2007 IBM Corp.
1227+ * Josh Boyer <jwboyer@linux.vnet.ibm.com>, David Gibson <dwg@au1.ibm.com>
1228+ *
1229+ * This file is licensed under the terms of the GNU General Public
1230+ * License version 2. This program is licensed "as is" without
1231+ * any warranty of any kind, whether express or implied.
1232+ */
1233+
1234+/dts-v1/;
1235+
1236+/memreserve/ 0x01f00000 0x00100000;
1237+
1238+/ {
1239+ #address-cells = <2>;
1240+ #size-cells = <1>;
1241+ model = "ibm,iss-4xx";
1242+ compatible = "ibm,iss-4xx", "ibm,47x-AMP";
1243+ dcr-parent = <&{/cpus/cpu@0}>;
1244+
1245+ aliases {
1246+ serial0 = &UART0;
1247+ };
1248+
1249+ cpus {
1250+ #address-cells = <1>;
1251+ #size-cells = <0>;
1252+
1253+ cpu@0 {
1254+ device_type = "cpu";
1255+ model = "PowerPC,4xx"; // real CPU changed in sim
1256+ reg = <0>;
1257+ clock-frequency = <100000000>; // 100Mhz :-)
1258+ timebase-frequency = <100000000>;
1259+ i-cache-line-size = <32>;
1260+ d-cache-line-size = <32>;
1261+ i-cache-size = <32768>;
1262+ d-cache-size = <32768>;
1263+ dcr-controller;
1264+ dcr-access-method = "native";
1265+ status = "ok";
1266+ };
1267+ cpu@1 {
1268+ device_type = "cpu";
1269+ model = "PowerPC,4xx"; // real CPU changed in sim
1270+ reg = <1>;
1271+ clock-frequency = <100000000>; // 100Mhz :-)
1272+ timebase-frequency = <100000000>;
1273+ i-cache-line-size = <32>;
1274+ d-cache-line-size = <32>;
1275+ i-cache-size = <32768>;
1276+ d-cache-size = <32768>;
1277+ dcr-controller;
1278+ dcr-access-method = "native";
1279+ status = "disabled";
1280+ enable-method = "spin-table";
1281+ cpu-release-addr = <0 0x01f00100>;
1282+ };
1283+ };
1284+
1285+ memory {
1286+ device_type = "memory";
1287+ reg = <0x00000000 0x00000000 0x00000000>; // Filled in by zImage
1288+
1289+ };
1290+
1291+ MPIC: interrupt-controller {
1292+ compatible = "chrp,open-pic";
1293+ interrupt-controller;
1294+ dcr-reg = <0xffc00000 0x00030000>;
1295+ #address-cells = <0>;
1296+ #size-cells = <0>;
1297+ #interrupt-cells = <2>;
1298+
1299+ };
1300+
1301+ plb {
1302+ compatible = "ibm,plb-4xx", "ibm,plb4"; /* Could be PLB6, doesn't matter */
1303+ #address-cells = <2>;
1304+ #size-cells = <1>;
1305+ ranges;
1306+ clock-frequency = <0>; // Filled in by zImage
1307+
1308+ POB0: opb {
1309+ compatible = "ibm,opb-4xx", "ibm,opb";
1310+ #address-cells = <1>;
1311+ #size-cells = <1>;
1312+ /* Wish there was a nicer way of specifying a full 32-bit
1313+ range */
1314+ ranges = <0x00000000 0x00000001 0x00000000 0x80000000
1315+ 0x80000000 0x00000001 0x80000000 0x80000000>;
1316+ clock-frequency = <0>; // Filled in by zImage
1317+ UART0: serial@40000200 {
1318+ device_type = "serial";
1319+ compatible = "ns16550a";
1320+ reg = <0x40000200 0x00000008>;
1321+ virtual-reg = <0xe0000200>;
1322+ clock-frequency = <11059200>;
1323+ current-speed = <115200>;
1324+ interrupt-parent = <&MPIC>;
1325+ interrupts = <0x0 0x2>;
1326+ };
1327+ };
1328+ };
1329+
1330+ nvrtc {
1331+ compatible = "ds1743-nvram", "ds1743", "rtc-ds1743";
1332+ reg = <0 0xEF703000 0x2000>;
1333+ };
1334+
1335+ iss-block {
1336+ compatible = "ibm,iss-sim-block-device";
1337+ reg = <0 0xEF701000 0x1000>;
1338+ };
1339+
1340+ chosen {
1341+ linux,stdout-path = "/plb/opb/serial@40000200";
1342+ };
1343+};
1344diff --git a/arch/powerpc/boot/dts/iss476-amp2.dts b/arch/powerpc/boot/dts/iss476-amp2.dts
1345new file mode 100644
1346index 0000000..df38ee5
1347--- /dev/null
1348+++ b/arch/powerpc/boot/dts/iss476-amp2.dts
1349@@ -0,0 +1,123 @@
1350+/*
1351+ * Device Tree Source for IBM Embedded PPC 476 Platform
1352+ *
1353+ * Copyright 2010 Torez Smith, IBM Corporation.
1354+ *
1355+ * Based on earlier code:
1356+ * Copyright (c) 2006, 2007 IBM Corp.
1357+ * Josh Boyer <jwboyer@linux.vnet.ibm.com>, David Gibson <dwg@au1.ibm.com>
1358+ *
1359+ * This file is licensed under the terms of the GNU General Public
1360+ * License version 2. This program is licensed "as is" without
1361+ * any warranty of any kind, whether express or implied.
1362+ */
1363+
1364+/dts-v1/;
1365+
1366+/memreserve/ 0x11f00000 0x00100000;
1367+
1368+/ {
1369+ #address-cells = <2>;
1370+ #size-cells = <1>;
1371+ model = "ibm,iss-4xx";
1372+ compatible = "ibm,iss-4xx", "ibm,47x-AMP";
1373+ dcr-parent = <&{/cpus/cpu@2}>;
1374+
1375+ aliases {
1376+ serial0 = &UART0;
1377+ };
1378+
1379+ cpus {
1380+ #address-cells = <1>;
1381+ #size-cells = <0>;
1382+
1383+ cpu@2 {
1384+ device_type = "cpu";
1385+ model = "PowerPC,4xx"; // real CPU changed in sim
1386+ reg = <2>;
1387+ clock-frequency = <100000000>; // 100Mhz :-)
1388+ timebase-frequency = <100000000>;
1389+ i-cache-line-size = <32>;
1390+ d-cache-line-size = <32>;
1391+ i-cache-size = <32768>;
1392+ d-cache-size = <32768>;
1393+ dcr-controller;
1394+ dcr-access-method = "native";
1395+ status = "ok";
1396+ };
1397+ cpu@3 {
1398+ device_type = "cpu";
1399+ model = "PowerPC,4xx"; // real CPU changed in sim
1400+ reg = <3>;
1401+ clock-frequency = <100000000>; // 100Mhz :-)
1402+ timebase-frequency = <100000000>;
1403+ i-cache-line-size = <32>;
1404+ d-cache-line-size = <32>;
1405+ i-cache-size = <32768>;
1406+ d-cache-size = <32768>;
1407+ dcr-controller;
1408+ dcr-access-method = "native";
1409+ status = "disabled";
1410+ enable-method = "spin-table";
1411+ cpu-release-addr = <0 0x11f00300>;
1412+ };
1413+ };
1414+
1415+ memory {
1416+ device_type = "memory";
1417+/*
1418+ reg = <0x00000000 0x00000000 0x00000000>; // Filled in by zImage
1419+ */
1420+ reg = < 0x0 0x10000000 0x02000000 >;
1421+
1422+ };
1423+
1424+ MPIC: interrupt-controller {
1425+ compatible = "chrp,open-pic";
1426+ interrupt-controller;
1427+ dcr-reg = <0xffc00000 0x00030000>;
1428+ #address-cells = <0>;
1429+ #size-cells = <0>;
1430+ #interrupt-cells = <2>;
1431+
1432+ };
1433+
1434+ plb {
1435+ compatible = "ibm,plb-4xx", "ibm,plb4"; /* Could be PLB6, doesn't matter */
1436+ #address-cells = <2>;
1437+ #size-cells = <1>;
1438+ ranges;
1439+ clock-frequency = <0>; // Filled in by zImage
1440+
1441+ POB0: opb {
1442+ compatible = "ibm,opb-4xx", "ibm,opb";
1443+ #address-cells = <1>;
1444+ #size-cells = <1>;
1445+ /* Wish there was a nicer way of specifying a full 32-bit
1446+ range */
1447+ ranges = <0x00000000 0x00000001 0x00000000 0x80000000
1448+ 0x80000000 0x00000001 0x80000000 0x80000000>;
1449+ clock-frequency = <0>; // Filled in by zImage
1450+ UART0: serial@40001200 {
1451+ device_type = "serial";
1452+ compatible = "ns16550a";
1453+ reg = <0x40001200 0x00000008>;
1454+ virtual-reg = <0xe0001200>;
1455+ clock-frequency = <11059200>;
1456+ current-speed = <115200>;
1457+ interrupt-parent = <&MPIC>;
1458+ interrupts = <0x1 0x2>;
1459+ };
1460+ };
1461+ };
1462+
1463+ nvrtc {
1464+ compatible = "ds1743-nvram", "ds1743", "rtc-ds1743";
1465+ reg = <0 0xEF703000 0x2000>;
1466+ };
1467+
1468+ chosen {
1469+ bootargs = "uart_addr=0xf0001200";
1470+ linux,stdout-path = "/plb/opb/serial@40001200";
1471+ };
1472+};
1473diff --git a/arch/powerpc/boot/dts/iss4xx-mpic.dts b/arch/powerpc/boot/dts/iss4xx-mpic.dts
1474index 23e9d9b..b899a10 100644
1475--- a/arch/powerpc/boot/dts/iss4xx-mpic.dts
1476+++ b/arch/powerpc/boot/dts/iss4xx-mpic.dts
1477@@ -97,7 +97,10 @@
1478
1479 memory {
1480 device_type = "memory";
1481- reg = <0x00000000 0x00000000 0x00000000>; // Filled in by zImage
1482+/*
1483+ reg = <0x00000000 0x00000000 0x00000000>; // Filled in by zImage
1484+*/
1485+ reg = <0x0 0x400000 0x1C00000>;
1486
1487 };
1488
1489diff --git a/arch/powerpc/boot/main.c b/arch/powerpc/boot/main.c
1490index a28f021..adc778d 100644
1491--- a/arch/powerpc/boot/main.c
1492+++ b/arch/powerpc/boot/main.c
1493@@ -7,6 +7,8 @@
1494 * modify it under the terms of the GNU General Public License
1495 * as published by the Free Software Foundation; either version
1496 * 2 of the License, or (at your option) any later version.
1497+ *
1498+ * These patches add ACP3400 support signed-off-by: john.jacques@lsi.com
1499 */
1500 #include <stdarg.h>
1501 #include <stddef.h>
1502@@ -32,7 +34,7 @@ static struct addr_range prep_kernel(void)
1503 char elfheader[256];
1504 void *vmlinuz_addr = _vmlinux_start;
1505 unsigned long vmlinuz_size = _vmlinux_end - _vmlinux_start;
1506- void *addr = 0;
1507+ void *addr = 0x400000; /* This NEEDS to be tunable.... */
1508 struct elf_info ei;
1509 int len;
1510
1511@@ -149,8 +151,10 @@ static void prep_cmdline(void *chosen)
1512
1513 printf("\n\rLinux/PowerPC load: %s", cmdline);
1514 /* If possible, edit the command line */
1515+#if 0
1516 if (console_ops.edit_cmdline)
1517 console_ops.edit_cmdline(cmdline, COMMAND_LINE_SIZE);
1518+#endif
1519 printf("\n\r");
1520
1521 /* Put the command line back into the devtree for the kernel */
1522diff --git a/arch/powerpc/boot/serial.c b/arch/powerpc/boot/serial.c
1523index f2156f0..6bf7cef 100644
1524--- a/arch/powerpc/boot/serial.c
1525+++ b/arch/powerpc/boot/serial.c
1526@@ -10,6 +10,8 @@
1527 * the terms of the GNU General Public License version 2. This program
1528 * is licensed "as is" without any warranty of any kind, whether express
1529 * or implied.
1530+ *
1531+ * These patches add ACP3400 support signed-off-by: john.jacques@lsi.com
1532 */
1533 #include <stdarg.h>
1534 #include <stddef.h>
1535@@ -113,6 +115,19 @@ int serial_console_init(void)
1536 void *devp;
1537 int rc = -1;
1538
1539+#if defined(CONFIG_ACPX1) && !defined(CONFIG_ACPISS)
1540+ rc = acp_console_init(devp, &serial_cd);
1541+
1542+ if (0 != rc)
1543+ return -1;
1544+
1545+ console_ops.open = serial_open;
1546+ console_ops.write = serial_write;
1547+ console_ops.close = serial_close;
1548+ console_ops.data = &serial_cd;
1549+
1550+ return 0;
1551+#else
1552 devp = serial_get_stdout_devp();
1553 if (devp == NULL)
1554 goto err_out;
1555@@ -148,4 +163,5 @@ int serial_console_init(void)
1556 }
1557 err_out:
1558 return -1;
1559+#endif
1560 }
1561diff --git a/arch/powerpc/boot/treeboot-acp.c b/arch/powerpc/boot/treeboot-acp.c
1562new file mode 100644
1563index 0000000..3a126a3
1564--- /dev/null
1565+++ b/arch/powerpc/boot/treeboot-acp.c
1566@@ -0,0 +1,65 @@
1567+/*
1568+ * Copyright 2008 Ben. Herrenschmidt, IBM Corporation.
1569+ *
1570+ * Based on earlier code:
1571+ * Copyright (C) Paul Mackerras 1997.
1572+ *
1573+ * Matt Porter <mporter@kernel.crashing.org>
1574+ * Copyright 2002-2005 MontaVista Software Inc.
1575+ *
1576+ * Eugene Surovegin <eugene.surovegin@zultys.com> or <ebs@ebshome.net>
1577+ * Copyright (c) 2003, 2004 Zultys Technologies
1578+ *
1579+ * Copyright 2007 David Gibson, IBM Corporation.
1580+ *
1581+ * This program is free software; you can redistribute it and/or
1582+ * modify it under the terms of the GNU General Public License
1583+ * as published by the Free Software Foundation; either version
1584+ * 2 of the License, or (at your option) any later version.
1585+ */
1586+#include <stdarg.h>
1587+#include <stddef.h>
1588+#include "types.h"
1589+#include "elf.h"
1590+#include "string.h"
1591+#include "stdio.h"
1592+#include "page.h"
1593+#include "ops.h"
1594+#include "reg.h"
1595+#include "io.h"
1596+#include "dcr.h"
1597+#include "4xx.h"
1598+#include "44x.h"
1599+#include "libfdt.h"
1600+
1601+BSS_STACK(4096);
1602+
1603+static void iss_4xx_fixups(void)
1604+{
1605+ ibm4xx_sdram_fixup_memsize();
1606+
1607+ /* Need to fixup icache/dcache info base on core type */
1608+}
1609+#define SPRN_PIR 0x11E /* Processor Identification Register */
1610+void platform_init(void)
1611+{
1612+ /* Sim has at least 128M of RAM ok ? */
1613+ unsigned long end_of_ram = 0x08000000;
1614+ unsigned long avail_ram = end_of_ram - (unsigned long)_end;
1615+ u32 pir_reg;
1616+
1617+ simple_alloc_init(_end, avail_ram, 128, 64);
1618+ /*
1619+ * Hard code RAM to be 252M with a 4M offset...
1620+ * and don't dynamically determine the size. This should
1621+ * change when we start working on real HW and have the
1622+ * ability to query the HW to determine where memory is
1623+ * located.
1624+ platform_ops.fixups = iss_4xx_fixups;
1625+ */
1626+ platform_ops.exit = ibm44x_dbcr_reset;
1627+ pir_reg = mfspr(SPRN_PIR);
1628+ fdt_set_boot_cpuid_phys(_dtb_start, pir_reg);
1629+ fdt_init(_dtb_start);
1630+ serial_console_init();
1631+}
1632diff --git a/arch/powerpc/boot/treeboot-acpiss.c b/arch/powerpc/boot/treeboot-acpiss.c
1633new file mode 100644
1634index 0000000..479ed00
1635--- /dev/null
1636+++ b/arch/powerpc/boot/treeboot-acpiss.c
1637@@ -0,0 +1,56 @@
1638+/*
1639+ * Copyright 2008 Ben. Herrenschmidt, IBM Corporation.
1640+ *
1641+ * Based on earlier code:
1642+ * Copyright (C) Paul Mackerras 1997.
1643+ *
1644+ * Matt Porter <mporter@kernel.crashing.org>
1645+ * Copyright 2002-2005 MontaVista Software Inc.
1646+ *
1647+ * Eugene Surovegin <eugene.surovegin@zultys.com> or <ebs@ebshome.net>
1648+ * Copyright (c) 2003, 2004 Zultys Technologies
1649+ *
1650+ * Copyright 2007 David Gibson, IBM Corporation.
1651+ *
1652+ * This program is free software; you can redistribute it and/or
1653+ * modify it under the terms of the GNU General Public License
1654+ * as published by the Free Software Foundation; either version
1655+ * 2 of the License, or (at your option) any later version.
1656+ *
1657+ * These patches add ACP3400 support signed-off-by: john.jacques@lsi.com
1658+ */
1659+#include <stdarg.h>
1660+#include <stddef.h>
1661+#include "types.h"
1662+#include "elf.h"
1663+#include "string.h"
1664+#include "stdio.h"
1665+#include "page.h"
1666+#include "ops.h"
1667+#include "reg.h"
1668+#include "io.h"
1669+#include "dcr.h"
1670+#include "4xx.h"
1671+#include "44x.h"
1672+
1673+BSS_STACK(4096);
1674+
1675+static void iss_4xx_fixups(void)
1676+{
1677+ ibm4xx_sdram_fixup_memsize();
1678+
1679+ /* Need to fixup icache/dcache info base on core type */
1680+}
1681+
1682+void platform_init(void)
1683+{
1684+ /* Sim has at least 128M of RAM ok ? */
1685+ unsigned long end_of_ram = 0x08000000;
1686+ unsigned long avail_ram = end_of_ram - (unsigned long)_end;
1687+
1688+ simple_alloc_init(_end, avail_ram, 128, 64);
1689+ platform_ops.fixups = iss_4xx_fixups;
1690+ platform_ops.exit = ibm44x_dbcr_reset;
1691+ fdt_init(_dtb_start);
1692+ serial_console_init();
1693+}
1694diff --git a/arch/powerpc/boot/treeboot-iss4xx-hi.c b/arch/powerpc/boot/treeboot-iss4xx-hi.c
1695new file mode 100644
1696index 0000000..c6f376f
1697--- /dev/null
1698+++ b/arch/powerpc/boot/treeboot-iss4xx-hi.c
1699@@ -0,0 +1,65 @@
1700+/*
1701+ * Copyright 2010 Ben. Herrenschmidt, IBM Corporation.
1702+ *
1703+ * Based on earlier code:
1704+ * Copyright (C) Paul Mackerras 1997.
1705+ *
1706+ * Matt Porter <mporter@kernel.crashing.org>
1707+ * Copyright 2002-2005 MontaVista Software Inc.
1708+ *
1709+ * Eugene Surovegin <eugene.surovegin@zultys.com> or <ebs@ebshome.net>
1710+ * Copyright (c) 2003, 2004 Zultys Technologies
1711+ *
1712+ * Copyright 2007 David Gibson, IBM Corporation.
1713+ *
1714+ * This program is free software; you can redistribute it and/or
1715+ * modify it under the terms of the GNU General Public License
1716+ * as published by the Free Software Foundation; either version
1717+ * 2 of the License, or (at your option) any later version.
1718+ */
1719+#include <stdarg.h>
1720+#include <stddef.h>
1721+#include "types.h"
1722+#include "elf.h"
1723+#include "string.h"
1724+#include "stdio.h"
1725+#include "page.h"
1726+#include "ops.h"
1727+#include "reg.h"
1728+#include "io.h"
1729+#include "dcr.h"
1730+#include "4xx.h"
1731+#include "44x.h"
1732+#include "libfdt.h"
1733+
1734+BSS_STACK(4096);
1735+
1736+static void iss_4xx_fixups(void)
1737+{
1738+ ibm4xx_sdram_fixup_memsize();
1739+}
1740+
1741+/*
1742+ * Quick and dirty hack for loading a kernel at fixed address 0x10000000
1743+ */
1744+static void *iss_4xx_vmlinux_alloc(unsigned long size)
1745+{
1746+ return (void *)0x10000000;
1747+}
1748+
1749+#define SPRN_PIR 0x11E /* Processor Indentification Register */
1750+void platform_init(void)
1751+{
1752+ unsigned long end_of_ram = 0x08000000;
1753+ unsigned long avail_ram = end_of_ram - (unsigned long)_end;
1754+ u32 pir_reg;
1755+
1756+ simple_alloc_init(_end, avail_ram, 128, 64);
1757+ /* platform_ops.fixups = iss_4xx_fixups; */
1758+ platform_ops.vmlinux_alloc = iss_4xx_vmlinux_alloc;
1759+ platform_ops.exit = ibm44x_dbcr_reset;
1760+ pir_reg = mfspr(SPRN_PIR);
1761+ fdt_set_boot_cpuid_phys(_dtb_start, pir_reg);
1762+ fdt_init(_dtb_start);
1763+ serial_console_init();
1764+}
1765diff --git a/arch/powerpc/boot/wrapper b/arch/powerpc/boot/wrapper
1766index c74531a..6475baa 100755
1767--- a/arch/powerpc/boot/wrapper
1768+++ b/arch/powerpc/boot/wrapper
1769@@ -143,7 +143,7 @@ objflags=-S
1770 tmp=$tmpdir/zImage.$$.o
1771 ksection=.kernel:vmlinux.strip
1772 isection=.kernel:initrd
1773-link_address='0x400000'
1774+link_address='0x800000'
1775
1776 case "$platform" in
1777 pseries)
1778@@ -247,6 +247,14 @@ gamecube|wii)
1779 treeboot-iss4xx-mpic)
1780 platformo="$object/treeboot-iss4xx.o"
1781 ;;
1782+treeboot-iss476-amp1)
1783+ platformo="$object/treeboot-iss4xx.o"
1784+ link_address='0x400000'
1785+ ;;
1786+treeboot-iss476-amp2)
1787+ platformo="$object/treeboot-iss4xx-hi.o"
1788+ link_address='0x10400000'
1789+ ;;
1790 epapr)
1791 link_address='0x20000000'
1792 pie=-pie
1793diff --git a/arch/powerpc/configs/acp_ACP344xV1_defconfig b/arch/powerpc/configs/acp_ACP344xV1_defconfig
1794new file mode 100644
1795index 0000000..7e164dc
1796--- /dev/null
1797+++ b/arch/powerpc/configs/acp_ACP344xV1_defconfig
1798@@ -0,0 +1,1267 @@
1799+#
1800+# Automatically generated make config: don't edit
1801+# Linux kernel version: 2.6.35
1802+# Mon Jul 18 18:05:45 2011
1803+#
1804+# CONFIG_PPC64 is not set
1805+
1806+#
1807+# Processor support
1808+#
1809+# CONFIG_PPC_BOOK3S_32 is not set
1810+# CONFIG_PPC_85xx is not set
1811+# CONFIG_PPC_8xx is not set
1812+# CONFIG_40x is not set
1813+CONFIG_44x=y
1814+# CONFIG_E200 is not set
1815+CONFIG_PPC_FPU=y
1816+CONFIG_4xx=y
1817+CONFIG_BOOKE=y
1818+CONFIG_PTE_64BIT=y
1819+CONFIG_PHYS_64BIT=y
1820+CONFIG_PPC_MMU_NOHASH=y
1821+CONFIG_PPC_MMU_NOHASH_32=y
1822+# CONFIG_PPC_MM_SLICES is not set
1823+CONFIG_SMP=y
1824+CONFIG_NR_CPUS=4
1825+# CONFIG_NOT_COHERENT_CACHE is not set
1826+CONFIG_PPC32=y
1827+CONFIG_WORD_SIZE=32
1828+CONFIG_ARCH_PHYS_ADDR_T_64BIT=y
1829+CONFIG_MMU=y
1830+CONFIG_GENERIC_CMOS_UPDATE=y
1831+CONFIG_GENERIC_TIME=y
1832+CONFIG_GENERIC_TIME_VSYSCALL=y
1833+CONFIG_GENERIC_CLOCKEVENTS=y
1834+CONFIG_GENERIC_HARDIRQS=y
1835+CONFIG_GENERIC_HARDIRQS_NO__DO_IRQ=y
1836+# CONFIG_HAVE_SETUP_PER_CPU_AREA is not set
1837+# CONFIG_NEED_PER_CPU_EMBED_FIRST_CHUNK is not set
1838+CONFIG_IRQ_PER_CPU=y
1839+CONFIG_NR_IRQS=512
1840+CONFIG_STACKTRACE_SUPPORT=y
1841+CONFIG_HAVE_LATENCYTOP_SUPPORT=y
1842+CONFIG_TRACE_IRQFLAGS_SUPPORT=y
1843+CONFIG_LOCKDEP_SUPPORT=y
1844+CONFIG_RWSEM_XCHGADD_ALGORITHM=y
1845+CONFIG_ARCH_HAS_ILOG2_U32=y
1846+CONFIG_GENERIC_HWEIGHT=y
1847+CONFIG_GENERIC_FIND_NEXT_BIT=y
1848+# CONFIG_ARCH_NO_VIRT_TO_BUS is not set
1849+CONFIG_PPC=y
1850+CONFIG_EARLY_PRINTK=y
1851+CONFIG_GENERIC_NVRAM=y
1852+CONFIG_SCHED_OMIT_FRAME_POINTER=y
1853+CONFIG_ARCH_MAY_HAVE_PC_FDC=y
1854+CONFIG_PPC_OF=y
1855+CONFIG_OF=y
1856+CONFIG_PPC_UDBG_16550=y
1857+CONFIG_GENERIC_TBSYNC=y
1858+CONFIG_AUDIT_ARCH=y
1859+CONFIG_GENERIC_BUG=y
1860+CONFIG_DTC=y
1861+# CONFIG_DEFAULT_UIMAGE is not set
1862+CONFIG_ARCH_HIBERNATION_POSSIBLE=y
1863+CONFIG_PPC_DCR_NATIVE=y
1864+# CONFIG_PPC_DCR_MMIO is not set
1865+CONFIG_PPC_DCR=y
1866+CONFIG_ARCH_SUPPORTS_DEBUG_PAGEALLOC=y
1867+CONFIG_PPC_ADV_DEBUG_REGS=y
1868+CONFIG_PPC_ADV_DEBUG_IACS=4
1869+CONFIG_PPC_ADV_DEBUG_DACS=2
1870+CONFIG_PPC_ADV_DEBUG_DVCS=2
1871+CONFIG_PPC_ADV_DEBUG_DAC_RANGE=y
1872+CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
1873+CONFIG_CONSTRUCTORS=y
1874+
1875+#
1876+# General setup
1877+#
1878+CONFIG_EXPERIMENTAL=y
1879+CONFIG_LOCK_KERNEL=y
1880+CONFIG_INIT_ENV_ARG_LIMIT=32
1881+CONFIG_CROSS_COMPILE="powerpc-linux-"
1882+CONFIG_LOCALVERSION=""
1883+CONFIG_LOCALVERSION_AUTO=y
1884+CONFIG_SWAP=y
1885+CONFIG_SYSVIPC=y
1886+CONFIG_SYSVIPC_SYSCTL=y
1887+CONFIG_POSIX_MQUEUE=y
1888+CONFIG_POSIX_MQUEUE_SYSCTL=y
1889+# CONFIG_BSD_PROCESS_ACCT is not set
1890+# CONFIG_TASKSTATS is not set
1891+# CONFIG_AUDIT is not set
1892+
1893+#
1894+# RCU Subsystem
1895+#
1896+CONFIG_TREE_RCU=y
1897+# CONFIG_TREE_PREEMPT_RCU is not set
1898+# CONFIG_TINY_RCU is not set
1899+# CONFIG_RCU_TRACE is not set
1900+CONFIG_RCU_FANOUT=32
1901+# CONFIG_RCU_FANOUT_EXACT is not set
1902+# CONFIG_TREE_RCU_TRACE is not set
1903+# CONFIG_IKCONFIG is not set
1904+CONFIG_LOG_BUF_SHIFT=14
1905+# CONFIG_CGROUPS is not set
1906+CONFIG_SYSFS_DEPRECATED=y
1907+CONFIG_SYSFS_DEPRECATED_V2=y
1908+# CONFIG_RELAY is not set
1909+# CONFIG_NAMESPACES is not set
1910+CONFIG_BLK_DEV_INITRD=y
1911+CONFIG_INITRAMFS_SOURCE=""
1912+CONFIG_RD_GZIP=y
1913+# CONFIG_RD_BZIP2 is not set
1914+# CONFIG_RD_LZMA is not set
1915+# CONFIG_RD_LZO is not set
1916+# CONFIG_CC_OPTIMIZE_FOR_SIZE is not set
1917+CONFIG_SYSCTL=y
1918+CONFIG_ANON_INODES=y
1919+CONFIG_EMBEDDED=y
1920+CONFIG_SYSCTL_SYSCALL=y
1921+CONFIG_KALLSYMS=y
1922+# CONFIG_KALLSYMS_ALL is not set
1923+CONFIG_KALLSYMS_EXTRA_PASS=y
1924+CONFIG_HOTPLUG=y
1925+CONFIG_PRINTK=y
1926+CONFIG_BUG=y
1927+CONFIG_ELF_CORE=y
1928+CONFIG_BASE_FULL=y
1929+CONFIG_FUTEX=y
1930+CONFIG_EPOLL=y
1931+CONFIG_SIGNALFD=y
1932+CONFIG_TIMERFD=y
1933+CONFIG_EVENTFD=y
1934+CONFIG_SHMEM=y
1935+CONFIG_AIO=y
1936+CONFIG_HAVE_PERF_EVENTS=y
1937+
1938+#
1939+# Kernel Performance Events And Counters
1940+#
1941+# CONFIG_PERF_EVENTS is not set
1942+# CONFIG_PERF_COUNTERS is not set
1943+CONFIG_VM_EVENT_COUNTERS=y
1944+CONFIG_PCI_QUIRKS=y
1945+CONFIG_SLUB_DEBUG=y
1946+CONFIG_COMPAT_BRK=y
1947+# CONFIG_SLAB is not set
1948+CONFIG_SLUB=y
1949+# CONFIG_SLOB is not set
1950+CONFIG_PROFILING=y
1951+CONFIG_OPROFILE=y
1952+CONFIG_HAVE_OPROFILE=y
1953+# CONFIG_KPROBES is not set
1954+CONFIG_HAVE_EFFICIENT_UNALIGNED_ACCESS=y
1955+CONFIG_HAVE_IOREMAP_PROT=y
1956+CONFIG_HAVE_KPROBES=y
1957+CONFIG_HAVE_KRETPROBES=y
1958+CONFIG_HAVE_ARCH_TRACEHOOK=y
1959+CONFIG_HAVE_DMA_ATTRS=y
1960+CONFIG_USE_GENERIC_SMP_HELPERS=y
1961+CONFIG_HAVE_REGS_AND_STACK_ACCESS_API=y
1962+CONFIG_HAVE_DMA_API_DEBUG=y
1963+
1964+#
1965+# GCOV-based kernel profiling
1966+#
1967+# CONFIG_GCOV_KERNEL is not set
1968+# CONFIG_SLOW_WORK is not set
1969+# CONFIG_HAVE_GENERIC_DMA_COHERENT is not set
1970+CONFIG_SLABINFO=y
1971+CONFIG_RT_MUTEXES=y
1972+CONFIG_BASE_SMALL=0
1973+CONFIG_MODULES=y
1974+CONFIG_MODULE_FORCE_LOAD=y
1975+CONFIG_MODULE_UNLOAD=y
1976+CONFIG_MODULE_FORCE_UNLOAD=y
1977+CONFIG_MODVERSIONS=y
1978+CONFIG_MODULE_SRCVERSION_ALL=y
1979+CONFIG_STOP_MACHINE=y
1980+CONFIG_BLOCK=y
1981+CONFIG_LBDAF=y
1982+# CONFIG_BLK_DEV_BSG is not set
1983+# CONFIG_BLK_DEV_INTEGRITY is not set
1984+
1985+#
1986+# IO Schedulers
1987+#
1988+CONFIG_IOSCHED_NOOP=y
1989+CONFIG_IOSCHED_DEADLINE=y
1990+CONFIG_IOSCHED_CFQ=y
1991+# CONFIG_DEFAULT_DEADLINE is not set
1992+CONFIG_DEFAULT_CFQ=y
1993+# CONFIG_DEFAULT_NOOP is not set
1994+CONFIG_DEFAULT_IOSCHED="cfq"
1995+# CONFIG_INLINE_SPIN_TRYLOCK is not set
1996+# CONFIG_INLINE_SPIN_TRYLOCK_BH is not set
1997+# CONFIG_INLINE_SPIN_LOCK is not set
1998+# CONFIG_INLINE_SPIN_LOCK_BH is not set
1999+# CONFIG_INLINE_SPIN_LOCK_IRQ is not set
2000+# CONFIG_INLINE_SPIN_LOCK_IRQSAVE is not set
2001+CONFIG_INLINE_SPIN_UNLOCK=y
2002+# CONFIG_INLINE_SPIN_UNLOCK_BH is not set
2003+CONFIG_INLINE_SPIN_UNLOCK_IRQ=y
2004+# CONFIG_INLINE_SPIN_UNLOCK_IRQRESTORE is not set
2005+# CONFIG_INLINE_READ_TRYLOCK is not set
2006+# CONFIG_INLINE_READ_LOCK is not set
2007+# CONFIG_INLINE_READ_LOCK_BH is not set
2008+# CONFIG_INLINE_READ_LOCK_IRQ is not set
2009+# CONFIG_INLINE_READ_LOCK_IRQSAVE is not set
2010+CONFIG_INLINE_READ_UNLOCK=y
2011+# CONFIG_INLINE_READ_UNLOCK_BH is not set
2012+CONFIG_INLINE_READ_UNLOCK_IRQ=y
2013+# CONFIG_INLINE_READ_UNLOCK_IRQRESTORE is not set
2014+# CONFIG_INLINE_WRITE_TRYLOCK is not set
2015+# CONFIG_INLINE_WRITE_LOCK is not set
2016+# CONFIG_INLINE_WRITE_LOCK_BH is not set
2017+# CONFIG_INLINE_WRITE_LOCK_IRQ is not set
2018+# CONFIG_INLINE_WRITE_LOCK_IRQSAVE is not set
2019+CONFIG_INLINE_WRITE_UNLOCK=y
2020+# CONFIG_INLINE_WRITE_UNLOCK_BH is not set
2021+CONFIG_INLINE_WRITE_UNLOCK_IRQ=y
2022+# CONFIG_INLINE_WRITE_UNLOCK_IRQRESTORE is not set
2023+CONFIG_MUTEX_SPIN_ON_OWNER=y
2024+# CONFIG_FREEZER is not set
2025+CONFIG_PPC4xx_PCI_EXPRESS=y
2026+CONFIG_PPC_MSI_BITMAP=y
2027+# CONFIG_RAPIDIO_FSL is not set
2028+
2029+#
2030+# Platform support
2031+#
2032+# CONFIG_PPC_CELL is not set
2033+# CONFIG_PPC_CELL_NATIVE is not set
2034+# CONFIG_PQ2ADS is not set
2035+CONFIG_PPC_47x=y
2036+# CONFIG_BAMBOO is not set
2037+# CONFIG_EBONY is not set
2038+# CONFIG_SAM440EP is not set
2039+# CONFIG_SEQUOIA is not set
2040+# CONFIG_TAISHAN is not set
2041+# CONFIG_KATMAI is not set
2042+# CONFIG_RAINIER is not set
2043+# CONFIG_WARP is not set
2044+# CONFIG_ARCHES is not set
2045+# CONFIG_CANYONLANDS is not set
2046+# CONFIG_GLACIER is not set
2047+# CONFIG_REDWOOD is not set
2048+# CONFIG_EIGER is not set
2049+# CONFIG_YOSEMITE is not set
2050+# CONFIG_ISS4xx is not set
2051+# CONFIG_ICON is not set
2052+CONFIG_ACP=y
2053+# CONFIG_ACPISS is not set
2054+CONFIG_ACP_X1V1=y
2055+# CONFIG_XILINX_VIRTEX440_GENERIC_BOARD is not set
2056+# CONFIG_PPC44x_SIMPLE is not set
2057+# CONFIG_PPC4xx_GPIO is not set
2058+CONFIG_440GP=y
2059+# CONFIG_IPIC is not set
2060+CONFIG_MPIC=y
2061+# CONFIG_MPIC_WEIRD is not set
2062+# CONFIG_PPC_I8259 is not set
2063+# CONFIG_PPC_RTAS is not set
2064+# CONFIG_MMIO_NVRAM is not set
2065+# CONFIG_PPC_MPC106 is not set
2066+# CONFIG_PPC_970_NAP is not set
2067+# CONFIG_PPC_INDIRECT_IO is not set
2068+# CONFIG_GENERIC_IOMAP is not set
2069+# CONFIG_CPU_FREQ is not set
2070+# CONFIG_FSL_ULI1575 is not set
2071+# CONFIG_SIMPLE_GPIO is not set
2072+
2073+#
2074+# Kernel options
2075+#
2076+CONFIG_HIGHMEM=y
2077+CONFIG_TICK_ONESHOT=y
2078+# CONFIG_NO_HZ is not set
2079+CONFIG_HIGH_RES_TIMERS=y
2080+CONFIG_GENERIC_CLOCKEVENTS_BUILD=y
2081+CONFIG_HZ_100=y
2082+# CONFIG_HZ_250 is not set
2083+# CONFIG_HZ_300 is not set
2084+# CONFIG_HZ_1000 is not set
2085+CONFIG_HZ=100
2086+CONFIG_SCHED_HRTICK=y
2087+CONFIG_PREEMPT_NONE=y
2088+# CONFIG_PREEMPT_VOLUNTARY is not set
2089+# CONFIG_PREEMPT is not set
2090+CONFIG_BINFMT_ELF=y
2091+# CONFIG_CORE_DUMP_DEFAULT_ELF_HEADERS is not set
2092+# CONFIG_HAVE_AOUT is not set
2093+# CONFIG_BINFMT_MISC is not set
2094+# CONFIG_MATH_EMULATION is not set
2095+# CONFIG_IOMMU_HELPER is not set
2096+# CONFIG_SWIOTLB is not set
2097+CONFIG_ARCH_ENABLE_MEMORY_HOTPLUG=y
2098+CONFIG_ARCH_HAS_WALK_MEMORY=y
2099+CONFIG_ARCH_ENABLE_MEMORY_HOTREMOVE=y
2100+# CONFIG_IRQ_ALL_CPUS is not set
2101+CONFIG_SPARSE_IRQ=y
2102+CONFIG_MAX_ACTIVE_REGIONS=32
2103+CONFIG_ARCH_FLATMEM_ENABLE=y
2104+CONFIG_ARCH_POPULATES_NODE_MAP=y
2105+CONFIG_SELECT_MEMORY_MODEL=y
2106+CONFIG_FLATMEM_MANUAL=y
2107+# CONFIG_DISCONTIGMEM_MANUAL is not set
2108+# CONFIG_SPARSEMEM_MANUAL is not set
2109+CONFIG_FLATMEM=y
2110+CONFIG_FLAT_NODE_MEM_MAP=y
2111+CONFIG_HAVE_MEMBLOCK=y
2112+CONFIG_PAGEFLAGS_EXTENDED=y
2113+CONFIG_SPLIT_PTLOCK_CPUS=4
2114+CONFIG_MIGRATION=y
2115+CONFIG_PHYS_ADDR_T_64BIT=y
2116+CONFIG_ZONE_DMA_FLAG=1
2117+CONFIG_BOUNCE=y
2118+CONFIG_VIRT_TO_BUS=y
2119+# CONFIG_KSM is not set
2120+CONFIG_DEFAULT_MMAP_MIN_ADDR=4096
2121+CONFIG_STDBINUTILS=y
2122+CONFIG_PPC_4K_PAGES=y
2123+# CONFIG_PPC_16K_PAGES is not set
2124+# CONFIG_PPC_64K_PAGES is not set
2125+# CONFIG_PPC_256K_PAGES is not set
2126+CONFIG_FORCE_MAX_ZONEORDER=11
2127+# CONFIG_PROC_DEVICETREE is not set
2128+CONFIG_CMDLINE_BOOL=y
2129+CONFIG_CMDLINE="console=ttyS0 mtdparts=acp-nand:512K(2ndStage),512K(env-0),512K(env-1),512K(3rdStage),-(fs) ip=dhcp root=/dev/nfs"
2130+CONFIG_EXTRA_TARGETS=""
2131+CONFIG_SECCOMP=y
2132+CONFIG_ISA_DMA_API=y
2133+
2134+#
2135+# Bus options
2136+#
2137+CONFIG_ZONE_DMA=y
2138+# CONFIG_NEED_DMA_MAP_STATE is not set
2139+CONFIG_NEED_SG_DMA_LENGTH=y
2140+CONFIG_PPC_INDIRECT_PCI=y
2141+CONFIG_4xx_SOC=y
2142+CONFIG_PPC_PCI_CHOICE=y
2143+CONFIG_PCI=y
2144+CONFIG_PCI_DOMAINS=y
2145+CONFIG_PCI_SYSCALL=y
2146+CONFIG_PCIEPORTBUS=y
2147+# CONFIG_PCIEAER is not set
2148+CONFIG_PCIEASPM=y
2149+# CONFIG_PCIEASPM_DEBUG is not set
2150+CONFIG_ARCH_SUPPORTS_MSI=y
2151+CONFIG_PCI_MSI=y
2152+# CONFIG_PCI_DEBUG is not set
2153+# CONFIG_PCI_STUB is not set
2154+# CONFIG_PCI_IOV is not set
2155+# CONFIG_PCCARD is not set
2156+# CONFIG_HOTPLUG_PCI is not set
2157+CONFIG_HAS_RAPIDIO=y
2158+CONFIG_RAPIDIO=y
2159+CONFIG_RAPIDIO_DISC_TIMEOUT=30
2160+# CONFIG_RAPIDIO_ENABLE_RX_TX_PORTS is not set
2161+CONFIG_RAPIDIO_ACP=y
2162+CONFIG_RAPIDIO_ACP_RX_SIZE=128
2163+# CONFIG_RAPIDIO_TSI57X is not set
2164+# CONFIG_RAPIDIO_CPS_XX is not set
2165+# CONFIG_RAPIDIO_TSI568 is not set
2166+# CONFIG_RAPIDIO_TSI500 is not set
2167+# CONFIG_RAPIDIO_DEBUG is not set
2168+
2169+#
2170+# Advanced setup
2171+#
2172+CONFIG_ADVANCED_OPTIONS=y
2173+# CONFIG_LOWMEM_SIZE_BOOL is not set
2174+CONFIG_LOWMEM_SIZE=0x30000000
2175+CONFIG_RELOCATABLE=y
2176+CONFIG_PAGE_OFFSET_BOOL=y
2177+CONFIG_PAGE_OFFSET=0xc0000000
2178+CONFIG_KERNEL_START_BOOL=y
2179+CONFIG_KERNEL_START=0xc0400000
2180+CONFIG_PHYSICAL_START=0x00000000
2181+CONFIG_TASK_SIZE_BOOL=y
2182+CONFIG_TASK_SIZE=0xc0000000
2183+CONFIG_NET=y
2184+
2185+#
2186+# Networking options
2187+#
2188+CONFIG_PACKET=y
2189+CONFIG_UNIX=y
2190+CONFIG_XFRM=y
2191+CONFIG_XFRM_USER=y
2192+CONFIG_XFRM_SUB_POLICY=y
2193+CONFIG_XFRM_MIGRATE=y
2194+CONFIG_XFRM_STATISTICS=y
2195+CONFIG_XFRM_IPCOMP=y
2196+CONFIG_NET_KEY=y
2197+# CONFIG_NET_KEY_MIGRATE is not set
2198+CONFIG_INET=y
2199+CONFIG_IP_MULTICAST=y
2200+# CONFIG_IP_ADVANCED_ROUTER is not set
2201+CONFIG_IP_FIB_HASH=y
2202+CONFIG_IP_PNP=y
2203+CONFIG_IP_PNP_DHCP=y
2204+CONFIG_IP_PNP_BOOTP=y
2205+CONFIG_IP_PNP_RARP=y
2206+CONFIG_NET_IPIP=y
2207+# CONFIG_NET_IPGRE is not set
2208+# CONFIG_IP_MROUTE is not set
2209+# CONFIG_ARPD is not set
2210+CONFIG_SYN_COOKIES=y
2211+CONFIG_INET_AH=y
2212+CONFIG_INET_ESP=y
2213+CONFIG_INET_IPCOMP=y
2214+CONFIG_INET_XFRM_TUNNEL=y
2215+CONFIG_INET_TUNNEL=y
2216+CONFIG_INET_XFRM_MODE_TRANSPORT=y
2217+CONFIG_INET_XFRM_MODE_TUNNEL=y
2218+CONFIG_INET_XFRM_MODE_BEET=y
2219+# CONFIG_INET_LRO is not set
2220+CONFIG_INET_DIAG=y
2221+CONFIG_INET_TCP_DIAG=y
2222+# CONFIG_TCP_CONG_ADVANCED is not set
2223+CONFIG_TCP_CONG_CUBIC=y
2224+CONFIG_DEFAULT_TCP_CONG="cubic"
2225+# CONFIG_TCP_MD5SIG is not set
2226+CONFIG_IPV6=y
2227+# CONFIG_IPV6_PRIVACY is not set
2228+# CONFIG_IPV6_ROUTER_PREF is not set
2229+# CONFIG_IPV6_OPTIMISTIC_DAD is not set
2230+CONFIG_INET6_AH=y
2231+CONFIG_INET6_ESP=y
2232+CONFIG_INET6_IPCOMP=y
2233+CONFIG_IPV6_MIP6=y
2234+CONFIG_INET6_XFRM_TUNNEL=y
2235+CONFIG_INET6_TUNNEL=y
2236+CONFIG_INET6_XFRM_MODE_TRANSPORT=y
2237+CONFIG_INET6_XFRM_MODE_TUNNEL=y
2238+CONFIG_INET6_XFRM_MODE_BEET=y
2239+# CONFIG_INET6_XFRM_MODE_ROUTEOPTIMIZATION is not set
2240+CONFIG_IPV6_SIT=y
2241+# CONFIG_IPV6_SIT_6RD is not set
2242+CONFIG_IPV6_NDISC_NODETYPE=y
2243+CONFIG_IPV6_TUNNEL=y
2244+# CONFIG_IPV6_MULTIPLE_TABLES is not set
2245+# CONFIG_IPV6_MROUTE is not set
2246+CONFIG_NETWORK_SECMARK=y
2247+CONFIG_NETFILTER=y
2248+# CONFIG_NETFILTER_DEBUG is not set
2249+CONFIG_NETFILTER_ADVANCED=y
2250+
2251+#
2252+# Core Netfilter Configuration
2253+#
2254+# CONFIG_NETFILTER_NETLINK_QUEUE is not set
2255+# CONFIG_NETFILTER_NETLINK_LOG is not set
2256+# CONFIG_NF_CONNTRACK is not set
2257+# CONFIG_NETFILTER_XTABLES is not set
2258+# CONFIG_IP_VS is not set
2259+
2260+#
2261+# IP: Netfilter Configuration
2262+#
2263+# CONFIG_NF_DEFRAG_IPV4 is not set
2264+# CONFIG_IP_NF_QUEUE is not set
2265+# CONFIG_IP_NF_IPTABLES is not set
2266+# CONFIG_IP_NF_ARPTABLES is not set
2267+
2268+#
2269+# IPv6: Netfilter Configuration
2270+#
2271+# CONFIG_IP6_NF_QUEUE is not set
2272+# CONFIG_IP6_NF_IPTABLES is not set
2273+# CONFIG_IP_DCCP is not set
2274+# CONFIG_IP_SCTP is not set
2275+# CONFIG_RDS is not set
2276+# CONFIG_TIPC is not set
2277+# CONFIG_ATM is not set
2278+# CONFIG_L2TP is not set
2279+# CONFIG_BRIDGE is not set
2280+# CONFIG_NET_DSA is not set
2281+CONFIG_VLAN_8021Q=y
2282+# CONFIG_VLAN_8021Q_GVRP is not set
2283+# CONFIG_DECNET is not set
2284+# CONFIG_LLC2 is not set
2285+# CONFIG_IPX is not set
2286+# CONFIG_ATALK is not set
2287+# CONFIG_X25 is not set
2288+# CONFIG_LAPB is not set
2289+# CONFIG_ECONET is not set
2290+# CONFIG_WAN_ROUTER is not set
2291+# CONFIG_PHONET is not set
2292+# CONFIG_IEEE802154 is not set
2293+# CONFIG_NET_SCHED is not set
2294+# CONFIG_DCB is not set
2295+CONFIG_RPS=y
2296+
2297+#
2298+# Network testing
2299+#
2300+# CONFIG_NET_PKTGEN is not set
2301+# CONFIG_HAMRADIO is not set
2302+# CONFIG_CAN is not set
2303+# CONFIG_IRDA is not set
2304+# CONFIG_BT is not set
2305+# CONFIG_AF_RXRPC is not set
2306+CONFIG_WIRELESS=y
2307+# CONFIG_CFG80211 is not set
2308+# CONFIG_LIB80211 is not set
2309+
2310+#
2311+# CFG80211 needs to be enabled for MAC80211
2312+#
2313+
2314+#
2315+# Some wireless drivers require a rate control algorithm
2316+#
2317+# CONFIG_WIMAX is not set
2318+# CONFIG_RFKILL is not set
2319+# CONFIG_NET_9P is not set
2320+# CONFIG_CAIF is not set
2321+
2322+#
2323+# Device Drivers
2324+#
2325+
2326+#
2327+# Generic Driver Options
2328+#
2329+CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug"
2330+# CONFIG_DEVTMPFS is not set
2331+CONFIG_STANDALONE=y
2332+CONFIG_PREVENT_FIRMWARE_BUILD=y
2333+# CONFIG_FW_LOADER is not set
2334+# CONFIG_DEBUG_DRIVER is not set
2335+# CONFIG_DEBUG_DEVRES is not set
2336+# CONFIG_SYS_HYPERVISOR is not set
2337+# CONFIG_CONNECTOR is not set
2338+CONFIG_MTD=y
2339+# CONFIG_MTD_DEBUG is not set
2340+# CONFIG_MTD_TESTS is not set
2341+# CONFIG_MTD_CONCAT is not set
2342+CONFIG_MTD_PARTITIONS=y
2343+# CONFIG_MTD_REDBOOT_PARTS is not set
2344+CONFIG_MTD_CMDLINE_PARTS=y
2345+CONFIG_MTD_OF_PARTS=y
2346+# CONFIG_MTD_AR7_PARTS is not set
2347+
2348+#
2349+# User Modules And Translation Layers
2350+#
2351+CONFIG_MTD_CHAR=y
2352+CONFIG_MTD_BLKDEVS=y
2353+CONFIG_MTD_BLOCK=y
2354+# CONFIG_FTL is not set
2355+# CONFIG_NFTL is not set
2356+# CONFIG_INFTL is not set
2357+# CONFIG_RFD_FTL is not set
2358+# CONFIG_SSFDC is not set
2359+# CONFIG_SM_FTL is not set
2360+# CONFIG_MTD_OOPS is not set
2361+
2362+#
2363+# RAM/ROM/Flash chip drivers
2364+#
2365+# CONFIG_MTD_CFI is not set
2366+CONFIG_MTD_JEDECPROBE=y
2367+CONFIG_MTD_GEN_PROBE=y
2368+# CONFIG_MTD_CFI_ADV_OPTIONS is not set
2369+CONFIG_MTD_MAP_BANK_WIDTH_1=y
2370+CONFIG_MTD_MAP_BANK_WIDTH_2=y
2371+CONFIG_MTD_MAP_BANK_WIDTH_4=y
2372+# CONFIG_MTD_MAP_BANK_WIDTH_8 is not set
2373+# CONFIG_MTD_MAP_BANK_WIDTH_16 is not set
2374+# CONFIG_MTD_MAP_BANK_WIDTH_32 is not set
2375+CONFIG_MTD_CFI_I1=y
2376+CONFIG_MTD_CFI_I2=y
2377+# CONFIG_MTD_CFI_I4 is not set
2378+# CONFIG_MTD_CFI_I8 is not set
2379+# CONFIG_MTD_CFI_INTELEXT is not set
2380+CONFIG_MTD_CFI_AMDSTD=y
2381+# CONFIG_MTD_CFI_STAA is not set
2382+CONFIG_MTD_CFI_UTIL=y
2383+# CONFIG_MTD_RAM is not set
2384+# CONFIG_MTD_ROM is not set
2385+# CONFIG_MTD_ABSENT is not set
2386+
2387+#
2388+# Mapping drivers for chip access
2389+#
2390+# CONFIG_MTD_COMPLEX_MAPPINGS is not set
2391+# CONFIG_MTD_PHYSMAP is not set
2392+CONFIG_MTD_PHYSMAP_OF=y
2393+# CONFIG_MTD_INTEL_VR_NOR is not set
2394+# CONFIG_MTD_PLATRAM is not set
2395+
2396+#
2397+# Self-contained MTD device drivers
2398+#
2399+# CONFIG_MTD_PMC551 is not set
2400+# CONFIG_MTD_SLRAM is not set
2401+# CONFIG_MTD_PHRAM is not set
2402+# CONFIG_MTD_MTDRAM is not set
2403+# CONFIG_MTD_BLOCK2MTD is not set
2404+
2405+#
2406+# Disk-On-Chip Device Drivers
2407+#
2408+# CONFIG_MTD_DOC2000 is not set
2409+# CONFIG_MTD_DOC2001 is not set
2410+# CONFIG_MTD_DOC2001PLUS is not set
2411+CONFIG_MTD_NAND_ECC=y
2412+# CONFIG_MTD_NAND_ECC_SMC is not set
2413+CONFIG_MTD_NAND=y
2414+# CONFIG_MTD_NAND_VERIFY_WRITE is not set
2415+# CONFIG_MTD_SM_COMMON is not set
2416+# CONFIG_MTD_NAND_MUSEUM_IDS is not set
2417+# CONFIG_MTD_NAND_DENALI is not set
2418+CONFIG_MTD_NAND_DENALI_SCRATCH_REG_ADDR=0xFF108018
2419+CONFIG_MTD_NAND_IDS=y
2420+# CONFIG_MTD_NAND_RICOH is not set
2421+# CONFIG_MTD_NAND_NDFC is not set
2422+# CONFIG_MTD_NAND_DISKONCHIP is not set
2423+# CONFIG_MTD_NAND_CAFE is not set
2424+# CONFIG_MTD_NAND_NANDSIM is not set
2425+CONFIG_MTD_NAND_PLATFORM=y
2426+# CONFIG_MTD_NAND_FSL_ELBC is not set
2427+# CONFIG_MTD_ONENAND is not set
2428+
2429+#
2430+# LPDDR flash memory drivers
2431+#
2432+# CONFIG_MTD_LPDDR is not set
2433+
2434+#
2435+# UBI - Unsorted block images
2436+#
2437+# CONFIG_MTD_UBI is not set
2438+CONFIG_OF_FLATTREE=y
2439+CONFIG_OF_DYNAMIC=y
2440+CONFIG_OF_DEVICE=y
2441+# CONFIG_PARPORT is not set
2442+CONFIG_BLK_DEV=y
2443+# CONFIG_BLK_DEV_FD is not set
2444+# CONFIG_BLK_CPQ_DA is not set
2445+# CONFIG_BLK_CPQ_CISS_DA is not set
2446+# CONFIG_BLK_DEV_DAC960 is not set
2447+# CONFIG_BLK_DEV_UMEM is not set
2448+# CONFIG_BLK_DEV_COW_COMMON is not set
2449+# CONFIG_BLK_DEV_LOOP is not set
2450+
2451+#
2452+# DRBD disabled because PROC_FS, INET or CONNECTOR not selected
2453+#
2454+# CONFIG_BLK_DEV_NBD is not set
2455+# CONFIG_BLK_DEV_SX8 is not set
2456+CONFIG_BLK_DEV_RAM=y
2457+CONFIG_BLK_DEV_RAM_COUNT=16
2458+CONFIG_BLK_DEV_RAM_SIZE=35000
2459+# CONFIG_BLK_DEV_XIP is not set
2460+# CONFIG_BLK_DEV_ISS is not set
2461+# CONFIG_CDROM_PKTCDVD is not set
2462+# CONFIG_ATA_OVER_ETH is not set
2463+# CONFIG_XILINX_SYSACE is not set
2464+# CONFIG_BLK_DEV_HD is not set
2465+CONFIG_MISC_DEVICES=y
2466+# CONFIG_PHANTOM is not set
2467+# CONFIG_SGI_IOC4 is not set
2468+# CONFIG_TIFM_CORE is not set
2469+# CONFIG_ENCLOSURE_SERVICES is not set
2470+# CONFIG_HP_ILO is not set
2471+# CONFIG_C2PORT is not set
2472+
2473+#
2474+# EEPROM support
2475+#
2476+# CONFIG_EEPROM_93CX6 is not set
2477+# CONFIG_CB710_CORE is not set
2478+CONFIG_HAVE_IDE=y
2479+# CONFIG_IDE is not set
2480+
2481+#
2482+# SCSI device support
2483+#
2484+CONFIG_SCSI_MOD=y
2485+# CONFIG_RAID_ATTRS is not set
2486+# CONFIG_SCSI is not set
2487+# CONFIG_SCSI_DMA is not set
2488+# CONFIG_SCSI_NETLINK is not set
2489+# CONFIG_ATA is not set
2490+# CONFIG_MD is not set
2491+# CONFIG_FUSION is not set
2492+
2493+#
2494+# IEEE 1394 (FireWire) support
2495+#
2496+
2497+#
2498+# You can enable one or both FireWire driver stacks.
2499+#
2500+
2501+#
2502+# The newer stack is recommended.
2503+#
2504+# CONFIG_FIREWIRE is not set
2505+# CONFIG_IEEE1394 is not set
2506+# CONFIG_I2O is not set
2507+# CONFIG_MACINTOSH_DRIVERS is not set
2508+CONFIG_NETDEVICES=y
2509+CONFIG_DUMMY=y
2510+# CONFIG_BONDING is not set
2511+# CONFIG_MACVLAN is not set
2512+# CONFIG_EQUALIZER is not set
2513+CONFIG_TUN=y
2514+# CONFIG_VETH is not set
2515+# CONFIG_ARCNET is not set
2516+# CONFIG_PHYLIB is not set
2517+CONFIG_NET_ETHERNET=y
2518+CONFIG_MII=y
2519+# CONFIG_HAPPYMEAL is not set
2520+# CONFIG_SUNGEM is not set
2521+# CONFIG_CASSINI is not set
2522+# CONFIG_NET_VENDOR_3COM is not set
2523+# CONFIG_ETHOC is not set
2524+# CONFIG_DNET is not set
2525+# CONFIG_NET_TULIP is not set
2526+# CONFIG_HP100 is not set
2527+# CONFIG_IBM_NEW_EMAC is not set
2528+CONFIG_IBM_NEW_EMAC_ZMII=y
2529+# CONFIG_IBM_NEW_EMAC_RGMII is not set
2530+# CONFIG_IBM_NEW_EMAC_TAH is not set
2531+# CONFIG_IBM_NEW_EMAC_EMAC4 is not set
2532+# CONFIG_IBM_NEW_EMAC_NO_FLOW_CTRL is not set
2533+# CONFIG_IBM_NEW_EMAC_MAL_CLR_ICINTSTAT is not set
2534+# CONFIG_IBM_NEW_EMAC_MAL_COMMON_ERR is not set
2535+# CONFIG_NET_PCI is not set
2536+# CONFIG_B44 is not set
2537+# CONFIG_KS8842 is not set
2538+# CONFIG_KS8851_MLL is not set
2539+# CONFIG_ATL2 is not set
2540+# CONFIG_XILINX_EMACLITE is not set
2541+CONFIG_NETDEV_1000=y
2542+# CONFIG_ACENIC is not set
2543+# CONFIG_DL2K is not set
2544+CONFIG_E1000=y
2545+CONFIG_E1000E=y
2546+# CONFIG_IP1000 is not set
2547+CONFIG_IGB=y
2548+CONFIG_IGBVF=y
2549+# CONFIG_NS83820 is not set
2550+# CONFIG_HAMACHI is not set
2551+# CONFIG_YELLOWFIN is not set
2552+# CONFIG_R8169 is not set
2553+# CONFIG_SIS190 is not set
2554+# CONFIG_SKGE is not set
2555+# CONFIG_SKY2 is not set
2556+# CONFIG_VIA_VELOCITY is not set
2557+# CONFIG_TIGON3 is not set
2558+# CONFIG_BNX2 is not set
2559+# CONFIG_CNIC is not set
2560+# CONFIG_MV643XX_ETH is not set
2561+# CONFIG_XILINX_LL_TEMAC is not set
2562+# CONFIG_QLA3XXX is not set
2563+# CONFIG_ATL1 is not set
2564+# CONFIG_ATL1E is not set
2565+# CONFIG_ATL1C is not set
2566+# CONFIG_JME is not set
2567+# CONFIG_NETDEV_10000 is not set
2568+# CONFIG_TR is not set
2569+CONFIG_WLAN=y
2570+# CONFIG_AIRO is not set
2571+# CONFIG_ATMEL is not set
2572+# CONFIG_PRISM54 is not set
2573+# CONFIG_HOSTAP is not set
2574+
2575+#
2576+# Enable WiMAX (Networking options) to see the WiMAX drivers
2577+#
2578+# CONFIG_WAN is not set
2579+# CONFIG_RIONET is not set
2580+# CONFIG_FDDI is not set
2581+# CONFIG_HIPPI is not set
2582+# CONFIG_PPP is not set
2583+# CONFIG_SLIP is not set
2584+# CONFIG_NETCONSOLE is not set
2585+# CONFIG_NETPOLL is not set
2586+# CONFIG_NET_POLL_CONTROLLER is not set
2587+# CONFIG_VMXNET3 is not set
2588+# CONFIG_ISDN is not set
2589+# CONFIG_PHONE is not set
2590+
2591+#
2592+# Input device support
2593+#
2594+# CONFIG_INPUT is not set
2595+
2596+#
2597+# Hardware I/O ports
2598+#
2599+# CONFIG_SERIO is not set
2600+# CONFIG_GAMEPORT is not set
2601+
2602+#
2603+# Character devices
2604+#
2605+# CONFIG_VT is not set
2606+CONFIG_DEVKMEM=y
2607+# CONFIG_SERIAL_NONSTANDARD is not set
2608+# CONFIG_N_GSM is not set
2609+# CONFIG_NOZOMI is not set
2610+
2611+#
2612+# Serial drivers
2613+#
2614+# CONFIG_SERIAL_8250 is not set
2615+
2616+#
2617+# Non-8250 serial port support
2618+#
2619+# CONFIG_SERIAL_UARTLITE is not set
2620+CONFIG_SERIAL_CORE=y
2621+CONFIG_SERIAL_CORE_CONSOLE=y
2622+# CONFIG_SERIAL_JSM is not set
2623+# CONFIG_SERIAL_OF_PLATFORM_NWPSERIAL is not set
2624+# CONFIG_SERIAL_TIMBERDALE is not set
2625+# CONFIG_SERIAL_GRLIB_GAISLER_APBUART is not set
2626+# CONFIG_SERIAL_ALTERA_JTAGUART is not set
2627+# CONFIG_SERIAL_ALTERA_UART is not set
2628+CONFIG_UNIX98_PTYS=y
2629+# CONFIG_DEVPTS_MULTIPLE_INSTANCES is not set
2630+CONFIG_LEGACY_PTYS=y
2631+CONFIG_LEGACY_PTY_COUNT=20
2632+# CONFIG_HVC_UDBG is not set
2633+# CONFIG_IPMI_HANDLER is not set
2634+# CONFIG_HW_RANDOM is not set
2635+# CONFIG_NVRAM is not set
2636+# CONFIG_GEN_RTC is not set
2637+# CONFIG_R3964 is not set
2638+# CONFIG_APPLICOM is not set
2639+# CONFIG_RAW_DRIVER is not set
2640+# CONFIG_TCG_TPM is not set
2641+CONFIG_DEVPORT=y
2642+# CONFIG_RAMOOPS is not set
2643+# CONFIG_I2C is not set
2644+# CONFIG_SPI is not set
2645+
2646+#
2647+# PPS support
2648+#
2649+# CONFIG_PPS is not set
2650+CONFIG_ARCH_WANT_OPTIONAL_GPIOLIB=y
2651+# CONFIG_GPIOLIB is not set
2652+# CONFIG_W1 is not set
2653+# CONFIG_POWER_SUPPLY is not set
2654+# CONFIG_HWMON is not set
2655+CONFIG_THERMAL=y
2656+# CONFIG_WATCHDOG is not set
2657+CONFIG_SSB_POSSIBLE=y
2658+
2659+#
2660+# Sonics Silicon Backplane
2661+#
2662+# CONFIG_SSB is not set
2663+# CONFIG_MFD_SUPPORT is not set
2664+# CONFIG_REGULATOR is not set
2665+# CONFIG_MEDIA_SUPPORT is not set
2666+
2667+#
2668+# Graphics support
2669+#
2670+# CONFIG_AGP is not set
2671+# CONFIG_VGA_ARB is not set
2672+# CONFIG_DRM is not set
2673+# CONFIG_VGASTATE is not set
2674+# CONFIG_VIDEO_OUTPUT_CONTROL is not set
2675+# CONFIG_FB is not set
2676+# CONFIG_BACKLIGHT_LCD_SUPPORT is not set
2677+
2678+#
2679+# Display device support
2680+#
2681+# CONFIG_DISPLAY_SUPPORT is not set
2682+# CONFIG_SOUND is not set
2683+# CONFIG_USB_SUPPORT is not set
2684+# CONFIG_UWB is not set
2685+# CONFIG_MMC is not set
2686+# CONFIG_MEMSTICK is not set
2687+# CONFIG_NEW_LEDS is not set
2688+# CONFIG_ACCESSIBILITY is not set
2689+# CONFIG_INFINIBAND is not set
2690+# CONFIG_EDAC is not set
2691+# CONFIG_RTC_CLASS is not set
2692+# CONFIG_DMADEVICES is not set
2693+# CONFIG_AUXDISPLAY is not set
2694+# CONFIG_UIO is not set
2695+# CONFIG_STAGING is not set
2696+
2697+#
2698+# LSI Drivers (APP3, APP3K, and ACP)
2699+#
2700+CONFIG_SERIAL_ACP=y
2701+CONFIG_SERIAL_ACP_CONSOLE=y
2702+# CONFIG_SERIAL_ACP_CONSOLE_POLL is not set
2703+CONFIG_LSI_NET=y
2704+CONFIG_LSI_NET_NUM_RX_DESC=16
2705+CONFIG_LSI_NET_RX_BUF_SZ=131072
2706+CONFIG_LSI_NET_NUM_TX_DESC=8
2707+CONFIG_LSI_NET_TX_BUF_SZ=65536
2708+CONFIG_LSI_NAND=y
2709+CONFIG_LSI_UBOOTENV=y
2710+# CONFIG_LSI_PLX_PCIE_BRIDGE is not set
2711+
2712+#
2713+# File systems
2714+#
2715+CONFIG_EXT2_FS=y
2716+# CONFIG_EXT2_FS_XATTR is not set
2717+# CONFIG_EXT2_FS_XIP is not set
2718+# CONFIG_EXT3_FS is not set
2719+# CONFIG_EXT4_FS is not set
2720+# CONFIG_REISERFS_FS is not set
2721+# CONFIG_JFS_FS is not set
2722+CONFIG_FS_POSIX_ACL=y
2723+# CONFIG_XFS_FS is not set
2724+# CONFIG_GFS2_FS is not set
2725+# CONFIG_OCFS2_FS is not set
2726+# CONFIG_BTRFS_FS is not set
2727+# CONFIG_NILFS2_FS is not set
2728+CONFIG_FILE_LOCKING=y
2729+CONFIG_FSNOTIFY=y
2730+# CONFIG_DNOTIFY is not set
2731+CONFIG_INOTIFY=y
2732+CONFIG_INOTIFY_USER=y
2733+# CONFIG_QUOTA is not set
2734+CONFIG_AUTOFS_FS=y
2735+CONFIG_AUTOFS4_FS=y
2736+# CONFIG_FUSE_FS is not set
2737+
2738+#
2739+# Caches
2740+#
2741+# CONFIG_FSCACHE is not set
2742+
2743+#
2744+# CD-ROM/DVD Filesystems
2745+#
2746+# CONFIG_ISO9660_FS is not set
2747+# CONFIG_UDF_FS is not set
2748+
2749+#
2750+# DOS/FAT/NT Filesystems
2751+#
2752+# CONFIG_MSDOS_FS is not set
2753+# CONFIG_VFAT_FS is not set
2754+# CONFIG_NTFS_FS is not set
2755+
2756+#
2757+# Pseudo filesystems
2758+#
2759+CONFIG_PROC_FS=y
2760+# CONFIG_PROC_KCORE is not set
2761+CONFIG_PROC_SYSCTL=y
2762+CONFIG_PROC_PAGE_MONITOR=y
2763+CONFIG_SYSFS=y
2764+CONFIG_TMPFS=y
2765+# CONFIG_TMPFS_POSIX_ACL is not set
2766+# CONFIG_HUGETLB_PAGE is not set
2767+# CONFIG_CONFIGFS_FS is not set
2768+CONFIG_MISC_FILESYSTEMS=y
2769+# CONFIG_ADFS_FS is not set
2770+# CONFIG_AFFS_FS is not set
2771+# CONFIG_ECRYPT_FS is not set
2772+# CONFIG_HFS_FS is not set
2773+# CONFIG_HFSPLUS_FS is not set
2774+# CONFIG_BEFS_FS is not set
2775+# CONFIG_BFS_FS is not set
2776+# CONFIG_EFS_FS is not set
2777+CONFIG_JFFS2_FS=y
2778+CONFIG_JFFS2_FS_DEBUG=0
2779+CONFIG_JFFS2_FS_WRITEBUFFER=y
2780+# CONFIG_JFFS2_FS_WBUF_VERIFY is not set
2781+# CONFIG_JFFS2_SUMMARY is not set
2782+# CONFIG_JFFS2_FS_XATTR is not set
2783+# CONFIG_JFFS2_COMPRESSION_OPTIONS is not set
2784+CONFIG_JFFS2_ZLIB=y
2785+# CONFIG_JFFS2_LZO is not set
2786+CONFIG_JFFS2_RTIME=y
2787+# CONFIG_JFFS2_RUBIN is not set
2788+# CONFIG_LOGFS is not set
2789+# CONFIG_CRAMFS is not set
2790+# CONFIG_SQUASHFS is not set
2791+# CONFIG_VXFS_FS is not set
2792+# CONFIG_MINIX_FS is not set
2793+# CONFIG_OMFS_FS is not set
2794+# CONFIG_HPFS_FS is not set
2795+# CONFIG_QNX4FS_FS is not set
2796+# CONFIG_ROMFS_FS is not set
2797+# CONFIG_SYSV_FS is not set
2798+# CONFIG_UFS_FS is not set
2799+CONFIG_NETWORK_FILESYSTEMS=y
2800+CONFIG_NFS_FS=y
2801+CONFIG_NFS_V3=y
2802+CONFIG_NFS_V3_ACL=y
2803+CONFIG_NFS_V4=y
2804+# CONFIG_NFS_V4_1 is not set
2805+CONFIG_ROOT_NFS=y
2806+# CONFIG_NFSD is not set
2807+CONFIG_LOCKD=y
2808+CONFIG_LOCKD_V4=y
2809+CONFIG_NFS_ACL_SUPPORT=y
2810+CONFIG_NFS_COMMON=y
2811+CONFIG_SUNRPC=y
2812+CONFIG_SUNRPC_GSS=y
2813+CONFIG_RPCSEC_GSS_KRB5=y
2814+# CONFIG_RPCSEC_GSS_SPKM3 is not set
2815+# CONFIG_SMB_FS is not set
2816+# CONFIG_CEPH_FS is not set
2817+# CONFIG_CIFS is not set
2818+# CONFIG_NCP_FS is not set
2819+# CONFIG_CODA_FS is not set
2820+# CONFIG_AFS_FS is not set
2821+
2822+#
2823+# Partition Types
2824+#
2825+# CONFIG_PARTITION_ADVANCED is not set
2826+CONFIG_MSDOS_PARTITION=y
2827+# CONFIG_NLS is not set
2828+# CONFIG_DLM is not set
2829+# CONFIG_BINARY_PRINTF is not set
2830+
2831+#
2832+# Library routines
2833+#
2834+CONFIG_BITREVERSE=y
2835+CONFIG_GENERIC_FIND_LAST_BIT=y
2836+# CONFIG_CRC_CCITT is not set
2837+# CONFIG_CRC16 is not set
2838+# CONFIG_CRC_T10DIF is not set
2839+# CONFIG_CRC_ITU_T is not set
2840+CONFIG_CRC32=y
2841+# CONFIG_CRC7 is not set
2842+# CONFIG_LIBCRC32C is not set
2843+CONFIG_ZLIB_INFLATE=y
2844+CONFIG_ZLIB_DEFLATE=y
2845+CONFIG_DECOMPRESS_GZIP=y
2846+CONFIG_HAS_IOMEM=y
2847+CONFIG_HAS_IOPORT=y
2848+CONFIG_HAS_DMA=y
2849+CONFIG_NLATTR=y
2850+CONFIG_GENERIC_ATOMIC64=y
2851+
2852+#
2853+# Kernel hacking
2854+#
2855+# CONFIG_PRINTK_TIME is not set
2856+CONFIG_ENABLE_WARN_DEPRECATED=y
2857+CONFIG_ENABLE_MUST_CHECK=y
2858+CONFIG_FRAME_WARN=1024
2859+CONFIG_MAGIC_SYSRQ=y
2860+# CONFIG_STRIP_ASM_SYMS is not set
2861+# CONFIG_UNUSED_SYMBOLS is not set
2862+CONFIG_DEBUG_FS=y
2863+# CONFIG_HEADERS_CHECK is not set
2864+CONFIG_DEBUG_KERNEL=y
2865+# CONFIG_DEBUG_SHIRQ is not set
2866+# CONFIG_DETECT_SOFTLOCKUP is not set
2867+# CONFIG_DETECT_HUNG_TASK is not set
2868+CONFIG_SCHED_DEBUG=y
2869+# CONFIG_SCHEDSTATS is not set
2870+# CONFIG_TIMER_STATS is not set
2871+# CONFIG_DEBUG_OBJECTS is not set
2872+# CONFIG_SLUB_DEBUG_ON is not set
2873+# CONFIG_SLUB_STATS is not set
2874+# CONFIG_DEBUG_KMEMLEAK is not set
2875+# CONFIG_DEBUG_RT_MUTEXES is not set
2876+# CONFIG_RT_MUTEX_TESTER is not set
2877+# CONFIG_DEBUG_SPINLOCK is not set
2878+# CONFIG_DEBUG_MUTEXES is not set
2879+# CONFIG_DEBUG_LOCK_ALLOC is not set
2880+# CONFIG_PROVE_LOCKING is not set
2881+# CONFIG_LOCK_STAT is not set
2882+# CONFIG_DEBUG_SPINLOCK_SLEEP is not set
2883+# CONFIG_DEBUG_LOCKING_API_SELFTESTS is not set
2884+# CONFIG_DEBUG_KOBJECT is not set
2885+# CONFIG_DEBUG_HIGHMEM is not set
2886+CONFIG_DEBUG_BUGVERBOSE=y
2887+CONFIG_DEBUG_INFO=y
2888+# CONFIG_DEBUG_VM is not set
2889+# CONFIG_DEBUG_WRITECOUNT is not set
2890+# CONFIG_DEBUG_MEMORY_INIT is not set
2891+# CONFIG_DEBUG_LIST is not set
2892+# CONFIG_DEBUG_SG is not set
2893+# CONFIG_DEBUG_NOTIFIERS is not set
2894+# CONFIG_DEBUG_CREDENTIALS is not set
2895+# CONFIG_RCU_TORTURE_TEST is not set
2896+# CONFIG_RCU_CPU_STALL_DETECTOR is not set
2897+# CONFIG_BACKTRACE_SELF_TEST is not set
2898+# CONFIG_DEBUG_BLOCK_EXT_DEVT is not set
2899+# CONFIG_DEBUG_FORCE_WEAK_PER_CPU is not set
2900+# CONFIG_LKDTM is not set
2901+# CONFIG_FAULT_INJECTION is not set
2902+# CONFIG_LATENCYTOP is not set
2903+CONFIG_SYSCTL_SYSCALL_CHECK=y
2904+# CONFIG_DEBUG_PAGEALLOC is not set
2905+CONFIG_HAVE_FUNCTION_TRACER=y
2906+CONFIG_HAVE_FUNCTION_GRAPH_TRACER=y
2907+CONFIG_HAVE_DYNAMIC_FTRACE=y
2908+CONFIG_HAVE_FTRACE_MCOUNT_RECORD=y
2909+CONFIG_RING_BUFFER=y
2910+CONFIG_RING_BUFFER_ALLOW_SWAP=y
2911+CONFIG_TRACING_SUPPORT=y
2912+CONFIG_FTRACE=y
2913+# CONFIG_FUNCTION_TRACER is not set
2914+# CONFIG_IRQSOFF_TRACER is not set
2915+# CONFIG_SCHED_TRACER is not set
2916+# CONFIG_ENABLE_DEFAULT_TRACERS is not set
2917+# CONFIG_BOOT_TRACER is not set
2918+CONFIG_BRANCH_PROFILE_NONE=y
2919+# CONFIG_PROFILE_ANNOTATED_BRANCHES is not set
2920+# CONFIG_PROFILE_ALL_BRANCHES is not set
2921+# CONFIG_STACK_TRACER is not set
2922+# CONFIG_KMEMTRACE is not set
2923+# CONFIG_WORKQUEUE_TRACER is not set
2924+# CONFIG_BLK_DEV_IO_TRACE is not set
2925+# CONFIG_RING_BUFFER_BENCHMARK is not set
2926+# CONFIG_DYNAMIC_DEBUG is not set
2927+# CONFIG_DMA_API_DEBUG is not set
2928+# CONFIG_ATOMIC64_SELFTEST is not set
2929+# CONFIG_SAMPLES is not set
2930+CONFIG_HAVE_ARCH_KGDB=y
2931+# CONFIG_KGDB is not set
2932+# CONFIG_PPC_DISABLE_WERROR is not set
2933+CONFIG_PPC_WERROR=y
2934+CONFIG_PRINT_STACK_DEPTH=64
2935+# CONFIG_DEBUG_STACKOVERFLOW is not set
2936+# CONFIG_DEBUG_STACK_USAGE is not set
2937+# CONFIG_DEBUG_PER_CPU_MAPS is not set
2938+# CONFIG_PPC_EMULATED_STATS is not set
2939+# CONFIG_CODE_PATCHING_SELFTEST is not set
2940+# CONFIG_FTR_FIXUP_SELFTEST is not set
2941+# CONFIG_MSI_BITMAP_SELFTEST is not set
2942+CONFIG_XMON=y
2943+CONFIG_XMON_DEFAULT=y
2944+CONFIG_XMON_DISASSEMBLY=y
2945+CONFIG_DEBUGGER=y
2946+# CONFIG_VIRQ_DEBUG is not set
2947+# CONFIG_BDI_SWITCH is not set
2948+# CONFIG_PPC_EARLY_DEBUG is not set
2949+
2950+#
2951+# Security options
2952+#
2953+CONFIG_KEYS=y
2954+# CONFIG_KEYS_DEBUG_PROC_KEYS is not set
2955+# CONFIG_SECURITY is not set
2956+# CONFIG_SECURITYFS is not set
2957+# CONFIG_DEFAULT_SECURITY_SELINUX is not set
2958+# CONFIG_DEFAULT_SECURITY_SMACK is not set
2959+# CONFIG_DEFAULT_SECURITY_TOMOYO is not set
2960+CONFIG_DEFAULT_SECURITY_DAC=y
2961+CONFIG_DEFAULT_SECURITY=""
2962+CONFIG_CRYPTO=y
2963+
2964+#
2965+# Crypto core or helper
2966+#
2967+CONFIG_CRYPTO_ALGAPI=y
2968+CONFIG_CRYPTO_ALGAPI2=y
2969+CONFIG_CRYPTO_AEAD=y
2970+CONFIG_CRYPTO_AEAD2=y
2971+CONFIG_CRYPTO_BLKCIPHER=y
2972+CONFIG_CRYPTO_BLKCIPHER2=y
2973+CONFIG_CRYPTO_HASH=y
2974+CONFIG_CRYPTO_HASH2=y
2975+CONFIG_CRYPTO_RNG=y
2976+CONFIG_CRYPTO_RNG2=y
2977+CONFIG_CRYPTO_PCOMP=y
2978+CONFIG_CRYPTO_MANAGER=y
2979+CONFIG_CRYPTO_MANAGER2=y
2980+CONFIG_CRYPTO_GF128MUL=y
2981+CONFIG_CRYPTO_NULL=y
2982+# CONFIG_CRYPTO_PCRYPT is not set
2983+CONFIG_CRYPTO_WORKQUEUE=y
2984+# CONFIG_CRYPTO_CRYPTD is not set
2985+CONFIG_CRYPTO_AUTHENC=y
2986+# CONFIG_CRYPTO_TEST is not set
2987+
2988+#
2989+# Authenticated Encryption with Associated Data
2990+#
2991+# CONFIG_CRYPTO_CCM is not set
2992+CONFIG_CRYPTO_GCM=y
2993+CONFIG_CRYPTO_SEQIV=y
2994+
2995+#
2996+# Block modes
2997+#
2998+CONFIG_CRYPTO_CBC=y
2999+CONFIG_CRYPTO_CTR=y
3000+# CONFIG_CRYPTO_CTS is not set
3001+# CONFIG_CRYPTO_ECB is not set
3002+# CONFIG_CRYPTO_LRW is not set
3003+# CONFIG_CRYPTO_PCBC is not set
3004+# CONFIG_CRYPTO_XTS is not set
3005+
3006+#
3007+# Hash modes
3008+#
3009+CONFIG_CRYPTO_HMAC=y
3010+CONFIG_CRYPTO_XCBC=y
3011+# CONFIG_CRYPTO_VMAC is not set
3012+
3013+#
3014+# Digest
3015+#
3016+# CONFIG_CRYPTO_CRC32C is not set
3017+CONFIG_CRYPTO_GHASH=y
3018+# CONFIG_CRYPTO_MD4 is not set
3019+CONFIG_CRYPTO_MD5=y
3020+# CONFIG_CRYPTO_MICHAEL_MIC is not set
3021+# CONFIG_CRYPTO_RMD128 is not set
3022+# CONFIG_CRYPTO_RMD160 is not set
3023+# CONFIG_CRYPTO_RMD256 is not set
3024+# CONFIG_CRYPTO_RMD320 is not set
3025+CONFIG_CRYPTO_SHA1=y
3026+CONFIG_CRYPTO_SHA256=y
3027+# CONFIG_CRYPTO_SHA512 is not set
3028+# CONFIG_CRYPTO_TGR192 is not set
3029+# CONFIG_CRYPTO_WP512 is not set
3030+
3031+#
3032+# Ciphers
3033+#
3034+CONFIG_CRYPTO_AES=y
3035+# CONFIG_CRYPTO_ANUBIS is not set
3036+# CONFIG_CRYPTO_ARC4 is not set
3037+# CONFIG_CRYPTO_BLOWFISH is not set
3038+# CONFIG_CRYPTO_CAMELLIA is not set
3039+# CONFIG_CRYPTO_CAST5 is not set
3040+# CONFIG_CRYPTO_CAST6 is not set
3041+CONFIG_CRYPTO_DES=y
3042+# CONFIG_CRYPTO_FCRYPT is not set
3043+# CONFIG_CRYPTO_KHAZAD is not set
3044+# CONFIG_CRYPTO_SALSA20 is not set
3045+# CONFIG_CRYPTO_SEED is not set
3046+# CONFIG_CRYPTO_SERPENT is not set
3047+# CONFIG_CRYPTO_TEA is not set
3048+# CONFIG_CRYPTO_TWOFISH is not set
3049+
3050+#
3051+# Compression
3052+#
3053+CONFIG_CRYPTO_DEFLATE=y
3054+# CONFIG_CRYPTO_ZLIB is not set
3055+# CONFIG_CRYPTO_LZO is not set
3056+
3057+#
3058+# Random Number Generation
3059+#
3060+# CONFIG_CRYPTO_ANSI_CPRNG is not set
3061+CONFIG_CRYPTO_HW=y
3062+# CONFIG_CRYPTO_DEV_HIFN_795X is not set
3063+CONFIG_CRYPTO_DEV_PPC4XX=y
3064+# CONFIG_PPC_CLOCK is not set
3065+# CONFIG_VIRTUALIZATION is not set
3066diff --git a/arch/powerpc/configs/acp_dbgconfig b/arch/powerpc/configs/acp_dbgconfig
3067new file mode 100644
3068index 0000000..2d206e5
3069--- /dev/null
3070+++ b/arch/powerpc/configs/acp_dbgconfig
3071@@ -0,0 +1,1655 @@
3072+#
3073+# Automatically generated make config: don't edit
3074+# Linux kernel version: 2.6.35
3075+# Tue Sep 13 11:37:01 2011
3076+#
3077+# CONFIG_PPC64 is not set
3078+
3079+#
3080+# Processor support
3081+#
3082+# CONFIG_PPC_BOOK3S_32 is not set
3083+# CONFIG_PPC_85xx is not set
3084+# CONFIG_PPC_8xx is not set
3085+# CONFIG_40x is not set
3086+CONFIG_44x=y
3087+# CONFIG_E200 is not set
3088+CONFIG_PPC_FPU=y
3089+CONFIG_4xx=y
3090+CONFIG_BOOKE=y
3091+CONFIG_PTE_64BIT=y
3092+CONFIG_PHYS_64BIT=y
3093+CONFIG_PPC_MMU_NOHASH=y
3094+CONFIG_PPC_MMU_NOHASH_32=y
3095+# CONFIG_PPC_MM_SLICES is not set
3096+CONFIG_SMP=y
3097+CONFIG_NR_CPUS=4
3098+# CONFIG_NOT_COHERENT_CACHE is not set
3099+CONFIG_PPC32=y
3100+CONFIG_WORD_SIZE=32
3101+CONFIG_ARCH_PHYS_ADDR_T_64BIT=y
3102+CONFIG_MMU=y
3103+CONFIG_GENERIC_CMOS_UPDATE=y
3104+CONFIG_GENERIC_TIME=y
3105+CONFIG_GENERIC_TIME_VSYSCALL=y
3106+CONFIG_GENERIC_CLOCKEVENTS=y
3107+CONFIG_GENERIC_HARDIRQS=y
3108+CONFIG_GENERIC_HARDIRQS_NO__DO_IRQ=y
3109+# CONFIG_HAVE_SETUP_PER_CPU_AREA is not set
3110+# CONFIG_NEED_PER_CPU_EMBED_FIRST_CHUNK is not set
3111+CONFIG_IRQ_PER_CPU=y
3112+CONFIG_NR_IRQS=512
3113+CONFIG_STACKTRACE_SUPPORT=y
3114+CONFIG_HAVE_LATENCYTOP_SUPPORT=y
3115+CONFIG_TRACE_IRQFLAGS_SUPPORT=y
3116+CONFIG_LOCKDEP_SUPPORT=y
3117+CONFIG_RWSEM_XCHGADD_ALGORITHM=y
3118+CONFIG_ARCH_HAS_ILOG2_U32=y
3119+CONFIG_GENERIC_HWEIGHT=y
3120+CONFIG_GENERIC_FIND_NEXT_BIT=y
3121+# CONFIG_ARCH_NO_VIRT_TO_BUS is not set
3122+CONFIG_PPC=y
3123+CONFIG_EARLY_PRINTK=y
3124+CONFIG_GENERIC_NVRAM=y
3125+CONFIG_SCHED_OMIT_FRAME_POINTER=y
3126+CONFIG_ARCH_MAY_HAVE_PC_FDC=y
3127+CONFIG_PPC_OF=y
3128+CONFIG_OF=y
3129+CONFIG_PPC_UDBG_16550=y
3130+CONFIG_GENERIC_TBSYNC=y
3131+CONFIG_AUDIT_ARCH=y
3132+CONFIG_GENERIC_BUG=y
3133+CONFIG_DTC=y
3134+# CONFIG_DEFAULT_UIMAGE is not set
3135+CONFIG_ARCH_HIBERNATION_POSSIBLE=y
3136+CONFIG_PPC_DCR_NATIVE=y
3137+# CONFIG_PPC_DCR_MMIO is not set
3138+CONFIG_PPC_DCR=y
3139+CONFIG_ARCH_SUPPORTS_DEBUG_PAGEALLOC=y
3140+CONFIG_PPC_ADV_DEBUG_REGS=y
3141+CONFIG_PPC_ADV_DEBUG_IACS=4
3142+CONFIG_PPC_ADV_DEBUG_DACS=2
3143+CONFIG_PPC_ADV_DEBUG_DVCS=2
3144+CONFIG_PPC_ADV_DEBUG_DAC_RANGE=y
3145+CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
3146+CONFIG_CONSTRUCTORS=y
3147+
3148+#
3149+# General setup
3150+#
3151+CONFIG_EXPERIMENTAL=y
3152+CONFIG_LOCK_KERNEL=y
3153+CONFIG_INIT_ENV_ARG_LIMIT=32
3154+CONFIG_CROSS_COMPILE="powerpc-linux-"
3155+CONFIG_LOCALVERSION=""
3156+CONFIG_LOCALVERSION_AUTO=y
3157+CONFIG_SWAP=y
3158+CONFIG_SYSVIPC=y
3159+CONFIG_SYSVIPC_SYSCTL=y
3160+CONFIG_POSIX_MQUEUE=y
3161+CONFIG_POSIX_MQUEUE_SYSCTL=y
3162+# CONFIG_BSD_PROCESS_ACCT is not set
3163+# CONFIG_TASKSTATS is not set
3164+# CONFIG_AUDIT is not set
3165+
3166+#
3167+# RCU Subsystem
3168+#
3169+CONFIG_TREE_RCU=y
3170+# CONFIG_TREE_PREEMPT_RCU is not set
3171+# CONFIG_TINY_RCU is not set
3172+# CONFIG_RCU_TRACE is not set
3173+CONFIG_RCU_FANOUT=32
3174+# CONFIG_RCU_FANOUT_EXACT is not set
3175+# CONFIG_TREE_RCU_TRACE is not set
3176+# CONFIG_IKCONFIG is not set
3177+CONFIG_LOG_BUF_SHIFT=14
3178+# CONFIG_CGROUPS is not set
3179+CONFIG_SYSFS_DEPRECATED=y
3180+CONFIG_SYSFS_DEPRECATED_V2=y
3181+# CONFIG_RELAY is not set
3182+# CONFIG_NAMESPACES is not set
3183+CONFIG_BLK_DEV_INITRD=y
3184+CONFIG_INITRAMFS_SOURCE=""
3185+CONFIG_RD_GZIP=y
3186+# CONFIG_RD_BZIP2 is not set
3187+# CONFIG_RD_LZMA is not set
3188+# CONFIG_RD_LZO is not set
3189+# CONFIG_CC_OPTIMIZE_FOR_SIZE is not set
3190+CONFIG_SYSCTL=y
3191+CONFIG_ANON_INODES=y
3192+CONFIG_EMBEDDED=y
3193+CONFIG_SYSCTL_SYSCALL=y
3194+CONFIG_KALLSYMS=y
3195+# CONFIG_KALLSYMS_ALL is not set
3196+CONFIG_KALLSYMS_EXTRA_PASS=y
3197+CONFIG_HOTPLUG=y
3198+CONFIG_PRINTK=y
3199+CONFIG_BUG=y
3200+CONFIG_ELF_CORE=y
3201+CONFIG_BASE_FULL=y
3202+CONFIG_FUTEX=y
3203+CONFIG_EPOLL=y
3204+CONFIG_SIGNALFD=y
3205+CONFIG_TIMERFD=y
3206+CONFIG_EVENTFD=y
3207+CONFIG_SHMEM=y
3208+CONFIG_AIO=y
3209+CONFIG_HAVE_PERF_EVENTS=y
3210+
3211+#
3212+# Kernel Performance Events And Counters
3213+#
3214+# CONFIG_PERF_EVENTS is not set
3215+# CONFIG_PERF_COUNTERS is not set
3216+CONFIG_VM_EVENT_COUNTERS=y
3217+CONFIG_PCI_QUIRKS=y
3218+CONFIG_SLUB_DEBUG=y
3219+CONFIG_COMPAT_BRK=y
3220+# CONFIG_SLAB is not set
3221+CONFIG_SLUB=y
3222+# CONFIG_SLOB is not set
3223+CONFIG_PROFILING=y
3224+CONFIG_OPROFILE=y
3225+CONFIG_HAVE_OPROFILE=y
3226+# CONFIG_KPROBES is not set
3227+CONFIG_HAVE_EFFICIENT_UNALIGNED_ACCESS=y
3228+CONFIG_HAVE_IOREMAP_PROT=y
3229+CONFIG_HAVE_KPROBES=y
3230+CONFIG_HAVE_KRETPROBES=y
3231+CONFIG_HAVE_ARCH_TRACEHOOK=y
3232+CONFIG_HAVE_DMA_ATTRS=y
3233+CONFIG_USE_GENERIC_SMP_HELPERS=y
3234+CONFIG_HAVE_REGS_AND_STACK_ACCESS_API=y
3235+CONFIG_HAVE_DMA_API_DEBUG=y
3236+
3237+#
3238+# GCOV-based kernel profiling
3239+#
3240+# CONFIG_GCOV_KERNEL is not set
3241+# CONFIG_SLOW_WORK is not set
3242+# CONFIG_HAVE_GENERIC_DMA_COHERENT is not set
3243+CONFIG_SLABINFO=y
3244+CONFIG_RT_MUTEXES=y
3245+CONFIG_BASE_SMALL=0
3246+CONFIG_MODULES=y
3247+CONFIG_MODULE_FORCE_LOAD=y
3248+CONFIG_MODULE_UNLOAD=y
3249+CONFIG_MODULE_FORCE_UNLOAD=y
3250+CONFIG_MODVERSIONS=y
3251+CONFIG_MODULE_SRCVERSION_ALL=y
3252+CONFIG_STOP_MACHINE=y
3253+CONFIG_BLOCK=y
3254+CONFIG_LBDAF=y
3255+# CONFIG_BLK_DEV_BSG is not set
3256+# CONFIG_BLK_DEV_INTEGRITY is not set
3257+
3258+#
3259+# IO Schedulers
3260+#
3261+CONFIG_IOSCHED_NOOP=y
3262+CONFIG_IOSCHED_DEADLINE=y
3263+CONFIG_IOSCHED_CFQ=y
3264+# CONFIG_DEFAULT_DEADLINE is not set
3265+CONFIG_DEFAULT_CFQ=y
3266+# CONFIG_DEFAULT_NOOP is not set
3267+CONFIG_DEFAULT_IOSCHED="cfq"
3268+# CONFIG_INLINE_SPIN_TRYLOCK is not set
3269+# CONFIG_INLINE_SPIN_TRYLOCK_BH is not set
3270+# CONFIG_INLINE_SPIN_LOCK is not set
3271+# CONFIG_INLINE_SPIN_LOCK_BH is not set
3272+# CONFIG_INLINE_SPIN_LOCK_IRQ is not set
3273+# CONFIG_INLINE_SPIN_LOCK_IRQSAVE is not set
3274+CONFIG_INLINE_SPIN_UNLOCK=y
3275+# CONFIG_INLINE_SPIN_UNLOCK_BH is not set
3276+CONFIG_INLINE_SPIN_UNLOCK_IRQ=y
3277+# CONFIG_INLINE_SPIN_UNLOCK_IRQRESTORE is not set
3278+# CONFIG_INLINE_READ_TRYLOCK is not set
3279+# CONFIG_INLINE_READ_LOCK is not set
3280+# CONFIG_INLINE_READ_LOCK_BH is not set
3281+# CONFIG_INLINE_READ_LOCK_IRQ is not set
3282+# CONFIG_INLINE_READ_LOCK_IRQSAVE is not set
3283+CONFIG_INLINE_READ_UNLOCK=y
3284+# CONFIG_INLINE_READ_UNLOCK_BH is not set
3285+CONFIG_INLINE_READ_UNLOCK_IRQ=y
3286+# CONFIG_INLINE_READ_UNLOCK_IRQRESTORE is not set
3287+# CONFIG_INLINE_WRITE_TRYLOCK is not set
3288+# CONFIG_INLINE_WRITE_LOCK is not set
3289+# CONFIG_INLINE_WRITE_LOCK_BH is not set
3290+# CONFIG_INLINE_WRITE_LOCK_IRQ is not set
3291+# CONFIG_INLINE_WRITE_LOCK_IRQSAVE is not set
3292+CONFIG_INLINE_WRITE_UNLOCK=y
3293+# CONFIG_INLINE_WRITE_UNLOCK_BH is not set
3294+CONFIG_INLINE_WRITE_UNLOCK_IRQ=y
3295+# CONFIG_INLINE_WRITE_UNLOCK_IRQRESTORE is not set
3296+CONFIG_MUTEX_SPIN_ON_OWNER=y
3297+# CONFIG_FREEZER is not set
3298+CONFIG_PPC4xx_PCI_EXPRESS=y
3299+CONFIG_PPC_MSI_BITMAP=y
3300+# CONFIG_RAPIDIO_FSL is not set
3301+
3302+#
3303+# Platform support
3304+#
3305+# CONFIG_PPC_CELL is not set
3306+# CONFIG_PPC_CELL_NATIVE is not set
3307+# CONFIG_PQ2ADS is not set
3308+CONFIG_PPC_47x=y
3309+# CONFIG_BAMBOO is not set
3310+# CONFIG_EBONY is not set
3311+# CONFIG_SAM440EP is not set
3312+# CONFIG_SEQUOIA is not set
3313+# CONFIG_TAISHAN is not set
3314+# CONFIG_KATMAI is not set
3315+# CONFIG_RAINIER is not set
3316+# CONFIG_WARP is not set
3317+# CONFIG_ARCHES is not set
3318+# CONFIG_CANYONLANDS is not set
3319+# CONFIG_GLACIER is not set
3320+# CONFIG_REDWOOD is not set
3321+# CONFIG_EIGER is not set
3322+# CONFIG_YOSEMITE is not set
3323+# CONFIG_ISS4xx is not set
3324+# CONFIG_ICON is not set
3325+CONFIG_ACP=y
3326+# CONFIG_ACPISS is not set
3327+# CONFIG_ACP_X1V1 is not set
3328+# CONFIG_XILINX_VIRTEX440_GENERIC_BOARD is not set
3329+# CONFIG_PPC44x_SIMPLE is not set
3330+# CONFIG_PPC4xx_GPIO is not set
3331+CONFIG_440GP=y
3332+# CONFIG_IPIC is not set
3333+CONFIG_MPIC=y
3334+# CONFIG_MPIC_WEIRD is not set
3335+# CONFIG_PPC_I8259 is not set
3336+# CONFIG_PPC_RTAS is not set
3337+# CONFIG_MMIO_NVRAM is not set
3338+# CONFIG_PPC_MPC106 is not set
3339+# CONFIG_PPC_970_NAP is not set
3340+# CONFIG_PPC_INDIRECT_IO is not set
3341+# CONFIG_GENERIC_IOMAP is not set
3342+# CONFIG_CPU_FREQ is not set
3343+# CONFIG_FSL_ULI1575 is not set
3344+# CONFIG_SIMPLE_GPIO is not set
3345+
3346+#
3347+# Kernel options
3348+#
3349+CONFIG_HIGHMEM=y
3350+CONFIG_TICK_ONESHOT=y
3351+# CONFIG_NO_HZ is not set
3352+CONFIG_HIGH_RES_TIMERS=y
3353+CONFIG_GENERIC_CLOCKEVENTS_BUILD=y
3354+CONFIG_HZ_100=y
3355+# CONFIG_HZ_250 is not set
3356+# CONFIG_HZ_300 is not set
3357+# CONFIG_HZ_1000 is not set
3358+CONFIG_HZ=100
3359+CONFIG_SCHED_HRTICK=y
3360+CONFIG_PREEMPT_NONE=y
3361+# CONFIG_PREEMPT_VOLUNTARY is not set
3362+# CONFIG_PREEMPT is not set
3363+CONFIG_BINFMT_ELF=y
3364+# CONFIG_CORE_DUMP_DEFAULT_ELF_HEADERS is not set
3365+# CONFIG_HAVE_AOUT is not set
3366+# CONFIG_BINFMT_MISC is not set
3367+# CONFIG_MATH_EMULATION is not set
3368+# CONFIG_IOMMU_HELPER is not set
3369+# CONFIG_SWIOTLB is not set
3370+CONFIG_ARCH_ENABLE_MEMORY_HOTPLUG=y
3371+CONFIG_ARCH_HAS_WALK_MEMORY=y
3372+CONFIG_ARCH_ENABLE_MEMORY_HOTREMOVE=y
3373+# CONFIG_IRQ_ALL_CPUS is not set
3374+CONFIG_SPARSE_IRQ=y
3375+CONFIG_MAX_ACTIVE_REGIONS=32
3376+CONFIG_ARCH_FLATMEM_ENABLE=y
3377+CONFIG_ARCH_POPULATES_NODE_MAP=y
3378+CONFIG_SELECT_MEMORY_MODEL=y
3379+CONFIG_FLATMEM_MANUAL=y
3380+# CONFIG_DISCONTIGMEM_MANUAL is not set
3381+# CONFIG_SPARSEMEM_MANUAL is not set
3382+CONFIG_FLATMEM=y
3383+CONFIG_FLAT_NODE_MEM_MAP=y
3384+CONFIG_HAVE_MEMBLOCK=y
3385+CONFIG_PAGEFLAGS_EXTENDED=y
3386+CONFIG_SPLIT_PTLOCK_CPUS=4
3387+CONFIG_MIGRATION=y
3388+CONFIG_PHYS_ADDR_T_64BIT=y
3389+CONFIG_ZONE_DMA_FLAG=1
3390+CONFIG_BOUNCE=y
3391+CONFIG_VIRT_TO_BUS=y
3392+# CONFIG_KSM is not set
3393+CONFIG_DEFAULT_MMAP_MIN_ADDR=4096
3394+CONFIG_STDBINUTILS=y
3395+CONFIG_PPC_4K_PAGES=y
3396+# CONFIG_PPC_16K_PAGES is not set
3397+# CONFIG_PPC_64K_PAGES is not set
3398+# CONFIG_PPC_256K_PAGES is not set
3399+CONFIG_FORCE_MAX_ZONEORDER=11
3400+# CONFIG_PROC_DEVICETREE is not set
3401+CONFIG_CMDLINE_BOOL=y
3402+CONFIG_CMDLINE="console=ttyS0 mtdparts=acp-nand:512K(2ndStage),512K(env-0),512K(env-1),512K(3rdStage),-(fs) ip=dhcp root=/dev/nfs"
3403+CONFIG_EXTRA_TARGETS=""
3404+CONFIG_SECCOMP=y
3405+CONFIG_ISA_DMA_API=y
3406+
3407+#
3408+# Bus options
3409+#
3410+CONFIG_ZONE_DMA=y
3411+# CONFIG_NEED_DMA_MAP_STATE is not set
3412+CONFIG_NEED_SG_DMA_LENGTH=y
3413+CONFIG_PPC_INDIRECT_PCI=y
3414+CONFIG_4xx_SOC=y
3415+CONFIG_PPC_PCI_CHOICE=y
3416+CONFIG_PCI=y
3417+CONFIG_PCI_DOMAINS=y
3418+CONFIG_PCI_SYSCALL=y
3419+CONFIG_PCIEPORTBUS=y
3420+# CONFIG_PCIEAER is not set
3421+CONFIG_PCIEASPM=y
3422+# CONFIG_PCIEASPM_DEBUG is not set
3423+CONFIG_ARCH_SUPPORTS_MSI=y
3424+CONFIG_PCI_MSI=y
3425+# CONFIG_PCI_DEBUG is not set
3426+# CONFIG_PCI_STUB is not set
3427+# CONFIG_PCI_IOV is not set
3428+# CONFIG_PCCARD is not set
3429+# CONFIG_HOTPLUG_PCI is not set
3430+CONFIG_HAS_RAPIDIO=y
3431+CONFIG_RAPIDIO=y
3432+CONFIG_RAPIDIO_DISC_TIMEOUT=30
3433+# CONFIG_RAPIDIO_ENABLE_RX_TX_PORTS is not set
3434+# CONFIG_RAPIDIO_ACP is not set
3435+CONFIG_RAPIDIO_TSI57X=y
3436+CONFIG_RAPIDIO_CPS_XX=y
3437+CONFIG_RAPIDIO_TSI568=y
3438+CONFIG_RAPIDIO_TSI500=y
3439+CONFIG_RAPIDIO_DEBUG=y
3440+
3441+#
3442+# Advanced setup
3443+#
3444+CONFIG_ADVANCED_OPTIONS=y
3445+# CONFIG_LOWMEM_SIZE_BOOL is not set
3446+CONFIG_LOWMEM_SIZE=0x30000000
3447+CONFIG_RELOCATABLE=y
3448+CONFIG_PAGE_OFFSET_BOOL=y
3449+CONFIG_PAGE_OFFSET=0xc0000000
3450+CONFIG_KERNEL_START_BOOL=y
3451+CONFIG_KERNEL_START=0xc0400000
3452+CONFIG_PHYSICAL_START=0x00000000
3453+CONFIG_TASK_SIZE_BOOL=y
3454+CONFIG_TASK_SIZE=0xc0000000
3455+CONFIG_NET=y
3456+
3457+#
3458+# Networking options
3459+#
3460+CONFIG_PACKET=y
3461+CONFIG_UNIX=y
3462+CONFIG_XFRM=y
3463+CONFIG_XFRM_USER=y
3464+CONFIG_XFRM_SUB_POLICY=y
3465+CONFIG_XFRM_MIGRATE=y
3466+CONFIG_XFRM_STATISTICS=y
3467+CONFIG_XFRM_IPCOMP=y
3468+CONFIG_NET_KEY=y
3469+# CONFIG_NET_KEY_MIGRATE is not set
3470+CONFIG_INET=y
3471+CONFIG_IP_MULTICAST=y
3472+# CONFIG_IP_ADVANCED_ROUTER is not set
3473+CONFIG_IP_FIB_HASH=y
3474+CONFIG_IP_PNP=y
3475+CONFIG_IP_PNP_DHCP=y
3476+CONFIG_IP_PNP_BOOTP=y
3477+CONFIG_IP_PNP_RARP=y
3478+CONFIG_NET_IPIP=y
3479+# CONFIG_NET_IPGRE is not set
3480+# CONFIG_IP_MROUTE is not set
3481+# CONFIG_ARPD is not set
3482+CONFIG_SYN_COOKIES=y
3483+CONFIG_INET_AH=y
3484+CONFIG_INET_ESP=y
3485+CONFIG_INET_IPCOMP=y
3486+CONFIG_INET_XFRM_TUNNEL=y
3487+CONFIG_INET_TUNNEL=y
3488+CONFIG_INET_XFRM_MODE_TRANSPORT=y
3489+CONFIG_INET_XFRM_MODE_TUNNEL=y
3490+CONFIG_INET_XFRM_MODE_BEET=y
3491+# CONFIG_INET_LRO is not set
3492+CONFIG_INET_DIAG=y
3493+CONFIG_INET_TCP_DIAG=y
3494+# CONFIG_TCP_CONG_ADVANCED is not set
3495+CONFIG_TCP_CONG_CUBIC=y
3496+CONFIG_DEFAULT_TCP_CONG="cubic"
3497+# CONFIG_TCP_MD5SIG is not set
3498+CONFIG_IPV6=y
3499+# CONFIG_IPV6_PRIVACY is not set
3500+# CONFIG_IPV6_ROUTER_PREF is not set
3501+# CONFIG_IPV6_OPTIMISTIC_DAD is not set
3502+CONFIG_INET6_AH=y
3503+CONFIG_INET6_ESP=y
3504+CONFIG_INET6_IPCOMP=y
3505+CONFIG_IPV6_MIP6=y
3506+CONFIG_INET6_XFRM_TUNNEL=y
3507+CONFIG_INET6_TUNNEL=y
3508+CONFIG_INET6_XFRM_MODE_TRANSPORT=y
3509+CONFIG_INET6_XFRM_MODE_TUNNEL=y
3510+CONFIG_INET6_XFRM_MODE_BEET=y
3511+# CONFIG_INET6_XFRM_MODE_ROUTEOPTIMIZATION is not set
3512+CONFIG_IPV6_SIT=y
3513+# CONFIG_IPV6_SIT_6RD is not set
3514+CONFIG_IPV6_NDISC_NODETYPE=y
3515+CONFIG_IPV6_TUNNEL=y
3516+# CONFIG_IPV6_MULTIPLE_TABLES is not set
3517+# CONFIG_IPV6_MROUTE is not set
3518+CONFIG_NETWORK_SECMARK=y
3519+CONFIG_NETFILTER=y
3520+# CONFIG_NETFILTER_DEBUG is not set
3521+CONFIG_NETFILTER_ADVANCED=y
3522+
3523+#
3524+# Core Netfilter Configuration
3525+#
3526+# CONFIG_NETFILTER_NETLINK_QUEUE is not set
3527+# CONFIG_NETFILTER_NETLINK_LOG is not set
3528+# CONFIG_NF_CONNTRACK is not set
3529+# CONFIG_NETFILTER_XTABLES is not set
3530+# CONFIG_IP_VS is not set
3531+
3532+#
3533+# IP: Netfilter Configuration
3534+#
3535+# CONFIG_NF_DEFRAG_IPV4 is not set
3536+# CONFIG_IP_NF_QUEUE is not set
3537+# CONFIG_IP_NF_IPTABLES is not set
3538+# CONFIG_IP_NF_ARPTABLES is not set
3539+
3540+#
3541+# IPv6: Netfilter Configuration
3542+#
3543+# CONFIG_IP6_NF_QUEUE is not set
3544+# CONFIG_IP6_NF_IPTABLES is not set
3545+# CONFIG_IP_DCCP is not set
3546+# CONFIG_IP_SCTP is not set
3547+# CONFIG_RDS is not set
3548+# CONFIG_TIPC is not set
3549+# CONFIG_ATM is not set
3550+# CONFIG_L2TP is not set
3551+# CONFIG_BRIDGE is not set
3552+# CONFIG_NET_DSA is not set
3553+CONFIG_VLAN_8021Q=y
3554+# CONFIG_VLAN_8021Q_GVRP is not set
3555+# CONFIG_DECNET is not set
3556+# CONFIG_LLC2 is not set
3557+# CONFIG_IPX is not set
3558+# CONFIG_ATALK is not set
3559+# CONFIG_X25 is not set
3560+# CONFIG_LAPB is not set
3561+# CONFIG_ECONET is not set
3562+# CONFIG_WAN_ROUTER is not set
3563+# CONFIG_PHONET is not set
3564+# CONFIG_IEEE802154 is not set
3565+# CONFIG_NET_SCHED is not set
3566+# CONFIG_DCB is not set
3567+CONFIG_RPS=y
3568+
3569+#
3570+# Network testing
3571+#
3572+# CONFIG_NET_PKTGEN is not set
3573+# CONFIG_HAMRADIO is not set
3574+# CONFIG_CAN is not set
3575+# CONFIG_IRDA is not set
3576+# CONFIG_BT is not set
3577+# CONFIG_AF_RXRPC is not set
3578+CONFIG_WIRELESS=y
3579+CONFIG_WIRELESS_EXT=y
3580+CONFIG_WEXT_CORE=y
3581+CONFIG_WEXT_PROC=y
3582+CONFIG_WEXT_PRIV=y
3583+# CONFIG_CFG80211 is not set
3584+CONFIG_WIRELESS_EXT_SYSFS=y
3585+# CONFIG_LIB80211 is not set
3586+
3587+#
3588+# CFG80211 needs to be enabled for MAC80211
3589+#
3590+
3591+#
3592+# Some wireless drivers require a rate control algorithm
3593+#
3594+# CONFIG_WIMAX is not set
3595+# CONFIG_RFKILL is not set
3596+# CONFIG_NET_9P is not set
3597+# CONFIG_CAIF is not set
3598+
3599+#
3600+# Device Drivers
3601+#
3602+
3603+#
3604+# Generic Driver Options
3605+#
3606+CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug"
3607+# CONFIG_DEVTMPFS is not set
3608+CONFIG_STANDALONE=y
3609+CONFIG_PREVENT_FIRMWARE_BUILD=y
3610+CONFIG_FW_LOADER=y
3611+CONFIG_FIRMWARE_IN_KERNEL=y
3612+CONFIG_EXTRA_FIRMWARE=""
3613+# CONFIG_DEBUG_DRIVER is not set
3614+# CONFIG_DEBUG_DEVRES is not set
3615+# CONFIG_SYS_HYPERVISOR is not set
3616+# CONFIG_CONNECTOR is not set
3617+CONFIG_MTD=y
3618+# CONFIG_MTD_DEBUG is not set
3619+# CONFIG_MTD_TESTS is not set
3620+# CONFIG_MTD_CONCAT is not set
3621+CONFIG_MTD_PARTITIONS=y
3622+# CONFIG_MTD_REDBOOT_PARTS is not set
3623+CONFIG_MTD_CMDLINE_PARTS=y
3624+CONFIG_MTD_OF_PARTS=y
3625+# CONFIG_MTD_AR7_PARTS is not set
3626+
3627+#
3628+# User Modules And Translation Layers
3629+#
3630+CONFIG_MTD_CHAR=y
3631+CONFIG_MTD_BLKDEVS=y
3632+CONFIG_MTD_BLOCK=y
3633+# CONFIG_FTL is not set
3634+# CONFIG_NFTL is not set
3635+# CONFIG_INFTL is not set
3636+# CONFIG_RFD_FTL is not set
3637+# CONFIG_SSFDC is not set
3638+# CONFIG_SM_FTL is not set
3639+# CONFIG_MTD_OOPS is not set
3640+
3641+#
3642+# RAM/ROM/Flash chip drivers
3643+#
3644+# CONFIG_MTD_CFI is not set
3645+CONFIG_MTD_JEDECPROBE=y
3646+CONFIG_MTD_GEN_PROBE=y
3647+# CONFIG_MTD_CFI_ADV_OPTIONS is not set
3648+CONFIG_MTD_MAP_BANK_WIDTH_1=y
3649+CONFIG_MTD_MAP_BANK_WIDTH_2=y
3650+CONFIG_MTD_MAP_BANK_WIDTH_4=y
3651+# CONFIG_MTD_MAP_BANK_WIDTH_8 is not set
3652+# CONFIG_MTD_MAP_BANK_WIDTH_16 is not set
3653+# CONFIG_MTD_MAP_BANK_WIDTH_32 is not set
3654+CONFIG_MTD_CFI_I1=y
3655+CONFIG_MTD_CFI_I2=y
3656+# CONFIG_MTD_CFI_I4 is not set
3657+# CONFIG_MTD_CFI_I8 is not set
3658+# CONFIG_MTD_CFI_INTELEXT is not set
3659+CONFIG_MTD_CFI_AMDSTD=y
3660+# CONFIG_MTD_CFI_STAA is not set
3661+CONFIG_MTD_CFI_UTIL=y
3662+# CONFIG_MTD_RAM is not set
3663+# CONFIG_MTD_ROM is not set
3664+# CONFIG_MTD_ABSENT is not set
3665+
3666+#
3667+# Mapping drivers for chip access
3668+#
3669+# CONFIG_MTD_COMPLEX_MAPPINGS is not set
3670+# CONFIG_MTD_PHYSMAP is not set
3671+CONFIG_MTD_PHYSMAP_OF=y
3672+# CONFIG_MTD_INTEL_VR_NOR is not set
3673+# CONFIG_MTD_PLATRAM is not set
3674+
3675+#
3676+# Self-contained MTD device drivers
3677+#
3678+# CONFIG_MTD_PMC551 is not set
3679+# CONFIG_MTD_SLRAM is not set
3680+# CONFIG_MTD_PHRAM is not set
3681+# CONFIG_MTD_MTDRAM is not set
3682+# CONFIG_MTD_BLOCK2MTD is not set
3683+
3684+#
3685+# Disk-On-Chip Device Drivers
3686+#
3687+# CONFIG_MTD_DOC2000 is not set
3688+# CONFIG_MTD_DOC2001 is not set
3689+# CONFIG_MTD_DOC2001PLUS is not set
3690+CONFIG_MTD_NAND_ECC=y
3691+# CONFIG_MTD_NAND_ECC_SMC is not set
3692+CONFIG_MTD_NAND=y
3693+# CONFIG_MTD_NAND_VERIFY_WRITE is not set
3694+# CONFIG_MTD_SM_COMMON is not set
3695+# CONFIG_MTD_NAND_MUSEUM_IDS is not set
3696+# CONFIG_MTD_NAND_DENALI is not set
3697+CONFIG_MTD_NAND_DENALI_SCRATCH_REG_ADDR=0xFF108018
3698+CONFIG_MTD_NAND_IDS=y
3699+# CONFIG_MTD_NAND_RICOH is not set
3700+# CONFIG_MTD_NAND_NDFC is not set
3701+# CONFIG_MTD_NAND_DISKONCHIP is not set
3702+# CONFIG_MTD_NAND_CAFE is not set
3703+# CONFIG_MTD_NAND_NANDSIM is not set
3704+CONFIG_MTD_NAND_PLATFORM=y
3705+# CONFIG_MTD_ALAUDA is not set
3706+# CONFIG_MTD_NAND_FSL_ELBC is not set
3707+# CONFIG_MTD_ONENAND is not set
3708+
3709+#
3710+# LPDDR flash memory drivers
3711+#
3712+# CONFIG_MTD_LPDDR is not set
3713+
3714+#
3715+# UBI - Unsorted block images
3716+#
3717+# CONFIG_MTD_UBI is not set
3718+CONFIG_OF_FLATTREE=y
3719+CONFIG_OF_DYNAMIC=y
3720+CONFIG_OF_DEVICE=y
3721+# CONFIG_PARPORT is not set
3722+CONFIG_BLK_DEV=y
3723+# CONFIG_BLK_DEV_FD is not set
3724+# CONFIG_BLK_CPQ_DA is not set
3725+# CONFIG_BLK_CPQ_CISS_DA is not set
3726+# CONFIG_BLK_DEV_DAC960 is not set
3727+# CONFIG_BLK_DEV_UMEM is not set
3728+# CONFIG_BLK_DEV_COW_COMMON is not set
3729+# CONFIG_BLK_DEV_LOOP is not set
3730+
3731+#
3732+# DRBD disabled because PROC_FS, INET or CONNECTOR not selected
3733+#
3734+# CONFIG_BLK_DEV_NBD is not set
3735+# CONFIG_BLK_DEV_SX8 is not set
3736+CONFIG_BLK_DEV_UB=y
3737+CONFIG_BLK_DEV_RAM=y
3738+CONFIG_BLK_DEV_RAM_COUNT=16
3739+CONFIG_BLK_DEV_RAM_SIZE=35000
3740+# CONFIG_BLK_DEV_XIP is not set
3741+# CONFIG_BLK_DEV_ISS is not set
3742+# CONFIG_CDROM_PKTCDVD is not set
3743+# CONFIG_ATA_OVER_ETH is not set
3744+# CONFIG_XILINX_SYSACE is not set
3745+# CONFIG_BLK_DEV_HD is not set
3746+CONFIG_MISC_DEVICES=y
3747+# CONFIG_PHANTOM is not set
3748+# CONFIG_SGI_IOC4 is not set
3749+# CONFIG_TIFM_CORE is not set
3750+# CONFIG_ENCLOSURE_SERVICES is not set
3751+# CONFIG_HP_ILO is not set
3752+# CONFIG_C2PORT is not set
3753+
3754+#
3755+# EEPROM support
3756+#
3757+# CONFIG_EEPROM_93CX6 is not set
3758+# CONFIG_CB710_CORE is not set
3759+CONFIG_HAVE_IDE=y
3760+# CONFIG_IDE is not set
3761+
3762+#
3763+# SCSI device support
3764+#
3765+CONFIG_SCSI_MOD=y
3766+# CONFIG_RAID_ATTRS is not set
3767+CONFIG_SCSI=y
3768+CONFIG_SCSI_DMA=y
3769+CONFIG_SCSI_TGT=y
3770+# CONFIG_SCSI_NETLINK is not set
3771+CONFIG_SCSI_PROC_FS=y
3772+
3773+#
3774+# SCSI support type (disk, tape, CD-ROM)
3775+#
3776+CONFIG_BLK_DEV_SD=y
3777+# CONFIG_CHR_DEV_ST is not set
3778+# CONFIG_CHR_DEV_OSST is not set
3779+# CONFIG_BLK_DEV_SR is not set
3780+# CONFIG_CHR_DEV_SG is not set
3781+# CONFIG_CHR_DEV_SCH is not set
3782+# CONFIG_SCSI_MULTI_LUN is not set
3783+CONFIG_SCSI_CONSTANTS=y
3784+# CONFIG_SCSI_LOGGING is not set
3785+# CONFIG_SCSI_SCAN_ASYNC is not set
3786+CONFIG_SCSI_WAIT_SCAN=m
3787+
3788+#
3789+# SCSI Transports
3790+#
3791+# CONFIG_SCSI_SPI_ATTRS is not set
3792+# CONFIG_SCSI_FC_ATTRS is not set
3793+# CONFIG_SCSI_ISCSI_ATTRS is not set
3794+# CONFIG_SCSI_SAS_LIBSAS is not set
3795+# CONFIG_SCSI_SRP_ATTRS is not set
3796+CONFIG_SCSI_LOWLEVEL=y
3797+# CONFIG_ISCSI_TCP is not set
3798+# CONFIG_SCSI_BNX2_ISCSI is not set
3799+# CONFIG_BE2ISCSI is not set
3800+# CONFIG_BLK_DEV_3W_XXXX_RAID is not set
3801+# CONFIG_SCSI_HPSA is not set
3802+# CONFIG_SCSI_3W_9XXX is not set
3803+# CONFIG_SCSI_3W_SAS is not set
3804+# CONFIG_SCSI_ACARD is not set
3805+# CONFIG_SCSI_AACRAID is not set
3806+# CONFIG_SCSI_AIC7XXX is not set
3807+# CONFIG_SCSI_AIC7XXX_OLD is not set
3808+# CONFIG_SCSI_AIC79XX is not set
3809+# CONFIG_SCSI_AIC94XX is not set
3810+# CONFIG_SCSI_MVSAS is not set
3811+# CONFIG_SCSI_DPT_I2O is not set
3812+# CONFIG_SCSI_ADVANSYS is not set
3813+# CONFIG_SCSI_ARCMSR is not set
3814+# CONFIG_MEGARAID_NEWGEN is not set
3815+# CONFIG_MEGARAID_LEGACY is not set
3816+# CONFIG_MEGARAID_SAS is not set
3817+# CONFIG_SCSI_MPT2SAS is not set
3818+# CONFIG_SCSI_HPTIOP is not set
3819+# CONFIG_SCSI_BUSLOGIC is not set
3820+# CONFIG_LIBFC is not set
3821+# CONFIG_LIBFCOE is not set
3822+# CONFIG_FCOE is not set
3823+# CONFIG_SCSI_DMX3191D is not set
3824+# CONFIG_SCSI_EATA is not set
3825+# CONFIG_SCSI_FUTURE_DOMAIN is not set
3826+# CONFIG_SCSI_GDTH is not set
3827+# CONFIG_SCSI_IPS is not set
3828+# CONFIG_SCSI_INITIO is not set
3829+# CONFIG_SCSI_INIA100 is not set
3830+# CONFIG_SCSI_STEX is not set
3831+# CONFIG_SCSI_SYM53C8XX_2 is not set
3832+# CONFIG_SCSI_QLOGIC_1280 is not set
3833+# CONFIG_SCSI_QLA_FC is not set
3834+# CONFIG_SCSI_QLA_ISCSI is not set
3835+# CONFIG_SCSI_LPFC is not set
3836+# CONFIG_SCSI_DC395x is not set
3837+# CONFIG_SCSI_DC390T is not set
3838+# CONFIG_SCSI_NSP32 is not set
3839+# CONFIG_SCSI_DEBUG is not set
3840+# CONFIG_SCSI_PMCRAID is not set
3841+# CONFIG_SCSI_PM8001 is not set
3842+# CONFIG_SCSI_SRP is not set
3843+# CONFIG_SCSI_BFA_FC is not set
3844+# CONFIG_SCSI_DH is not set
3845+# CONFIG_SCSI_OSD_INITIATOR is not set
3846+# CONFIG_ATA is not set
3847+CONFIG_MD=y
3848+CONFIG_BLK_DEV_MD=y
3849+CONFIG_MD_AUTODETECT=y
3850+CONFIG_MD_LINEAR=y
3851+CONFIG_MD_RAID0=y
3852+CONFIG_MD_RAID1=y
3853+CONFIG_MD_RAID10=y
3854+# CONFIG_MD_RAID456 is not set
3855+CONFIG_MD_MULTIPATH=y
3856+CONFIG_MD_FAULTY=y
3857+CONFIG_BLK_DEV_DM=y
3858+# CONFIG_DM_DEBUG is not set
3859+CONFIG_DM_CRYPT=y
3860+CONFIG_DM_SNAPSHOT=y
3861+CONFIG_DM_MIRROR=y
3862+# CONFIG_DM_LOG_USERSPACE is not set
3863+CONFIG_DM_ZERO=y
3864+# CONFIG_DM_MULTIPATH is not set
3865+# CONFIG_DM_DELAY is not set
3866+# CONFIG_DM_UEVENT is not set
3867+# CONFIG_FUSION is not set
3868+
3869+#
3870+# IEEE 1394 (FireWire) support
3871+#
3872+
3873+#
3874+# You can enable one or both FireWire driver stacks.
3875+#
3876+
3877+#
3878+# The newer stack is recommended.
3879+#
3880+# CONFIG_FIREWIRE is not set
3881+# CONFIG_IEEE1394 is not set
3882+# CONFIG_I2O is not set
3883+# CONFIG_MACINTOSH_DRIVERS is not set
3884+CONFIG_NETDEVICES=y
3885+CONFIG_DUMMY=y
3886+# CONFIG_BONDING is not set
3887+# CONFIG_MACVLAN is not set
3888+# CONFIG_EQUALIZER is not set
3889+CONFIG_TUN=y
3890+# CONFIG_VETH is not set
3891+# CONFIG_ARCNET is not set
3892+# CONFIG_PHYLIB is not set
3893+CONFIG_NET_ETHERNET=y
3894+CONFIG_MII=y
3895+# CONFIG_HAPPYMEAL is not set
3896+# CONFIG_SUNGEM is not set
3897+# CONFIG_CASSINI is not set
3898+# CONFIG_NET_VENDOR_3COM is not set
3899+# CONFIG_ETHOC is not set
3900+# CONFIG_DNET is not set
3901+# CONFIG_NET_TULIP is not set
3902+# CONFIG_HP100 is not set
3903+# CONFIG_IBM_NEW_EMAC is not set
3904+CONFIG_IBM_NEW_EMAC_ZMII=y
3905+# CONFIG_IBM_NEW_EMAC_RGMII is not set
3906+# CONFIG_IBM_NEW_EMAC_TAH is not set
3907+# CONFIG_IBM_NEW_EMAC_EMAC4 is not set
3908+# CONFIG_IBM_NEW_EMAC_NO_FLOW_CTRL is not set
3909+# CONFIG_IBM_NEW_EMAC_MAL_CLR_ICINTSTAT is not set
3910+# CONFIG_IBM_NEW_EMAC_MAL_COMMON_ERR is not set
3911+# CONFIG_NET_PCI is not set
3912+# CONFIG_B44 is not set
3913+# CONFIG_KS8842 is not set
3914+# CONFIG_KS8851_MLL is not set
3915+# CONFIG_ATL2 is not set
3916+# CONFIG_XILINX_EMACLITE is not set
3917+CONFIG_NETDEV_1000=y
3918+# CONFIG_ACENIC is not set
3919+# CONFIG_DL2K is not set
3920+CONFIG_E1000=y
3921+CONFIG_E1000E=y
3922+# CONFIG_IP1000 is not set
3923+CONFIG_IGB=y
3924+CONFIG_IGBVF=y
3925+# CONFIG_NS83820 is not set
3926+# CONFIG_HAMACHI is not set
3927+# CONFIG_YELLOWFIN is not set
3928+# CONFIG_R8169 is not set
3929+# CONFIG_SIS190 is not set
3930+# CONFIG_SKGE is not set
3931+# CONFIG_SKY2 is not set
3932+# CONFIG_VIA_VELOCITY is not set
3933+# CONFIG_TIGON3 is not set
3934+# CONFIG_BNX2 is not set
3935+# CONFIG_CNIC is not set
3936+# CONFIG_MV643XX_ETH is not set
3937+# CONFIG_XILINX_LL_TEMAC is not set
3938+# CONFIG_QLA3XXX is not set
3939+# CONFIG_ATL1 is not set
3940+# CONFIG_ATL1E is not set
3941+# CONFIG_ATL1C is not set
3942+# CONFIG_JME is not set
3943+# CONFIG_NETDEV_10000 is not set
3944+# CONFIG_TR is not set
3945+CONFIG_WLAN=y
3946+# CONFIG_AIRO is not set
3947+# CONFIG_ATMEL is not set
3948+# CONFIG_PRISM54 is not set
3949+CONFIG_USB_ZD1201=y
3950+# CONFIG_HOSTAP is not set
3951+
3952+#
3953+# Enable WiMAX (Networking options) to see the WiMAX drivers
3954+#
3955+
3956+#
3957+# USB Network Adapters
3958+#
3959+# CONFIG_USB_CATC is not set
3960+# CONFIG_USB_KAWETH is not set
3961+# CONFIG_USB_PEGASUS is not set
3962+# CONFIG_USB_RTL8150 is not set
3963+# CONFIG_USB_USBNET is not set
3964+# CONFIG_USB_IPHETH is not set
3965+# CONFIG_WAN is not set
3966+# CONFIG_RIONET is not set
3967+# CONFIG_FDDI is not set
3968+# CONFIG_HIPPI is not set
3969+CONFIG_PPP=m
3970+CONFIG_PPP_MULTILINK=y
3971+CONFIG_PPP_FILTER=y
3972+CONFIG_PPP_ASYNC=m
3973+CONFIG_PPP_SYNC_TTY=m
3974+CONFIG_PPP_DEFLATE=m
3975+CONFIG_PPP_BSDCOMP=m
3976+# CONFIG_PPP_MPPE is not set
3977+CONFIG_PPPOE=m
3978+CONFIG_SLIP=m
3979+CONFIG_SLIP_COMPRESSED=y
3980+CONFIG_SLHC=m
3981+CONFIG_SLIP_SMART=y
3982+CONFIG_SLIP_MODE_SLIP6=y
3983+# CONFIG_NET_FC is not set
3984+CONFIG_NETCONSOLE=y
3985+# CONFIG_NETCONSOLE_DYNAMIC is not set
3986+CONFIG_NETPOLL=y
3987+CONFIG_NETPOLL_TRAP=y
3988+CONFIG_NET_POLL_CONTROLLER=y
3989+# CONFIG_VMXNET3 is not set
3990+# CONFIG_ISDN is not set
3991+# CONFIG_PHONE is not set
3992+
3993+#
3994+# Input device support
3995+#
3996+CONFIG_INPUT=y
3997+# CONFIG_INPUT_FF_MEMLESS is not set
3998+# CONFIG_INPUT_POLLDEV is not set
3999+# CONFIG_INPUT_SPARSEKMAP is not set
4000+
4001+#
4002+# Userland interfaces
4003+#
4004+CONFIG_INPUT_MOUSEDEV=y
4005+CONFIG_INPUT_MOUSEDEV_PSAUX=y
4006+CONFIG_INPUT_MOUSEDEV_SCREEN_X=1024
4007+CONFIG_INPUT_MOUSEDEV_SCREEN_Y=768
4008+# CONFIG_INPUT_JOYDEV is not set
4009+# CONFIG_INPUT_EVDEV is not set
4010+# CONFIG_INPUT_EVBUG is not set
4011+
4012+#
4013+# Input Device Drivers
4014+#
4015+# CONFIG_INPUT_KEYBOARD is not set
4016+# CONFIG_INPUT_MOUSE is not set
4017+# CONFIG_INPUT_JOYSTICK is not set
4018+# CONFIG_INPUT_TABLET is not set
4019+# CONFIG_INPUT_TOUCHSCREEN is not set
4020+# CONFIG_INPUT_MISC is not set
4021+
4022+#
4023+# Hardware I/O ports
4024+#
4025+CONFIG_SERIO=y
4026+CONFIG_SERIO_I8042=y
4027+CONFIG_SERIO_SERPORT=y
4028+# CONFIG_SERIO_PCIPS2 is not set
4029+CONFIG_SERIO_LIBPS2=y
4030+# CONFIG_SERIO_RAW is not set
4031+# CONFIG_SERIO_XILINX_XPS_PS2 is not set
4032+# CONFIG_SERIO_ALTERA_PS2 is not set
4033+# CONFIG_GAMEPORT is not set
4034+
4035+#
4036+# Character devices
4037+#
4038+CONFIG_VT=y
4039+CONFIG_CONSOLE_TRANSLATIONS=y
4040+CONFIG_VT_CONSOLE=y
4041+CONFIG_HW_CONSOLE=y
4042+# CONFIG_VT_HW_CONSOLE_BINDING is not set
4043+CONFIG_DEVKMEM=y
4044+# CONFIG_SERIAL_NONSTANDARD is not set
4045+CONFIG_N_GSM=y
4046+# CONFIG_NOZOMI is not set
4047+
4048+#
4049+# Serial drivers
4050+#
4051+# CONFIG_SERIAL_8250 is not set
4052+
4053+#
4054+# Non-8250 serial port support
4055+#
4056+# CONFIG_SERIAL_UARTLITE is not set
4057+CONFIG_SERIAL_CORE=y
4058+CONFIG_SERIAL_CORE_CONSOLE=y
4059+# CONFIG_SERIAL_JSM is not set
4060+# CONFIG_SERIAL_OF_PLATFORM_NWPSERIAL is not set
4061+# CONFIG_SERIAL_TIMBERDALE is not set
4062+# CONFIG_SERIAL_GRLIB_GAISLER_APBUART is not set
4063+# CONFIG_SERIAL_ALTERA_JTAGUART is not set
4064+# CONFIG_SERIAL_ALTERA_UART is not set
4065+CONFIG_UNIX98_PTYS=y
4066+# CONFIG_DEVPTS_MULTIPLE_INSTANCES is not set
4067+CONFIG_LEGACY_PTYS=y
4068+CONFIG_LEGACY_PTY_COUNT=20
4069+# CONFIG_HVC_UDBG is not set
4070+# CONFIG_IPMI_HANDLER is not set
4071+# CONFIG_HW_RANDOM is not set
4072+# CONFIG_NVRAM is not set
4073+# CONFIG_GEN_RTC is not set
4074+# CONFIG_R3964 is not set
4075+# CONFIG_APPLICOM is not set
4076+# CONFIG_RAW_DRIVER is not set
4077+# CONFIG_TCG_TPM is not set
4078+CONFIG_DEVPORT=y
4079+# CONFIG_RAMOOPS is not set
4080+# CONFIG_I2C is not set
4081+# CONFIG_SPI is not set
4082+
4083+#
4084+# PPS support
4085+#
4086+# CONFIG_PPS is not set
4087+CONFIG_ARCH_WANT_OPTIONAL_GPIOLIB=y
4088+# CONFIG_GPIOLIB is not set
4089+# CONFIG_W1 is not set
4090+# CONFIG_POWER_SUPPLY is not set
4091+# CONFIG_HWMON is not set
4092+CONFIG_THERMAL=y
4093+# CONFIG_WATCHDOG is not set
4094+CONFIG_SSB_POSSIBLE=y
4095+
4096+#
4097+# Sonics Silicon Backplane
4098+#
4099+# CONFIG_SSB is not set
4100+# CONFIG_MFD_SUPPORT is not set
4101+# CONFIG_REGULATOR is not set
4102+# CONFIG_MEDIA_SUPPORT is not set
4103+
4104+#
4105+# Graphics support
4106+#
4107+# CONFIG_AGP is not set
4108+# CONFIG_VGA_ARB is not set
4109+# CONFIG_DRM is not set
4110+# CONFIG_VGASTATE is not set
4111+# CONFIG_VIDEO_OUTPUT_CONTROL is not set
4112+# CONFIG_FB is not set
4113+# CONFIG_BACKLIGHT_LCD_SUPPORT is not set
4114+
4115+#
4116+# Display device support
4117+#
4118+# CONFIG_DISPLAY_SUPPORT is not set
4119+
4120+#
4121+# Console display driver support
4122+#
4123+CONFIG_DUMMY_CONSOLE=y
4124+# CONFIG_SOUND is not set
4125+CONFIG_HID_SUPPORT=y
4126+CONFIG_HID=y
4127+CONFIG_HIDRAW=y
4128+
4129+#
4130+# USB Input Devices
4131+#
4132+CONFIG_USB_HID=y
4133+CONFIG_HID_PID=y
4134+CONFIG_USB_HIDDEV=y
4135+
4136+#
4137+# Special HID drivers
4138+#
4139+CONFIG_HID_3M_PCT=y
4140+CONFIG_HID_A4TECH=y
4141+CONFIG_HID_APPLE=y
4142+# CONFIG_HID_BELKIN is not set
4143+# CONFIG_HID_CANDO is not set
4144+# CONFIG_HID_CHERRY is not set
4145+# CONFIG_HID_CHICONY is not set
4146+# CONFIG_HID_CYPRESS is not set
4147+# CONFIG_HID_DRAGONRISE is not set
4148+# CONFIG_HID_EGALAX is not set
4149+# CONFIG_HID_EZKEY is not set
4150+# CONFIG_HID_KYE is not set
4151+# CONFIG_HID_GYRATION is not set
4152+# CONFIG_HID_TWINHAN is not set
4153+# CONFIG_HID_KENSINGTON is not set
4154+# CONFIG_HID_LOGITECH is not set
4155+# CONFIG_HID_MICROSOFT is not set
4156+# CONFIG_HID_MOSART is not set
4157+# CONFIG_HID_MONTEREY is not set
4158+# CONFIG_HID_NTRIG is not set
4159+# CONFIG_HID_ORTEK is not set
4160+# CONFIG_HID_PANTHERLORD is not set
4161+# CONFIG_HID_PETALYNX is not set
4162+# CONFIG_HID_PICOLCD is not set
4163+# CONFIG_HID_QUANTA is not set
4164+# CONFIG_HID_ROCCAT is not set
4165+# CONFIG_HID_ROCCAT_KONE is not set
4166+# CONFIG_HID_SAMSUNG is not set
4167+# CONFIG_HID_SONY is not set
4168+# CONFIG_HID_STANTUM is not set
4169+# CONFIG_HID_SUNPLUS is not set
4170+# CONFIG_HID_GREENASIA is not set
4171+# CONFIG_HID_SMARTJOYPLUS is not set
4172+# CONFIG_HID_TOPSEED is not set
4173+# CONFIG_HID_THRUSTMASTER is not set
4174+# CONFIG_HID_ZEROPLUS is not set
4175+# CONFIG_HID_ZYDACRON is not set
4176+CONFIG_USB_SUPPORT=y
4177+CONFIG_USB_ARCH_HAS_HCD=y
4178+CONFIG_USB_ARCH_HAS_OHCI=y
4179+CONFIG_USB_ARCH_HAS_EHCI=y
4180+CONFIG_USB=y
4181+# CONFIG_USB_DEBUG is not set
4182+CONFIG_USB_ANNOUNCE_NEW_DEVICES=y
4183+
4184+#
4185+# Miscellaneous USB options
4186+#
4187+CONFIG_USB_DEVICEFS=y
4188+CONFIG_USB_DEVICE_CLASS=y
4189+CONFIG_USB_DYNAMIC_MINORS=y
4190+# CONFIG_USB_OTG_WHITELIST is not set
4191+# CONFIG_USB_OTG_BLACKLIST_HUB is not set
4192+CONFIG_USB_MON=y
4193+# CONFIG_USB_WUSB is not set
4194+# CONFIG_USB_WUSB_CBAF is not set
4195+
4196+#
4197+# USB Host Controller Drivers
4198+#
4199+# CONFIG_USB_C67X00_HCD is not set
4200+# CONFIG_USB_XHCI_HCD is not set
4201+CONFIG_USB_EHCI_HCD=y
4202+CONFIG_USB_EHCI_ROOT_HUB_TT=y
4203+# CONFIG_USB_EHCI_TT_NEWSCHED is not set
4204+CONFIG_USB_EHCI_BIG_ENDIAN_MMIO=y
4205+CONFIG_USB_EHCI_BIG_ENDIAN_DESC=y
4206+CONFIG_XPS_USB_HCD_XILINX=y
4207+# CONFIG_USB_EHCI_HCD_PPC_OF is not set
4208+# CONFIG_USB_OXU210HP_HCD is not set
4209+CONFIG_USB_CI13612_HCD=y
4210+# CONFIG_USB_ISP116X_HCD is not set
4211+# CONFIG_USB_ISP1760_HCD is not set
4212+# CONFIG_USB_ISP1362_HCD is not set
4213+# CONFIG_USB_OHCI_HCD is not set
4214+# CONFIG_USB_UHCI_HCD is not set
4215+# CONFIG_USB_SL811_HCD is not set
4216+# CONFIG_USB_R8A66597_HCD is not set
4217+# CONFIG_USB_WHCI_HCD is not set
4218+# CONFIG_USB_HWA_HCD is not set
4219+
4220+#
4221+# USB Device Class drivers
4222+#
4223+# CONFIG_USB_ACM is not set
4224+# CONFIG_USB_PRINTER is not set
4225+# CONFIG_USB_WDM is not set
4226+# CONFIG_USB_TMC is not set
4227+
4228+#
4229+# NOTE: USB_STORAGE depends on SCSI but BLK_DEV_SD may
4230+#
4231+
4232+#
4233+# also be needed; see USB_STORAGE Help for more info
4234+#
4235+CONFIG_USB_STORAGE=y
4236+# CONFIG_USB_STORAGE_DEBUG is not set
4237+# CONFIG_USB_STORAGE_DATAFAB is not set
4238+# CONFIG_USB_STORAGE_FREECOM is not set
4239+# CONFIG_USB_STORAGE_ISD200 is not set
4240+# CONFIG_USB_STORAGE_USBAT is not set
4241+# CONFIG_USB_STORAGE_SDDR09 is not set
4242+# CONFIG_USB_STORAGE_SDDR55 is not set
4243+# CONFIG_USB_STORAGE_JUMPSHOT is not set
4244+# CONFIG_USB_STORAGE_ALAUDA is not set
4245+# CONFIG_USB_STORAGE_ONETOUCH is not set
4246+# CONFIG_USB_STORAGE_KARMA is not set
4247+# CONFIG_USB_STORAGE_CYPRESS_ATACB is not set
4248+CONFIG_USB_LIBUSUAL=y
4249+
4250+#
4251+# USB Imaging devices
4252+#
4253+# CONFIG_USB_MDC800 is not set
4254+# CONFIG_USB_MICROTEK is not set
4255+
4256+#
4257+# USB port drivers
4258+#
4259+# CONFIG_USB_SERIAL is not set
4260+
4261+#
4262+# USB Miscellaneous drivers
4263+#
4264+# CONFIG_USB_EMI62 is not set
4265+# CONFIG_USB_EMI26 is not set
4266+# CONFIG_USB_ADUTUX is not set
4267+# CONFIG_USB_SEVSEG is not set
4268+# CONFIG_USB_RIO500 is not set
4269+# CONFIG_USB_LEGOTOWER is not set
4270+# CONFIG_USB_LCD is not set
4271+# CONFIG_USB_LED is not set
4272+# CONFIG_USB_CYPRESS_CY7C63 is not set
4273+# CONFIG_USB_CYTHERM is not set
4274+# CONFIG_USB_IDMOUSE is not set
4275+# CONFIG_USB_FTDI_ELAN is not set
4276+# CONFIG_USB_APPLEDISPLAY is not set
4277+# CONFIG_USB_SISUSBVGA is not set
4278+# CONFIG_USB_LD is not set
4279+# CONFIG_USB_TRANCEVIBRATOR is not set
4280+# CONFIG_USB_IOWARRIOR is not set
4281+# CONFIG_USB_TEST is not set
4282+# CONFIG_USB_ISIGHTFW is not set
4283+# CONFIG_USB_GADGET is not set
4284+
4285+#
4286+# OTG and related infrastructure
4287+#
4288+# CONFIG_NOP_USB_XCEIV is not set
4289+# CONFIG_UWB is not set
4290+# CONFIG_MMC is not set
4291+# CONFIG_MEMSTICK is not set
4292+# CONFIG_NEW_LEDS is not set
4293+# CONFIG_ACCESSIBILITY is not set
4294+# CONFIG_INFINIBAND is not set
4295+# CONFIG_EDAC is not set
4296+# CONFIG_RTC_CLASS is not set
4297+# CONFIG_DMADEVICES is not set
4298+# CONFIG_AUXDISPLAY is not set
4299+# CONFIG_UIO is not set
4300+# CONFIG_STAGING is not set
4301+
4302+#
4303+# LSI Drivers (APP3, APP3K, and ACP)
4304+#
4305+CONFIG_SERIAL_ACP=y
4306+CONFIG_SERIAL_ACP_CONSOLE=y
4307+# CONFIG_SERIAL_ACP_CONSOLE_POLL is not set
4308+CONFIG_LSI_NET=y
4309+CONFIG_LSI_NET_NUM_RX_DESC=16
4310+CONFIG_LSI_NET_RX_BUF_SZ=131072
4311+CONFIG_LSI_NET_NUM_TX_DESC=8
4312+CONFIG_LSI_NET_TX_BUF_SZ=65536
4313+CONFIG_LSI_NAND=y
4314+CONFIG_LSI_UBOOTENV=y
4315+CONFIG_LSI_PLX_PCIE_BRIDGE=y
4316+
4317+#
4318+# File systems
4319+#
4320+CONFIG_EXT2_FS=y
4321+# CONFIG_EXT2_FS_XATTR is not set
4322+# CONFIG_EXT2_FS_XIP is not set
4323+# CONFIG_EXT3_FS is not set
4324+# CONFIG_EXT4_FS is not set
4325+# CONFIG_REISERFS_FS is not set
4326+# CONFIG_JFS_FS is not set
4327+CONFIG_FS_POSIX_ACL=y
4328+# CONFIG_XFS_FS is not set
4329+# CONFIG_GFS2_FS is not set
4330+# CONFIG_OCFS2_FS is not set
4331+# CONFIG_BTRFS_FS is not set
4332+# CONFIG_NILFS2_FS is not set
4333+CONFIG_FILE_LOCKING=y
4334+CONFIG_FSNOTIFY=y
4335+# CONFIG_DNOTIFY is not set
4336+CONFIG_INOTIFY=y
4337+CONFIG_INOTIFY_USER=y
4338+# CONFIG_QUOTA is not set
4339+CONFIG_AUTOFS_FS=y
4340+CONFIG_AUTOFS4_FS=y
4341+# CONFIG_FUSE_FS is not set
4342+
4343+#
4344+# Caches
4345+#
4346+# CONFIG_FSCACHE is not set
4347+
4348+#
4349+# CD-ROM/DVD Filesystems
4350+#
4351+# CONFIG_ISO9660_FS is not set
4352+# CONFIG_UDF_FS is not set
4353+
4354+#
4355+# DOS/FAT/NT Filesystems
4356+#
4357+CONFIG_FAT_FS=y
4358+CONFIG_MSDOS_FS=y
4359+CONFIG_VFAT_FS=y
4360+CONFIG_FAT_DEFAULT_CODEPAGE=437
4361+CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1"
4362+# CONFIG_NTFS_FS is not set
4363+
4364+#
4365+# Pseudo filesystems
4366+#
4367+CONFIG_PROC_FS=y
4368+# CONFIG_PROC_KCORE is not set
4369+CONFIG_PROC_SYSCTL=y
4370+CONFIG_PROC_PAGE_MONITOR=y
4371+CONFIG_SYSFS=y
4372+CONFIG_TMPFS=y
4373+# CONFIG_TMPFS_POSIX_ACL is not set
4374+# CONFIG_HUGETLB_PAGE is not set
4375+# CONFIG_CONFIGFS_FS is not set
4376+CONFIG_MISC_FILESYSTEMS=y
4377+# CONFIG_ADFS_FS is not set
4378+# CONFIG_AFFS_FS is not set
4379+# CONFIG_ECRYPT_FS is not set
4380+# CONFIG_HFS_FS is not set
4381+# CONFIG_HFSPLUS_FS is not set
4382+# CONFIG_BEFS_FS is not set
4383+# CONFIG_BFS_FS is not set
4384+# CONFIG_EFS_FS is not set
4385+CONFIG_JFFS2_FS=y
4386+CONFIG_JFFS2_FS_DEBUG=0
4387+CONFIG_JFFS2_FS_WRITEBUFFER=y
4388+# CONFIG_JFFS2_FS_WBUF_VERIFY is not set
4389+# CONFIG_JFFS2_SUMMARY is not set
4390+# CONFIG_JFFS2_FS_XATTR is not set
4391+# CONFIG_JFFS2_COMPRESSION_OPTIONS is not set
4392+CONFIG_JFFS2_ZLIB=y
4393+# CONFIG_JFFS2_LZO is not set
4394+CONFIG_JFFS2_RTIME=y
4395+# CONFIG_JFFS2_RUBIN is not set
4396+# CONFIG_LOGFS is not set
4397+# CONFIG_CRAMFS is not set
4398+# CONFIG_SQUASHFS is not set
4399+# CONFIG_VXFS_FS is not set
4400+# CONFIG_MINIX_FS is not set
4401+# CONFIG_OMFS_FS is not set
4402+# CONFIG_HPFS_FS is not set
4403+# CONFIG_QNX4FS_FS is not set
4404+# CONFIG_ROMFS_FS is not set
4405+# CONFIG_SYSV_FS is not set
4406+# CONFIG_UFS_FS is not set
4407+CONFIG_NETWORK_FILESYSTEMS=y
4408+CONFIG_NFS_FS=y
4409+CONFIG_NFS_V3=y
4410+CONFIG_NFS_V3_ACL=y
4411+CONFIG_NFS_V4=y
4412+# CONFIG_NFS_V4_1 is not set
4413+CONFIG_ROOT_NFS=y
4414+# CONFIG_NFSD is not set
4415+CONFIG_LOCKD=y
4416+CONFIG_LOCKD_V4=y
4417+CONFIG_NFS_ACL_SUPPORT=y
4418+CONFIG_NFS_COMMON=y
4419+CONFIG_SUNRPC=y
4420+CONFIG_SUNRPC_GSS=y
4421+CONFIG_RPCSEC_GSS_KRB5=y
4422+# CONFIG_RPCSEC_GSS_SPKM3 is not set
4423+# CONFIG_SMB_FS is not set
4424+# CONFIG_CEPH_FS is not set
4425+# CONFIG_CIFS is not set
4426+# CONFIG_NCP_FS is not set
4427+# CONFIG_CODA_FS is not set
4428+# CONFIG_AFS_FS is not set
4429+
4430+#
4431+# Partition Types
4432+#
4433+# CONFIG_PARTITION_ADVANCED is not set
4434+CONFIG_MSDOS_PARTITION=y
4435+CONFIG_NLS=y
4436+CONFIG_NLS_DEFAULT="iso8859-1"
4437+CONFIG_NLS_CODEPAGE_437=y
4438+# CONFIG_NLS_CODEPAGE_737 is not set
4439+# CONFIG_NLS_CODEPAGE_775 is not set
4440+CONFIG_NLS_CODEPAGE_850=y
4441+# CONFIG_NLS_CODEPAGE_852 is not set
4442+# CONFIG_NLS_CODEPAGE_855 is not set
4443+# CONFIG_NLS_CODEPAGE_857 is not set
4444+# CONFIG_NLS_CODEPAGE_860 is not set
4445+# CONFIG_NLS_CODEPAGE_861 is not set
4446+# CONFIG_NLS_CODEPAGE_862 is not set
4447+# CONFIG_NLS_CODEPAGE_863 is not set
4448+# CONFIG_NLS_CODEPAGE_864 is not set
4449+CONFIG_NLS_CODEPAGE_865=y
4450+# CONFIG_NLS_CODEPAGE_866 is not set
4451+# CONFIG_NLS_CODEPAGE_869 is not set
4452+# CONFIG_NLS_CODEPAGE_936 is not set
4453+# CONFIG_NLS_CODEPAGE_950 is not set
4454+# CONFIG_NLS_CODEPAGE_932 is not set
4455+# CONFIG_NLS_CODEPAGE_949 is not set
4456+# CONFIG_NLS_CODEPAGE_874 is not set
4457+# CONFIG_NLS_ISO8859_8 is not set
4458+# CONFIG_NLS_CODEPAGE_1250 is not set
4459+# CONFIG_NLS_CODEPAGE_1251 is not set
4460+CONFIG_NLS_ASCII=y
4461+CONFIG_NLS_ISO8859_1=y
4462+# CONFIG_NLS_ISO8859_2 is not set
4463+# CONFIG_NLS_ISO8859_3 is not set
4464+# CONFIG_NLS_ISO8859_4 is not set
4465+# CONFIG_NLS_ISO8859_5 is not set
4466+# CONFIG_NLS_ISO8859_6 is not set
4467+# CONFIG_NLS_ISO8859_7 is not set
4468+# CONFIG_NLS_ISO8859_9 is not set
4469+# CONFIG_NLS_ISO8859_13 is not set
4470+# CONFIG_NLS_ISO8859_14 is not set
4471+# CONFIG_NLS_ISO8859_15 is not set
4472+# CONFIG_NLS_KOI8_R is not set
4473+# CONFIG_NLS_KOI8_U is not set
4474+# CONFIG_NLS_UTF8 is not set
4475+# CONFIG_DLM is not set
4476+# CONFIG_BINARY_PRINTF is not set
4477+
4478+#
4479+# Library routines
4480+#
4481+CONFIG_BITREVERSE=y
4482+CONFIG_GENERIC_FIND_LAST_BIT=y
4483+CONFIG_CRC_CCITT=m
4484+# CONFIG_CRC16 is not set
4485+# CONFIG_CRC_T10DIF is not set
4486+# CONFIG_CRC_ITU_T is not set
4487+CONFIG_CRC32=y
4488+# CONFIG_CRC7 is not set
4489+# CONFIG_LIBCRC32C is not set
4490+CONFIG_ZLIB_INFLATE=y
4491+CONFIG_ZLIB_DEFLATE=y
4492+CONFIG_DECOMPRESS_GZIP=y
4493+CONFIG_HAS_IOMEM=y
4494+CONFIG_HAS_IOPORT=y
4495+CONFIG_HAS_DMA=y
4496+CONFIG_NLATTR=y
4497+CONFIG_GENERIC_ATOMIC64=y
4498+
4499+#
4500+# Kernel hacking
4501+#
4502+# CONFIG_PRINTK_TIME is not set
4503+CONFIG_ENABLE_WARN_DEPRECATED=y
4504+CONFIG_ENABLE_MUST_CHECK=y
4505+CONFIG_FRAME_WARN=1024
4506+CONFIG_MAGIC_SYSRQ=y
4507+# CONFIG_STRIP_ASM_SYMS is not set
4508+# CONFIG_UNUSED_SYMBOLS is not set
4509+CONFIG_DEBUG_FS=y
4510+# CONFIG_HEADERS_CHECK is not set
4511+CONFIG_DEBUG_KERNEL=y
4512+# CONFIG_DEBUG_SHIRQ is not set
4513+# CONFIG_DETECT_SOFTLOCKUP is not set
4514+# CONFIG_DETECT_HUNG_TASK is not set
4515+CONFIG_SCHED_DEBUG=y
4516+# CONFIG_SCHEDSTATS is not set
4517+# CONFIG_TIMER_STATS is not set
4518+# CONFIG_DEBUG_OBJECTS is not set
4519+# CONFIG_SLUB_DEBUG_ON is not set
4520+# CONFIG_SLUB_STATS is not set
4521+# CONFIG_DEBUG_KMEMLEAK is not set
4522+# CONFIG_DEBUG_RT_MUTEXES is not set
4523+# CONFIG_RT_MUTEX_TESTER is not set
4524+# CONFIG_DEBUG_SPINLOCK is not set
4525+# CONFIG_DEBUG_MUTEXES is not set
4526+# CONFIG_DEBUG_LOCK_ALLOC is not set
4527+# CONFIG_PROVE_LOCKING is not set
4528+# CONFIG_LOCK_STAT is not set
4529+# CONFIG_DEBUG_SPINLOCK_SLEEP is not set
4530+# CONFIG_DEBUG_LOCKING_API_SELFTESTS is not set
4531+# CONFIG_DEBUG_KOBJECT is not set
4532+# CONFIG_DEBUG_HIGHMEM is not set
4533+CONFIG_DEBUG_BUGVERBOSE=y
4534+CONFIG_DEBUG_INFO=y
4535+# CONFIG_DEBUG_VM is not set
4536+# CONFIG_DEBUG_WRITECOUNT is not set
4537+# CONFIG_DEBUG_MEMORY_INIT is not set
4538+# CONFIG_DEBUG_LIST is not set
4539+# CONFIG_DEBUG_SG is not set
4540+# CONFIG_DEBUG_NOTIFIERS is not set
4541+# CONFIG_DEBUG_CREDENTIALS is not set
4542+# CONFIG_RCU_TORTURE_TEST is not set
4543+# CONFIG_RCU_CPU_STALL_DETECTOR is not set
4544+# CONFIG_BACKTRACE_SELF_TEST is not set
4545+# CONFIG_DEBUG_BLOCK_EXT_DEVT is not set
4546+# CONFIG_DEBUG_FORCE_WEAK_PER_CPU is not set
4547+# CONFIG_LKDTM is not set
4548+# CONFIG_FAULT_INJECTION is not set
4549+# CONFIG_LATENCYTOP is not set
4550+CONFIG_SYSCTL_SYSCALL_CHECK=y
4551+# CONFIG_DEBUG_PAGEALLOC is not set
4552+CONFIG_HAVE_FUNCTION_TRACER=y
4553+CONFIG_HAVE_FUNCTION_GRAPH_TRACER=y
4554+CONFIG_HAVE_DYNAMIC_FTRACE=y
4555+CONFIG_HAVE_FTRACE_MCOUNT_RECORD=y
4556+CONFIG_RING_BUFFER=y
4557+CONFIG_RING_BUFFER_ALLOW_SWAP=y
4558+CONFIG_TRACING_SUPPORT=y
4559+CONFIG_FTRACE=y
4560+# CONFIG_FUNCTION_TRACER is not set
4561+# CONFIG_IRQSOFF_TRACER is not set
4562+# CONFIG_SCHED_TRACER is not set
4563+# CONFIG_ENABLE_DEFAULT_TRACERS is not set
4564+# CONFIG_BOOT_TRACER is not set
4565+CONFIG_BRANCH_PROFILE_NONE=y
4566+# CONFIG_PROFILE_ANNOTATED_BRANCHES is not set
4567+# CONFIG_PROFILE_ALL_BRANCHES is not set
4568+# CONFIG_STACK_TRACER is not set
4569+# CONFIG_KMEMTRACE is not set
4570+# CONFIG_WORKQUEUE_TRACER is not set
4571+# CONFIG_BLK_DEV_IO_TRACE is not set
4572+# CONFIG_RING_BUFFER_BENCHMARK is not set
4573+# CONFIG_DYNAMIC_DEBUG is not set
4574+# CONFIG_DMA_API_DEBUG is not set
4575+# CONFIG_ATOMIC64_SELFTEST is not set
4576+# CONFIG_SAMPLES is not set
4577+CONFIG_HAVE_ARCH_KGDB=y
4578+# CONFIG_KGDB is not set
4579+# CONFIG_PPC_DISABLE_WERROR is not set
4580+CONFIG_PPC_WERROR=y
4581+CONFIG_PRINT_STACK_DEPTH=64
4582+# CONFIG_DEBUG_STACKOVERFLOW is not set
4583+# CONFIG_DEBUG_STACK_USAGE is not set
4584+# CONFIG_DEBUG_PER_CPU_MAPS is not set
4585+# CONFIG_PPC_EMULATED_STATS is not set
4586+# CONFIG_CODE_PATCHING_SELFTEST is not set
4587+# CONFIG_FTR_FIXUP_SELFTEST is not set
4588+# CONFIG_MSI_BITMAP_SELFTEST is not set
4589+CONFIG_XMON=y
4590+CONFIG_XMON_DEFAULT=y
4591+CONFIG_XMON_DISASSEMBLY=y
4592+CONFIG_DEBUGGER=y
4593+# CONFIG_VIRQ_DEBUG is not set
4594+# CONFIG_BDI_SWITCH is not set
4595+CONFIG_PPC_EARLY_DEBUG=y
4596+# CONFIG_PPC_EARLY_DEBUG_LPAR is not set
4597+# CONFIG_PPC_EARLY_DEBUG_G5 is not set
4598+# CONFIG_PPC_EARLY_DEBUG_RTAS_PANEL is not set
4599+# CONFIG_PPC_EARLY_DEBUG_RTAS_CONSOLE is not set
4600+# CONFIG_PPC_EARLY_DEBUG_MAPLE is not set
4601+# CONFIG_PPC_EARLY_DEBUG_ISERIES is not set
4602+# CONFIG_PPC_EARLY_DEBUG_PAS_REALMODE is not set
4603+# CONFIG_PPC_EARLY_DEBUG_BEAT is not set
4604+CONFIG_PPC_EARLY_DEBUG_44x=y
4605+# CONFIG_PPC_EARLY_DEBUG_40x is not set
4606+# CONFIG_PPC_EARLY_DEBUG_CPM is not set
4607+# CONFIG_PPC_EARLY_DEBUG_USBGECKO is not set
4608+CONFIG_PPC_EARLY_DEBUG_44x_PHYSLOW=0x00424000
4609+CONFIG_PPC_EARLY_DEBUG_44x_PHYSHIGH=0x20
4610+
4611+#
4612+# Security options
4613+#
4614+CONFIG_KEYS=y
4615+# CONFIG_KEYS_DEBUG_PROC_KEYS is not set
4616+# CONFIG_SECURITY is not set
4617+# CONFIG_SECURITYFS is not set
4618+# CONFIG_DEFAULT_SECURITY_SELINUX is not set
4619+# CONFIG_DEFAULT_SECURITY_SMACK is not set
4620+# CONFIG_DEFAULT_SECURITY_TOMOYO is not set
4621+CONFIG_DEFAULT_SECURITY_DAC=y
4622+CONFIG_DEFAULT_SECURITY=""
4623+CONFIG_CRYPTO=y
4624+
4625+#
4626+# Crypto core or helper
4627+#
4628+CONFIG_CRYPTO_ALGAPI=y
4629+CONFIG_CRYPTO_ALGAPI2=y
4630+CONFIG_CRYPTO_AEAD=y
4631+CONFIG_CRYPTO_AEAD2=y
4632+CONFIG_CRYPTO_BLKCIPHER=y
4633+CONFIG_CRYPTO_BLKCIPHER2=y
4634+CONFIG_CRYPTO_HASH=y
4635+CONFIG_CRYPTO_HASH2=y
4636+CONFIG_CRYPTO_RNG=y
4637+CONFIG_CRYPTO_RNG2=y
4638+CONFIG_CRYPTO_PCOMP=y
4639+CONFIG_CRYPTO_MANAGER=y
4640+CONFIG_CRYPTO_MANAGER2=y
4641+CONFIG_CRYPTO_GF128MUL=y
4642+CONFIG_CRYPTO_NULL=y
4643+# CONFIG_CRYPTO_PCRYPT is not set
4644+CONFIG_CRYPTO_WORKQUEUE=y
4645+# CONFIG_CRYPTO_CRYPTD is not set
4646+CONFIG_CRYPTO_AUTHENC=y
4647+# CONFIG_CRYPTO_TEST is not set
4648+
4649+#
4650+# Authenticated Encryption with Associated Data
4651+#
4652+# CONFIG_CRYPTO_CCM is not set
4653+CONFIG_CRYPTO_GCM=y
4654+CONFIG_CRYPTO_SEQIV=y
4655+
4656+#
4657+# Block modes
4658+#
4659+CONFIG_CRYPTO_CBC=y
4660+CONFIG_CRYPTO_CTR=y
4661+# CONFIG_CRYPTO_CTS is not set
4662+# CONFIG_CRYPTO_ECB is not set
4663+# CONFIG_CRYPTO_LRW is not set
4664+# CONFIG_CRYPTO_PCBC is not set
4665+# CONFIG_CRYPTO_XTS is not set
4666+
4667+#
4668+# Hash modes
4669+#
4670+CONFIG_CRYPTO_HMAC=y
4671+CONFIG_CRYPTO_XCBC=y
4672+# CONFIG_CRYPTO_VMAC is not set
4673+
4674+#
4675+# Digest
4676+#
4677+# CONFIG_CRYPTO_CRC32C is not set
4678+CONFIG_CRYPTO_GHASH=y
4679+# CONFIG_CRYPTO_MD4 is not set
4680+CONFIG_CRYPTO_MD5=y
4681+# CONFIG_CRYPTO_MICHAEL_MIC is not set
4682+# CONFIG_CRYPTO_RMD128 is not set
4683+# CONFIG_CRYPTO_RMD160 is not set
4684+# CONFIG_CRYPTO_RMD256 is not set
4685+# CONFIG_CRYPTO_RMD320 is not set
4686+CONFIG_CRYPTO_SHA1=y
4687+CONFIG_CRYPTO_SHA256=y
4688+# CONFIG_CRYPTO_SHA512 is not set
4689+# CONFIG_CRYPTO_TGR192 is not set
4690+# CONFIG_CRYPTO_WP512 is not set
4691+
4692+#
4693+# Ciphers
4694+#
4695+CONFIG_CRYPTO_AES=y
4696+# CONFIG_CRYPTO_ANUBIS is not set
4697+# CONFIG_CRYPTO_ARC4 is not set
4698+# CONFIG_CRYPTO_BLOWFISH is not set
4699+# CONFIG_CRYPTO_CAMELLIA is not set
4700+# CONFIG_CRYPTO_CAST5 is not set
4701+# CONFIG_CRYPTO_CAST6 is not set
4702+CONFIG_CRYPTO_DES=y
4703+# CONFIG_CRYPTO_FCRYPT is not set
4704+# CONFIG_CRYPTO_KHAZAD is not set
4705+# CONFIG_CRYPTO_SALSA20 is not set
4706+# CONFIG_CRYPTO_SEED is not set
4707+# CONFIG_CRYPTO_SERPENT is not set
4708+# CONFIG_CRYPTO_TEA is not set
4709+# CONFIG_CRYPTO_TWOFISH is not set
4710+
4711+#
4712+# Compression
4713+#
4714+CONFIG_CRYPTO_DEFLATE=y
4715+# CONFIG_CRYPTO_ZLIB is not set
4716+# CONFIG_CRYPTO_LZO is not set
4717+
4718+#
4719+# Random Number Generation
4720+#
4721+# CONFIG_CRYPTO_ANSI_CPRNG is not set
4722+CONFIG_CRYPTO_HW=y
4723+# CONFIG_CRYPTO_DEV_HIFN_795X is not set
4724+CONFIG_CRYPTO_DEV_PPC4XX=y
4725+# CONFIG_PPC_CLOCK is not set
4726+# CONFIG_VIRTUALIZATION is not set
4727diff --git a/arch/powerpc/configs/acp_defconfig b/arch/powerpc/configs/acp_defconfig
4728new file mode 100644
4729index 0000000..cc35347
4730--- /dev/null
4731+++ b/arch/powerpc/configs/acp_defconfig
4732@@ -0,0 +1,1641 @@
4733+#
4734+# Automatically generated make config: don't edit
4735+# Linux kernel version: 2.6.35
4736+# Fri Jul 15 11:26:48 2011
4737+#
4738+# CONFIG_PPC64 is not set
4739+
4740+#
4741+# Processor support
4742+#
4743+# CONFIG_PPC_BOOK3S_32 is not set
4744+# CONFIG_PPC_85xx is not set
4745+# CONFIG_PPC_8xx is not set
4746+# CONFIG_40x is not set
4747+CONFIG_44x=y
4748+# CONFIG_E200 is not set
4749+CONFIG_PPC_FPU=y
4750+CONFIG_4xx=y
4751+CONFIG_BOOKE=y
4752+CONFIG_PTE_64BIT=y
4753+CONFIG_PHYS_64BIT=y
4754+CONFIG_PPC_MMU_NOHASH=y
4755+CONFIG_PPC_MMU_NOHASH_32=y
4756+# CONFIG_PPC_MM_SLICES is not set
4757+CONFIG_SMP=y
4758+CONFIG_NR_CPUS=4
4759+# CONFIG_NOT_COHERENT_CACHE is not set
4760+CONFIG_PPC32=y
4761+CONFIG_WORD_SIZE=32
4762+CONFIG_ARCH_PHYS_ADDR_T_64BIT=y
4763+CONFIG_MMU=y
4764+CONFIG_GENERIC_CMOS_UPDATE=y
4765+CONFIG_GENERIC_TIME=y
4766+CONFIG_GENERIC_TIME_VSYSCALL=y
4767+CONFIG_GENERIC_CLOCKEVENTS=y
4768+CONFIG_GENERIC_HARDIRQS=y
4769+CONFIG_GENERIC_HARDIRQS_NO__DO_IRQ=y
4770+# CONFIG_HAVE_SETUP_PER_CPU_AREA is not set
4771+# CONFIG_NEED_PER_CPU_EMBED_FIRST_CHUNK is not set
4772+CONFIG_IRQ_PER_CPU=y
4773+CONFIG_NR_IRQS=512
4774+CONFIG_STACKTRACE_SUPPORT=y
4775+CONFIG_HAVE_LATENCYTOP_SUPPORT=y
4776+CONFIG_TRACE_IRQFLAGS_SUPPORT=y
4777+CONFIG_LOCKDEP_SUPPORT=y
4778+CONFIG_RWSEM_XCHGADD_ALGORITHM=y
4779+CONFIG_ARCH_HAS_ILOG2_U32=y
4780+CONFIG_GENERIC_HWEIGHT=y
4781+CONFIG_GENERIC_FIND_NEXT_BIT=y
4782+# CONFIG_ARCH_NO_VIRT_TO_BUS is not set
4783+CONFIG_PPC=y
4784+CONFIG_EARLY_PRINTK=y
4785+CONFIG_GENERIC_NVRAM=y
4786+CONFIG_SCHED_OMIT_FRAME_POINTER=y
4787+CONFIG_ARCH_MAY_HAVE_PC_FDC=y
4788+CONFIG_PPC_OF=y
4789+CONFIG_OF=y
4790+CONFIG_PPC_UDBG_16550=y
4791+CONFIG_GENERIC_TBSYNC=y
4792+CONFIG_AUDIT_ARCH=y
4793+CONFIG_GENERIC_BUG=y
4794+CONFIG_DTC=y
4795+# CONFIG_DEFAULT_UIMAGE is not set
4796+CONFIG_ARCH_HIBERNATION_POSSIBLE=y
4797+CONFIG_PPC_DCR_NATIVE=y
4798+# CONFIG_PPC_DCR_MMIO is not set
4799+CONFIG_PPC_DCR=y
4800+CONFIG_ARCH_SUPPORTS_DEBUG_PAGEALLOC=y
4801+CONFIG_PPC_ADV_DEBUG_REGS=y
4802+CONFIG_PPC_ADV_DEBUG_IACS=4
4803+CONFIG_PPC_ADV_DEBUG_DACS=2
4804+CONFIG_PPC_ADV_DEBUG_DVCS=2
4805+CONFIG_PPC_ADV_DEBUG_DAC_RANGE=y
4806+CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
4807+CONFIG_CONSTRUCTORS=y
4808+
4809+#
4810+# General setup
4811+#
4812+CONFIG_EXPERIMENTAL=y
4813+CONFIG_LOCK_KERNEL=y
4814+CONFIG_INIT_ENV_ARG_LIMIT=32
4815+CONFIG_CROSS_COMPILE="powerpc-linux-"
4816+CONFIG_LOCALVERSION=""
4817+CONFIG_LOCALVERSION_AUTO=y
4818+CONFIG_SWAP=y
4819+CONFIG_SYSVIPC=y
4820+CONFIG_SYSVIPC_SYSCTL=y
4821+CONFIG_POSIX_MQUEUE=y
4822+CONFIG_POSIX_MQUEUE_SYSCTL=y
4823+# CONFIG_BSD_PROCESS_ACCT is not set
4824+# CONFIG_TASKSTATS is not set
4825+# CONFIG_AUDIT is not set
4826+
4827+#
4828+# RCU Subsystem
4829+#
4830+CONFIG_TREE_RCU=y
4831+# CONFIG_TREE_PREEMPT_RCU is not set
4832+# CONFIG_TINY_RCU is not set
4833+# CONFIG_RCU_TRACE is not set
4834+CONFIG_RCU_FANOUT=32
4835+# CONFIG_RCU_FANOUT_EXACT is not set
4836+# CONFIG_TREE_RCU_TRACE is not set
4837+# CONFIG_IKCONFIG is not set
4838+CONFIG_LOG_BUF_SHIFT=14
4839+# CONFIG_CGROUPS is not set
4840+CONFIG_SYSFS_DEPRECATED=y
4841+CONFIG_SYSFS_DEPRECATED_V2=y
4842+# CONFIG_RELAY is not set
4843+# CONFIG_NAMESPACES is not set
4844+CONFIG_BLK_DEV_INITRD=y
4845+CONFIG_INITRAMFS_SOURCE=""
4846+CONFIG_RD_GZIP=y
4847+# CONFIG_RD_BZIP2 is not set
4848+# CONFIG_RD_LZMA is not set
4849+# CONFIG_RD_LZO is not set
4850+# CONFIG_CC_OPTIMIZE_FOR_SIZE is not set
4851+CONFIG_SYSCTL=y
4852+CONFIG_ANON_INODES=y
4853+CONFIG_EMBEDDED=y
4854+CONFIG_SYSCTL_SYSCALL=y
4855+CONFIG_KALLSYMS=y
4856+# CONFIG_KALLSYMS_ALL is not set
4857+CONFIG_KALLSYMS_EXTRA_PASS=y
4858+CONFIG_HOTPLUG=y
4859+CONFIG_PRINTK=y
4860+CONFIG_BUG=y
4861+CONFIG_ELF_CORE=y
4862+CONFIG_BASE_FULL=y
4863+CONFIG_FUTEX=y
4864+CONFIG_EPOLL=y
4865+CONFIG_SIGNALFD=y
4866+CONFIG_TIMERFD=y
4867+CONFIG_EVENTFD=y
4868+CONFIG_SHMEM=y
4869+CONFIG_AIO=y
4870+CONFIG_HAVE_PERF_EVENTS=y
4871+
4872+#
4873+# Kernel Performance Events And Counters
4874+#
4875+# CONFIG_PERF_EVENTS is not set
4876+# CONFIG_PERF_COUNTERS is not set
4877+CONFIG_VM_EVENT_COUNTERS=y
4878+CONFIG_PCI_QUIRKS=y
4879+CONFIG_SLUB_DEBUG=y
4880+CONFIG_COMPAT_BRK=y
4881+# CONFIG_SLAB is not set
4882+CONFIG_SLUB=y
4883+# CONFIG_SLOB is not set
4884+CONFIG_PROFILING=y
4885+CONFIG_OPROFILE=y
4886+CONFIG_HAVE_OPROFILE=y
4887+# CONFIG_KPROBES is not set
4888+CONFIG_HAVE_EFFICIENT_UNALIGNED_ACCESS=y
4889+CONFIG_HAVE_IOREMAP_PROT=y
4890+CONFIG_HAVE_KPROBES=y
4891+CONFIG_HAVE_KRETPROBES=y
4892+CONFIG_HAVE_ARCH_TRACEHOOK=y
4893+CONFIG_HAVE_DMA_ATTRS=y
4894+CONFIG_USE_GENERIC_SMP_HELPERS=y
4895+CONFIG_HAVE_REGS_AND_STACK_ACCESS_API=y
4896+CONFIG_HAVE_DMA_API_DEBUG=y
4897+
4898+#
4899+# GCOV-based kernel profiling
4900+#
4901+# CONFIG_GCOV_KERNEL is not set
4902+# CONFIG_SLOW_WORK is not set
4903+# CONFIG_HAVE_GENERIC_DMA_COHERENT is not set
4904+CONFIG_SLABINFO=y
4905+CONFIG_RT_MUTEXES=y
4906+CONFIG_BASE_SMALL=0
4907+CONFIG_MODULES=y
4908+CONFIG_MODULE_FORCE_LOAD=y
4909+CONFIG_MODULE_UNLOAD=y
4910+CONFIG_MODULE_FORCE_UNLOAD=y
4911+CONFIG_MODVERSIONS=y
4912+CONFIG_MODULE_SRCVERSION_ALL=y
4913+CONFIG_STOP_MACHINE=y
4914+CONFIG_BLOCK=y
4915+CONFIG_LBDAF=y
4916+# CONFIG_BLK_DEV_BSG is not set
4917+# CONFIG_BLK_DEV_INTEGRITY is not set
4918+
4919+#
4920+# IO Schedulers
4921+#
4922+CONFIG_IOSCHED_NOOP=y
4923+CONFIG_IOSCHED_DEADLINE=y
4924+CONFIG_IOSCHED_CFQ=y
4925+# CONFIG_DEFAULT_DEADLINE is not set
4926+CONFIG_DEFAULT_CFQ=y
4927+# CONFIG_DEFAULT_NOOP is not set
4928+CONFIG_DEFAULT_IOSCHED="cfq"
4929+# CONFIG_INLINE_SPIN_TRYLOCK is not set
4930+# CONFIG_INLINE_SPIN_TRYLOCK_BH is not set
4931+# CONFIG_INLINE_SPIN_LOCK is not set
4932+# CONFIG_INLINE_SPIN_LOCK_BH is not set
4933+# CONFIG_INLINE_SPIN_LOCK_IRQ is not set
4934+# CONFIG_INLINE_SPIN_LOCK_IRQSAVE is not set
4935+CONFIG_INLINE_SPIN_UNLOCK=y
4936+# CONFIG_INLINE_SPIN_UNLOCK_BH is not set
4937+CONFIG_INLINE_SPIN_UNLOCK_IRQ=y
4938+# CONFIG_INLINE_SPIN_UNLOCK_IRQRESTORE is not set
4939+# CONFIG_INLINE_READ_TRYLOCK is not set
4940+# CONFIG_INLINE_READ_LOCK is not set
4941+# CONFIG_INLINE_READ_LOCK_BH is not set
4942+# CONFIG_INLINE_READ_LOCK_IRQ is not set
4943+# CONFIG_INLINE_READ_LOCK_IRQSAVE is not set
4944+CONFIG_INLINE_READ_UNLOCK=y
4945+# CONFIG_INLINE_READ_UNLOCK_BH is not set
4946+CONFIG_INLINE_READ_UNLOCK_IRQ=y
4947+# CONFIG_INLINE_READ_UNLOCK_IRQRESTORE is not set
4948+# CONFIG_INLINE_WRITE_TRYLOCK is not set
4949+# CONFIG_INLINE_WRITE_LOCK is not set
4950+# CONFIG_INLINE_WRITE_LOCK_BH is not set
4951+# CONFIG_INLINE_WRITE_LOCK_IRQ is not set
4952+# CONFIG_INLINE_WRITE_LOCK_IRQSAVE is not set
4953+CONFIG_INLINE_WRITE_UNLOCK=y
4954+# CONFIG_INLINE_WRITE_UNLOCK_BH is not set
4955+CONFIG_INLINE_WRITE_UNLOCK_IRQ=y
4956+# CONFIG_INLINE_WRITE_UNLOCK_IRQRESTORE is not set
4957+CONFIG_MUTEX_SPIN_ON_OWNER=y
4958+# CONFIG_FREEZER is not set
4959+CONFIG_PPC4xx_PCI_EXPRESS=y
4960+CONFIG_PPC_MSI_BITMAP=y
4961+# CONFIG_RAPIDIO_FSL is not set
4962+
4963+#
4964+# Platform support
4965+#
4966+# CONFIG_PPC_CELL is not set
4967+# CONFIG_PPC_CELL_NATIVE is not set
4968+# CONFIG_PQ2ADS is not set
4969+CONFIG_PPC_47x=y
4970+# CONFIG_BAMBOO is not set
4971+# CONFIG_EBONY is not set
4972+# CONFIG_SAM440EP is not set
4973+# CONFIG_SEQUOIA is not set
4974+# CONFIG_TAISHAN is not set
4975+# CONFIG_KATMAI is not set
4976+# CONFIG_RAINIER is not set
4977+# CONFIG_WARP is not set
4978+# CONFIG_ARCHES is not set
4979+# CONFIG_CANYONLANDS is not set
4980+# CONFIG_GLACIER is not set
4981+# CONFIG_REDWOOD is not set
4982+# CONFIG_EIGER is not set
4983+# CONFIG_YOSEMITE is not set
4984+# CONFIG_ISS4xx is not set
4985+# CONFIG_ICON is not set
4986+CONFIG_ACP=y
4987+# CONFIG_ACPISS is not set
4988+# CONFIG_ACP_X1V1 is not set
4989+# CONFIG_XILINX_VIRTEX440_GENERIC_BOARD is not set
4990+# CONFIG_PPC44x_SIMPLE is not set
4991+# CONFIG_PPC4xx_GPIO is not set
4992+CONFIG_440GP=y
4993+# CONFIG_IPIC is not set
4994+CONFIG_MPIC=y
4995+# CONFIG_MPIC_WEIRD is not set
4996+# CONFIG_PPC_I8259 is not set
4997+# CONFIG_PPC_RTAS is not set
4998+# CONFIG_MMIO_NVRAM is not set
4999+# CONFIG_PPC_MPC106 is not set
5000+# CONFIG_PPC_970_NAP is not set
5001+# CONFIG_PPC_INDIRECT_IO is not set
5002+# CONFIG_GENERIC_IOMAP is not set
5003+# CONFIG_CPU_FREQ is not set
5004+# CONFIG_FSL_ULI1575 is not set
5005+# CONFIG_SIMPLE_GPIO is not set
5006+
5007+#
5008+# Kernel options
5009+#
5010+CONFIG_HIGHMEM=y
5011+CONFIG_TICK_ONESHOT=y
5012+# CONFIG_NO_HZ is not set
5013+CONFIG_HIGH_RES_TIMERS=y
5014+CONFIG_GENERIC_CLOCKEVENTS_BUILD=y
5015+CONFIG_HZ_100=y
5016+# CONFIG_HZ_250 is not set
5017+# CONFIG_HZ_300 is not set
5018+# CONFIG_HZ_1000 is not set
5019+CONFIG_HZ=100
5020+CONFIG_SCHED_HRTICK=y
5021+CONFIG_PREEMPT_NONE=y
5022+# CONFIG_PREEMPT_VOLUNTARY is not set
5023+# CONFIG_PREEMPT is not set
5024+CONFIG_BINFMT_ELF=y
5025+# CONFIG_CORE_DUMP_DEFAULT_ELF_HEADERS is not set
5026+# CONFIG_HAVE_AOUT is not set
5027+# CONFIG_BINFMT_MISC is not set
5028+# CONFIG_MATH_EMULATION is not set
5029+# CONFIG_IOMMU_HELPER is not set
5030+# CONFIG_SWIOTLB is not set
5031+CONFIG_ARCH_ENABLE_MEMORY_HOTPLUG=y
5032+CONFIG_ARCH_HAS_WALK_MEMORY=y
5033+CONFIG_ARCH_ENABLE_MEMORY_HOTREMOVE=y
5034+# CONFIG_IRQ_ALL_CPUS is not set
5035+CONFIG_SPARSE_IRQ=y
5036+CONFIG_MAX_ACTIVE_REGIONS=32
5037+CONFIG_ARCH_FLATMEM_ENABLE=y
5038+CONFIG_ARCH_POPULATES_NODE_MAP=y
5039+CONFIG_SELECT_MEMORY_MODEL=y
5040+CONFIG_FLATMEM_MANUAL=y
5041+# CONFIG_DISCONTIGMEM_MANUAL is not set
5042+# CONFIG_SPARSEMEM_MANUAL is not set
5043+CONFIG_FLATMEM=y
5044+CONFIG_FLAT_NODE_MEM_MAP=y
5045+CONFIG_HAVE_MEMBLOCK=y
5046+CONFIG_PAGEFLAGS_EXTENDED=y
5047+CONFIG_SPLIT_PTLOCK_CPUS=4
5048+CONFIG_MIGRATION=y
5049+CONFIG_PHYS_ADDR_T_64BIT=y
5050+CONFIG_ZONE_DMA_FLAG=1
5051+CONFIG_BOUNCE=y
5052+CONFIG_VIRT_TO_BUS=y
5053+# CONFIG_KSM is not set
5054+CONFIG_DEFAULT_MMAP_MIN_ADDR=4096
5055+CONFIG_STDBINUTILS=y
5056+CONFIG_PPC_4K_PAGES=y
5057+# CONFIG_PPC_16K_PAGES is not set
5058+# CONFIG_PPC_64K_PAGES is not set
5059+# CONFIG_PPC_256K_PAGES is not set
5060+CONFIG_FORCE_MAX_ZONEORDER=11
5061+# CONFIG_PROC_DEVICETREE is not set
5062+CONFIG_CMDLINE_BOOL=y
5063+CONFIG_CMDLINE="console=ttyS0 mtdparts=acp-nand:512K(2ndStage),512K(env-0),512K(env-1),512K(3rdStage),-(fs) ip=dhcp root=/dev/nfs"
5064+CONFIG_EXTRA_TARGETS=""
5065+CONFIG_SECCOMP=y
5066+CONFIG_ISA_DMA_API=y
5067+
5068+#
5069+# Bus options
5070+#
5071+CONFIG_ZONE_DMA=y
5072+# CONFIG_NEED_DMA_MAP_STATE is not set
5073+CONFIG_NEED_SG_DMA_LENGTH=y
5074+CONFIG_PPC_INDIRECT_PCI=y
5075+CONFIG_4xx_SOC=y
5076+CONFIG_PPC_PCI_CHOICE=y
5077+CONFIG_PCI=y
5078+CONFIG_PCI_DOMAINS=y
5079+CONFIG_PCI_SYSCALL=y
5080+CONFIG_PCIEPORTBUS=y
5081+# CONFIG_PCIEAER is not set
5082+CONFIG_PCIEASPM=y
5083+# CONFIG_PCIEASPM_DEBUG is not set
5084+CONFIG_ARCH_SUPPORTS_MSI=y
5085+CONFIG_PCI_MSI=y
5086+# CONFIG_PCI_DEBUG is not set
5087+# CONFIG_PCI_STUB is not set
5088+# CONFIG_PCI_IOV is not set
5089+# CONFIG_PCCARD is not set
5090+# CONFIG_HOTPLUG_PCI is not set
5091+CONFIG_HAS_RAPIDIO=y
5092+CONFIG_RAPIDIO=y
5093+CONFIG_RAPIDIO_DISC_TIMEOUT=30
5094+# CONFIG_RAPIDIO_ENABLE_RX_TX_PORTS is not set
5095+# CONFIG_RAPIDIO_ACP is not set
5096+CONFIG_RAPIDIO_TSI57X=y
5097+CONFIG_RAPIDIO_CPS_XX=y
5098+CONFIG_RAPIDIO_TSI568=y
5099+CONFIG_RAPIDIO_TSI500=y
5100+CONFIG_RAPIDIO_DEBUG=y
5101+
5102+#
5103+# Advanced setup
5104+#
5105+CONFIG_ADVANCED_OPTIONS=y
5106+# CONFIG_LOWMEM_SIZE_BOOL is not set
5107+CONFIG_LOWMEM_SIZE=0x30000000
5108+CONFIG_RELOCATABLE=y
5109+CONFIG_PAGE_OFFSET_BOOL=y
5110+CONFIG_PAGE_OFFSET=0xc0000000
5111+CONFIG_KERNEL_START_BOOL=y
5112+CONFIG_KERNEL_START=0xc0400000
5113+CONFIG_PHYSICAL_START=0x00000000
5114+CONFIG_TASK_SIZE_BOOL=y
5115+CONFIG_TASK_SIZE=0xc0000000
5116+CONFIG_NET=y
5117+
5118+#
5119+# Networking options
5120+#
5121+CONFIG_PACKET=y
5122+CONFIG_UNIX=y
5123+CONFIG_XFRM=y
5124+CONFIG_XFRM_USER=y
5125+CONFIG_XFRM_SUB_POLICY=y
5126+CONFIG_XFRM_MIGRATE=y
5127+CONFIG_XFRM_STATISTICS=y
5128+CONFIG_XFRM_IPCOMP=y
5129+CONFIG_NET_KEY=y
5130+# CONFIG_NET_KEY_MIGRATE is not set
5131+CONFIG_INET=y
5132+CONFIG_IP_MULTICAST=y
5133+# CONFIG_IP_ADVANCED_ROUTER is not set
5134+CONFIG_IP_FIB_HASH=y
5135+CONFIG_IP_PNP=y
5136+CONFIG_IP_PNP_DHCP=y
5137+CONFIG_IP_PNP_BOOTP=y
5138+CONFIG_IP_PNP_RARP=y
5139+CONFIG_NET_IPIP=y
5140+# CONFIG_NET_IPGRE is not set
5141+# CONFIG_IP_MROUTE is not set
5142+# CONFIG_ARPD is not set
5143+CONFIG_SYN_COOKIES=y
5144+CONFIG_INET_AH=y
5145+CONFIG_INET_ESP=y
5146+CONFIG_INET_IPCOMP=y
5147+CONFIG_INET_XFRM_TUNNEL=y
5148+CONFIG_INET_TUNNEL=y
5149+CONFIG_INET_XFRM_MODE_TRANSPORT=y
5150+CONFIG_INET_XFRM_MODE_TUNNEL=y
5151+CONFIG_INET_XFRM_MODE_BEET=y
5152+# CONFIG_INET_LRO is not set
5153+CONFIG_INET_DIAG=y
5154+CONFIG_INET_TCP_DIAG=y
5155+# CONFIG_TCP_CONG_ADVANCED is not set
5156+CONFIG_TCP_CONG_CUBIC=y
5157+CONFIG_DEFAULT_TCP_CONG="cubic"
5158+# CONFIG_TCP_MD5SIG is not set
5159+CONFIG_IPV6=y
5160+# CONFIG_IPV6_PRIVACY is not set
5161+# CONFIG_IPV6_ROUTER_PREF is not set
5162+# CONFIG_IPV6_OPTIMISTIC_DAD is not set
5163+CONFIG_INET6_AH=y
5164+CONFIG_INET6_ESP=y
5165+CONFIG_INET6_IPCOMP=y
5166+CONFIG_IPV6_MIP6=y
5167+CONFIG_INET6_XFRM_TUNNEL=y
5168+CONFIG_INET6_TUNNEL=y
5169+CONFIG_INET6_XFRM_MODE_TRANSPORT=y
5170+CONFIG_INET6_XFRM_MODE_TUNNEL=y
5171+CONFIG_INET6_XFRM_MODE_BEET=y
5172+# CONFIG_INET6_XFRM_MODE_ROUTEOPTIMIZATION is not set
5173+CONFIG_IPV6_SIT=y
5174+# CONFIG_IPV6_SIT_6RD is not set
5175+CONFIG_IPV6_NDISC_NODETYPE=y
5176+CONFIG_IPV6_TUNNEL=y
5177+# CONFIG_IPV6_MULTIPLE_TABLES is not set
5178+# CONFIG_IPV6_MROUTE is not set
5179+CONFIG_NETWORK_SECMARK=y
5180+CONFIG_NETFILTER=y
5181+# CONFIG_NETFILTER_DEBUG is not set
5182+CONFIG_NETFILTER_ADVANCED=y
5183+
5184+#
5185+# Core Netfilter Configuration
5186+#
5187+# CONFIG_NETFILTER_NETLINK_QUEUE is not set
5188+# CONFIG_NETFILTER_NETLINK_LOG is not set
5189+# CONFIG_NF_CONNTRACK is not set
5190+# CONFIG_NETFILTER_XTABLES is not set
5191+# CONFIG_IP_VS is not set
5192+
5193+#
5194+# IP: Netfilter Configuration
5195+#
5196+# CONFIG_NF_DEFRAG_IPV4 is not set
5197+# CONFIG_IP_NF_QUEUE is not set
5198+# CONFIG_IP_NF_IPTABLES is not set
5199+# CONFIG_IP_NF_ARPTABLES is not set
5200+
5201+#
5202+# IPv6: Netfilter Configuration
5203+#
5204+# CONFIG_IP6_NF_QUEUE is not set
5205+# CONFIG_IP6_NF_IPTABLES is not set
5206+# CONFIG_IP_DCCP is not set
5207+# CONFIG_IP_SCTP is not set
5208+# CONFIG_RDS is not set
5209+# CONFIG_TIPC is not set
5210+# CONFIG_ATM is not set
5211+# CONFIG_L2TP is not set
5212+# CONFIG_BRIDGE is not set
5213+# CONFIG_NET_DSA is not set
5214+CONFIG_VLAN_8021Q=y
5215+# CONFIG_VLAN_8021Q_GVRP is not set
5216+# CONFIG_DECNET is not set
5217+# CONFIG_LLC2 is not set
5218+# CONFIG_IPX is not set
5219+# CONFIG_ATALK is not set
5220+# CONFIG_X25 is not set
5221+# CONFIG_LAPB is not set
5222+# CONFIG_ECONET is not set
5223+# CONFIG_WAN_ROUTER is not set
5224+# CONFIG_PHONET is not set
5225+# CONFIG_IEEE802154 is not set
5226+# CONFIG_NET_SCHED is not set
5227+# CONFIG_DCB is not set
5228+CONFIG_RPS=y
5229+
5230+#
5231+# Network testing
5232+#
5233+# CONFIG_NET_PKTGEN is not set
5234+# CONFIG_HAMRADIO is not set
5235+# CONFIG_CAN is not set
5236+# CONFIG_IRDA is not set
5237+# CONFIG_BT is not set
5238+# CONFIG_AF_RXRPC is not set
5239+CONFIG_WIRELESS=y
5240+CONFIG_WIRELESS_EXT=y
5241+CONFIG_WEXT_CORE=y
5242+CONFIG_WEXT_PROC=y
5243+CONFIG_WEXT_PRIV=y
5244+# CONFIG_CFG80211 is not set
5245+CONFIG_WIRELESS_EXT_SYSFS=y
5246+# CONFIG_LIB80211 is not set
5247+
5248+#
5249+# CFG80211 needs to be enabled for MAC80211
5250+#
5251+
5252+#
5253+# Some wireless drivers require a rate control algorithm
5254+#
5255+# CONFIG_WIMAX is not set
5256+# CONFIG_RFKILL is not set
5257+# CONFIG_NET_9P is not set
5258+# CONFIG_CAIF is not set
5259+
5260+#
5261+# Device Drivers
5262+#
5263+
5264+#
5265+# Generic Driver Options
5266+#
5267+CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug"
5268+# CONFIG_DEVTMPFS is not set
5269+CONFIG_STANDALONE=y
5270+CONFIG_PREVENT_FIRMWARE_BUILD=y
5271+CONFIG_FW_LOADER=y
5272+CONFIG_FIRMWARE_IN_KERNEL=y
5273+CONFIG_EXTRA_FIRMWARE=""
5274+# CONFIG_DEBUG_DRIVER is not set
5275+# CONFIG_DEBUG_DEVRES is not set
5276+# CONFIG_SYS_HYPERVISOR is not set
5277+# CONFIG_CONNECTOR is not set
5278+CONFIG_MTD=y
5279+# CONFIG_MTD_DEBUG is not set
5280+# CONFIG_MTD_TESTS is not set
5281+# CONFIG_MTD_CONCAT is not set
5282+CONFIG_MTD_PARTITIONS=y
5283+# CONFIG_MTD_REDBOOT_PARTS is not set
5284+CONFIG_MTD_CMDLINE_PARTS=y
5285+CONFIG_MTD_OF_PARTS=y
5286+# CONFIG_MTD_AR7_PARTS is not set
5287+
5288+#
5289+# User Modules And Translation Layers
5290+#
5291+CONFIG_MTD_CHAR=y
5292+CONFIG_MTD_BLKDEVS=y
5293+CONFIG_MTD_BLOCK=y
5294+# CONFIG_FTL is not set
5295+# CONFIG_NFTL is not set
5296+# CONFIG_INFTL is not set
5297+# CONFIG_RFD_FTL is not set
5298+# CONFIG_SSFDC is not set
5299+# CONFIG_SM_FTL is not set
5300+# CONFIG_MTD_OOPS is not set
5301+
5302+#
5303+# RAM/ROM/Flash chip drivers
5304+#
5305+# CONFIG_MTD_CFI is not set
5306+CONFIG_MTD_JEDECPROBE=y
5307+CONFIG_MTD_GEN_PROBE=y
5308+# CONFIG_MTD_CFI_ADV_OPTIONS is not set
5309+CONFIG_MTD_MAP_BANK_WIDTH_1=y
5310+CONFIG_MTD_MAP_BANK_WIDTH_2=y
5311+CONFIG_MTD_MAP_BANK_WIDTH_4=y
5312+# CONFIG_MTD_MAP_BANK_WIDTH_8 is not set
5313+# CONFIG_MTD_MAP_BANK_WIDTH_16 is not set
5314+# CONFIG_MTD_MAP_BANK_WIDTH_32 is not set
5315+CONFIG_MTD_CFI_I1=y
5316+CONFIG_MTD_CFI_I2=y
5317+# CONFIG_MTD_CFI_I4 is not set
5318+# CONFIG_MTD_CFI_I8 is not set
5319+# CONFIG_MTD_CFI_INTELEXT is not set
5320+CONFIG_MTD_CFI_AMDSTD=y
5321+# CONFIG_MTD_CFI_STAA is not set
5322+CONFIG_MTD_CFI_UTIL=y
5323+# CONFIG_MTD_RAM is not set
5324+# CONFIG_MTD_ROM is not set
5325+# CONFIG_MTD_ABSENT is not set
5326+
5327+#
5328+# Mapping drivers for chip access
5329+#
5330+# CONFIG_MTD_COMPLEX_MAPPINGS is not set
5331+# CONFIG_MTD_PHYSMAP is not set
5332+CONFIG_MTD_PHYSMAP_OF=y
5333+# CONFIG_MTD_INTEL_VR_NOR is not set
5334+# CONFIG_MTD_PLATRAM is not set
5335+
5336+#
5337+# Self-contained MTD device drivers
5338+#
5339+# CONFIG_MTD_PMC551 is not set
5340+# CONFIG_MTD_SLRAM is not set
5341+# CONFIG_MTD_PHRAM is not set
5342+# CONFIG_MTD_MTDRAM is not set
5343+# CONFIG_MTD_BLOCK2MTD is not set
5344+
5345+#
5346+# Disk-On-Chip Device Drivers
5347+#
5348+# CONFIG_MTD_DOC2000 is not set
5349+# CONFIG_MTD_DOC2001 is not set
5350+# CONFIG_MTD_DOC2001PLUS is not set
5351+CONFIG_MTD_NAND_ECC=y
5352+# CONFIG_MTD_NAND_ECC_SMC is not set
5353+CONFIG_MTD_NAND=y
5354+# CONFIG_MTD_NAND_VERIFY_WRITE is not set
5355+# CONFIG_MTD_SM_COMMON is not set
5356+# CONFIG_MTD_NAND_MUSEUM_IDS is not set
5357+# CONFIG_MTD_NAND_DENALI is not set
5358+CONFIG_MTD_NAND_DENALI_SCRATCH_REG_ADDR=0xFF108018
5359+CONFIG_MTD_NAND_IDS=y
5360+# CONFIG_MTD_NAND_RICOH is not set
5361+# CONFIG_MTD_NAND_NDFC is not set
5362+# CONFIG_MTD_NAND_DISKONCHIP is not set
5363+# CONFIG_MTD_NAND_CAFE is not set
5364+# CONFIG_MTD_NAND_NANDSIM is not set
5365+CONFIG_MTD_NAND_PLATFORM=y
5366+# CONFIG_MTD_ALAUDA is not set
5367+# CONFIG_MTD_NAND_FSL_ELBC is not set
5368+# CONFIG_MTD_ONENAND is not set
5369+
5370+#
5371+# LPDDR flash memory drivers
5372+#
5373+# CONFIG_MTD_LPDDR is not set
5374+
5375+#
5376+# UBI - Unsorted block images
5377+#
5378+# CONFIG_MTD_UBI is not set
5379+CONFIG_OF_FLATTREE=y
5380+CONFIG_OF_DYNAMIC=y
5381+CONFIG_OF_DEVICE=y
5382+# CONFIG_PARPORT is not set
5383+CONFIG_BLK_DEV=y
5384+# CONFIG_BLK_DEV_FD is not set
5385+# CONFIG_BLK_CPQ_DA is not set
5386+# CONFIG_BLK_CPQ_CISS_DA is not set
5387+# CONFIG_BLK_DEV_DAC960 is not set
5388+# CONFIG_BLK_DEV_UMEM is not set
5389+# CONFIG_BLK_DEV_COW_COMMON is not set
5390+# CONFIG_BLK_DEV_LOOP is not set
5391+
5392+#
5393+# DRBD disabled because PROC_FS, INET or CONNECTOR not selected
5394+#
5395+# CONFIG_BLK_DEV_NBD is not set
5396+# CONFIG_BLK_DEV_SX8 is not set
5397+CONFIG_BLK_DEV_UB=y
5398+CONFIG_BLK_DEV_RAM=y
5399+CONFIG_BLK_DEV_RAM_COUNT=16
5400+CONFIG_BLK_DEV_RAM_SIZE=35000
5401+# CONFIG_BLK_DEV_XIP is not set
5402+# CONFIG_BLK_DEV_ISS is not set
5403+# CONFIG_CDROM_PKTCDVD is not set
5404+# CONFIG_ATA_OVER_ETH is not set
5405+# CONFIG_XILINX_SYSACE is not set
5406+# CONFIG_BLK_DEV_HD is not set
5407+CONFIG_MISC_DEVICES=y
5408+# CONFIG_PHANTOM is not set
5409+# CONFIG_SGI_IOC4 is not set
5410+# CONFIG_TIFM_CORE is not set
5411+# CONFIG_ENCLOSURE_SERVICES is not set
5412+# CONFIG_HP_ILO is not set
5413+# CONFIG_C2PORT is not set
5414+
5415+#
5416+# EEPROM support
5417+#
5418+# CONFIG_EEPROM_93CX6 is not set
5419+# CONFIG_CB710_CORE is not set
5420+CONFIG_HAVE_IDE=y
5421+# CONFIG_IDE is not set
5422+
5423+#
5424+# SCSI device support
5425+#
5426+CONFIG_SCSI_MOD=y
5427+# CONFIG_RAID_ATTRS is not set
5428+CONFIG_SCSI=y
5429+CONFIG_SCSI_DMA=y
5430+CONFIG_SCSI_TGT=y
5431+# CONFIG_SCSI_NETLINK is not set
5432+CONFIG_SCSI_PROC_FS=y
5433+
5434+#
5435+# SCSI support type (disk, tape, CD-ROM)
5436+#
5437+CONFIG_BLK_DEV_SD=y
5438+# CONFIG_CHR_DEV_ST is not set
5439+# CONFIG_CHR_DEV_OSST is not set
5440+# CONFIG_BLK_DEV_SR is not set
5441+# CONFIG_CHR_DEV_SG is not set
5442+# CONFIG_CHR_DEV_SCH is not set
5443+# CONFIG_SCSI_MULTI_LUN is not set
5444+CONFIG_SCSI_CONSTANTS=y
5445+# CONFIG_SCSI_LOGGING is not set
5446+# CONFIG_SCSI_SCAN_ASYNC is not set
5447+CONFIG_SCSI_WAIT_SCAN=m
5448+
5449+#
5450+# SCSI Transports
5451+#
5452+# CONFIG_SCSI_SPI_ATTRS is not set
5453+# CONFIG_SCSI_FC_ATTRS is not set
5454+# CONFIG_SCSI_ISCSI_ATTRS is not set
5455+# CONFIG_SCSI_SAS_LIBSAS is not set
5456+# CONFIG_SCSI_SRP_ATTRS is not set
5457+CONFIG_SCSI_LOWLEVEL=y
5458+# CONFIG_ISCSI_TCP is not set
5459+# CONFIG_SCSI_BNX2_ISCSI is not set
5460+# CONFIG_BE2ISCSI is not set
5461+# CONFIG_BLK_DEV_3W_XXXX_RAID is not set
5462+# CONFIG_SCSI_HPSA is not set
5463+# CONFIG_SCSI_3W_9XXX is not set
5464+# CONFIG_SCSI_3W_SAS is not set
5465+# CONFIG_SCSI_ACARD is not set
5466+# CONFIG_SCSI_AACRAID is not set
5467+# CONFIG_SCSI_AIC7XXX is not set
5468+# CONFIG_SCSI_AIC7XXX_OLD is not set
5469+# CONFIG_SCSI_AIC79XX is not set
5470+# CONFIG_SCSI_AIC94XX is not set
5471+# CONFIG_SCSI_MVSAS is not set
5472+# CONFIG_SCSI_DPT_I2O is not set
5473+# CONFIG_SCSI_ADVANSYS is not set
5474+# CONFIG_SCSI_ARCMSR is not set
5475+# CONFIG_MEGARAID_NEWGEN is not set
5476+# CONFIG_MEGARAID_LEGACY is not set
5477+# CONFIG_MEGARAID_SAS is not set
5478+# CONFIG_SCSI_MPT2SAS is not set
5479+# CONFIG_SCSI_HPTIOP is not set
5480+# CONFIG_SCSI_BUSLOGIC is not set
5481+# CONFIG_LIBFC is not set
5482+# CONFIG_LIBFCOE is not set
5483+# CONFIG_FCOE is not set
5484+# CONFIG_SCSI_DMX3191D is not set
5485+# CONFIG_SCSI_EATA is not set
5486+# CONFIG_SCSI_FUTURE_DOMAIN is not set
5487+# CONFIG_SCSI_GDTH is not set
5488+# CONFIG_SCSI_IPS is not set
5489+# CONFIG_SCSI_INITIO is not set
5490+# CONFIG_SCSI_INIA100 is not set
5491+# CONFIG_SCSI_STEX is not set
5492+# CONFIG_SCSI_SYM53C8XX_2 is not set
5493+# CONFIG_SCSI_QLOGIC_1280 is not set
5494+# CONFIG_SCSI_QLA_FC is not set
5495+# CONFIG_SCSI_QLA_ISCSI is not set
5496+# CONFIG_SCSI_LPFC is not set
5497+# CONFIG_SCSI_DC395x is not set
5498+# CONFIG_SCSI_DC390T is not set
5499+# CONFIG_SCSI_NSP32 is not set
5500+# CONFIG_SCSI_DEBUG is not set
5501+# CONFIG_SCSI_PMCRAID is not set
5502+# CONFIG_SCSI_PM8001 is not set
5503+# CONFIG_SCSI_SRP is not set
5504+# CONFIG_SCSI_BFA_FC is not set
5505+# CONFIG_SCSI_DH is not set
5506+# CONFIG_SCSI_OSD_INITIATOR is not set
5507+# CONFIG_ATA is not set
5508+CONFIG_MD=y
5509+CONFIG_BLK_DEV_MD=y
5510+CONFIG_MD_AUTODETECT=y
5511+CONFIG_MD_LINEAR=y
5512+CONFIG_MD_RAID0=y
5513+CONFIG_MD_RAID1=y
5514+CONFIG_MD_RAID10=y
5515+# CONFIG_MD_RAID456 is not set
5516+CONFIG_MD_MULTIPATH=y
5517+CONFIG_MD_FAULTY=y
5518+CONFIG_BLK_DEV_DM=y
5519+# CONFIG_DM_DEBUG is not set
5520+CONFIG_DM_CRYPT=y
5521+CONFIG_DM_SNAPSHOT=y
5522+CONFIG_DM_MIRROR=y
5523+# CONFIG_DM_LOG_USERSPACE is not set
5524+CONFIG_DM_ZERO=y
5525+# CONFIG_DM_MULTIPATH is not set
5526+# CONFIG_DM_DELAY is not set
5527+# CONFIG_DM_UEVENT is not set
5528+# CONFIG_FUSION is not set
5529+
5530+#
5531+# IEEE 1394 (FireWire) support
5532+#
5533+
5534+#
5535+# You can enable one or both FireWire driver stacks.
5536+#
5537+
5538+#
5539+# The newer stack is recommended.
5540+#
5541+# CONFIG_FIREWIRE is not set
5542+# CONFIG_IEEE1394 is not set
5543+# CONFIG_I2O is not set
5544+# CONFIG_MACINTOSH_DRIVERS is not set
5545+CONFIG_NETDEVICES=y
5546+CONFIG_DUMMY=y
5547+# CONFIG_BONDING is not set
5548+# CONFIG_MACVLAN is not set
5549+# CONFIG_EQUALIZER is not set
5550+CONFIG_TUN=y
5551+# CONFIG_VETH is not set
5552+# CONFIG_ARCNET is not set
5553+# CONFIG_PHYLIB is not set
5554+CONFIG_NET_ETHERNET=y
5555+CONFIG_MII=y
5556+# CONFIG_HAPPYMEAL is not set
5557+# CONFIG_SUNGEM is not set
5558+# CONFIG_CASSINI is not set
5559+# CONFIG_NET_VENDOR_3COM is not set
5560+# CONFIG_ETHOC is not set
5561+# CONFIG_DNET is not set
5562+# CONFIG_NET_TULIP is not set
5563+# CONFIG_HP100 is not set
5564+# CONFIG_IBM_NEW_EMAC is not set
5565+CONFIG_IBM_NEW_EMAC_ZMII=y
5566+# CONFIG_IBM_NEW_EMAC_RGMII is not set
5567+# CONFIG_IBM_NEW_EMAC_TAH is not set
5568+# CONFIG_IBM_NEW_EMAC_EMAC4 is not set
5569+# CONFIG_IBM_NEW_EMAC_NO_FLOW_CTRL is not set
5570+# CONFIG_IBM_NEW_EMAC_MAL_CLR_ICINTSTAT is not set
5571+# CONFIG_IBM_NEW_EMAC_MAL_COMMON_ERR is not set
5572+# CONFIG_NET_PCI is not set
5573+# CONFIG_B44 is not set
5574+# CONFIG_KS8842 is not set
5575+# CONFIG_KS8851_MLL is not set
5576+# CONFIG_ATL2 is not set
5577+# CONFIG_XILINX_EMACLITE is not set
5578+CONFIG_NETDEV_1000=y
5579+# CONFIG_ACENIC is not set
5580+# CONFIG_DL2K is not set
5581+CONFIG_E1000=y
5582+CONFIG_E1000E=y
5583+# CONFIG_IP1000 is not set
5584+CONFIG_IGB=y
5585+CONFIG_IGBVF=y
5586+# CONFIG_NS83820 is not set
5587+# CONFIG_HAMACHI is not set
5588+# CONFIG_YELLOWFIN is not set
5589+# CONFIG_R8169 is not set
5590+# CONFIG_SIS190 is not set
5591+# CONFIG_SKGE is not set
5592+# CONFIG_SKY2 is not set
5593+# CONFIG_VIA_VELOCITY is not set
5594+# CONFIG_TIGON3 is not set
5595+# CONFIG_BNX2 is not set
5596+# CONFIG_CNIC is not set
5597+# CONFIG_MV643XX_ETH is not set
5598+# CONFIG_XILINX_LL_TEMAC is not set
5599+# CONFIG_QLA3XXX is not set
5600+# CONFIG_ATL1 is not set
5601+# CONFIG_ATL1E is not set
5602+# CONFIG_ATL1C is not set
5603+# CONFIG_JME is not set
5604+# CONFIG_NETDEV_10000 is not set
5605+# CONFIG_TR is not set
5606+CONFIG_WLAN=y
5607+# CONFIG_AIRO is not set
5608+# CONFIG_ATMEL is not set
5609+# CONFIG_PRISM54 is not set
5610+CONFIG_USB_ZD1201=y
5611+# CONFIG_HOSTAP is not set
5612+
5613+#
5614+# Enable WiMAX (Networking options) to see the WiMAX drivers
5615+#
5616+
5617+#
5618+# USB Network Adapters
5619+#
5620+# CONFIG_USB_CATC is not set
5621+# CONFIG_USB_KAWETH is not set
5622+# CONFIG_USB_PEGASUS is not set
5623+# CONFIG_USB_RTL8150 is not set
5624+# CONFIG_USB_USBNET is not set
5625+# CONFIG_USB_IPHETH is not set
5626+# CONFIG_WAN is not set
5627+# CONFIG_RIONET is not set
5628+# CONFIG_FDDI is not set
5629+# CONFIG_HIPPI is not set
5630+CONFIG_PPP=m
5631+CONFIG_PPP_MULTILINK=y
5632+CONFIG_PPP_FILTER=y
5633+CONFIG_PPP_ASYNC=m
5634+CONFIG_PPP_SYNC_TTY=m
5635+CONFIG_PPP_DEFLATE=m
5636+CONFIG_PPP_BSDCOMP=m
5637+# CONFIG_PPP_MPPE is not set
5638+CONFIG_PPPOE=m
5639+CONFIG_SLIP=m
5640+CONFIG_SLIP_COMPRESSED=y
5641+CONFIG_SLHC=m
5642+CONFIG_SLIP_SMART=y
5643+CONFIG_SLIP_MODE_SLIP6=y
5644+# CONFIG_NET_FC is not set
5645+CONFIG_NETCONSOLE=y
5646+# CONFIG_NETCONSOLE_DYNAMIC is not set
5647+CONFIG_NETPOLL=y
5648+CONFIG_NETPOLL_TRAP=y
5649+CONFIG_NET_POLL_CONTROLLER=y
5650+# CONFIG_VMXNET3 is not set
5651+# CONFIG_ISDN is not set
5652+# CONFIG_PHONE is not set
5653+
5654+#
5655+# Input device support
5656+#
5657+CONFIG_INPUT=y
5658+# CONFIG_INPUT_FF_MEMLESS is not set
5659+# CONFIG_INPUT_POLLDEV is not set
5660+# CONFIG_INPUT_SPARSEKMAP is not set
5661+
5662+#
5663+# Userland interfaces
5664+#
5665+CONFIG_INPUT_MOUSEDEV=y
5666+CONFIG_INPUT_MOUSEDEV_PSAUX=y
5667+CONFIG_INPUT_MOUSEDEV_SCREEN_X=1024
5668+CONFIG_INPUT_MOUSEDEV_SCREEN_Y=768
5669+# CONFIG_INPUT_JOYDEV is not set
5670+# CONFIG_INPUT_EVDEV is not set
5671+# CONFIG_INPUT_EVBUG is not set
5672+
5673+#
5674+# Input Device Drivers
5675+#
5676+# CONFIG_INPUT_KEYBOARD is not set
5677+# CONFIG_INPUT_MOUSE is not set
5678+# CONFIG_INPUT_JOYSTICK is not set
5679+# CONFIG_INPUT_TABLET is not set
5680+# CONFIG_INPUT_TOUCHSCREEN is not set
5681+# CONFIG_INPUT_MISC is not set
5682+
5683+#
5684+# Hardware I/O ports
5685+#
5686+CONFIG_SERIO=y
5687+CONFIG_SERIO_I8042=y
5688+CONFIG_SERIO_SERPORT=y
5689+# CONFIG_SERIO_PCIPS2 is not set
5690+CONFIG_SERIO_LIBPS2=y
5691+# CONFIG_SERIO_RAW is not set
5692+# CONFIG_SERIO_XILINX_XPS_PS2 is not set
5693+# CONFIG_SERIO_ALTERA_PS2 is not set
5694+# CONFIG_GAMEPORT is not set
5695+
5696+#
5697+# Character devices
5698+#
5699+CONFIG_VT=y
5700+CONFIG_CONSOLE_TRANSLATIONS=y
5701+CONFIG_VT_CONSOLE=y
5702+CONFIG_HW_CONSOLE=y
5703+# CONFIG_VT_HW_CONSOLE_BINDING is not set
5704+CONFIG_DEVKMEM=y
5705+# CONFIG_SERIAL_NONSTANDARD is not set
5706+CONFIG_N_GSM=y
5707+# CONFIG_NOZOMI is not set
5708+
5709+#
5710+# Serial drivers
5711+#
5712+# CONFIG_SERIAL_8250 is not set
5713+
5714+#
5715+# Non-8250 serial port support
5716+#
5717+# CONFIG_SERIAL_UARTLITE is not set
5718+CONFIG_SERIAL_CORE=y
5719+CONFIG_SERIAL_CORE_CONSOLE=y
5720+# CONFIG_SERIAL_JSM is not set
5721+# CONFIG_SERIAL_OF_PLATFORM_NWPSERIAL is not set
5722+# CONFIG_SERIAL_TIMBERDALE is not set
5723+# CONFIG_SERIAL_GRLIB_GAISLER_APBUART is not set
5724+# CONFIG_SERIAL_ALTERA_JTAGUART is not set
5725+# CONFIG_SERIAL_ALTERA_UART is not set
5726+CONFIG_UNIX98_PTYS=y
5727+# CONFIG_DEVPTS_MULTIPLE_INSTANCES is not set
5728+CONFIG_LEGACY_PTYS=y
5729+CONFIG_LEGACY_PTY_COUNT=20
5730+# CONFIG_HVC_UDBG is not set
5731+# CONFIG_IPMI_HANDLER is not set
5732+# CONFIG_HW_RANDOM is not set
5733+# CONFIG_NVRAM is not set
5734+# CONFIG_GEN_RTC is not set
5735+# CONFIG_R3964 is not set
5736+# CONFIG_APPLICOM is not set
5737+# CONFIG_RAW_DRIVER is not set
5738+# CONFIG_TCG_TPM is not set
5739+CONFIG_DEVPORT=y
5740+# CONFIG_RAMOOPS is not set
5741+# CONFIG_I2C is not set
5742+# CONFIG_SPI is not set
5743+
5744+#
5745+# PPS support
5746+#
5747+# CONFIG_PPS is not set
5748+CONFIG_ARCH_WANT_OPTIONAL_GPIOLIB=y
5749+# CONFIG_GPIOLIB is not set
5750+# CONFIG_W1 is not set
5751+# CONFIG_POWER_SUPPLY is not set
5752+# CONFIG_HWMON is not set
5753+CONFIG_THERMAL=y
5754+# CONFIG_WATCHDOG is not set
5755+CONFIG_SSB_POSSIBLE=y
5756+
5757+#
5758+# Sonics Silicon Backplane
5759+#
5760+# CONFIG_SSB is not set
5761+# CONFIG_MFD_SUPPORT is not set
5762+# CONFIG_REGULATOR is not set
5763+# CONFIG_MEDIA_SUPPORT is not set
5764+
5765+#
5766+# Graphics support
5767+#
5768+# CONFIG_AGP is not set
5769+# CONFIG_VGA_ARB is not set
5770+# CONFIG_DRM is not set
5771+# CONFIG_VGASTATE is not set
5772+# CONFIG_VIDEO_OUTPUT_CONTROL is not set
5773+# CONFIG_FB is not set
5774+# CONFIG_BACKLIGHT_LCD_SUPPORT is not set
5775+
5776+#
5777+# Display device support
5778+#
5779+# CONFIG_DISPLAY_SUPPORT is not set
5780+
5781+#
5782+# Console display driver support
5783+#
5784+CONFIG_DUMMY_CONSOLE=y
5785+# CONFIG_SOUND is not set
5786+CONFIG_HID_SUPPORT=y
5787+CONFIG_HID=y
5788+CONFIG_HIDRAW=y
5789+
5790+#
5791+# USB Input Devices
5792+#
5793+CONFIG_USB_HID=y
5794+CONFIG_HID_PID=y
5795+CONFIG_USB_HIDDEV=y
5796+
5797+#
5798+# Special HID drivers
5799+#
5800+CONFIG_HID_3M_PCT=y
5801+CONFIG_HID_A4TECH=y
5802+CONFIG_HID_APPLE=y
5803+# CONFIG_HID_BELKIN is not set
5804+# CONFIG_HID_CANDO is not set
5805+# CONFIG_HID_CHERRY is not set
5806+# CONFIG_HID_CHICONY is not set
5807+# CONFIG_HID_CYPRESS is not set
5808+# CONFIG_HID_DRAGONRISE is not set
5809+# CONFIG_HID_EGALAX is not set
5810+# CONFIG_HID_EZKEY is not set
5811+# CONFIG_HID_KYE is not set
5812+# CONFIG_HID_GYRATION is not set
5813+# CONFIG_HID_TWINHAN is not set
5814+# CONFIG_HID_KENSINGTON is not set
5815+# CONFIG_HID_LOGITECH is not set
5816+# CONFIG_HID_MICROSOFT is not set
5817+# CONFIG_HID_MOSART is not set
5818+# CONFIG_HID_MONTEREY is not set
5819+# CONFIG_HID_NTRIG is not set
5820+# CONFIG_HID_ORTEK is not set
5821+# CONFIG_HID_PANTHERLORD is not set
5822+# CONFIG_HID_PETALYNX is not set
5823+# CONFIG_HID_PICOLCD is not set
5824+# CONFIG_HID_QUANTA is not set
5825+# CONFIG_HID_ROCCAT is not set
5826+# CONFIG_HID_ROCCAT_KONE is not set
5827+# CONFIG_HID_SAMSUNG is not set
5828+# CONFIG_HID_SONY is not set
5829+# CONFIG_HID_STANTUM is not set
5830+# CONFIG_HID_SUNPLUS is not set
5831+# CONFIG_HID_GREENASIA is not set
5832+# CONFIG_HID_SMARTJOYPLUS is not set
5833+# CONFIG_HID_TOPSEED is not set
5834+# CONFIG_HID_THRUSTMASTER is not set
5835+# CONFIG_HID_ZEROPLUS is not set
5836+# CONFIG_HID_ZYDACRON is not set
5837+CONFIG_USB_SUPPORT=y
5838+CONFIG_USB_ARCH_HAS_HCD=y
5839+CONFIG_USB_ARCH_HAS_OHCI=y
5840+CONFIG_USB_ARCH_HAS_EHCI=y
5841+CONFIG_USB=y
5842+# CONFIG_USB_DEBUG is not set
5843+CONFIG_USB_ANNOUNCE_NEW_DEVICES=y
5844+
5845+#
5846+# Miscellaneous USB options
5847+#
5848+CONFIG_USB_DEVICEFS=y
5849+CONFIG_USB_DEVICE_CLASS=y
5850+CONFIG_USB_DYNAMIC_MINORS=y
5851+# CONFIG_USB_OTG_WHITELIST is not set
5852+# CONFIG_USB_OTG_BLACKLIST_HUB is not set
5853+CONFIG_USB_MON=y
5854+# CONFIG_USB_WUSB is not set
5855+# CONFIG_USB_WUSB_CBAF is not set
5856+
5857+#
5858+# USB Host Controller Drivers
5859+#
5860+# CONFIG_USB_C67X00_HCD is not set
5861+# CONFIG_USB_XHCI_HCD is not set
5862+CONFIG_USB_EHCI_HCD=y
5863+CONFIG_USB_EHCI_ROOT_HUB_TT=y
5864+# CONFIG_USB_EHCI_TT_NEWSCHED is not set
5865+CONFIG_USB_EHCI_BIG_ENDIAN_MMIO=y
5866+CONFIG_USB_EHCI_BIG_ENDIAN_DESC=y
5867+CONFIG_XPS_USB_HCD_XILINX=y
5868+# CONFIG_USB_EHCI_HCD_PPC_OF is not set
5869+# CONFIG_USB_OXU210HP_HCD is not set
5870+CONFIG_USB_CI13612_HCD=y
5871+# CONFIG_USB_ISP116X_HCD is not set
5872+# CONFIG_USB_ISP1760_HCD is not set
5873+# CONFIG_USB_ISP1362_HCD is not set
5874+# CONFIG_USB_OHCI_HCD is not set
5875+# CONFIG_USB_UHCI_HCD is not set
5876+# CONFIG_USB_SL811_HCD is not set
5877+# CONFIG_USB_R8A66597_HCD is not set
5878+# CONFIG_USB_WHCI_HCD is not set
5879+# CONFIG_USB_HWA_HCD is not set
5880+
5881+#
5882+# USB Device Class drivers
5883+#
5884+# CONFIG_USB_ACM is not set
5885+# CONFIG_USB_PRINTER is not set
5886+# CONFIG_USB_WDM is not set
5887+# CONFIG_USB_TMC is not set
5888+
5889+#
5890+# NOTE: USB_STORAGE depends on SCSI but BLK_DEV_SD may
5891+#
5892+
5893+#
5894+# also be needed; see USB_STORAGE Help for more info
5895+#
5896+CONFIG_USB_STORAGE=y
5897+# CONFIG_USB_STORAGE_DEBUG is not set
5898+# CONFIG_USB_STORAGE_DATAFAB is not set
5899+# CONFIG_USB_STORAGE_FREECOM is not set
5900+# CONFIG_USB_STORAGE_ISD200 is not set
5901+# CONFIG_USB_STORAGE_USBAT is not set
5902+# CONFIG_USB_STORAGE_SDDR09 is not set
5903+# CONFIG_USB_STORAGE_SDDR55 is not set
5904+# CONFIG_USB_STORAGE_JUMPSHOT is not set
5905+# CONFIG_USB_STORAGE_ALAUDA is not set
5906+# CONFIG_USB_STORAGE_ONETOUCH is not set
5907+# CONFIG_USB_STORAGE_KARMA is not set
5908+# CONFIG_USB_STORAGE_CYPRESS_ATACB is not set
5909+CONFIG_USB_LIBUSUAL=y
5910+
5911+#
5912+# USB Imaging devices
5913+#
5914+# CONFIG_USB_MDC800 is not set
5915+# CONFIG_USB_MICROTEK is not set
5916+
5917+#
5918+# USB port drivers
5919+#
5920+# CONFIG_USB_SERIAL is not set
5921+
5922+#
5923+# USB Miscellaneous drivers
5924+#
5925+# CONFIG_USB_EMI62 is not set
5926+# CONFIG_USB_EMI26 is not set
5927+# CONFIG_USB_ADUTUX is not set
5928+# CONFIG_USB_SEVSEG is not set
5929+# CONFIG_USB_RIO500 is not set
5930+# CONFIG_USB_LEGOTOWER is not set
5931+# CONFIG_USB_LCD is not set
5932+# CONFIG_USB_LED is not set
5933+# CONFIG_USB_CYPRESS_CY7C63 is not set
5934+# CONFIG_USB_CYTHERM is not set
5935+# CONFIG_USB_IDMOUSE is not set
5936+# CONFIG_USB_FTDI_ELAN is not set
5937+# CONFIG_USB_APPLEDISPLAY is not set
5938+# CONFIG_USB_SISUSBVGA is not set
5939+# CONFIG_USB_LD is not set
5940+# CONFIG_USB_TRANCEVIBRATOR is not set
5941+# CONFIG_USB_IOWARRIOR is not set
5942+# CONFIG_USB_TEST is not set
5943+# CONFIG_USB_ISIGHTFW is not set
5944+# CONFIG_USB_GADGET is not set
5945+
5946+#
5947+# OTG and related infrastructure
5948+#
5949+# CONFIG_NOP_USB_XCEIV is not set
5950+# CONFIG_UWB is not set
5951+# CONFIG_MMC is not set
5952+# CONFIG_MEMSTICK is not set
5953+# CONFIG_NEW_LEDS is not set
5954+# CONFIG_ACCESSIBILITY is not set
5955+# CONFIG_INFINIBAND is not set
5956+# CONFIG_EDAC is not set
5957+# CONFIG_RTC_CLASS is not set
5958+# CONFIG_DMADEVICES is not set
5959+# CONFIG_AUXDISPLAY is not set
5960+# CONFIG_UIO is not set
5961+# CONFIG_STAGING is not set
5962+
5963+#
5964+# LSI Drivers (APP3, APP3K, and ACP)
5965+#
5966+CONFIG_SERIAL_ACP=y
5967+CONFIG_SERIAL_ACP_CONSOLE=y
5968+# CONFIG_SERIAL_ACP_CONSOLE_POLL is not set
5969+CONFIG_LSI_NET=y
5970+CONFIG_LSI_NET_NUM_RX_DESC=16
5971+CONFIG_LSI_NET_RX_BUF_SZ=131072
5972+CONFIG_LSI_NET_NUM_TX_DESC=8
5973+CONFIG_LSI_NET_TX_BUF_SZ=65536
5974+CONFIG_LSI_NAND=y
5975+CONFIG_LSI_UBOOTENV=y
5976+CONFIG_LSI_PLX_PCIE_BRIDGE=y
5977+
5978+#
5979+# File systems
5980+#
5981+CONFIG_EXT2_FS=y
5982+# CONFIG_EXT2_FS_XATTR is not set
5983+# CONFIG_EXT2_FS_XIP is not set
5984+# CONFIG_EXT3_FS is not set
5985+# CONFIG_EXT4_FS is not set
5986+# CONFIG_REISERFS_FS is not set
5987+# CONFIG_JFS_FS is not set
5988+CONFIG_FS_POSIX_ACL=y
5989+# CONFIG_XFS_FS is not set
5990+# CONFIG_GFS2_FS is not set
5991+# CONFIG_OCFS2_FS is not set
5992+# CONFIG_BTRFS_FS is not set
5993+# CONFIG_NILFS2_FS is not set
5994+CONFIG_FILE_LOCKING=y
5995+CONFIG_FSNOTIFY=y
5996+# CONFIG_DNOTIFY is not set
5997+CONFIG_INOTIFY=y
5998+CONFIG_INOTIFY_USER=y
5999+# CONFIG_QUOTA is not set
6000+CONFIG_AUTOFS_FS=y
6001+CONFIG_AUTOFS4_FS=y
6002+# CONFIG_FUSE_FS is not set
6003+
6004+#
6005+# Caches
6006+#
6007+# CONFIG_FSCACHE is not set
6008+
6009+#
6010+# CD-ROM/DVD Filesystems
6011+#
6012+# CONFIG_ISO9660_FS is not set
6013+# CONFIG_UDF_FS is not set
6014+
6015+#
6016+# DOS/FAT/NT Filesystems
6017+#
6018+CONFIG_FAT_FS=y
6019+CONFIG_MSDOS_FS=y
6020+CONFIG_VFAT_FS=y
6021+CONFIG_FAT_DEFAULT_CODEPAGE=437
6022+CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1"
6023+# CONFIG_NTFS_FS is not set
6024+
6025+#
6026+# Pseudo filesystems
6027+#
6028+CONFIG_PROC_FS=y
6029+# CONFIG_PROC_KCORE is not set
6030+CONFIG_PROC_SYSCTL=y
6031+CONFIG_PROC_PAGE_MONITOR=y
6032+CONFIG_SYSFS=y
6033+CONFIG_TMPFS=y
6034+# CONFIG_TMPFS_POSIX_ACL is not set
6035+# CONFIG_HUGETLB_PAGE is not set
6036+# CONFIG_CONFIGFS_FS is not set
6037+CONFIG_MISC_FILESYSTEMS=y
6038+# CONFIG_ADFS_FS is not set
6039+# CONFIG_AFFS_FS is not set
6040+# CONFIG_ECRYPT_FS is not set
6041+# CONFIG_HFS_FS is not set
6042+# CONFIG_HFSPLUS_FS is not set
6043+# CONFIG_BEFS_FS is not set
6044+# CONFIG_BFS_FS is not set
6045+# CONFIG_EFS_FS is not set
6046+CONFIG_JFFS2_FS=y
6047+CONFIG_JFFS2_FS_DEBUG=0
6048+CONFIG_JFFS2_FS_WRITEBUFFER=y
6049+# CONFIG_JFFS2_FS_WBUF_VERIFY is not set
6050+# CONFIG_JFFS2_SUMMARY is not set
6051+# CONFIG_JFFS2_FS_XATTR is not set
6052+# CONFIG_JFFS2_COMPRESSION_OPTIONS is not set
6053+CONFIG_JFFS2_ZLIB=y
6054+# CONFIG_JFFS2_LZO is not set
6055+CONFIG_JFFS2_RTIME=y
6056+# CONFIG_JFFS2_RUBIN is not set
6057+# CONFIG_LOGFS is not set
6058+# CONFIG_CRAMFS is not set
6059+# CONFIG_SQUASHFS is not set
6060+# CONFIG_VXFS_FS is not set
6061+# CONFIG_MINIX_FS is not set
6062+# CONFIG_OMFS_FS is not set
6063+# CONFIG_HPFS_FS is not set
6064+# CONFIG_QNX4FS_FS is not set
6065+# CONFIG_ROMFS_FS is not set
6066+# CONFIG_SYSV_FS is not set
6067+# CONFIG_UFS_FS is not set
6068+CONFIG_NETWORK_FILESYSTEMS=y
6069+CONFIG_NFS_FS=y
6070+CONFIG_NFS_V3=y
6071+CONFIG_NFS_V3_ACL=y
6072+CONFIG_NFS_V4=y
6073+# CONFIG_NFS_V4_1 is not set
6074+CONFIG_ROOT_NFS=y
6075+# CONFIG_NFSD is not set
6076+CONFIG_LOCKD=y
6077+CONFIG_LOCKD_V4=y
6078+CONFIG_NFS_ACL_SUPPORT=y
6079+CONFIG_NFS_COMMON=y
6080+CONFIG_SUNRPC=y
6081+CONFIG_SUNRPC_GSS=y
6082+CONFIG_RPCSEC_GSS_KRB5=y
6083+# CONFIG_RPCSEC_GSS_SPKM3 is not set
6084+# CONFIG_SMB_FS is not set
6085+# CONFIG_CEPH_FS is not set
6086+# CONFIG_CIFS is not set
6087+# CONFIG_NCP_FS is not set
6088+# CONFIG_CODA_FS is not set
6089+# CONFIG_AFS_FS is not set
6090+
6091+#
6092+# Partition Types
6093+#
6094+# CONFIG_PARTITION_ADVANCED is not set
6095+CONFIG_MSDOS_PARTITION=y
6096+CONFIG_NLS=y
6097+CONFIG_NLS_DEFAULT="iso8859-1"
6098+CONFIG_NLS_CODEPAGE_437=y
6099+# CONFIG_NLS_CODEPAGE_737 is not set
6100+# CONFIG_NLS_CODEPAGE_775 is not set
6101+CONFIG_NLS_CODEPAGE_850=y
6102+# CONFIG_NLS_CODEPAGE_852 is not set
6103+# CONFIG_NLS_CODEPAGE_855 is not set
6104+# CONFIG_NLS_CODEPAGE_857 is not set
6105+# CONFIG_NLS_CODEPAGE_860 is not set
6106+# CONFIG_NLS_CODEPAGE_861 is not set
6107+# CONFIG_NLS_CODEPAGE_862 is not set
6108+# CONFIG_NLS_CODEPAGE_863 is not set
6109+# CONFIG_NLS_CODEPAGE_864 is not set
6110+CONFIG_NLS_CODEPAGE_865=y
6111+# CONFIG_NLS_CODEPAGE_866 is not set
6112+# CONFIG_NLS_CODEPAGE_869 is not set
6113+# CONFIG_NLS_CODEPAGE_936 is not set
6114+# CONFIG_NLS_CODEPAGE_950 is not set
6115+# CONFIG_NLS_CODEPAGE_932 is not set
6116+# CONFIG_NLS_CODEPAGE_949 is not set
6117+# CONFIG_NLS_CODEPAGE_874 is not set
6118+# CONFIG_NLS_ISO8859_8 is not set
6119+# CONFIG_NLS_CODEPAGE_1250 is not set
6120+# CONFIG_NLS_CODEPAGE_1251 is not set
6121+CONFIG_NLS_ASCII=y
6122+CONFIG_NLS_ISO8859_1=y
6123+# CONFIG_NLS_ISO8859_2 is not set
6124+# CONFIG_NLS_ISO8859_3 is not set
6125+# CONFIG_NLS_ISO8859_4 is not set
6126+# CONFIG_NLS_ISO8859_5 is not set
6127+# CONFIG_NLS_ISO8859_6 is not set
6128+# CONFIG_NLS_ISO8859_7 is not set
6129+# CONFIG_NLS_ISO8859_9 is not set
6130+# CONFIG_NLS_ISO8859_13 is not set
6131+# CONFIG_NLS_ISO8859_14 is not set
6132+# CONFIG_NLS_ISO8859_15 is not set
6133+# CONFIG_NLS_KOI8_R is not set
6134+# CONFIG_NLS_KOI8_U is not set
6135+# CONFIG_NLS_UTF8 is not set
6136+# CONFIG_DLM is not set
6137+# CONFIG_BINARY_PRINTF is not set
6138+
6139+#
6140+# Library routines
6141+#
6142+CONFIG_BITREVERSE=y
6143+CONFIG_GENERIC_FIND_LAST_BIT=y
6144+CONFIG_CRC_CCITT=m
6145+# CONFIG_CRC16 is not set
6146+# CONFIG_CRC_T10DIF is not set
6147+# CONFIG_CRC_ITU_T is not set
6148+CONFIG_CRC32=y
6149+# CONFIG_CRC7 is not set
6150+# CONFIG_LIBCRC32C is not set
6151+CONFIG_ZLIB_INFLATE=y
6152+CONFIG_ZLIB_DEFLATE=y
6153+CONFIG_DECOMPRESS_GZIP=y
6154+CONFIG_HAS_IOMEM=y
6155+CONFIG_HAS_IOPORT=y
6156+CONFIG_HAS_DMA=y
6157+CONFIG_NLATTR=y
6158+CONFIG_GENERIC_ATOMIC64=y
6159+
6160+#
6161+# Kernel hacking
6162+#
6163+# CONFIG_PRINTK_TIME is not set
6164+CONFIG_ENABLE_WARN_DEPRECATED=y
6165+CONFIG_ENABLE_MUST_CHECK=y
6166+CONFIG_FRAME_WARN=1024
6167+CONFIG_MAGIC_SYSRQ=y
6168+# CONFIG_STRIP_ASM_SYMS is not set
6169+# CONFIG_UNUSED_SYMBOLS is not set
6170+CONFIG_DEBUG_FS=y
6171+# CONFIG_HEADERS_CHECK is not set
6172+CONFIG_DEBUG_KERNEL=y
6173+# CONFIG_DEBUG_SHIRQ is not set
6174+# CONFIG_DETECT_SOFTLOCKUP is not set
6175+# CONFIG_DETECT_HUNG_TASK is not set
6176+CONFIG_SCHED_DEBUG=y
6177+# CONFIG_SCHEDSTATS is not set
6178+# CONFIG_TIMER_STATS is not set
6179+# CONFIG_DEBUG_OBJECTS is not set
6180+# CONFIG_SLUB_DEBUG_ON is not set
6181+# CONFIG_SLUB_STATS is not set
6182+# CONFIG_DEBUG_KMEMLEAK is not set
6183+# CONFIG_DEBUG_RT_MUTEXES is not set
6184+# CONFIG_RT_MUTEX_TESTER is not set
6185+# CONFIG_DEBUG_SPINLOCK is not set
6186+# CONFIG_DEBUG_MUTEXES is not set
6187+# CONFIG_DEBUG_LOCK_ALLOC is not set
6188+# CONFIG_PROVE_LOCKING is not set
6189+# CONFIG_LOCK_STAT is not set
6190+# CONFIG_DEBUG_SPINLOCK_SLEEP is not set
6191+# CONFIG_DEBUG_LOCKING_API_SELFTESTS is not set
6192+# CONFIG_DEBUG_KOBJECT is not set
6193+# CONFIG_DEBUG_HIGHMEM is not set
6194+CONFIG_DEBUG_BUGVERBOSE=y
6195+CONFIG_DEBUG_INFO=y
6196+# CONFIG_DEBUG_VM is not set
6197+# CONFIG_DEBUG_WRITECOUNT is not set
6198+# CONFIG_DEBUG_MEMORY_INIT is not set
6199+# CONFIG_DEBUG_LIST is not set
6200+# CONFIG_DEBUG_SG is not set
6201+# CONFIG_DEBUG_NOTIFIERS is not set
6202+# CONFIG_DEBUG_CREDENTIALS is not set
6203+# CONFIG_RCU_TORTURE_TEST is not set
6204+# CONFIG_RCU_CPU_STALL_DETECTOR is not set
6205+# CONFIG_BACKTRACE_SELF_TEST is not set
6206+# CONFIG_DEBUG_BLOCK_EXT_DEVT is not set
6207+# CONFIG_DEBUG_FORCE_WEAK_PER_CPU is not set
6208+# CONFIG_LKDTM is not set
6209+# CONFIG_FAULT_INJECTION is not set
6210+# CONFIG_LATENCYTOP is not set
6211+CONFIG_SYSCTL_SYSCALL_CHECK=y
6212+# CONFIG_DEBUG_PAGEALLOC is not set
6213+CONFIG_HAVE_FUNCTION_TRACER=y
6214+CONFIG_HAVE_FUNCTION_GRAPH_TRACER=y
6215+CONFIG_HAVE_DYNAMIC_FTRACE=y
6216+CONFIG_HAVE_FTRACE_MCOUNT_RECORD=y
6217+CONFIG_RING_BUFFER=y
6218+CONFIG_RING_BUFFER_ALLOW_SWAP=y
6219+CONFIG_TRACING_SUPPORT=y
6220+CONFIG_FTRACE=y
6221+# CONFIG_FUNCTION_TRACER is not set
6222+# CONFIG_IRQSOFF_TRACER is not set
6223+# CONFIG_SCHED_TRACER is not set
6224+# CONFIG_ENABLE_DEFAULT_TRACERS is not set
6225+# CONFIG_BOOT_TRACER is not set
6226+CONFIG_BRANCH_PROFILE_NONE=y
6227+# CONFIG_PROFILE_ANNOTATED_BRANCHES is not set
6228+# CONFIG_PROFILE_ALL_BRANCHES is not set
6229+# CONFIG_STACK_TRACER is not set
6230+# CONFIG_KMEMTRACE is not set
6231+# CONFIG_WORKQUEUE_TRACER is not set
6232+# CONFIG_BLK_DEV_IO_TRACE is not set
6233+# CONFIG_RING_BUFFER_BENCHMARK is not set
6234+# CONFIG_DYNAMIC_DEBUG is not set
6235+# CONFIG_DMA_API_DEBUG is not set
6236+# CONFIG_ATOMIC64_SELFTEST is not set
6237+# CONFIG_SAMPLES is not set
6238+CONFIG_HAVE_ARCH_KGDB=y
6239+# CONFIG_KGDB is not set
6240+# CONFIG_PPC_DISABLE_WERROR is not set
6241+CONFIG_PPC_WERROR=y
6242+CONFIG_PRINT_STACK_DEPTH=64
6243+# CONFIG_DEBUG_STACKOVERFLOW is not set
6244+# CONFIG_DEBUG_STACK_USAGE is not set
6245+# CONFIG_DEBUG_PER_CPU_MAPS is not set
6246+# CONFIG_PPC_EMULATED_STATS is not set
6247+# CONFIG_CODE_PATCHING_SELFTEST is not set
6248+# CONFIG_FTR_FIXUP_SELFTEST is not set
6249+# CONFIG_MSI_BITMAP_SELFTEST is not set
6250+CONFIG_XMON=y
6251+CONFIG_XMON_DEFAULT=y
6252+CONFIG_XMON_DISASSEMBLY=y
6253+CONFIG_DEBUGGER=y
6254+# CONFIG_VIRQ_DEBUG is not set
6255+# CONFIG_BDI_SWITCH is not set
6256+# CONFIG_PPC_EARLY_DEBUG is not set
6257+
6258+#
6259+# Security options
6260+#
6261+CONFIG_KEYS=y
6262+# CONFIG_KEYS_DEBUG_PROC_KEYS is not set
6263+# CONFIG_SECURITY is not set
6264+# CONFIG_SECURITYFS is not set
6265+# CONFIG_DEFAULT_SECURITY_SELINUX is not set
6266+# CONFIG_DEFAULT_SECURITY_SMACK is not set
6267+# CONFIG_DEFAULT_SECURITY_TOMOYO is not set
6268+CONFIG_DEFAULT_SECURITY_DAC=y
6269+CONFIG_DEFAULT_SECURITY=""
6270+CONFIG_CRYPTO=y
6271+
6272+#
6273+# Crypto core or helper
6274+#
6275+CONFIG_CRYPTO_ALGAPI=y
6276+CONFIG_CRYPTO_ALGAPI2=y
6277+CONFIG_CRYPTO_AEAD=y
6278+CONFIG_CRYPTO_AEAD2=y
6279+CONFIG_CRYPTO_BLKCIPHER=y
6280+CONFIG_CRYPTO_BLKCIPHER2=y
6281+CONFIG_CRYPTO_HASH=y
6282+CONFIG_CRYPTO_HASH2=y
6283+CONFIG_CRYPTO_RNG=y
6284+CONFIG_CRYPTO_RNG2=y
6285+CONFIG_CRYPTO_PCOMP=y
6286+CONFIG_CRYPTO_MANAGER=y
6287+CONFIG_CRYPTO_MANAGER2=y
6288+CONFIG_CRYPTO_GF128MUL=y
6289+CONFIG_CRYPTO_NULL=y
6290+# CONFIG_CRYPTO_PCRYPT is not set
6291+CONFIG_CRYPTO_WORKQUEUE=y
6292+# CONFIG_CRYPTO_CRYPTD is not set
6293+CONFIG_CRYPTO_AUTHENC=y
6294+# CONFIG_CRYPTO_TEST is not set
6295+
6296+#
6297+# Authenticated Encryption with Associated Data
6298+#
6299+# CONFIG_CRYPTO_CCM is not set
6300+CONFIG_CRYPTO_GCM=y
6301+CONFIG_CRYPTO_SEQIV=y
6302+
6303+#
6304+# Block modes
6305+#
6306+CONFIG_CRYPTO_CBC=y
6307+CONFIG_CRYPTO_CTR=y
6308+# CONFIG_CRYPTO_CTS is not set
6309+# CONFIG_CRYPTO_ECB is not set
6310+# CONFIG_CRYPTO_LRW is not set
6311+# CONFIG_CRYPTO_PCBC is not set
6312+# CONFIG_CRYPTO_XTS is not set
6313+
6314+#
6315+# Hash modes
6316+#
6317+CONFIG_CRYPTO_HMAC=y
6318+CONFIG_CRYPTO_XCBC=y
6319+# CONFIG_CRYPTO_VMAC is not set
6320+
6321+#
6322+# Digest
6323+#
6324+# CONFIG_CRYPTO_CRC32C is not set
6325+CONFIG_CRYPTO_GHASH=y
6326+# CONFIG_CRYPTO_MD4 is not set
6327+CONFIG_CRYPTO_MD5=y
6328+# CONFIG_CRYPTO_MICHAEL_MIC is not set
6329+# CONFIG_CRYPTO_RMD128 is not set
6330+# CONFIG_CRYPTO_RMD160 is not set
6331+# CONFIG_CRYPTO_RMD256 is not set
6332+# CONFIG_CRYPTO_RMD320 is not set
6333+CONFIG_CRYPTO_SHA1=y
6334+CONFIG_CRYPTO_SHA256=y
6335+# CONFIG_CRYPTO_SHA512 is not set
6336+# CONFIG_CRYPTO_TGR192 is not set
6337+# CONFIG_CRYPTO_WP512 is not set
6338+
6339+#
6340+# Ciphers
6341+#
6342+CONFIG_CRYPTO_AES=y
6343+# CONFIG_CRYPTO_ANUBIS is not set
6344+# CONFIG_CRYPTO_ARC4 is not set
6345+# CONFIG_CRYPTO_BLOWFISH is not set
6346+# CONFIG_CRYPTO_CAMELLIA is not set
6347+# CONFIG_CRYPTO_CAST5 is not set
6348+# CONFIG_CRYPTO_CAST6 is not set
6349+CONFIG_CRYPTO_DES=y
6350+# CONFIG_CRYPTO_FCRYPT is not set
6351+# CONFIG_CRYPTO_KHAZAD is not set
6352+# CONFIG_CRYPTO_SALSA20 is not set
6353+# CONFIG_CRYPTO_SEED is not set
6354+# CONFIG_CRYPTO_SERPENT is not set
6355+# CONFIG_CRYPTO_TEA is not set
6356+# CONFIG_CRYPTO_TWOFISH is not set
6357+
6358+#
6359+# Compression
6360+#
6361+CONFIG_CRYPTO_DEFLATE=y
6362+# CONFIG_CRYPTO_ZLIB is not set
6363+# CONFIG_CRYPTO_LZO is not set
6364+
6365+#
6366+# Random Number Generation
6367+#
6368+# CONFIG_CRYPTO_ANSI_CPRNG is not set
6369+CONFIG_CRYPTO_HW=y
6370+# CONFIG_CRYPTO_DEV_HIFN_795X is not set
6371+CONFIG_CRYPTO_DEV_PPC4XX=y
6372+# CONFIG_PPC_CLOCK is not set
6373+# CONFIG_VIRTUALIZATION is not set
6374diff --git a/arch/powerpc/configs/acp_mel_defconfig b/arch/powerpc/configs/acp_mel_defconfig
6375new file mode 100644
6376index 0000000..d18cc50
6377--- /dev/null
6378+++ b/arch/powerpc/configs/acp_mel_defconfig
6379@@ -0,0 +1,1859 @@
6380+#
6381+# Automatically generated file; DO NOT EDIT.
6382+# Linux/powerpc 3.1.0-rc9 Kernel Configuration
6383+#
6384+# CONFIG_PPC64 is not set
6385+
6386+#
6387+# Processor support
6388+#
6389+# CONFIG_PPC_BOOK3S_32 is not set
6390+# CONFIG_PPC_85xx is not set
6391+# CONFIG_PPC_8xx is not set
6392+# CONFIG_40x is not set
6393+CONFIG_44x=y
6394+# CONFIG_E200 is not set
6395+CONFIG_PPC_FPU=y
6396+CONFIG_4xx=y
6397+CONFIG_BOOKE=y
6398+CONFIG_PTE_64BIT=y
6399+CONFIG_PHYS_64BIT=y
6400+CONFIG_PPC_MMU_NOHASH=y
6401+CONFIG_PPC_MMU_NOHASH_32=y
6402+# CONFIG_PPC_MM_SLICES is not set
6403+CONFIG_SMP=y
6404+CONFIG_NR_CPUS=4
6405+# CONFIG_NOT_COHERENT_CACHE is not set
6406+CONFIG_PPC32=y
6407+CONFIG_32BIT=y
6408+CONFIG_WORD_SIZE=32
6409+CONFIG_ARCH_PHYS_ADDR_T_64BIT=y
6410+CONFIG_ARCH_DMA_ADDR_T_64BIT=y
6411+CONFIG_MMU=y
6412+CONFIG_GENERIC_CMOS_UPDATE=y
6413+CONFIG_GENERIC_TIME_VSYSCALL=y
6414+CONFIG_GENERIC_CLOCKEVENTS=y
6415+# CONFIG_HAVE_SETUP_PER_CPU_AREA is not set
6416+# CONFIG_NEED_PER_CPU_EMBED_FIRST_CHUNK is not set
6417+CONFIG_NR_IRQS=512
6418+CONFIG_STACKTRACE_SUPPORT=y
6419+CONFIG_HAVE_LATENCYTOP_SUPPORT=y
6420+CONFIG_TRACE_IRQFLAGS_SUPPORT=y
6421+CONFIG_LOCKDEP_SUPPORT=y
6422+CONFIG_RWSEM_XCHGADD_ALGORITHM=y
6423+CONFIG_GENERIC_LOCKBREAK=y
6424+CONFIG_ARCH_HAS_ILOG2_U32=y
6425+CONFIG_GENERIC_HWEIGHT=y
6426+CONFIG_GENERIC_GPIO=y
6427+# CONFIG_ARCH_NO_VIRT_TO_BUS is not set
6428+CONFIG_PPC=y
6429+CONFIG_EARLY_PRINTK=y
6430+CONFIG_GENERIC_NVRAM=y
6431+CONFIG_SCHED_OMIT_FRAME_POINTER=y
6432+CONFIG_ARCH_MAY_HAVE_PC_FDC=y
6433+CONFIG_PPC_OF=y
6434+CONFIG_PPC_UDBG_16550=y
6435+CONFIG_GENERIC_TBSYNC=y
6436+CONFIG_AUDIT_ARCH=y
6437+CONFIG_GENERIC_BUG=y
6438+# CONFIG_EPAPR_BOOT is not set
6439+# CONFIG_DEFAULT_UIMAGE is not set
6440+CONFIG_ARCH_HIBERNATION_POSSIBLE=y
6441+CONFIG_ARCH_SUSPEND_POSSIBLE=y
6442+CONFIG_PPC_DCR_NATIVE=y
6443+# CONFIG_PPC_DCR_MMIO is not set
6444+CONFIG_PPC_DCR=y
6445+CONFIG_ARCH_SUPPORTS_DEBUG_PAGEALLOC=y
6446+CONFIG_PPC_ADV_DEBUG_REGS=y
6447+CONFIG_PPC_ADV_DEBUG_IACS=4
6448+CONFIG_PPC_ADV_DEBUG_DACS=2
6449+CONFIG_PPC_ADV_DEBUG_DVCS=2
6450+CONFIG_PPC_ADV_DEBUG_DAC_RANGE=y
6451+CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
6452+CONFIG_HAVE_IRQ_WORK=y
6453+
6454+#
6455+# General setup
6456+#
6457+CONFIG_EXPERIMENTAL=y
6458+CONFIG_INIT_ENV_ARG_LIMIT=32
6459+CONFIG_CROSS_COMPILE="powerpc-linux-gnu-"
6460+CONFIG_LOCALVERSION=""
6461+CONFIG_LOCALVERSION_AUTO=y
6462+CONFIG_DEFAULT_HOSTNAME="el-paso"
6463+CONFIG_SWAP=y
6464+CONFIG_SYSVIPC=y
6465+CONFIG_SYSVIPC_SYSCTL=y
6466+CONFIG_POSIX_MQUEUE=y
6467+CONFIG_POSIX_MQUEUE_SYSCTL=y
6468+# CONFIG_BSD_PROCESS_ACCT is not set
6469+# CONFIG_FHANDLE is not set
6470+# CONFIG_TASKSTATS is not set
6471+# CONFIG_AUDIT is not set
6472+CONFIG_HAVE_GENERIC_HARDIRQS=y
6473+
6474+#
6475+# IRQ subsystem
6476+#
6477+CONFIG_GENERIC_HARDIRQS=y
6478+CONFIG_HAVE_SPARSE_IRQ=y
6479+CONFIG_GENERIC_IRQ_SHOW=y
6480+CONFIG_GENERIC_IRQ_SHOW_LEVEL=y
6481+CONFIG_SPARSE_IRQ=y
6482+
6483+#
6484+# RCU Subsystem
6485+#
6486+CONFIG_TREE_PREEMPT_RCU=y
6487+CONFIG_PREEMPT_RCU=y
6488+# CONFIG_RCU_TRACE is not set
6489+CONFIG_RCU_FANOUT=32
6490+# CONFIG_RCU_FANOUT_EXACT is not set
6491+# CONFIG_TREE_RCU_TRACE is not set
6492+# CONFIG_RCU_BOOST is not set
6493+CONFIG_IKCONFIG=m
6494+CONFIG_IKCONFIG_PROC=y
6495+CONFIG_LOG_BUF_SHIFT=14
6496+# CONFIG_CGROUPS is not set
6497+# CONFIG_NAMESPACES is not set
6498+# CONFIG_SCHED_AUTOGROUP is not set
6499+CONFIG_SYSFS_DEPRECATED=y
6500+CONFIG_SYSFS_DEPRECATED_V2=y
6501+# CONFIG_RELAY is not set
6502+# CONFIG_BLK_DEV_INITRD is not set
6503+# CONFIG_CC_OPTIMIZE_FOR_SIZE is not set
6504+CONFIG_SYSCTL=y
6505+CONFIG_ANON_INODES=y
6506+CONFIG_EXPERT=y
6507+CONFIG_SYSCTL_SYSCALL=y
6508+CONFIG_KALLSYMS=y
6509+# CONFIG_KALLSYMS_ALL is not set
6510+CONFIG_HOTPLUG=y
6511+CONFIG_PRINTK=y
6512+CONFIG_BUG=y
6513+CONFIG_ELF_CORE=y
6514+CONFIG_BASE_FULL=y
6515+CONFIG_FUTEX=y
6516+CONFIG_EPOLL=y
6517+CONFIG_SIGNALFD=y
6518+CONFIG_TIMERFD=y
6519+CONFIG_EVENTFD=y
6520+CONFIG_SHMEM=y
6521+CONFIG_AIO=y
6522+CONFIG_EMBEDDED=y
6523+CONFIG_HAVE_PERF_EVENTS=y
6524+
6525+#
6526+# Kernel Performance Events And Counters
6527+#
6528+# CONFIG_PERF_EVENTS is not set
6529+# CONFIG_PERF_COUNTERS is not set
6530+CONFIG_VM_EVENT_COUNTERS=y
6531+CONFIG_PCI_QUIRKS=y
6532+CONFIG_SLUB_DEBUG=y
6533+CONFIG_COMPAT_BRK=y
6534+# CONFIG_SLAB is not set
6535+CONFIG_SLUB=y
6536+# CONFIG_SLOB is not set
6537+CONFIG_PROFILING=y
6538+CONFIG_OPROFILE=y
6539+CONFIG_HAVE_OPROFILE=y
6540+# CONFIG_KPROBES is not set
6541+# CONFIG_JUMP_LABEL is not set
6542+CONFIG_HAVE_EFFICIENT_UNALIGNED_ACCESS=y
6543+CONFIG_HAVE_IOREMAP_PROT=y
6544+CONFIG_HAVE_KPROBES=y
6545+CONFIG_HAVE_KRETPROBES=y
6546+CONFIG_HAVE_ARCH_TRACEHOOK=y
6547+CONFIG_HAVE_DMA_ATTRS=y
6548+CONFIG_USE_GENERIC_SMP_HELPERS=y
6549+CONFIG_HAVE_REGS_AND_STACK_ACCESS_API=y
6550+CONFIG_HAVE_DMA_API_DEBUG=y
6551+CONFIG_HAVE_ARCH_JUMP_LABEL=y
6552+CONFIG_HAVE_RCU_TABLE_FREE=y
6553+CONFIG_ARCH_HAVE_NMI_SAFE_CMPXCHG=y
6554+
6555+#
6556+# GCOV-based kernel profiling
6557+#
6558+# CONFIG_GCOV_KERNEL is not set
6559+# CONFIG_HAVE_GENERIC_DMA_COHERENT is not set
6560+CONFIG_SLABINFO=y
6561+CONFIG_RT_MUTEXES=y
6562+CONFIG_BASE_SMALL=0
6563+CONFIG_MODULES=y
6564+CONFIG_MODULE_FORCE_LOAD=y
6565+CONFIG_MODULE_UNLOAD=y
6566+CONFIG_MODULE_FORCE_UNLOAD=y
6567+CONFIG_MODVERSIONS=y
6568+CONFIG_MODULE_SRCVERSION_ALL=y
6569+CONFIG_STOP_MACHINE=y
6570+CONFIG_BLOCK=y
6571+CONFIG_LBDAF=y
6572+# CONFIG_BLK_DEV_BSG is not set
6573+# CONFIG_BLK_DEV_BSGLIB is not set
6574+# CONFIG_BLK_DEV_INTEGRITY is not set
6575+
6576+#
6577+# IO Schedulers
6578+#
6579+CONFIG_IOSCHED_NOOP=y
6580+CONFIG_IOSCHED_DEADLINE=y
6581+CONFIG_IOSCHED_CFQ=y
6582+# CONFIG_DEFAULT_DEADLINE is not set
6583+CONFIG_DEFAULT_CFQ=y
6584+# CONFIG_DEFAULT_NOOP is not set
6585+CONFIG_DEFAULT_IOSCHED="cfq"
6586+# CONFIG_INLINE_SPIN_TRYLOCK is not set
6587+# CONFIG_INLINE_SPIN_TRYLOCK_BH is not set
6588+# CONFIG_INLINE_SPIN_LOCK is not set
6589+# CONFIG_INLINE_SPIN_LOCK_BH is not set
6590+# CONFIG_INLINE_SPIN_LOCK_IRQ is not set
6591+# CONFIG_INLINE_SPIN_LOCK_IRQSAVE is not set
6592+# CONFIG_INLINE_SPIN_UNLOCK is not set
6593+# CONFIG_INLINE_SPIN_UNLOCK_BH is not set
6594+# CONFIG_INLINE_SPIN_UNLOCK_IRQ is not set
6595+# CONFIG_INLINE_SPIN_UNLOCK_IRQRESTORE is not set
6596+# CONFIG_INLINE_READ_TRYLOCK is not set
6597+# CONFIG_INLINE_READ_LOCK is not set
6598+# CONFIG_INLINE_READ_LOCK_BH is not set
6599+# CONFIG_INLINE_READ_LOCK_IRQ is not set
6600+# CONFIG_INLINE_READ_LOCK_IRQSAVE is not set
6601+# CONFIG_INLINE_READ_UNLOCK is not set
6602+# CONFIG_INLINE_READ_UNLOCK_BH is not set
6603+# CONFIG_INLINE_READ_UNLOCK_IRQ is not set
6604+# CONFIG_INLINE_READ_UNLOCK_IRQRESTORE is not set
6605+# CONFIG_INLINE_WRITE_TRYLOCK is not set
6606+# CONFIG_INLINE_WRITE_LOCK is not set
6607+# CONFIG_INLINE_WRITE_LOCK_BH is not set
6608+# CONFIG_INLINE_WRITE_LOCK_IRQ is not set
6609+# CONFIG_INLINE_WRITE_LOCK_IRQSAVE is not set
6610+# CONFIG_INLINE_WRITE_UNLOCK is not set
6611+# CONFIG_INLINE_WRITE_UNLOCK_BH is not set
6612+# CONFIG_INLINE_WRITE_UNLOCK_IRQ is not set
6613+# CONFIG_INLINE_WRITE_UNLOCK_IRQRESTORE is not set
6614+CONFIG_MUTEX_SPIN_ON_OWNER=y
6615+CONFIG_FREEZER=y
6616+CONFIG_PPC4xx_PCI_EXPRESS=y
6617+# CONFIG_PPC4xx_MSI is not set
6618+CONFIG_PPC_MSI_BITMAP=y
6619+# CONFIG_PPC_XICS is not set
6620+# CONFIG_PPC_ICP_NATIVE is not set
6621+# CONFIG_PPC_ICP_HV is not set
6622+# CONFIG_PPC_ICS_RTAS is not set
6623+
6624+#
6625+# Platform support
6626+#
6627+# CONFIG_PPC_CELL is not set
6628+# CONFIG_PPC_CELL_NATIVE is not set
6629+# CONFIG_PQ2ADS is not set
6630+CONFIG_PPC_47x=y
6631+# CONFIG_BAMBOO is not set
6632+# CONFIG_BLUESTONE is not set
6633+# CONFIG_EBONY is not set
6634+# CONFIG_SAM440EP is not set
6635+# CONFIG_SEQUOIA is not set
6636+# CONFIG_TAISHAN is not set
6637+# CONFIG_KATMAI is not set
6638+# CONFIG_RAINIER is not set
6639+# CONFIG_WARP is not set
6640+# CONFIG_ARCHES is not set
6641+# CONFIG_CANYONLANDS is not set
6642+# CONFIG_GLACIER is not set
6643+# CONFIG_REDWOOD is not set
6644+# CONFIG_EIGER is not set
6645+# CONFIG_YOSEMITE is not set
6646+# CONFIG_ISS4xx is not set
6647+# CONFIG_ICON is not set
6648+CONFIG_ACP=y
6649+# CONFIG_ACPISS is not set
6650+# CONFIG_ACP_X1V1 is not set
6651+# CONFIG_XILINX_VIRTEX440_GENERIC_BOARD is not set
6652+# CONFIG_PPC44x_SIMPLE is not set
6653+CONFIG_PPC4xx_GPIO=y
6654+CONFIG_440GP=y
6655+# CONFIG_PPC_WSP is not set
6656+# CONFIG_KVM_GUEST is not set
6657+# CONFIG_IPIC is not set
6658+CONFIG_MPIC=y
6659+# CONFIG_PPC_EPAPR_HV_PIC is not set
6660+# CONFIG_MPIC_WEIRD is not set
6661+# CONFIG_PPC_I8259 is not set
6662+# CONFIG_PPC_RTAS is not set
6663+# CONFIG_MMIO_NVRAM is not set
6664+# CONFIG_MPIC_U3_HT_IRQS is not set
6665+# CONFIG_PPC_MPC106 is not set
6666+# CONFIG_PPC_970_NAP is not set
6667+# CONFIG_PPC_P7_NAP is not set
6668+
6669+#
6670+# CPU Frequency scaling
6671+#
6672+# CONFIG_CPU_FREQ is not set
6673+# CONFIG_FSL_ULI1575 is not set
6674+CONFIG_SIMPLE_GPIO=y
6675+
6676+#
6677+# Kernel options
6678+#
6679+CONFIG_HIGHMEM=y
6680+CONFIG_TICK_ONESHOT=y
6681+# CONFIG_NO_HZ is not set
6682+CONFIG_HIGH_RES_TIMERS=y
6683+CONFIG_GENERIC_CLOCKEVENTS_BUILD=y
6684+CONFIG_HZ_100=y
6685+# CONFIG_HZ_250 is not set
6686+# CONFIG_HZ_300 is not set
6687+# CONFIG_HZ_1000 is not set
6688+CONFIG_HZ=100
6689+CONFIG_SCHED_HRTICK=y
6690+# CONFIG_PREEMPT_NONE is not set
6691+# CONFIG_PREEMPT_VOLUNTARY is not set
6692+CONFIG_PREEMPT=y
6693+CONFIG_PREEMPT_COUNT=y
6694+CONFIG_BINFMT_ELF=y
6695+# CONFIG_CORE_DUMP_DEFAULT_ELF_HEADERS is not set
6696+# CONFIG_HAVE_AOUT is not set
6697+# CONFIG_BINFMT_MISC is not set
6698+# CONFIG_MATH_EMULATION is not set
6699+# CONFIG_IOMMU_HELPER is not set
6700+# CONFIG_SWIOTLB is not set
6701+CONFIG_HOTPLUG_CPU=y
6702+CONFIG_ARCH_CPU_PROBE_RELEASE=y
6703+CONFIG_ARCH_ENABLE_MEMORY_HOTPLUG=y
6704+CONFIG_ARCH_HAS_WALK_MEMORY=y
6705+CONFIG_ARCH_ENABLE_MEMORY_HOTREMOVE=y
6706+# CONFIG_IRQ_ALL_CPUS is not set
6707+CONFIG_MAX_ACTIVE_REGIONS=32
6708+CONFIG_ARCH_FLATMEM_ENABLE=y
6709+CONFIG_ARCH_POPULATES_NODE_MAP=y
6710+CONFIG_SELECT_MEMORY_MODEL=y
6711+CONFIG_FLATMEM_MANUAL=y
6712+CONFIG_FLATMEM=y
6713+CONFIG_FLAT_NODE_MEM_MAP=y
6714+CONFIG_HAVE_MEMBLOCK=y
6715+CONFIG_PAGEFLAGS_EXTENDED=y
6716+CONFIG_SPLIT_PTLOCK_CPUS=4
6717+# CONFIG_COMPACTION is not set
6718+CONFIG_MIGRATION=y
6719+CONFIG_PHYS_ADDR_T_64BIT=y
6720+CONFIG_ZONE_DMA_FLAG=1
6721+CONFIG_BOUNCE=y
6722+CONFIG_VIRT_TO_BUS=y
6723+# CONFIG_KSM is not set
6724+CONFIG_DEFAULT_MMAP_MIN_ADDR=4096
6725+# CONFIG_CLEANCACHE is not set
6726+CONFIG_STDBINUTILS=y
6727+CONFIG_PPC_4K_PAGES=y
6728+# CONFIG_PPC_16K_PAGES is not set
6729+# CONFIG_PPC_64K_PAGES is not set
6730+CONFIG_FORCE_MAX_ZONEORDER=11
6731+# CONFIG_CMDLINE_BOOL is not set
6732+CONFIG_EXTRA_TARGETS=""
6733+CONFIG_SUSPEND=y
6734+CONFIG_SUSPEND_FREEZER=y
6735+# CONFIG_HIBERNATION is not set
6736+CONFIG_PM_SLEEP=y
6737+CONFIG_PM_SLEEP_SMP=y
6738+# CONFIG_PM_RUNTIME is not set
6739+CONFIG_PM=y
6740+# CONFIG_PM_DEBUG is not set
6741+CONFIG_SECCOMP=y
6742+CONFIG_ISA_DMA_API=y
6743+
6744+#
6745+# Bus options
6746+#
6747+CONFIG_ZONE_DMA=y
6748+# CONFIG_NEED_DMA_MAP_STATE is not set
6749+CONFIG_NEED_SG_DMA_LENGTH=y
6750+CONFIG_GENERIC_ISA_DMA=y
6751+CONFIG_PPC_INDIRECT_PCI=y
6752+CONFIG_PPC4xx_CPM=y
6753+CONFIG_4xx_SOC=y
6754+CONFIG_PPC_PCI_CHOICE=y
6755+CONFIG_PCI=y
6756+CONFIG_PCI_DOMAINS=y
6757+CONFIG_PCI_SYSCALL=y
6758+CONFIG_PCIEPORTBUS=y
6759+# CONFIG_PCIEAER is not set
6760+CONFIG_PCIEASPM=y
6761+# CONFIG_PCIEASPM_DEBUG is not set
6762+CONFIG_ARCH_SUPPORTS_MSI=y
6763+CONFIG_PCI_MSI=y
6764+# CONFIG_PCI_DEBUG is not set
6765+# CONFIG_PCI_STUB is not set
6766+# CONFIG_PCI_IOV is not set
6767+# CONFIG_PCCARD is not set
6768+# CONFIG_HOTPLUG_PCI is not set
6769+CONFIG_HAS_RAPIDIO=y
6770+CONFIG_RAPIDIO=y
6771+# CONFIG_FSL_RIO is not set
6772+CONFIG_RAPIDIO_DISC_TIMEOUT=30
6773+# CONFIG_RAPIDIO_ENABLE_RX_TX_PORTS is not set
6774+# CONFIG_RAPIDIO_ACP is not set
6775+CONFIG_RAPIDIO_TSI57X=y
6776+CONFIG_RAPIDIO_CPS_XX=y
6777+CONFIG_RAPIDIO_TSI568=y
6778+# CONFIG_RAPIDIO_CPS_GEN2 is not set
6779+CONFIG_RAPIDIO_TSI500=y
6780+CONFIG_RAPIDIO_DEBUG=y
6781+
6782+#
6783+# Advanced setup
6784+#
6785+CONFIG_ADVANCED_OPTIONS=y
6786+# CONFIG_LOWMEM_SIZE_BOOL is not set
6787+CONFIG_LOWMEM_SIZE=0x30000000
6788+CONFIG_RELOCATABLE=y
6789+CONFIG_PAGE_OFFSET_BOOL=y
6790+CONFIG_PAGE_OFFSET=0xc0000000
6791+CONFIG_KERNEL_START_BOOL=y
6792+CONFIG_KERNEL_START=0xc0400000
6793+CONFIG_PHYSICAL_START_BOOL=y
6794+CONFIG_PHYSICAL_START=0x00400000
6795+CONFIG_TASK_SIZE_BOOL=y
6796+CONFIG_TASK_SIZE=0xc0000000
6797+CONFIG_NET=y
6798+
6799+#
6800+# Networking options
6801+#
6802+CONFIG_PACKET=y
6803+CONFIG_UNIX=y
6804+CONFIG_XFRM=y
6805+CONFIG_XFRM_USER=y
6806+CONFIG_XFRM_SUB_POLICY=y
6807+CONFIG_XFRM_MIGRATE=y
6808+CONFIG_XFRM_STATISTICS=y
6809+CONFIG_XFRM_IPCOMP=y
6810+CONFIG_NET_KEY=y
6811+# CONFIG_NET_KEY_MIGRATE is not set
6812+CONFIG_INET=y
6813+CONFIG_IP_MULTICAST=y
6814+# CONFIG_IP_ADVANCED_ROUTER is not set
6815+CONFIG_IP_PNP=y
6816+CONFIG_IP_PNP_DHCP=y
6817+CONFIG_IP_PNP_BOOTP=y
6818+CONFIG_IP_PNP_RARP=y
6819+CONFIG_NET_IPIP=y
6820+# CONFIG_NET_IPGRE_DEMUX is not set
6821+# CONFIG_IP_MROUTE is not set
6822+# CONFIG_ARPD is not set
6823+CONFIG_SYN_COOKIES=y
6824+CONFIG_INET_AH=y
6825+CONFIG_INET_ESP=y
6826+CONFIG_INET_IPCOMP=y
6827+CONFIG_INET_XFRM_TUNNEL=y
6828+CONFIG_INET_TUNNEL=y
6829+CONFIG_INET_XFRM_MODE_TRANSPORT=y
6830+CONFIG_INET_XFRM_MODE_TUNNEL=y
6831+CONFIG_INET_XFRM_MODE_BEET=y
6832+# CONFIG_INET_LRO is not set
6833+CONFIG_INET_DIAG=y
6834+CONFIG_INET_TCP_DIAG=y
6835+# CONFIG_TCP_CONG_ADVANCED is not set
6836+CONFIG_TCP_CONG_CUBIC=y
6837+CONFIG_DEFAULT_TCP_CONG="cubic"
6838+# CONFIG_TCP_MD5SIG is not set
6839+CONFIG_IPV6=y
6840+# CONFIG_IPV6_PRIVACY is not set
6841+# CONFIG_IPV6_ROUTER_PREF is not set
6842+# CONFIG_IPV6_OPTIMISTIC_DAD is not set
6843+CONFIG_INET6_AH=y
6844+CONFIG_INET6_ESP=y
6845+CONFIG_INET6_IPCOMP=y
6846+CONFIG_IPV6_MIP6=y
6847+CONFIG_INET6_XFRM_TUNNEL=y
6848+CONFIG_INET6_TUNNEL=y
6849+CONFIG_INET6_XFRM_MODE_TRANSPORT=y
6850+CONFIG_INET6_XFRM_MODE_TUNNEL=y
6851+CONFIG_INET6_XFRM_MODE_BEET=y
6852+# CONFIG_INET6_XFRM_MODE_ROUTEOPTIMIZATION is not set
6853+CONFIG_IPV6_SIT=y
6854+# CONFIG_IPV6_SIT_6RD is not set
6855+CONFIG_IPV6_NDISC_NODETYPE=y
6856+CONFIG_IPV6_TUNNEL=y
6857+# CONFIG_IPV6_MULTIPLE_TABLES is not set
6858+# CONFIG_IPV6_MROUTE is not set
6859+CONFIG_NETWORK_SECMARK=y
6860+# CONFIG_NETWORK_PHY_TIMESTAMPING is not set
6861+CONFIG_NETFILTER=y
6862+# CONFIG_NETFILTER_DEBUG is not set
6863+CONFIG_NETFILTER_ADVANCED=y
6864+
6865+#
6866+# Core Netfilter Configuration
6867+#
6868+# CONFIG_NETFILTER_NETLINK_QUEUE is not set
6869+# CONFIG_NETFILTER_NETLINK_LOG is not set
6870+# CONFIG_NF_CONNTRACK is not set
6871+# CONFIG_NETFILTER_XTABLES is not set
6872+# CONFIG_IP_VS is not set
6873+
6874+#
6875+# IP: Netfilter Configuration
6876+#
6877+# CONFIG_NF_DEFRAG_IPV4 is not set
6878+# CONFIG_IP_NF_QUEUE is not set
6879+# CONFIG_IP_NF_IPTABLES is not set
6880+# CONFIG_IP_NF_ARPTABLES is not set
6881+
6882+#
6883+# IPv6: Netfilter Configuration
6884+#
6885+# CONFIG_NF_DEFRAG_IPV6 is not set
6886+# CONFIG_IP6_NF_QUEUE is not set
6887+# CONFIG_IP6_NF_IPTABLES is not set
6888+# CONFIG_IP_DCCP is not set
6889+# CONFIG_IP_SCTP is not set
6890+# CONFIG_RDS is not set
6891+# CONFIG_TIPC is not set
6892+# CONFIG_ATM is not set
6893+# CONFIG_L2TP is not set
6894+# CONFIG_BRIDGE is not set
6895+# CONFIG_NET_DSA is not set
6896+CONFIG_VLAN_8021Q=y
6897+# CONFIG_VLAN_8021Q_GVRP is not set
6898+# CONFIG_DECNET is not set
6899+# CONFIG_LLC2 is not set
6900+# CONFIG_IPX is not set
6901+# CONFIG_ATALK is not set
6902+# CONFIG_X25 is not set
6903+# CONFIG_LAPB is not set
6904+# CONFIG_ECONET is not set
6905+# CONFIG_WAN_ROUTER is not set
6906+# CONFIG_PHONET is not set
6907+# CONFIG_IEEE802154 is not set
6908+# CONFIG_NET_SCHED is not set
6909+# CONFIG_DCB is not set
6910+CONFIG_DNS_RESOLVER=y
6911+# CONFIG_BATMAN_ADV is not set
6912+CONFIG_RPS=y
6913+CONFIG_RFS_ACCEL=y
6914+CONFIG_XPS=y
6915+
6916+#
6917+# Network testing
6918+#
6919+# CONFIG_NET_PKTGEN is not set
6920+# CONFIG_HAMRADIO is not set
6921+# CONFIG_CAN is not set
6922+# CONFIG_IRDA is not set
6923+# CONFIG_BT is not set
6924+# CONFIG_AF_RXRPC is not set
6925+CONFIG_WIRELESS=y
6926+CONFIG_WIRELESS_EXT=y
6927+CONFIG_WEXT_CORE=y
6928+CONFIG_WEXT_PROC=y
6929+CONFIG_WEXT_PRIV=y
6930+# CONFIG_CFG80211 is not set
6931+CONFIG_WIRELESS_EXT_SYSFS=y
6932+# CONFIG_LIB80211 is not set
6933+
6934+#
6935+# CFG80211 needs to be enabled for MAC80211
6936+#
6937+# CONFIG_WIMAX is not set
6938+# CONFIG_RFKILL is not set
6939+# CONFIG_NET_9P is not set
6940+# CONFIG_CAIF is not set
6941+# CONFIG_CEPH_LIB is not set
6942+# CONFIG_NFC is not set
6943+
6944+#
6945+# Device Drivers
6946+#
6947+
6948+#
6949+# Generic Driver Options
6950+#
6951+CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug"
6952+# CONFIG_DEVTMPFS is not set
6953+CONFIG_STANDALONE=y
6954+CONFIG_PREVENT_FIRMWARE_BUILD=y
6955+CONFIG_FW_LOADER=y
6956+CONFIG_FIRMWARE_IN_KERNEL=y
6957+CONFIG_EXTRA_FIRMWARE=""
6958+CONFIG_DEBUG_DRIVER=y
6959+# CONFIG_DEBUG_DEVRES is not set
6960+# CONFIG_SYS_HYPERVISOR is not set
6961+# CONFIG_CONNECTOR is not set
6962+CONFIG_MTD=y
6963+# CONFIG_MTD_DEBUG is not set
6964+# CONFIG_MTD_TESTS is not set
6965+# CONFIG_MTD_REDBOOT_PARTS is not set
6966+CONFIG_MTD_CMDLINE_PARTS=y
6967+CONFIG_MTD_OF_PARTS=y
6968+# CONFIG_MTD_AR7_PARTS is not set
6969+
6970+#
6971+# User Modules And Translation Layers
6972+#
6973+CONFIG_MTD_CHAR=y
6974+CONFIG_MTD_BLKDEVS=y
6975+CONFIG_MTD_BLOCK=y
6976+# CONFIG_FTL is not set
6977+# CONFIG_NFTL is not set
6978+# CONFIG_INFTL is not set
6979+# CONFIG_RFD_FTL is not set
6980+# CONFIG_SSFDC is not set
6981+# CONFIG_SM_FTL is not set
6982+# CONFIG_MTD_OOPS is not set
6983+# CONFIG_MTD_SWAP is not set
6984+
6985+#
6986+# RAM/ROM/Flash chip drivers
6987+#
6988+# CONFIG_MTD_CFI is not set
6989+CONFIG_MTD_JEDECPROBE=y
6990+CONFIG_MTD_GEN_PROBE=y
6991+# CONFIG_MTD_CFI_ADV_OPTIONS is not set
6992+CONFIG_MTD_MAP_BANK_WIDTH_1=y
6993+CONFIG_MTD_MAP_BANK_WIDTH_2=y
6994+CONFIG_MTD_MAP_BANK_WIDTH_4=y
6995+# CONFIG_MTD_MAP_BANK_WIDTH_8 is not set
6996+# CONFIG_MTD_MAP_BANK_WIDTH_16 is not set
6997+# CONFIG_MTD_MAP_BANK_WIDTH_32 is not set
6998+CONFIG_MTD_CFI_I1=y
6999+CONFIG_MTD_CFI_I2=y
7000+# CONFIG_MTD_CFI_I4 is not set
7001+# CONFIG_MTD_CFI_I8 is not set
7002+# CONFIG_MTD_CFI_INTELEXT is not set
7003+CONFIG_MTD_CFI_AMDSTD=y
7004+# CONFIG_MTD_CFI_STAA is not set
7005+CONFIG_MTD_CFI_UTIL=y
7006+# CONFIG_MTD_RAM is not set
7007+# CONFIG_MTD_ROM is not set
7008+# CONFIG_MTD_ABSENT is not set
7009+
7010+#
7011+# Mapping drivers for chip access
7012+#
7013+# CONFIG_MTD_COMPLEX_MAPPINGS is not set
7014+# CONFIG_MTD_PHYSMAP is not set
7015+CONFIG_MTD_PHYSMAP_OF=y
7016+# CONFIG_MTD_INTEL_VR_NOR is not set
7017+# CONFIG_MTD_PLATRAM is not set
7018+
7019+#
7020+# Self-contained MTD device drivers
7021+#
7022+# CONFIG_MTD_PMC551 is not set
7023+# CONFIG_MTD_SLRAM is not set
7024+# CONFIG_MTD_PHRAM is not set
7025+# CONFIG_MTD_MTDRAM is not set
7026+# CONFIG_MTD_BLOCK2MTD is not set
7027+
7028+#
7029+# Disk-On-Chip Device Drivers
7030+#
7031+# CONFIG_MTD_DOC2000 is not set
7032+# CONFIG_MTD_DOC2001 is not set
7033+# CONFIG_MTD_DOC2001PLUS is not set
7034+CONFIG_MTD_NAND_ECC=y
7035+# CONFIG_MTD_NAND_ECC_SMC is not set
7036+CONFIG_MTD_NAND=y
7037+# CONFIG_MTD_NAND_VERIFY_WRITE is not set
7038+# CONFIG_MTD_NAND_ECC_BCH is not set
7039+# CONFIG_MTD_SM_COMMON is not set
7040+# CONFIG_MTD_NAND_MUSEUM_IDS is not set
7041+# CONFIG_MTD_NAND_DENALI is not set
7042+CONFIG_MTD_NAND_IDS=y
7043+# CONFIG_MTD_NAND_RICOH is not set
7044+# CONFIG_MTD_NAND_NDFC is not set
7045+# CONFIG_MTD_NAND_DISKONCHIP is not set
7046+# CONFIG_MTD_NAND_CAFE is not set
7047+# CONFIG_MTD_NAND_NANDSIM is not set
7048+CONFIG_MTD_NAND_PLATFORM=y
7049+# CONFIG_MTD_ALAUDA is not set
7050+# CONFIG_MTD_NAND_FSL_ELBC is not set
7051+# CONFIG_MTD_ONENAND is not set
7052+
7053+#
7054+# LPDDR flash memory drivers
7055+#
7056+# CONFIG_MTD_LPDDR is not set
7057+# CONFIG_MTD_UBI is not set
7058+CONFIG_DTC=y
7059+CONFIG_OF=y
7060+
7061+#
7062+# Device Tree and Open Firmware support
7063+#
7064+CONFIG_PROC_DEVICETREE=y
7065+CONFIG_OF_FLATTREE=y
7066+CONFIG_OF_EARLY_FLATTREE=y
7067+CONFIG_OF_DYNAMIC=y
7068+CONFIG_OF_ADDRESS=y
7069+CONFIG_OF_IRQ=y
7070+CONFIG_OF_DEVICE=y
7071+CONFIG_OF_GPIO=y
7072+CONFIG_OF_NET=y
7073+CONFIG_OF_PCI=y
7074+CONFIG_OF_PCI_IRQ=y
7075+# CONFIG_PARPORT is not set
7076+CONFIG_BLK_DEV=y
7077+# CONFIG_BLK_DEV_FD is not set
7078+# CONFIG_BLK_CPQ_DA is not set
7079+# CONFIG_BLK_CPQ_CISS_DA is not set
7080+# CONFIG_BLK_DEV_DAC960 is not set
7081+# CONFIG_BLK_DEV_UMEM is not set
7082+# CONFIG_BLK_DEV_COW_COMMON is not set
7083+# CONFIG_BLK_DEV_LOOP is not set
7084+
7085+#
7086+# DRBD disabled because PROC_FS, INET or CONNECTOR not selected
7087+#
7088+# CONFIG_BLK_DEV_NBD is not set
7089+# CONFIG_BLK_DEV_SX8 is not set
7090+CONFIG_BLK_DEV_UB=y
7091+CONFIG_BLK_DEV_RAM=y
7092+CONFIG_BLK_DEV_RAM_COUNT=16
7093+CONFIG_BLK_DEV_RAM_SIZE=35000
7094+# CONFIG_BLK_DEV_XIP is not set
7095+# CONFIG_BLK_DEV_ISS is not set
7096+# CONFIG_CDROM_PKTCDVD is not set
7097+# CONFIG_ATA_OVER_ETH is not set
7098+# CONFIG_XILINX_SYSACE is not set
7099+# CONFIG_BLK_DEV_HD is not set
7100+# CONFIG_BLK_DEV_RBD is not set
7101+# CONFIG_SENSORS_LIS3LV02D is not set
7102+CONFIG_MISC_DEVICES=y
7103+# CONFIG_PHANTOM is not set
7104+# CONFIG_INTEL_MID_PTI is not set
7105+# CONFIG_SGI_IOC4 is not set
7106+# CONFIG_TIFM_CORE is not set
7107+# CONFIG_ENCLOSURE_SERVICES is not set
7108+# CONFIG_HP_ILO is not set
7109+# CONFIG_PCH_PHUB is not set
7110+# CONFIG_C2PORT is not set
7111+
7112+#
7113+# EEPROM support
7114+#
7115+# CONFIG_EEPROM_93CX6 is not set
7116+# CONFIG_CB710_CORE is not set
7117+
7118+#
7119+# Texas Instruments shared transport line discipline
7120+#
7121+# CONFIG_TI_ST is not set
7122+CONFIG_HAVE_IDE=y
7123+# CONFIG_IDE is not set
7124+
7125+#
7126+# SCSI device support
7127+#
7128+CONFIG_SCSI_MOD=y
7129+# CONFIG_RAID_ATTRS is not set
7130+CONFIG_SCSI=y
7131+CONFIG_SCSI_DMA=y
7132+CONFIG_SCSI_TGT=y
7133+# CONFIG_SCSI_NETLINK is not set
7134+CONFIG_SCSI_PROC_FS=y
7135+
7136+#
7137+# SCSI support type (disk, tape, CD-ROM)
7138+#
7139+CONFIG_BLK_DEV_SD=y
7140+# CONFIG_CHR_DEV_ST is not set
7141+# CONFIG_CHR_DEV_OSST is not set
7142+# CONFIG_BLK_DEV_SR is not set
7143+# CONFIG_CHR_DEV_SG is not set
7144+# CONFIG_CHR_DEV_SCH is not set
7145+# CONFIG_SCSI_MULTI_LUN is not set
7146+CONFIG_SCSI_CONSTANTS=y
7147+# CONFIG_SCSI_LOGGING is not set
7148+# CONFIG_SCSI_SCAN_ASYNC is not set
7149+CONFIG_SCSI_WAIT_SCAN=m
7150+
7151+#
7152+# SCSI Transports
7153+#
7154+# CONFIG_SCSI_SPI_ATTRS is not set
7155+# CONFIG_SCSI_FC_ATTRS is not set
7156+# CONFIG_SCSI_ISCSI_ATTRS is not set
7157+# CONFIG_SCSI_SAS_ATTRS is not set
7158+# CONFIG_SCSI_SAS_LIBSAS is not set
7159+# CONFIG_SCSI_SRP_ATTRS is not set
7160+CONFIG_SCSI_LOWLEVEL=y
7161+# CONFIG_ISCSI_TCP is not set
7162+# CONFIG_ISCSI_BOOT_SYSFS is not set
7163+# CONFIG_SCSI_CXGB3_ISCSI is not set
7164+# CONFIG_SCSI_CXGB4_ISCSI is not set
7165+# CONFIG_SCSI_BNX2_ISCSI is not set
7166+# CONFIG_SCSI_BNX2X_FCOE is not set
7167+# CONFIG_BE2ISCSI is not set
7168+# CONFIG_BLK_DEV_3W_XXXX_RAID is not set
7169+# CONFIG_SCSI_HPSA is not set
7170+# CONFIG_SCSI_3W_9XXX is not set
7171+# CONFIG_SCSI_3W_SAS is not set
7172+# CONFIG_SCSI_ACARD is not set
7173+# CONFIG_SCSI_AACRAID is not set
7174+# CONFIG_SCSI_AIC7XXX is not set
7175+# CONFIG_SCSI_AIC7XXX_OLD is not set
7176+# CONFIG_SCSI_AIC79XX is not set
7177+# CONFIG_SCSI_AIC94XX is not set
7178+# CONFIG_SCSI_MVSAS is not set
7179+# CONFIG_SCSI_DPT_I2O is not set
7180+# CONFIG_SCSI_ADVANSYS is not set
7181+# CONFIG_SCSI_ARCMSR is not set
7182+# CONFIG_MEGARAID_NEWGEN is not set
7183+# CONFIG_MEGARAID_LEGACY is not set
7184+# CONFIG_MEGARAID_SAS is not set
7185+# CONFIG_SCSI_MPT2SAS is not set
7186+# CONFIG_SCSI_HPTIOP is not set
7187+# CONFIG_SCSI_BUSLOGIC is not set
7188+# CONFIG_LIBFC is not set
7189+# CONFIG_LIBFCOE is not set
7190+# CONFIG_FCOE is not set
7191+# CONFIG_SCSI_DMX3191D is not set
7192+# CONFIG_SCSI_EATA is not set
7193+# CONFIG_SCSI_FUTURE_DOMAIN is not set
7194+# CONFIG_SCSI_GDTH is not set
7195+# CONFIG_SCSI_IPS is not set
7196+# CONFIG_SCSI_INITIO is not set
7197+# CONFIG_SCSI_INIA100 is not set
7198+# CONFIG_SCSI_STEX is not set
7199+# CONFIG_SCSI_SYM53C8XX_2 is not set
7200+# CONFIG_SCSI_QLOGIC_1280 is not set
7201+# CONFIG_SCSI_QLA_FC is not set
7202+# CONFIG_SCSI_QLA_ISCSI is not set
7203+# CONFIG_SCSI_LPFC is not set
7204+# CONFIG_SCSI_DC395x is not set
7205+# CONFIG_SCSI_DC390T is not set
7206+# CONFIG_SCSI_NSP32 is not set
7207+# CONFIG_SCSI_DEBUG is not set
7208+# CONFIG_SCSI_PMCRAID is not set
7209+# CONFIG_SCSI_PM8001 is not set
7210+# CONFIG_SCSI_SRP is not set
7211+# CONFIG_SCSI_BFA_FC is not set
7212+# CONFIG_SCSI_DH is not set
7213+# CONFIG_SCSI_OSD_INITIATOR is not set
7214+# CONFIG_ATA is not set
7215+CONFIG_MD=y
7216+CONFIG_BLK_DEV_MD=y
7217+CONFIG_MD_AUTODETECT=y
7218+CONFIG_MD_LINEAR=y
7219+CONFIG_MD_RAID0=y
7220+CONFIG_MD_RAID1=y
7221+CONFIG_MD_RAID10=y
7222+# CONFIG_MD_RAID456 is not set
7223+CONFIG_MD_MULTIPATH=y
7224+CONFIG_MD_FAULTY=y
7225+CONFIG_BLK_DEV_DM=y
7226+# CONFIG_DM_DEBUG is not set
7227+CONFIG_DM_CRYPT=y
7228+CONFIG_DM_SNAPSHOT=y
7229+CONFIG_DM_MIRROR=y
7230+# CONFIG_DM_RAID is not set
7231+# CONFIG_DM_LOG_USERSPACE is not set
7232+CONFIG_DM_ZERO=y
7233+# CONFIG_DM_MULTIPATH is not set
7234+# CONFIG_DM_DELAY is not set
7235+# CONFIG_DM_UEVENT is not set
7236+# CONFIG_DM_FLAKEY is not set
7237+# CONFIG_TARGET_CORE is not set
7238+# CONFIG_FUSION is not set
7239+
7240+#
7241+# IEEE 1394 (FireWire) support
7242+#
7243+# CONFIG_FIREWIRE is not set
7244+# CONFIG_FIREWIRE_NOSY is not set
7245+# CONFIG_I2O is not set
7246+# CONFIG_MACINTOSH_DRIVERS is not set
7247+CONFIG_NETDEVICES=y
7248+CONFIG_DUMMY=y
7249+# CONFIG_BONDING is not set
7250+# CONFIG_MACVLAN is not set
7251+# CONFIG_EQUALIZER is not set
7252+CONFIG_TUN=y
7253+# CONFIG_VETH is not set
7254+# CONFIG_ARCNET is not set
7255+CONFIG_MII=y
7256+# CONFIG_PHYLIB is not set
7257+CONFIG_NET_ETHERNET=y
7258+# CONFIG_HAPPYMEAL is not set
7259+# CONFIG_SUNGEM is not set
7260+# CONFIG_CASSINI is not set
7261+# CONFIG_NET_VENDOR_3COM is not set
7262+# CONFIG_ETHOC is not set
7263+# CONFIG_DNET is not set
7264+# CONFIG_NET_TULIP is not set
7265+# CONFIG_HP100 is not set
7266+# CONFIG_IBM_NEW_EMAC is not set
7267+CONFIG_IBM_NEW_EMAC_ZMII=y
7268+# CONFIG_IBM_NEW_EMAC_RGMII is not set
7269+# CONFIG_IBM_NEW_EMAC_TAH is not set
7270+# CONFIG_IBM_NEW_EMAC_EMAC4 is not set
7271+# CONFIG_IBM_NEW_EMAC_NO_FLOW_CTRL is not set
7272+# CONFIG_IBM_NEW_EMAC_MAL_CLR_ICINTSTAT is not set
7273+# CONFIG_IBM_NEW_EMAC_MAL_COMMON_ERR is not set
7274+# CONFIG_NET_PCI is not set
7275+# CONFIG_B44 is not set
7276+# CONFIG_KS8842 is not set
7277+# CONFIG_KS8851_MLL is not set
7278+# CONFIG_ATL2 is not set
7279+# CONFIG_XILINX_EMACLITE is not set
7280+CONFIG_NETDEV_1000=y
7281+# CONFIG_ACENIC is not set
7282+# CONFIG_DL2K is not set
7283+CONFIG_E1000=y
7284+CONFIG_E1000E=y
7285+# CONFIG_IP1000 is not set
7286+CONFIG_IGB=y
7287+CONFIG_IGBVF=y
7288+# CONFIG_NS83820 is not set
7289+# CONFIG_HAMACHI is not set
7290+# CONFIG_YELLOWFIN is not set
7291+# CONFIG_R8169 is not set
7292+# CONFIG_SIS190 is not set
7293+# CONFIG_SKGE is not set
7294+# CONFIG_SKY2 is not set
7295+# CONFIG_VIA_VELOCITY is not set
7296+# CONFIG_TIGON3 is not set
7297+# CONFIG_BNX2 is not set
7298+# CONFIG_CNIC is not set
7299+# CONFIG_MV643XX_ETH is not set
7300+# CONFIG_XILINX_LL_TEMAC is not set
7301+# CONFIG_QLA3XXX is not set
7302+# CONFIG_ATL1 is not set
7303+# CONFIG_ATL1E is not set
7304+# CONFIG_ATL1C is not set
7305+# CONFIG_JME is not set
7306+# CONFIG_STMMAC_ETH is not set
7307+# CONFIG_PCH_GBE is not set
7308+# CONFIG_NETDEV_10000 is not set
7309+# CONFIG_TR is not set
7310+CONFIG_WLAN=y
7311+# CONFIG_AIRO is not set
7312+# CONFIG_ATMEL is not set
7313+# CONFIG_PRISM54 is not set
7314+CONFIG_USB_ZD1201=y
7315+# CONFIG_HOSTAP is not set
7316+
7317+#
7318+# Enable WiMAX (Networking options) to see the WiMAX drivers
7319+#
7320+
7321+#
7322+# USB Network Adapters
7323+#
7324+# CONFIG_USB_CATC is not set
7325+# CONFIG_USB_KAWETH is not set
7326+# CONFIG_USB_PEGASUS is not set
7327+# CONFIG_USB_RTL8150 is not set
7328+# CONFIG_USB_USBNET is not set
7329+# CONFIG_USB_IPHETH is not set
7330+# CONFIG_WAN is not set
7331+
7332+#
7333+# CAIF transport drivers
7334+#
7335+# CONFIG_RIONET is not set
7336+# CONFIG_FDDI is not set
7337+# CONFIG_HIPPI is not set
7338+CONFIG_PPP=m
7339+CONFIG_PPP_MULTILINK=y
7340+CONFIG_PPP_FILTER=y
7341+CONFIG_PPP_ASYNC=m
7342+CONFIG_PPP_SYNC_TTY=m
7343+CONFIG_PPP_DEFLATE=m
7344+CONFIG_PPP_BSDCOMP=m
7345+# CONFIG_PPP_MPPE is not set
7346+CONFIG_PPPOE=m
7347+CONFIG_SLIP=m
7348+CONFIG_SLIP_COMPRESSED=y
7349+CONFIG_SLHC=m
7350+CONFIG_SLIP_SMART=y
7351+CONFIG_SLIP_MODE_SLIP6=y
7352+# CONFIG_NET_FC is not set
7353+CONFIG_NETCONSOLE=y
7354+CONFIG_NETPOLL=y
7355+CONFIG_NETPOLL_TRAP=y
7356+CONFIG_NET_POLL_CONTROLLER=y
7357+# CONFIG_VMXNET3 is not set
7358+# CONFIG_ISDN is not set
7359+# CONFIG_PHONE is not set
7360+
7361+#
7362+# Input device support
7363+#
7364+CONFIG_INPUT=y
7365+# CONFIG_INPUT_FF_MEMLESS is not set
7366+# CONFIG_INPUT_POLLDEV is not set
7367+# CONFIG_INPUT_SPARSEKMAP is not set
7368+
7369+#
7370+# Userland interfaces
7371+#
7372+CONFIG_INPUT_MOUSEDEV=y
7373+CONFIG_INPUT_MOUSEDEV_PSAUX=y
7374+CONFIG_INPUT_MOUSEDEV_SCREEN_X=1024
7375+CONFIG_INPUT_MOUSEDEV_SCREEN_Y=768
7376+# CONFIG_INPUT_JOYDEV is not set
7377+# CONFIG_INPUT_EVDEV is not set
7378+# CONFIG_INPUT_EVBUG is not set
7379+
7380+#
7381+# Input Device Drivers
7382+#
7383+# CONFIG_INPUT_KEYBOARD is not set
7384+# CONFIG_INPUT_MOUSE is not set
7385+# CONFIG_INPUT_JOYSTICK is not set
7386+# CONFIG_INPUT_TABLET is not set
7387+# CONFIG_INPUT_TOUCHSCREEN is not set
7388+# CONFIG_INPUT_MISC is not set
7389+
7390+#
7391+# Hardware I/O ports
7392+#
7393+CONFIG_SERIO=y
7394+CONFIG_SERIO_I8042=y
7395+CONFIG_SERIO_SERPORT=y
7396+# CONFIG_SERIO_PCIPS2 is not set
7397+CONFIG_SERIO_LIBPS2=y
7398+# CONFIG_SERIO_RAW is not set
7399+# CONFIG_SERIO_XILINX_XPS_PS2 is not set
7400+# CONFIG_SERIO_ALTERA_PS2 is not set
7401+# CONFIG_SERIO_PS2MULT is not set
7402+# CONFIG_GAMEPORT is not set
7403+
7404+#
7405+# Character devices
7406+#
7407+CONFIG_VT=y
7408+CONFIG_CONSOLE_TRANSLATIONS=y
7409+CONFIG_VT_CONSOLE=y
7410+CONFIG_HW_CONSOLE=y
7411+# CONFIG_VT_HW_CONSOLE_BINDING is not set
7412+CONFIG_UNIX98_PTYS=y
7413+# CONFIG_DEVPTS_MULTIPLE_INSTANCES is not set
7414+CONFIG_LEGACY_PTYS=y
7415+CONFIG_LEGACY_PTY_COUNT=20
7416+# CONFIG_SERIAL_NONSTANDARD is not set
7417+# CONFIG_NOZOMI is not set
7418+CONFIG_N_GSM=y
7419+# CONFIG_TRACE_SINK is not set
7420+CONFIG_DEVKMEM=y
7421+
7422+#
7423+# Serial drivers
7424+#
7425+# CONFIG_SERIAL_8250 is not set
7426+
7427+#
7428+# Non-8250 serial port support
7429+#
7430+# CONFIG_SERIAL_MFD_HSU is not set
7431+# CONFIG_SERIAL_UARTLITE is not set
7432+CONFIG_SERIAL_CORE=y
7433+CONFIG_SERIAL_CORE_CONSOLE=y
7434+# CONFIG_SERIAL_JSM is not set
7435+# CONFIG_SERIAL_OF_PLATFORM_NWPSERIAL is not set
7436+# CONFIG_SERIAL_TIMBERDALE is not set
7437+# CONFIG_SERIAL_ALTERA_JTAGUART is not set
7438+# CONFIG_SERIAL_ALTERA_UART is not set
7439+# CONFIG_SERIAL_PCH_UART is not set
7440+# CONFIG_SERIAL_XILINX_PS_UART is not set
7441+# CONFIG_TTY_PRINTK is not set
7442+# CONFIG_HVC_UDBG is not set
7443+# CONFIG_IPMI_HANDLER is not set
7444+# CONFIG_HW_RANDOM is not set
7445+# CONFIG_NVRAM is not set
7446+# CONFIG_R3964 is not set
7447+# CONFIG_APPLICOM is not set
7448+# CONFIG_RAW_DRIVER is not set
7449+# CONFIG_TCG_TPM is not set
7450+CONFIG_DEVPORT=y
7451+# CONFIG_RAMOOPS is not set
7452+# CONFIG_I2C is not set
7453+# CONFIG_SPI is not set
7454+
7455+#
7456+# PPS support
7457+#
7458+# CONFIG_PPS is not set
7459+
7460+#
7461+# PPS generators support
7462+#
7463+
7464+#
7465+# PTP clock support
7466+#
7467+
7468+#
7469+# Enable Device Drivers -> PPS to see the PTP clock options.
7470+#
7471+CONFIG_ARCH_WANT_OPTIONAL_GPIOLIB=y
7472+CONFIG_ARCH_REQUIRE_GPIOLIB=y
7473+CONFIG_GPIOLIB=y
7474+# CONFIG_DEBUG_GPIO is not set
7475+CONFIG_GPIO_SYSFS=y
7476+
7477+#
7478+# Memory mapped GPIO drivers:
7479+#
7480+# CONFIG_GPIO_GENERIC_PLATFORM is not set
7481+# CONFIG_GPIO_IT8761E is not set
7482+# CONFIG_GPIO_XILINX is not set
7483+
7484+#
7485+# I2C GPIO expanders:
7486+#
7487+
7488+#
7489+# PCI GPIO expanders:
7490+#
7491+# CONFIG_GPIO_BT8XX is not set
7492+# CONFIG_GPIO_ML_IOH is not set
7493+# CONFIG_GPIO_RDC321X is not set
7494+
7495+#
7496+# SPI GPIO expanders:
7497+#
7498+
7499+#
7500+# AC97 GPIO expanders:
7501+#
7502+
7503+#
7504+# MODULbus GPIO expanders:
7505+#
7506+# CONFIG_W1 is not set
7507+# CONFIG_POWER_SUPPLY is not set
7508+# CONFIG_HWMON is not set
7509+CONFIG_THERMAL=y
7510+# CONFIG_WATCHDOG is not set
7511+CONFIG_SSB_POSSIBLE=y
7512+
7513+#
7514+# Sonics Silicon Backplane
7515+#
7516+# CONFIG_SSB is not set
7517+CONFIG_BCMA_POSSIBLE=y
7518+
7519+#
7520+# Broadcom specific AMBA
7521+#
7522+# CONFIG_BCMA is not set
7523+# CONFIG_MFD_SUPPORT is not set
7524+# CONFIG_REGULATOR is not set
7525+# CONFIG_MEDIA_SUPPORT is not set
7526+
7527+#
7528+# Graphics support
7529+#
7530+# CONFIG_AGP is not set
7531+# CONFIG_VGA_ARB is not set
7532+# CONFIG_DRM is not set
7533+# CONFIG_STUB_POULSBO is not set
7534+# CONFIG_VGASTATE is not set
7535+# CONFIG_VIDEO_OUTPUT_CONTROL is not set
7536+# CONFIG_FB is not set
7537+# CONFIG_BACKLIGHT_LCD_SUPPORT is not set
7538+
7539+#
7540+# Display device support
7541+#
7542+# CONFIG_DISPLAY_SUPPORT is not set
7543+
7544+#
7545+# Console display driver support
7546+#
7547+CONFIG_DUMMY_CONSOLE=y
7548+# CONFIG_SOUND is not set
7549+CONFIG_HID_SUPPORT=y
7550+CONFIG_HID=y
7551+CONFIG_HIDRAW=y
7552+
7553+#
7554+# USB Input Devices
7555+#
7556+CONFIG_USB_HID=y
7557+CONFIG_HID_PID=y
7558+CONFIG_USB_HIDDEV=y
7559+
7560+#
7561+# Special HID drivers
7562+#
7563+CONFIG_HID_A4TECH=y
7564+# CONFIG_HID_ACRUX is not set
7565+CONFIG_HID_APPLE=y
7566+# CONFIG_HID_BELKIN is not set
7567+# CONFIG_HID_CHERRY is not set
7568+# CONFIG_HID_CHICONY is not set
7569+# CONFIG_HID_CYPRESS is not set
7570+# CONFIG_HID_DRAGONRISE is not set
7571+# CONFIG_HID_EMS_FF is not set
7572+# CONFIG_HID_EZKEY is not set
7573+# CONFIG_HID_HOLTEK is not set
7574+# CONFIG_HID_KEYTOUCH is not set
7575+# CONFIG_HID_KYE is not set
7576+# CONFIG_HID_UCLOGIC is not set
7577+# CONFIG_HID_WALTOP is not set
7578+# CONFIG_HID_GYRATION is not set
7579+# CONFIG_HID_TWINHAN is not set
7580+# CONFIG_HID_KENSINGTON is not set
7581+# CONFIG_HID_LCPOWER is not set
7582+# CONFIG_HID_LOGITECH is not set
7583+# CONFIG_HID_MICROSOFT is not set
7584+# CONFIG_HID_MONTEREY is not set
7585+# CONFIG_HID_MULTITOUCH is not set
7586+# CONFIG_HID_NTRIG is not set
7587+# CONFIG_HID_ORTEK is not set
7588+# CONFIG_HID_PANTHERLORD is not set
7589+# CONFIG_HID_PETALYNX is not set
7590+# CONFIG_HID_PICOLCD is not set
7591+# CONFIG_HID_QUANTA is not set
7592+# CONFIG_HID_ROCCAT is not set
7593+# CONFIG_HID_SAMSUNG is not set
7594+# CONFIG_HID_SONY is not set
7595+# CONFIG_HID_SPEEDLINK is not set
7596+# CONFIG_HID_SUNPLUS is not set
7597+# CONFIG_HID_GREENASIA is not set
7598+# CONFIG_HID_SMARTJOYPLUS is not set
7599+# CONFIG_HID_TOPSEED is not set
7600+# CONFIG_HID_THRUSTMASTER is not set
7601+# CONFIG_HID_ZEROPLUS is not set
7602+# CONFIG_HID_ZYDACRON is not set
7603+CONFIG_USB_SUPPORT=y
7604+CONFIG_USB_ARCH_HAS_HCD=y
7605+CONFIG_USB_ARCH_HAS_OHCI=y
7606+CONFIG_USB_ARCH_HAS_EHCI=y
7607+CONFIG_USB=y
7608+# CONFIG_USB_DEBUG is not set
7609+CONFIG_USB_ANNOUNCE_NEW_DEVICES=y
7610+
7611+#
7612+# Miscellaneous USB options
7613+#
7614+CONFIG_USB_DEVICEFS=y
7615+CONFIG_USB_DEVICE_CLASS=y
7616+CONFIG_USB_DYNAMIC_MINORS=y
7617+# CONFIG_USB_OTG_WHITELIST is not set
7618+# CONFIG_USB_OTG_BLACKLIST_HUB is not set
7619+CONFIG_USB_MON=y
7620+# CONFIG_USB_WUSB is not set
7621+# CONFIG_USB_WUSB_CBAF is not set
7622+
7623+#
7624+# USB Host Controller Drivers
7625+#
7626+# CONFIG_USB_C67X00_HCD is not set
7627+# CONFIG_USB_XHCI_HCD is not set
7628+CONFIG_USB_EHCI_HCD=y
7629+CONFIG_USB_EHCI_ROOT_HUB_TT=y
7630+# CONFIG_USB_EHCI_TT_NEWSCHED is not set
7631+CONFIG_USB_EHCI_BIG_ENDIAN_MMIO=y
7632+CONFIG_USB_EHCI_BIG_ENDIAN_DESC=y
7633+CONFIG_XPS_USB_HCD_XILINX=y
7634+# CONFIG_USB_EHCI_HCD_PPC_OF is not set
7635+# CONFIG_USB_OXU210HP_HCD is not set
7636+CONFIG_USB_CI13612_HCD=y
7637+# CONFIG_USB_ISP116X_HCD is not set
7638+# CONFIG_USB_ISP1760_HCD is not set
7639+# CONFIG_USB_ISP1362_HCD is not set
7640+# CONFIG_USB_OHCI_HCD is not set
7641+# CONFIG_USB_UHCI_HCD is not set
7642+# CONFIG_USB_SL811_HCD is not set
7643+# CONFIG_USB_R8A66597_HCD is not set
7644+# CONFIG_USB_WHCI_HCD is not set
7645+# CONFIG_USB_HWA_HCD is not set
7646+
7647+#
7648+# USB Device Class drivers
7649+#
7650+# CONFIG_USB_ACM is not set
7651+# CONFIG_USB_PRINTER is not set
7652+# CONFIG_USB_WDM is not set
7653+# CONFIG_USB_TMC is not set
7654+
7655+#
7656+# NOTE: USB_STORAGE depends on SCSI but BLK_DEV_SD may
7657+#
7658+
7659+#
7660+# also be needed; see USB_STORAGE Help for more info
7661+#
7662+CONFIG_USB_STORAGE=y
7663+# CONFIG_USB_STORAGE_DEBUG is not set
7664+# CONFIG_USB_STORAGE_REALTEK is not set
7665+# CONFIG_USB_STORAGE_DATAFAB is not set
7666+# CONFIG_USB_STORAGE_FREECOM is not set
7667+# CONFIG_USB_STORAGE_ISD200 is not set
7668+# CONFIG_USB_STORAGE_USBAT is not set
7669+# CONFIG_USB_STORAGE_SDDR09 is not set
7670+# CONFIG_USB_STORAGE_SDDR55 is not set
7671+# CONFIG_USB_STORAGE_JUMPSHOT is not set
7672+# CONFIG_USB_STORAGE_ALAUDA is not set
7673+# CONFIG_USB_STORAGE_ONETOUCH is not set
7674+# CONFIG_USB_STORAGE_KARMA is not set
7675+# CONFIG_USB_STORAGE_CYPRESS_ATACB is not set
7676+# CONFIG_USB_STORAGE_ENE_UB6250 is not set
7677+# CONFIG_USB_UAS is not set
7678+CONFIG_USB_LIBUSUAL=y
7679+
7680+#
7681+# USB Imaging devices
7682+#
7683+# CONFIG_USB_MDC800 is not set
7684+# CONFIG_USB_MICROTEK is not set
7685+
7686+#
7687+# USB port drivers
7688+#
7689+# CONFIG_USB_SERIAL is not set
7690+
7691+#
7692+# USB Miscellaneous drivers
7693+#
7694+# CONFIG_USB_EMI62 is not set
7695+# CONFIG_USB_EMI26 is not set
7696+# CONFIG_USB_ADUTUX is not set
7697+# CONFIG_USB_SEVSEG is not set
7698+# CONFIG_USB_RIO500 is not set
7699+# CONFIG_USB_LEGOTOWER is not set
7700+# CONFIG_USB_LCD is not set
7701+# CONFIG_USB_LED is not set
7702+# CONFIG_USB_CYPRESS_CY7C63 is not set
7703+# CONFIG_USB_CYTHERM is not set
7704+# CONFIG_USB_IDMOUSE is not set
7705+# CONFIG_USB_FTDI_ELAN is not set
7706+# CONFIG_USB_APPLEDISPLAY is not set
7707+# CONFIG_USB_SISUSBVGA is not set
7708+# CONFIG_USB_LD is not set
7709+# CONFIG_USB_TRANCEVIBRATOR is not set
7710+# CONFIG_USB_IOWARRIOR is not set
7711+# CONFIG_USB_TEST is not set
7712+# CONFIG_USB_ISIGHTFW is not set
7713+# CONFIG_USB_YUREX is not set
7714+# CONFIG_USB_GADGET is not set
7715+
7716+#
7717+# OTG and related infrastructure
7718+#
7719+# CONFIG_USB_GPIO_VBUS is not set
7720+# CONFIG_NOP_USB_XCEIV is not set
7721+# CONFIG_UWB is not set
7722+# CONFIG_MMC is not set
7723+# CONFIG_MEMSTICK is not set
7724+# CONFIG_NEW_LEDS is not set
7725+# CONFIG_ACCESSIBILITY is not set
7726+# CONFIG_INFINIBAND is not set
7727+# CONFIG_EDAC is not set
7728+CONFIG_RTC_LIB=y
7729+CONFIG_RTC_CLASS=y
7730+CONFIG_RTC_HCTOSYS=y
7731+CONFIG_RTC_HCTOSYS_DEVICE="rtc0"
7732+# CONFIG_RTC_DEBUG is not set
7733+
7734+#
7735+# RTC interfaces
7736+#
7737+CONFIG_RTC_INTF_SYSFS=y
7738+CONFIG_RTC_INTF_PROC=y
7739+CONFIG_RTC_INTF_DEV=y
7740+# CONFIG_RTC_INTF_DEV_UIE_EMUL is not set
7741+# CONFIG_RTC_DRV_TEST is not set
7742+
7743+#
7744+# SPI RTC drivers
7745+#
7746+
7747+#
7748+# Platform RTC drivers
7749+#
7750+# CONFIG_RTC_DRV_CMOS is not set
7751+# CONFIG_RTC_DRV_DS1286 is not set
7752+# CONFIG_RTC_DRV_DS1511 is not set
7753+# CONFIG_RTC_DRV_DS1553 is not set
7754+CONFIG_RTC_DRV_DS1742=y
7755+# CONFIG_RTC_DRV_STK17TA8 is not set
7756+# CONFIG_RTC_DRV_M48T86 is not set
7757+# CONFIG_RTC_DRV_M48T35 is not set
7758+# CONFIG_RTC_DRV_M48T59 is not set
7759+# CONFIG_RTC_DRV_MSM6242 is not set
7760+# CONFIG_RTC_DRV_BQ4802 is not set
7761+# CONFIG_RTC_DRV_RP5C01 is not set
7762+# CONFIG_RTC_DRV_V3020 is not set
7763+
7764+#
7765+# on-CPU RTC drivers
7766+#
7767+# CONFIG_RTC_DRV_GENERIC is not set
7768+CONFIG_DMADEVICES=y
7769+CONFIG_DMADEVICES_DEBUG=y
7770+CONFIG_DMADEVICES_VDEBUG=y
7771+
7772+#
7773+# DMA Devices
7774+#
7775+# CONFIG_TIMB_DMA is not set
7776+CONFIG_LSI_DMA=y
7777+CONFIG_DMA_ENGINE=y
7778+
7779+#
7780+# DMA Clients
7781+#
7782+# CONFIG_NET_DMA is not set
7783+# CONFIG_ASYNC_TX_DMA is not set
7784+CONFIG_DMATEST=m
7785+# CONFIG_AUXDISPLAY is not set
7786+# CONFIG_UIO is not set
7787+
7788+#
7789+# Virtio drivers
7790+#
7791+# CONFIG_VIRTIO_PCI is not set
7792+# CONFIG_VIRTIO_BALLOON is not set
7793+# CONFIG_STAGING is not set
7794+CONFIG_IOMMU_SUPPORT=y
7795+# CONFIG_VIRT_DRIVERS is not set
7796+
7797+#
7798+# LSI Drivers (APP3, APP3K, and ACP)
7799+#
7800+CONFIG_SERIAL_ACP=y
7801+CONFIG_SERIAL_ACP_CONSOLE=y
7802+# CONFIG_SERIAL_ACP_CONSOLE_POLL is not set
7803+CONFIG_LSI_NET=y
7804+CONFIG_LSI_NET_NUM_RX_DESC=16
7805+CONFIG_LSI_NET_RX_BUF_SZ=131072
7806+CONFIG_LSI_NET_NUM_TX_DESC=8
7807+CONFIG_LSI_NET_TX_BUF_SZ=65536
7808+CONFIG_LSI_NAND=y
7809+CONFIG_LSI_UBOOTENV=y
7810+CONFIG_LSI_PLX_PCIE_BRIDGE=y
7811+
7812+#
7813+# File systems
7814+#
7815+CONFIG_EXT2_FS=y
7816+# CONFIG_EXT2_FS_XATTR is not set
7817+# CONFIG_EXT2_FS_XIP is not set
7818+CONFIG_EXT3_FS=y
7819+CONFIG_EXT3_DEFAULTS_TO_ORDERED=y
7820+CONFIG_EXT3_FS_XATTR=y
7821+# CONFIG_EXT3_FS_POSIX_ACL is not set
7822+# CONFIG_EXT3_FS_SECURITY is not set
7823+CONFIG_EXT4_FS=y
7824+CONFIG_EXT4_FS_XATTR=y
7825+# CONFIG_EXT4_FS_POSIX_ACL is not set
7826+# CONFIG_EXT4_FS_SECURITY is not set
7827+# CONFIG_EXT4_DEBUG is not set
7828+CONFIG_JBD=y
7829+# CONFIG_JBD_DEBUG is not set
7830+CONFIG_JBD2=y
7831+# CONFIG_JBD2_DEBUG is not set
7832+CONFIG_FS_MBCACHE=y
7833+# CONFIG_REISERFS_FS is not set
7834+# CONFIG_JFS_FS is not set
7835+# CONFIG_XFS_FS is not set
7836+# CONFIG_GFS2_FS is not set
7837+# CONFIG_OCFS2_FS is not set
7838+# CONFIG_BTRFS_FS is not set
7839+# CONFIG_NILFS2_FS is not set
7840+CONFIG_FS_POSIX_ACL=y
7841+CONFIG_EXPORTFS=m
7842+CONFIG_FILE_LOCKING=y
7843+CONFIG_FSNOTIFY=y
7844+CONFIG_DNOTIFY=y
7845+CONFIG_INOTIFY_USER=y
7846+CONFIG_FANOTIFY=y
7847+# CONFIG_QUOTA is not set
7848+# CONFIG_QUOTACTL is not set
7849+CONFIG_AUTOFS4_FS=y
7850+# CONFIG_FUSE_FS is not set
7851+
7852+#
7853+# Caches
7854+#
7855+# CONFIG_FSCACHE is not set
7856+
7857+#
7858+# CD-ROM/DVD Filesystems
7859+#
7860+# CONFIG_ISO9660_FS is not set
7861+# CONFIG_UDF_FS is not set
7862+
7863+#
7864+# DOS/FAT/NT Filesystems
7865+#
7866+CONFIG_FAT_FS=y
7867+CONFIG_MSDOS_FS=y
7868+CONFIG_VFAT_FS=y
7869+CONFIG_FAT_DEFAULT_CODEPAGE=437
7870+CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1"
7871+CONFIG_NTFS_FS=m
7872+# CONFIG_NTFS_DEBUG is not set
7873+CONFIG_NTFS_RW=y
7874+
7875+#
7876+# Pseudo filesystems
7877+#
7878+CONFIG_PROC_FS=y
7879+# CONFIG_PROC_KCORE is not set
7880+CONFIG_PROC_SYSCTL=y
7881+CONFIG_PROC_PAGE_MONITOR=y
7882+CONFIG_SYSFS=y
7883+CONFIG_TMPFS=y
7884+# CONFIG_TMPFS_POSIX_ACL is not set
7885+# CONFIG_TMPFS_XATTR is not set
7886+# CONFIG_HUGETLB_PAGE is not set
7887+CONFIG_CONFIGFS_FS=m
7888+CONFIG_MISC_FILESYSTEMS=y
7889+# CONFIG_ADFS_FS is not set
7890+# CONFIG_AFFS_FS is not set
7891+# CONFIG_ECRYPT_FS is not set
7892+# CONFIG_HFS_FS is not set
7893+# CONFIG_HFSPLUS_FS is not set
7894+# CONFIG_BEFS_FS is not set
7895+# CONFIG_BFS_FS is not set
7896+# CONFIG_EFS_FS is not set
7897+CONFIG_JFFS2_FS=y
7898+CONFIG_JFFS2_FS_DEBUG=0
7899+CONFIG_JFFS2_FS_WRITEBUFFER=y
7900+# CONFIG_JFFS2_FS_WBUF_VERIFY is not set
7901+# CONFIG_JFFS2_SUMMARY is not set
7902+# CONFIG_JFFS2_FS_XATTR is not set
7903+# CONFIG_JFFS2_COMPRESSION_OPTIONS is not set
7904+CONFIG_JFFS2_ZLIB=y
7905+# CONFIG_JFFS2_LZO is not set
7906+CONFIG_JFFS2_RTIME=y
7907+# CONFIG_JFFS2_RUBIN is not set
7908+# CONFIG_LOGFS is not set
7909+# CONFIG_CRAMFS is not set
7910+# CONFIG_SQUASHFS is not set
7911+# CONFIG_VXFS_FS is not set
7912+# CONFIG_MINIX_FS is not set
7913+# CONFIG_OMFS_FS is not set
7914+# CONFIG_HPFS_FS is not set
7915+# CONFIG_QNX4FS_FS is not set
7916+# CONFIG_ROMFS_FS is not set
7917+# CONFIG_PSTORE is not set
7918+# CONFIG_SYSV_FS is not set
7919+# CONFIG_UFS_FS is not set
7920+CONFIG_NETWORK_FILESYSTEMS=y
7921+CONFIG_NFS_FS=y
7922+CONFIG_NFS_V3=y
7923+# CONFIG_NFS_V3_ACL is not set
7924+# CONFIG_NFS_V4 is not set
7925+CONFIG_ROOT_NFS=y
7926+CONFIG_NFSD=m
7927+CONFIG_NFSD_V3=y
7928+# CONFIG_NFSD_V3_ACL is not set
7929+CONFIG_NFSD_V4=y
7930+CONFIG_LOCKD=y
7931+CONFIG_LOCKD_V4=y
7932+CONFIG_NFS_COMMON=y
7933+CONFIG_SUNRPC=y
7934+CONFIG_SUNRPC_GSS=m
7935+# CONFIG_CEPH_FS is not set
7936+# CONFIG_CIFS is not set
7937+# CONFIG_NCP_FS is not set
7938+# CONFIG_CODA_FS is not set
7939+# CONFIG_AFS_FS is not set
7940+
7941+#
7942+# Partition Types
7943+#
7944+# CONFIG_PARTITION_ADVANCED is not set
7945+CONFIG_MSDOS_PARTITION=y
7946+CONFIG_NLS=y
7947+CONFIG_NLS_DEFAULT="iso8859-1"
7948+CONFIG_NLS_CODEPAGE_437=y
7949+# CONFIG_NLS_CODEPAGE_737 is not set
7950+# CONFIG_NLS_CODEPAGE_775 is not set
7951+CONFIG_NLS_CODEPAGE_850=y
7952+# CONFIG_NLS_CODEPAGE_852 is not set
7953+# CONFIG_NLS_CODEPAGE_855 is not set
7954+# CONFIG_NLS_CODEPAGE_857 is not set
7955+# CONFIG_NLS_CODEPAGE_860 is not set
7956+# CONFIG_NLS_CODEPAGE_861 is not set
7957+# CONFIG_NLS_CODEPAGE_862 is not set
7958+# CONFIG_NLS_CODEPAGE_863 is not set
7959+# CONFIG_NLS_CODEPAGE_864 is not set
7960+CONFIG_NLS_CODEPAGE_865=y
7961+# CONFIG_NLS_CODEPAGE_866 is not set
7962+# CONFIG_NLS_CODEPAGE_869 is not set
7963+# CONFIG_NLS_CODEPAGE_936 is not set
7964+# CONFIG_NLS_CODEPAGE_950 is not set
7965+# CONFIG_NLS_CODEPAGE_932 is not set
7966+# CONFIG_NLS_CODEPAGE_949 is not set
7967+# CONFIG_NLS_CODEPAGE_874 is not set
7968+# CONFIG_NLS_ISO8859_8 is not set
7969+# CONFIG_NLS_CODEPAGE_1250 is not set
7970+# CONFIG_NLS_CODEPAGE_1251 is not set
7971+CONFIG_NLS_ASCII=y
7972+CONFIG_NLS_ISO8859_1=y
7973+# CONFIG_NLS_ISO8859_2 is not set
7974+# CONFIG_NLS_ISO8859_3 is not set
7975+# CONFIG_NLS_ISO8859_4 is not set
7976+# CONFIG_NLS_ISO8859_5 is not set
7977+# CONFIG_NLS_ISO8859_6 is not set
7978+# CONFIG_NLS_ISO8859_7 is not set
7979+# CONFIG_NLS_ISO8859_9 is not set
7980+# CONFIG_NLS_ISO8859_13 is not set
7981+# CONFIG_NLS_ISO8859_14 is not set
7982+# CONFIG_NLS_ISO8859_15 is not set
7983+# CONFIG_NLS_KOI8_R is not set
7984+# CONFIG_NLS_KOI8_U is not set
7985+# CONFIG_NLS_UTF8 is not set
7986+# CONFIG_DLM is not set
7987+# CONFIG_BINARY_PRINTF is not set
7988+
7989+#
7990+# Library routines
7991+#
7992+CONFIG_BITREVERSE=y
7993+CONFIG_CRC_CCITT=m
7994+CONFIG_CRC16=y
7995+# CONFIG_CRC_T10DIF is not set
7996+# CONFIG_CRC_ITU_T is not set
7997+CONFIG_CRC32=y
7998+# CONFIG_CRC7 is not set
7999+# CONFIG_LIBCRC32C is not set
8000+# CONFIG_CRC8 is not set
8001+CONFIG_ZLIB_INFLATE=y
8002+CONFIG_ZLIB_DEFLATE=y
8003+# CONFIG_XZ_DEC is not set
8004+# CONFIG_XZ_DEC_BCJ is not set
8005+CONFIG_HAS_IOMEM=y
8006+CONFIG_HAS_IOPORT=y
8007+CONFIG_HAS_DMA=y
8008+CONFIG_CPU_RMAP=y
8009+CONFIG_NLATTR=y
8010+CONFIG_GENERIC_ATOMIC64=y
8011+# CONFIG_AVERAGE is not set
8012+# CONFIG_CORDIC is not set
8013+
8014+#
8015+# Kernel hacking
8016+#
8017+# CONFIG_PRINTK_TIME is not set
8018+CONFIG_DEFAULT_MESSAGE_LOGLEVEL=4
8019+CONFIG_ENABLE_WARN_DEPRECATED=y
8020+CONFIG_ENABLE_MUST_CHECK=y
8021+CONFIG_FRAME_WARN=1024
8022+CONFIG_MAGIC_SYSRQ=y
8023+# CONFIG_STRIP_ASM_SYMS is not set
8024+# CONFIG_UNUSED_SYMBOLS is not set
8025+CONFIG_DEBUG_FS=y
8026+# CONFIG_HEADERS_CHECK is not set
8027+# CONFIG_DEBUG_SECTION_MISMATCH is not set
8028+CONFIG_DEBUG_KERNEL=y
8029+# CONFIG_DEBUG_SHIRQ is not set
8030+# CONFIG_LOCKUP_DETECTOR is not set
8031+# CONFIG_HARDLOCKUP_DETECTOR is not set
8032+# CONFIG_DETECT_HUNG_TASK is not set
8033+CONFIG_SCHED_DEBUG=y
8034+# CONFIG_SCHEDSTATS is not set
8035+# CONFIG_TIMER_STATS is not set
8036+# CONFIG_DEBUG_OBJECTS is not set
8037+# CONFIG_SLUB_DEBUG_ON is not set
8038+# CONFIG_SLUB_STATS is not set
8039+# CONFIG_DEBUG_KMEMLEAK is not set
8040+CONFIG_DEBUG_PREEMPT=y
8041+# CONFIG_DEBUG_RT_MUTEXES is not set
8042+# CONFIG_RT_MUTEX_TESTER is not set
8043+# CONFIG_DEBUG_SPINLOCK is not set
8044+# CONFIG_DEBUG_MUTEXES is not set
8045+# CONFIG_DEBUG_LOCK_ALLOC is not set
8046+# CONFIG_PROVE_LOCKING is not set
8047+# CONFIG_SPARSE_RCU_POINTER is not set
8048+# CONFIG_LOCK_STAT is not set
8049+# CONFIG_DEBUG_ATOMIC_SLEEP is not set
8050+# CONFIG_DEBUG_LOCKING_API_SELFTESTS is not set
8051+# CONFIG_DEBUG_STACK_USAGE is not set
8052+# CONFIG_DEBUG_KOBJECT is not set
8053+# CONFIG_DEBUG_HIGHMEM is not set
8054+CONFIG_DEBUG_BUGVERBOSE=y
8055+CONFIG_DEBUG_INFO=y
8056+# CONFIG_DEBUG_INFO_REDUCED is not set
8057+# CONFIG_DEBUG_VM is not set
8058+# CONFIG_DEBUG_WRITECOUNT is not set
8059+# CONFIG_DEBUG_MEMORY_INIT is not set
8060+# CONFIG_DEBUG_LIST is not set
8061+# CONFIG_TEST_LIST_SORT is not set
8062+# CONFIG_DEBUG_SG is not set
8063+# CONFIG_DEBUG_NOTIFIERS is not set
8064+# CONFIG_DEBUG_CREDENTIALS is not set
8065+# CONFIG_RCU_TORTURE_TEST is not set
8066+CONFIG_RCU_CPU_STALL_TIMEOUT=60
8067+CONFIG_RCU_CPU_STALL_VERBOSE=y
8068+# CONFIG_BACKTRACE_SELF_TEST is not set
8069+# CONFIG_DEBUG_BLOCK_EXT_DEVT is not set
8070+# CONFIG_DEBUG_FORCE_WEAK_PER_CPU is not set
8071+# CONFIG_DEBUG_PER_CPU_MAPS is not set
8072+# CONFIG_LKDTM is not set
8073+# CONFIG_CPU_NOTIFIER_ERROR_INJECT is not set
8074+# CONFIG_FAULT_INJECTION is not set
8075+# CONFIG_LATENCYTOP is not set
8076+CONFIG_SYSCTL_SYSCALL_CHECK=y
8077+# CONFIG_DEBUG_PAGEALLOC is not set
8078+CONFIG_HAVE_FUNCTION_TRACER=y
8079+CONFIG_HAVE_FUNCTION_GRAPH_TRACER=y
8080+CONFIG_HAVE_DYNAMIC_FTRACE=y
8081+CONFIG_HAVE_FTRACE_MCOUNT_RECORD=y
8082+CONFIG_HAVE_SYSCALL_TRACEPOINTS=y
8083+CONFIG_RING_BUFFER=y
8084+CONFIG_RING_BUFFER_ALLOW_SWAP=y
8085+CONFIG_TRACING_SUPPORT=y
8086+CONFIG_FTRACE=y
8087+# CONFIG_FUNCTION_TRACER is not set
8088+# CONFIG_IRQSOFF_TRACER is not set
8089+# CONFIG_PREEMPT_TRACER is not set
8090+# CONFIG_SCHED_TRACER is not set
8091+# CONFIG_ENABLE_DEFAULT_TRACERS is not set
8092+# CONFIG_FTRACE_SYSCALLS is not set
8093+CONFIG_BRANCH_PROFILE_NONE=y
8094+# CONFIG_PROFILE_ANNOTATED_BRANCHES is not set
8095+# CONFIG_PROFILE_ALL_BRANCHES is not set
8096+# CONFIG_STACK_TRACER is not set
8097+# CONFIG_BLK_DEV_IO_TRACE is not set
8098+# CONFIG_RING_BUFFER_BENCHMARK is not set
8099+# CONFIG_DYNAMIC_DEBUG is not set
8100+# CONFIG_DMA_API_DEBUG is not set
8101+# CONFIG_ATOMIC64_SELFTEST is not set
8102+# CONFIG_SAMPLES is not set
8103+CONFIG_HAVE_ARCH_KGDB=y
8104+# CONFIG_KGDB is not set
8105+# CONFIG_TEST_KSTRTOX is not set
8106+# CONFIG_PPC_DISABLE_WERROR is not set
8107+CONFIG_PPC_WERROR=y
8108+CONFIG_PRINT_STACK_DEPTH=64
8109+# CONFIG_DEBUG_STACKOVERFLOW is not set
8110+# CONFIG_PPC_EMULATED_STATS is not set
8111+# CONFIG_CODE_PATCHING_SELFTEST is not set
8112+# CONFIG_FTR_FIXUP_SELFTEST is not set
8113+# CONFIG_MSI_BITMAP_SELFTEST is not set
8114+CONFIG_XMON=y
8115+CONFIG_XMON_DEFAULT=y
8116+CONFIG_XMON_DISASSEMBLY=y
8117+CONFIG_DEBUGGER=y
8118+# CONFIG_VIRQ_DEBUG is not set
8119+# CONFIG_BDI_SWITCH is not set
8120+# CONFIG_PPC_EARLY_DEBUG is not set
8121+
8122+#
8123+# Security options
8124+#
8125+CONFIG_KEYS=y
8126+# CONFIG_KEYS_DEBUG_PROC_KEYS is not set
8127+# CONFIG_SECURITY_DMESG_RESTRICT is not set
8128+# CONFIG_SECURITY is not set
8129+# CONFIG_SECURITYFS is not set
8130+CONFIG_DEFAULT_SECURITY_DAC=y
8131+CONFIG_DEFAULT_SECURITY=""
8132+CONFIG_CRYPTO=y
8133+
8134+#
8135+# Crypto core or helper
8136+#
8137+CONFIG_CRYPTO_ALGAPI=y
8138+CONFIG_CRYPTO_ALGAPI2=y
8139+CONFIG_CRYPTO_AEAD=y
8140+CONFIG_CRYPTO_AEAD2=y
8141+CONFIG_CRYPTO_BLKCIPHER=y
8142+CONFIG_CRYPTO_BLKCIPHER2=y
8143+CONFIG_CRYPTO_HASH=y
8144+CONFIG_CRYPTO_HASH2=y
8145+CONFIG_CRYPTO_RNG=y
8146+CONFIG_CRYPTO_RNG2=y
8147+CONFIG_CRYPTO_PCOMP2=y
8148+CONFIG_CRYPTO_MANAGER=y
8149+CONFIG_CRYPTO_MANAGER2=y
8150+CONFIG_CRYPTO_MANAGER_DISABLE_TESTS=y
8151+CONFIG_CRYPTO_GF128MUL=y
8152+CONFIG_CRYPTO_NULL=y
8153+# CONFIG_CRYPTO_PCRYPT is not set
8154+CONFIG_CRYPTO_WORKQUEUE=y
8155+# CONFIG_CRYPTO_CRYPTD is not set
8156+CONFIG_CRYPTO_AUTHENC=y
8157+# CONFIG_CRYPTO_TEST is not set
8158+
8159+#
8160+# Authenticated Encryption with Associated Data
8161+#
8162+# CONFIG_CRYPTO_CCM is not set
8163+CONFIG_CRYPTO_GCM=y
8164+CONFIG_CRYPTO_SEQIV=y
8165+
8166+#
8167+# Block modes
8168+#
8169+CONFIG_CRYPTO_CBC=y
8170+CONFIG_CRYPTO_CTR=y
8171+# CONFIG_CRYPTO_CTS is not set
8172+# CONFIG_CRYPTO_ECB is not set
8173+# CONFIG_CRYPTO_LRW is not set
8174+# CONFIG_CRYPTO_PCBC is not set
8175+# CONFIG_CRYPTO_XTS is not set
8176+
8177+#
8178+# Hash modes
8179+#
8180+CONFIG_CRYPTO_HMAC=y
8181+CONFIG_CRYPTO_XCBC=y
8182+# CONFIG_CRYPTO_VMAC is not set
8183+
8184+#
8185+# Digest
8186+#
8187+# CONFIG_CRYPTO_CRC32C is not set
8188+CONFIG_CRYPTO_GHASH=y
8189+# CONFIG_CRYPTO_MD4 is not set
8190+CONFIG_CRYPTO_MD5=y
8191+# CONFIG_CRYPTO_MICHAEL_MIC is not set
8192+# CONFIG_CRYPTO_RMD128 is not set
8193+# CONFIG_CRYPTO_RMD160 is not set
8194+# CONFIG_CRYPTO_RMD256 is not set
8195+# CONFIG_CRYPTO_RMD320 is not set
8196+CONFIG_CRYPTO_SHA1=y
8197+CONFIG_CRYPTO_SHA256=y
8198+# CONFIG_CRYPTO_SHA512 is not set
8199+# CONFIG_CRYPTO_TGR192 is not set
8200+# CONFIG_CRYPTO_WP512 is not set
8201+
8202+#
8203+# Ciphers
8204+#
8205+CONFIG_CRYPTO_AES=y
8206+# CONFIG_CRYPTO_ANUBIS is not set
8207+# CONFIG_CRYPTO_ARC4 is not set
8208+# CONFIG_CRYPTO_BLOWFISH is not set
8209+# CONFIG_CRYPTO_CAMELLIA is not set
8210+# CONFIG_CRYPTO_CAST5 is not set
8211+# CONFIG_CRYPTO_CAST6 is not set
8212+CONFIG_CRYPTO_DES=y
8213+# CONFIG_CRYPTO_FCRYPT is not set
8214+# CONFIG_CRYPTO_KHAZAD is not set
8215+# CONFIG_CRYPTO_SALSA20 is not set
8216+# CONFIG_CRYPTO_SEED is not set
8217+# CONFIG_CRYPTO_SERPENT is not set
8218+# CONFIG_CRYPTO_TEA is not set
8219+# CONFIG_CRYPTO_TWOFISH is not set
8220+
8221+#
8222+# Compression
8223+#
8224+CONFIG_CRYPTO_DEFLATE=y
8225+# CONFIG_CRYPTO_ZLIB is not set
8226+# CONFIG_CRYPTO_LZO is not set
8227+
8228+#
8229+# Random Number Generation
8230+#
8231+# CONFIG_CRYPTO_ANSI_CPRNG is not set
8232+# CONFIG_CRYPTO_USER_API_HASH is not set
8233+# CONFIG_CRYPTO_USER_API_SKCIPHER is not set
8234+CONFIG_CRYPTO_HW=y
8235+# CONFIG_CRYPTO_DEV_HIFN_795X is not set
8236+CONFIG_CRYPTO_DEV_PPC4XX=y
8237+# CONFIG_PPC_CLOCK is not set
8238+# CONFIG_VIRTUALIZATION is not set
8239diff --git a/arch/powerpc/configs/acp_srio_defconfig b/arch/powerpc/configs/acp_srio_defconfig
8240new file mode 100644
8241index 0000000..9e81676
8242--- /dev/null
8243+++ b/arch/powerpc/configs/acp_srio_defconfig
8244@@ -0,0 +1,1640 @@
8245+#
8246+# Automatically generated make config: don't edit
8247+# Linux kernel version: 2.6.35
8248+# Thu Jun 2 16:17:43 2011
8249+#
8250+# CONFIG_PPC64 is not set
8251+
8252+#
8253+# Processor support
8254+#
8255+# CONFIG_PPC_BOOK3S_32 is not set
8256+# CONFIG_PPC_85xx is not set
8257+# CONFIG_PPC_8xx is not set
8258+# CONFIG_40x is not set
8259+CONFIG_44x=y
8260+# CONFIG_E200 is not set
8261+CONFIG_PPC_FPU=y
8262+CONFIG_4xx=y
8263+CONFIG_BOOKE=y
8264+CONFIG_PTE_64BIT=y
8265+CONFIG_PHYS_64BIT=y
8266+CONFIG_PPC_MMU_NOHASH=y
8267+CONFIG_PPC_MMU_NOHASH_32=y
8268+# CONFIG_PPC_MM_SLICES is not set
8269+CONFIG_SMP=y
8270+CONFIG_NR_CPUS=4
8271+# CONFIG_NOT_COHERENT_CACHE is not set
8272+CONFIG_PPC32=y
8273+CONFIG_WORD_SIZE=32
8274+CONFIG_ARCH_PHYS_ADDR_T_64BIT=y
8275+CONFIG_MMU=y
8276+CONFIG_GENERIC_CMOS_UPDATE=y
8277+CONFIG_GENERIC_TIME=y
8278+CONFIG_GENERIC_TIME_VSYSCALL=y
8279+CONFIG_GENERIC_CLOCKEVENTS=y
8280+CONFIG_GENERIC_HARDIRQS=y
8281+CONFIG_GENERIC_HARDIRQS_NO__DO_IRQ=y
8282+# CONFIG_HAVE_SETUP_PER_CPU_AREA is not set
8283+# CONFIG_NEED_PER_CPU_EMBED_FIRST_CHUNK is not set
8284+CONFIG_IRQ_PER_CPU=y
8285+CONFIG_NR_IRQS=512
8286+CONFIG_STACKTRACE_SUPPORT=y
8287+CONFIG_HAVE_LATENCYTOP_SUPPORT=y
8288+CONFIG_TRACE_IRQFLAGS_SUPPORT=y
8289+CONFIG_LOCKDEP_SUPPORT=y
8290+CONFIG_RWSEM_XCHGADD_ALGORITHM=y
8291+CONFIG_ARCH_HAS_ILOG2_U32=y
8292+CONFIG_GENERIC_HWEIGHT=y
8293+CONFIG_GENERIC_FIND_NEXT_BIT=y
8294+# CONFIG_ARCH_NO_VIRT_TO_BUS is not set
8295+CONFIG_PPC=y
8296+CONFIG_EARLY_PRINTK=y
8297+CONFIG_GENERIC_NVRAM=y
8298+CONFIG_SCHED_OMIT_FRAME_POINTER=y
8299+CONFIG_ARCH_MAY_HAVE_PC_FDC=y
8300+CONFIG_PPC_OF=y
8301+CONFIG_OF=y
8302+CONFIG_PPC_UDBG_16550=y
8303+CONFIG_GENERIC_TBSYNC=y
8304+CONFIG_AUDIT_ARCH=y
8305+CONFIG_GENERIC_BUG=y
8306+CONFIG_DTC=y
8307+# CONFIG_DEFAULT_UIMAGE is not set
8308+CONFIG_ARCH_HIBERNATION_POSSIBLE=y
8309+CONFIG_PPC_DCR_NATIVE=y
8310+# CONFIG_PPC_DCR_MMIO is not set
8311+CONFIG_PPC_DCR=y
8312+CONFIG_ARCH_SUPPORTS_DEBUG_PAGEALLOC=y
8313+CONFIG_PPC_ADV_DEBUG_REGS=y
8314+CONFIG_PPC_ADV_DEBUG_IACS=4
8315+CONFIG_PPC_ADV_DEBUG_DACS=2
8316+CONFIG_PPC_ADV_DEBUG_DVCS=2
8317+CONFIG_PPC_ADV_DEBUG_DAC_RANGE=y
8318+CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
8319+CONFIG_CONSTRUCTORS=y
8320+
8321+#
8322+# General setup
8323+#
8324+CONFIG_EXPERIMENTAL=y
8325+CONFIG_LOCK_KERNEL=y
8326+CONFIG_INIT_ENV_ARG_LIMIT=32
8327+CONFIG_CROSS_COMPILE="powerpc-linux-"
8328+CONFIG_LOCALVERSION=""
8329+CONFIG_LOCALVERSION_AUTO=y
8330+CONFIG_SWAP=y
8331+CONFIG_SYSVIPC=y
8332+CONFIG_SYSVIPC_SYSCTL=y
8333+CONFIG_POSIX_MQUEUE=y
8334+CONFIG_POSIX_MQUEUE_SYSCTL=y
8335+# CONFIG_BSD_PROCESS_ACCT is not set
8336+# CONFIG_TASKSTATS is not set
8337+# CONFIG_AUDIT is not set
8338+
8339+#
8340+# RCU Subsystem
8341+#
8342+CONFIG_TREE_RCU=y
8343+# CONFIG_TREE_PREEMPT_RCU is not set
8344+# CONFIG_TINY_RCU is not set
8345+# CONFIG_RCU_TRACE is not set
8346+CONFIG_RCU_FANOUT=32
8347+# CONFIG_RCU_FANOUT_EXACT is not set
8348+# CONFIG_TREE_RCU_TRACE is not set
8349+# CONFIG_IKCONFIG is not set
8350+CONFIG_LOG_BUF_SHIFT=14
8351+# CONFIG_CGROUPS is not set
8352+CONFIG_SYSFS_DEPRECATED=y
8353+CONFIG_SYSFS_DEPRECATED_V2=y
8354+# CONFIG_RELAY is not set
8355+# CONFIG_NAMESPACES is not set
8356+CONFIG_BLK_DEV_INITRD=y
8357+CONFIG_INITRAMFS_SOURCE=""
8358+CONFIG_RD_GZIP=y
8359+# CONFIG_RD_BZIP2 is not set
8360+# CONFIG_RD_LZMA is not set
8361+# CONFIG_RD_LZO is not set
8362+# CONFIG_CC_OPTIMIZE_FOR_SIZE is not set
8363+CONFIG_SYSCTL=y
8364+CONFIG_ANON_INODES=y
8365+CONFIG_EMBEDDED=y
8366+CONFIG_SYSCTL_SYSCALL=y
8367+CONFIG_KALLSYMS=y
8368+# CONFIG_KALLSYMS_ALL is not set
8369+CONFIG_KALLSYMS_EXTRA_PASS=y
8370+CONFIG_HOTPLUG=y
8371+CONFIG_PRINTK=y
8372+CONFIG_BUG=y
8373+CONFIG_ELF_CORE=y
8374+CONFIG_BASE_FULL=y
8375+CONFIG_FUTEX=y
8376+CONFIG_EPOLL=y
8377+CONFIG_SIGNALFD=y
8378+CONFIG_TIMERFD=y
8379+CONFIG_EVENTFD=y
8380+CONFIG_SHMEM=y
8381+CONFIG_AIO=y
8382+CONFIG_HAVE_PERF_EVENTS=y
8383+
8384+#
8385+# Kernel Performance Events And Counters
8386+#
8387+# CONFIG_PERF_EVENTS is not set
8388+# CONFIG_PERF_COUNTERS is not set
8389+CONFIG_VM_EVENT_COUNTERS=y
8390+CONFIG_PCI_QUIRKS=y
8391+CONFIG_SLUB_DEBUG=y
8392+CONFIG_COMPAT_BRK=y
8393+# CONFIG_SLAB is not set
8394+CONFIG_SLUB=y
8395+# CONFIG_SLOB is not set
8396+CONFIG_PROFILING=y
8397+CONFIG_OPROFILE=y
8398+CONFIG_HAVE_OPROFILE=y
8399+# CONFIG_KPROBES is not set
8400+CONFIG_HAVE_EFFICIENT_UNALIGNED_ACCESS=y
8401+CONFIG_HAVE_IOREMAP_PROT=y
8402+CONFIG_HAVE_KPROBES=y
8403+CONFIG_HAVE_KRETPROBES=y
8404+CONFIG_HAVE_ARCH_TRACEHOOK=y
8405+CONFIG_HAVE_DMA_ATTRS=y
8406+CONFIG_USE_GENERIC_SMP_HELPERS=y
8407+CONFIG_HAVE_REGS_AND_STACK_ACCESS_API=y
8408+CONFIG_HAVE_DMA_API_DEBUG=y
8409+
8410+#
8411+# GCOV-based kernel profiling
8412+#
8413+# CONFIG_GCOV_KERNEL is not set
8414+# CONFIG_SLOW_WORK is not set
8415+# CONFIG_HAVE_GENERIC_DMA_COHERENT is not set
8416+CONFIG_SLABINFO=y
8417+CONFIG_RT_MUTEXES=y
8418+CONFIG_BASE_SMALL=0
8419+CONFIG_MODULES=y
8420+CONFIG_MODULE_FORCE_LOAD=y
8421+CONFIG_MODULE_UNLOAD=y
8422+CONFIG_MODULE_FORCE_UNLOAD=y
8423+CONFIG_MODVERSIONS=y
8424+CONFIG_MODULE_SRCVERSION_ALL=y
8425+CONFIG_STOP_MACHINE=y
8426+CONFIG_BLOCK=y
8427+CONFIG_LBDAF=y
8428+# CONFIG_BLK_DEV_BSG is not set
8429+# CONFIG_BLK_DEV_INTEGRITY is not set
8430+
8431+#
8432+# IO Schedulers
8433+#
8434+CONFIG_IOSCHED_NOOP=y
8435+CONFIG_IOSCHED_DEADLINE=y
8436+CONFIG_IOSCHED_CFQ=y
8437+# CONFIG_DEFAULT_DEADLINE is not set
8438+CONFIG_DEFAULT_CFQ=y
8439+# CONFIG_DEFAULT_NOOP is not set
8440+CONFIG_DEFAULT_IOSCHED="cfq"
8441+# CONFIG_INLINE_SPIN_TRYLOCK is not set
8442+# CONFIG_INLINE_SPIN_TRYLOCK_BH is not set
8443+# CONFIG_INLINE_SPIN_LOCK is not set
8444+# CONFIG_INLINE_SPIN_LOCK_BH is not set
8445+# CONFIG_INLINE_SPIN_LOCK_IRQ is not set
8446+# CONFIG_INLINE_SPIN_LOCK_IRQSAVE is not set
8447+CONFIG_INLINE_SPIN_UNLOCK=y
8448+# CONFIG_INLINE_SPIN_UNLOCK_BH is not set
8449+CONFIG_INLINE_SPIN_UNLOCK_IRQ=y
8450+# CONFIG_INLINE_SPIN_UNLOCK_IRQRESTORE is not set
8451+# CONFIG_INLINE_READ_TRYLOCK is not set
8452+# CONFIG_INLINE_READ_LOCK is not set
8453+# CONFIG_INLINE_READ_LOCK_BH is not set
8454+# CONFIG_INLINE_READ_LOCK_IRQ is not set
8455+# CONFIG_INLINE_READ_LOCK_IRQSAVE is not set
8456+CONFIG_INLINE_READ_UNLOCK=y
8457+# CONFIG_INLINE_READ_UNLOCK_BH is not set
8458+CONFIG_INLINE_READ_UNLOCK_IRQ=y
8459+# CONFIG_INLINE_READ_UNLOCK_IRQRESTORE is not set
8460+# CONFIG_INLINE_WRITE_TRYLOCK is not set
8461+# CONFIG_INLINE_WRITE_LOCK is not set
8462+# CONFIG_INLINE_WRITE_LOCK_BH is not set
8463+# CONFIG_INLINE_WRITE_LOCK_IRQ is not set
8464+# CONFIG_INLINE_WRITE_LOCK_IRQSAVE is not set
8465+CONFIG_INLINE_WRITE_UNLOCK=y
8466+# CONFIG_INLINE_WRITE_UNLOCK_BH is not set
8467+CONFIG_INLINE_WRITE_UNLOCK_IRQ=y
8468+# CONFIG_INLINE_WRITE_UNLOCK_IRQRESTORE is not set
8469+CONFIG_MUTEX_SPIN_ON_OWNER=y
8470+# CONFIG_FREEZER is not set
8471+CONFIG_PPC4xx_PCI_EXPRESS=y
8472+CONFIG_PPC_MSI_BITMAP=y
8473+# CONFIG_RAPIDIO_FSL is not set
8474+
8475+#
8476+# Platform support
8477+#
8478+# CONFIG_PPC_CELL is not set
8479+# CONFIG_PPC_CELL_NATIVE is not set
8480+# CONFIG_PQ2ADS is not set
8481+CONFIG_PPC_47x=y
8482+# CONFIG_BAMBOO is not set
8483+# CONFIG_EBONY is not set
8484+# CONFIG_SAM440EP is not set
8485+# CONFIG_SEQUOIA is not set
8486+# CONFIG_TAISHAN is not set
8487+# CONFIG_KATMAI is not set
8488+# CONFIG_RAINIER is not set
8489+# CONFIG_WARP is not set
8490+# CONFIG_ARCHES is not set
8491+# CONFIG_CANYONLANDS is not set
8492+# CONFIG_GLACIER is not set
8493+# CONFIG_REDWOOD is not set
8494+# CONFIG_EIGER is not set
8495+# CONFIG_YOSEMITE is not set
8496+# CONFIG_ISS4xx is not set
8497+# CONFIG_ICON is not set
8498+CONFIG_ACP=y
8499+# CONFIG_ACPISS is not set
8500+# CONFIG_ACP_X1V1 is not set
8501+# CONFIG_XILINX_VIRTEX440_GENERIC_BOARD is not set
8502+# CONFIG_PPC44x_SIMPLE is not set
8503+# CONFIG_PPC4xx_GPIO is not set
8504+CONFIG_440GP=y
8505+# CONFIG_IPIC is not set
8506+CONFIG_MPIC=y
8507+# CONFIG_MPIC_WEIRD is not set
8508+# CONFIG_PPC_I8259 is not set
8509+# CONFIG_PPC_RTAS is not set
8510+# CONFIG_MMIO_NVRAM is not set
8511+# CONFIG_PPC_MPC106 is not set
8512+# CONFIG_PPC_970_NAP is not set
8513+# CONFIG_PPC_INDIRECT_IO is not set
8514+# CONFIG_GENERIC_IOMAP is not set
8515+# CONFIG_CPU_FREQ is not set
8516+# CONFIG_FSL_ULI1575 is not set
8517+# CONFIG_SIMPLE_GPIO is not set
8518+
8519+#
8520+# Kernel options
8521+#
8522+CONFIG_HIGHMEM=y
8523+CONFIG_TICK_ONESHOT=y
8524+# CONFIG_NO_HZ is not set
8525+CONFIG_HIGH_RES_TIMERS=y
8526+CONFIG_GENERIC_CLOCKEVENTS_BUILD=y
8527+CONFIG_HZ_100=y
8528+# CONFIG_HZ_250 is not set
8529+# CONFIG_HZ_300 is not set
8530+# CONFIG_HZ_1000 is not set
8531+CONFIG_HZ=100
8532+CONFIG_SCHED_HRTICK=y
8533+CONFIG_PREEMPT_NONE=y
8534+# CONFIG_PREEMPT_VOLUNTARY is not set
8535+# CONFIG_PREEMPT is not set
8536+CONFIG_BINFMT_ELF=y
8537+# CONFIG_CORE_DUMP_DEFAULT_ELF_HEADERS is not set
8538+# CONFIG_HAVE_AOUT is not set
8539+# CONFIG_BINFMT_MISC is not set
8540+# CONFIG_MATH_EMULATION is not set
8541+# CONFIG_IOMMU_HELPER is not set
8542+# CONFIG_SWIOTLB is not set
8543+CONFIG_ARCH_ENABLE_MEMORY_HOTPLUG=y
8544+CONFIG_ARCH_HAS_WALK_MEMORY=y
8545+CONFIG_ARCH_ENABLE_MEMORY_HOTREMOVE=y
8546+# CONFIG_IRQ_ALL_CPUS is not set
8547+CONFIG_SPARSE_IRQ=y
8548+CONFIG_MAX_ACTIVE_REGIONS=32
8549+CONFIG_ARCH_FLATMEM_ENABLE=y
8550+CONFIG_ARCH_POPULATES_NODE_MAP=y
8551+CONFIG_SELECT_MEMORY_MODEL=y
8552+CONFIG_FLATMEM_MANUAL=y
8553+# CONFIG_DISCONTIGMEM_MANUAL is not set
8554+# CONFIG_SPARSEMEM_MANUAL is not set
8555+CONFIG_FLATMEM=y
8556+CONFIG_FLAT_NODE_MEM_MAP=y
8557+CONFIG_HAVE_MEMBLOCK=y
8558+CONFIG_PAGEFLAGS_EXTENDED=y
8559+CONFIG_SPLIT_PTLOCK_CPUS=4
8560+CONFIG_MIGRATION=y
8561+CONFIG_PHYS_ADDR_T_64BIT=y
8562+CONFIG_ZONE_DMA_FLAG=1
8563+CONFIG_BOUNCE=y
8564+CONFIG_VIRT_TO_BUS=y
8565+# CONFIG_KSM is not set
8566+CONFIG_DEFAULT_MMAP_MIN_ADDR=4096
8567+CONFIG_STDBINUTILS=y
8568+CONFIG_PPC_4K_PAGES=y
8569+# CONFIG_PPC_16K_PAGES is not set
8570+# CONFIG_PPC_64K_PAGES is not set
8571+# CONFIG_PPC_256K_PAGES is not set
8572+CONFIG_FORCE_MAX_ZONEORDER=11
8573+# CONFIG_PROC_DEVICETREE is not set
8574+CONFIG_CMDLINE_BOOL=y
8575+CONFIG_CMDLINE="console=ttyS0 mtdparts=acp-nand:512K(2ndStage),512K(env-0),512K(env-1),512K(3rdStage),-(fs) ip=dhcp root=/dev/nfs"
8576+CONFIG_EXTRA_TARGETS=""
8577+CONFIG_SECCOMP=y
8578+CONFIG_ISA_DMA_API=y
8579+
8580+#
8581+# Bus options
8582+#
8583+CONFIG_ZONE_DMA=y
8584+# CONFIG_NEED_DMA_MAP_STATE is not set
8585+CONFIG_NEED_SG_DMA_LENGTH=y
8586+CONFIG_PPC_INDIRECT_PCI=y
8587+CONFIG_4xx_SOC=y
8588+CONFIG_PPC_PCI_CHOICE=y
8589+CONFIG_PCI=y
8590+CONFIG_PCI_DOMAINS=y
8591+CONFIG_PCI_SYSCALL=y
8592+CONFIG_PCIEPORTBUS=y
8593+# CONFIG_PCIEAER is not set
8594+CONFIG_PCIEASPM=y
8595+# CONFIG_PCIEASPM_DEBUG is not set
8596+CONFIG_ARCH_SUPPORTS_MSI=y
8597+CONFIG_PCI_MSI=y
8598+# CONFIG_PCI_DEBUG is not set
8599+# CONFIG_PCI_STUB is not set
8600+# CONFIG_PCI_IOV is not set
8601+# CONFIG_PCCARD is not set
8602+# CONFIG_HOTPLUG_PCI is not set
8603+CONFIG_HAS_RAPIDIO=y
8604+CONFIG_RAPIDIO=y
8605+CONFIG_RAPIDIO_DISC_TIMEOUT=30
8606+# CONFIG_RAPIDIO_ENABLE_RX_TX_PORTS is not set
8607+# CONFIG_RAPIDIO_ACP is not set
8608+CONFIG_RAPIDIO_TSI57X=y
8609+CONFIG_RAPIDIO_CPS_XX=y
8610+CONFIG_RAPIDIO_TSI568=y
8611+CONFIG_RAPIDIO_TSI500=y
8612+CONFIG_RAPIDIO_DEBUG=y
8613+
8614+#
8615+# Advanced setup
8616+#
8617+CONFIG_ADVANCED_OPTIONS=y
8618+# CONFIG_LOWMEM_SIZE_BOOL is not set
8619+CONFIG_LOWMEM_SIZE=0x30000000
8620+CONFIG_RELOCATABLE=y
8621+CONFIG_PAGE_OFFSET_BOOL=y
8622+CONFIG_PAGE_OFFSET=0xc0000000
8623+CONFIG_KERNEL_START_BOOL=y
8624+CONFIG_KERNEL_START=0xc0400000
8625+CONFIG_PHYSICAL_START=0x00000000
8626+CONFIG_TASK_SIZE_BOOL=y
8627+CONFIG_TASK_SIZE=0xc0000000
8628+CONFIG_NET=y
8629+
8630+#
8631+# Networking options
8632+#
8633+CONFIG_PACKET=y
8634+CONFIG_UNIX=y
8635+CONFIG_XFRM=y
8636+CONFIG_XFRM_USER=y
8637+CONFIG_XFRM_SUB_POLICY=y
8638+CONFIG_XFRM_MIGRATE=y
8639+CONFIG_XFRM_STATISTICS=y
8640+CONFIG_XFRM_IPCOMP=y
8641+CONFIG_NET_KEY=y
8642+# CONFIG_NET_KEY_MIGRATE is not set
8643+CONFIG_INET=y
8644+CONFIG_IP_MULTICAST=y
8645+# CONFIG_IP_ADVANCED_ROUTER is not set
8646+CONFIG_IP_FIB_HASH=y
8647+CONFIG_IP_PNP=y
8648+CONFIG_IP_PNP_DHCP=y
8649+CONFIG_IP_PNP_BOOTP=y
8650+CONFIG_IP_PNP_RARP=y
8651+CONFIG_NET_IPIP=y
8652+# CONFIG_NET_IPGRE is not set
8653+# CONFIG_IP_MROUTE is not set
8654+# CONFIG_ARPD is not set
8655+CONFIG_SYN_COOKIES=y
8656+CONFIG_INET_AH=y
8657+CONFIG_INET_ESP=y
8658+CONFIG_INET_IPCOMP=y
8659+CONFIG_INET_XFRM_TUNNEL=y
8660+CONFIG_INET_TUNNEL=y
8661+CONFIG_INET_XFRM_MODE_TRANSPORT=y
8662+CONFIG_INET_XFRM_MODE_TUNNEL=y
8663+CONFIG_INET_XFRM_MODE_BEET=y
8664+# CONFIG_INET_LRO is not set
8665+CONFIG_INET_DIAG=y
8666+CONFIG_INET_TCP_DIAG=y
8667+# CONFIG_TCP_CONG_ADVANCED is not set
8668+CONFIG_TCP_CONG_CUBIC=y
8669+CONFIG_DEFAULT_TCP_CONG="cubic"
8670+# CONFIG_TCP_MD5SIG is not set
8671+CONFIG_IPV6=y
8672+# CONFIG_IPV6_PRIVACY is not set
8673+# CONFIG_IPV6_ROUTER_PREF is not set
8674+# CONFIG_IPV6_OPTIMISTIC_DAD is not set
8675+CONFIG_INET6_AH=y
8676+CONFIG_INET6_ESP=y
8677+CONFIG_INET6_IPCOMP=y
8678+CONFIG_IPV6_MIP6=y
8679+CONFIG_INET6_XFRM_TUNNEL=y
8680+CONFIG_INET6_TUNNEL=y
8681+CONFIG_INET6_XFRM_MODE_TRANSPORT=y
8682+CONFIG_INET6_XFRM_MODE_TUNNEL=y
8683+CONFIG_INET6_XFRM_MODE_BEET=y
8684+# CONFIG_INET6_XFRM_MODE_ROUTEOPTIMIZATION is not set
8685+CONFIG_IPV6_SIT=y
8686+# CONFIG_IPV6_SIT_6RD is not set
8687+CONFIG_IPV6_NDISC_NODETYPE=y
8688+CONFIG_IPV6_TUNNEL=y
8689+# CONFIG_IPV6_MULTIPLE_TABLES is not set
8690+# CONFIG_IPV6_MROUTE is not set
8691+CONFIG_NETWORK_SECMARK=y
8692+CONFIG_NETFILTER=y
8693+# CONFIG_NETFILTER_DEBUG is not set
8694+CONFIG_NETFILTER_ADVANCED=y
8695+
8696+#
8697+# Core Netfilter Configuration
8698+#
8699+# CONFIG_NETFILTER_NETLINK_QUEUE is not set
8700+# CONFIG_NETFILTER_NETLINK_LOG is not set
8701+# CONFIG_NF_CONNTRACK is not set
8702+# CONFIG_NETFILTER_XTABLES is not set
8703+# CONFIG_IP_VS is not set
8704+
8705+#
8706+# IP: Netfilter Configuration
8707+#
8708+# CONFIG_NF_DEFRAG_IPV4 is not set
8709+# CONFIG_IP_NF_QUEUE is not set
8710+# CONFIG_IP_NF_IPTABLES is not set
8711+# CONFIG_IP_NF_ARPTABLES is not set
8712+
8713+#
8714+# IPv6: Netfilter Configuration
8715+#
8716+# CONFIG_IP6_NF_QUEUE is not set
8717+# CONFIG_IP6_NF_IPTABLES is not set
8718+# CONFIG_IP_DCCP is not set
8719+# CONFIG_IP_SCTP is not set
8720+# CONFIG_RDS is not set
8721+# CONFIG_TIPC is not set
8722+# CONFIG_ATM is not set
8723+# CONFIG_L2TP is not set
8724+# CONFIG_BRIDGE is not set
8725+# CONFIG_NET_DSA is not set
8726+CONFIG_VLAN_8021Q=y
8727+# CONFIG_VLAN_8021Q_GVRP is not set
8728+# CONFIG_DECNET is not set
8729+# CONFIG_LLC2 is not set
8730+# CONFIG_IPX is not set
8731+# CONFIG_ATALK is not set
8732+# CONFIG_X25 is not set
8733+# CONFIG_LAPB is not set
8734+# CONFIG_ECONET is not set
8735+# CONFIG_WAN_ROUTER is not set
8736+# CONFIG_PHONET is not set
8737+# CONFIG_IEEE802154 is not set
8738+# CONFIG_NET_SCHED is not set
8739+# CONFIG_DCB is not set
8740+CONFIG_RPS=y
8741+
8742+#
8743+# Network testing
8744+#
8745+# CONFIG_NET_PKTGEN is not set
8746+# CONFIG_HAMRADIO is not set
8747+# CONFIG_CAN is not set
8748+# CONFIG_IRDA is not set
8749+# CONFIG_BT is not set
8750+# CONFIG_AF_RXRPC is not set
8751+CONFIG_WIRELESS=y
8752+CONFIG_WIRELESS_EXT=y
8753+CONFIG_WEXT_CORE=y
8754+CONFIG_WEXT_PROC=y
8755+CONFIG_WEXT_PRIV=y
8756+# CONFIG_CFG80211 is not set
8757+CONFIG_WIRELESS_EXT_SYSFS=y
8758+# CONFIG_LIB80211 is not set
8759+
8760+#
8761+# CFG80211 needs to be enabled for MAC80211
8762+#
8763+
8764+#
8765+# Some wireless drivers require a rate control algorithm
8766+#
8767+# CONFIG_WIMAX is not set
8768+# CONFIG_RFKILL is not set
8769+# CONFIG_NET_9P is not set
8770+# CONFIG_CAIF is not set
8771+
8772+#
8773+# Device Drivers
8774+#
8775+
8776+#
8777+# Generic Driver Options
8778+#
8779+CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug"
8780+# CONFIG_DEVTMPFS is not set
8781+CONFIG_STANDALONE=y
8782+CONFIG_PREVENT_FIRMWARE_BUILD=y
8783+CONFIG_FW_LOADER=y
8784+CONFIG_FIRMWARE_IN_KERNEL=y
8785+CONFIG_EXTRA_FIRMWARE=""
8786+# CONFIG_DEBUG_DRIVER is not set
8787+# CONFIG_DEBUG_DEVRES is not set
8788+# CONFIG_SYS_HYPERVISOR is not set
8789+# CONFIG_CONNECTOR is not set
8790+CONFIG_MTD=y
8791+# CONFIG_MTD_DEBUG is not set
8792+# CONFIG_MTD_TESTS is not set
8793+# CONFIG_MTD_CONCAT is not set
8794+CONFIG_MTD_PARTITIONS=y
8795+# CONFIG_MTD_REDBOOT_PARTS is not set
8796+CONFIG_MTD_CMDLINE_PARTS=y
8797+CONFIG_MTD_OF_PARTS=y
8798+# CONFIG_MTD_AR7_PARTS is not set
8799+
8800+#
8801+# User Modules And Translation Layers
8802+#
8803+CONFIG_MTD_CHAR=y
8804+CONFIG_MTD_BLKDEVS=y
8805+CONFIG_MTD_BLOCK=y
8806+# CONFIG_FTL is not set
8807+# CONFIG_NFTL is not set
8808+# CONFIG_INFTL is not set
8809+# CONFIG_RFD_FTL is not set
8810+# CONFIG_SSFDC is not set
8811+# CONFIG_SM_FTL is not set
8812+# CONFIG_MTD_OOPS is not set
8813+
8814+#
8815+# RAM/ROM/Flash chip drivers
8816+#
8817+# CONFIG_MTD_CFI is not set
8818+CONFIG_MTD_JEDECPROBE=y
8819+CONFIG_MTD_GEN_PROBE=y
8820+# CONFIG_MTD_CFI_ADV_OPTIONS is not set
8821+CONFIG_MTD_MAP_BANK_WIDTH_1=y
8822+CONFIG_MTD_MAP_BANK_WIDTH_2=y
8823+CONFIG_MTD_MAP_BANK_WIDTH_4=y
8824+# CONFIG_MTD_MAP_BANK_WIDTH_8 is not set
8825+# CONFIG_MTD_MAP_BANK_WIDTH_16 is not set
8826+# CONFIG_MTD_MAP_BANK_WIDTH_32 is not set
8827+CONFIG_MTD_CFI_I1=y
8828+CONFIG_MTD_CFI_I2=y
8829+# CONFIG_MTD_CFI_I4 is not set
8830+# CONFIG_MTD_CFI_I8 is not set
8831+# CONFIG_MTD_CFI_INTELEXT is not set
8832+CONFIG_MTD_CFI_AMDSTD=y
8833+# CONFIG_MTD_CFI_STAA is not set
8834+CONFIG_MTD_CFI_UTIL=y
8835+# CONFIG_MTD_RAM is not set
8836+# CONFIG_MTD_ROM is not set
8837+# CONFIG_MTD_ABSENT is not set
8838+
8839+#
8840+# Mapping drivers for chip access
8841+#
8842+# CONFIG_MTD_COMPLEX_MAPPINGS is not set
8843+# CONFIG_MTD_PHYSMAP is not set
8844+CONFIG_MTD_PHYSMAP_OF=y
8845+# CONFIG_MTD_INTEL_VR_NOR is not set
8846+# CONFIG_MTD_PLATRAM is not set
8847+
8848+#
8849+# Self-contained MTD device drivers
8850+#
8851+# CONFIG_MTD_PMC551 is not set
8852+# CONFIG_MTD_SLRAM is not set
8853+# CONFIG_MTD_PHRAM is not set
8854+# CONFIG_MTD_MTDRAM is not set
8855+# CONFIG_MTD_BLOCK2MTD is not set
8856+
8857+#
8858+# Disk-On-Chip Device Drivers
8859+#
8860+# CONFIG_MTD_DOC2000 is not set
8861+# CONFIG_MTD_DOC2001 is not set
8862+# CONFIG_MTD_DOC2001PLUS is not set
8863+CONFIG_MTD_NAND_ECC=y
8864+# CONFIG_MTD_NAND_ECC_SMC is not set
8865+CONFIG_MTD_NAND=y
8866+# CONFIG_MTD_NAND_VERIFY_WRITE is not set
8867+# CONFIG_MTD_SM_COMMON is not set
8868+# CONFIG_MTD_NAND_MUSEUM_IDS is not set
8869+# CONFIG_MTD_NAND_DENALI is not set
8870+CONFIG_MTD_NAND_DENALI_SCRATCH_REG_ADDR=0xFF108018
8871+CONFIG_MTD_NAND_IDS=y
8872+# CONFIG_MTD_NAND_RICOH is not set
8873+# CONFIG_MTD_NAND_NDFC is not set
8874+# CONFIG_MTD_NAND_DISKONCHIP is not set
8875+# CONFIG_MTD_NAND_CAFE is not set
8876+# CONFIG_MTD_NAND_NANDSIM is not set
8877+CONFIG_MTD_NAND_PLATFORM=y
8878+# CONFIG_MTD_ALAUDA is not set
8879+# CONFIG_MTD_NAND_FSL_ELBC is not set
8880+# CONFIG_MTD_ONENAND is not set
8881+
8882+#
8883+# LPDDR flash memory drivers
8884+#
8885+# CONFIG_MTD_LPDDR is not set
8886+
8887+#
8888+# UBI - Unsorted block images
8889+#
8890+# CONFIG_MTD_UBI is not set
8891+CONFIG_OF_FLATTREE=y
8892+CONFIG_OF_DYNAMIC=y
8893+CONFIG_OF_DEVICE=y
8894+# CONFIG_PARPORT is not set
8895+CONFIG_BLK_DEV=y
8896+# CONFIG_BLK_DEV_FD is not set
8897+# CONFIG_BLK_CPQ_DA is not set
8898+# CONFIG_BLK_CPQ_CISS_DA is not set
8899+# CONFIG_BLK_DEV_DAC960 is not set
8900+# CONFIG_BLK_DEV_UMEM is not set
8901+# CONFIG_BLK_DEV_COW_COMMON is not set
8902+# CONFIG_BLK_DEV_LOOP is not set
8903+
8904+#
8905+# DRBD disabled because PROC_FS, INET or CONNECTOR not selected
8906+#
8907+# CONFIG_BLK_DEV_NBD is not set
8908+# CONFIG_BLK_DEV_SX8 is not set
8909+CONFIG_BLK_DEV_UB=y
8910+CONFIG_BLK_DEV_RAM=y
8911+CONFIG_BLK_DEV_RAM_COUNT=16
8912+CONFIG_BLK_DEV_RAM_SIZE=35000
8913+# CONFIG_BLK_DEV_XIP is not set
8914+# CONFIG_BLK_DEV_ISS is not set
8915+# CONFIG_CDROM_PKTCDVD is not set
8916+# CONFIG_ATA_OVER_ETH is not set
8917+# CONFIG_XILINX_SYSACE is not set
8918+# CONFIG_BLK_DEV_HD is not set
8919+CONFIG_MISC_DEVICES=y
8920+# CONFIG_PHANTOM is not set
8921+# CONFIG_SGI_IOC4 is not set
8922+# CONFIG_TIFM_CORE is not set
8923+# CONFIG_ENCLOSURE_SERVICES is not set
8924+# CONFIG_HP_ILO is not set
8925+# CONFIG_C2PORT is not set
8926+
8927+#
8928+# EEPROM support
8929+#
8930+# CONFIG_EEPROM_93CX6 is not set
8931+# CONFIG_CB710_CORE is not set
8932+CONFIG_HAVE_IDE=y
8933+# CONFIG_IDE is not set
8934+
8935+#
8936+# SCSI device support
8937+#
8938+CONFIG_SCSI_MOD=y
8939+# CONFIG_RAID_ATTRS is not set
8940+CONFIG_SCSI=y
8941+CONFIG_SCSI_DMA=y
8942+CONFIG_SCSI_TGT=y
8943+# CONFIG_SCSI_NETLINK is not set
8944+CONFIG_SCSI_PROC_FS=y
8945+
8946+#
8947+# SCSI support type (disk, tape, CD-ROM)
8948+#
8949+CONFIG_BLK_DEV_SD=y
8950+# CONFIG_CHR_DEV_ST is not set
8951+# CONFIG_CHR_DEV_OSST is not set
8952+# CONFIG_BLK_DEV_SR is not set
8953+# CONFIG_CHR_DEV_SG is not set
8954+# CONFIG_CHR_DEV_SCH is not set
8955+# CONFIG_SCSI_MULTI_LUN is not set
8956+CONFIG_SCSI_CONSTANTS=y
8957+# CONFIG_SCSI_LOGGING is not set
8958+# CONFIG_SCSI_SCAN_ASYNC is not set
8959+CONFIG_SCSI_WAIT_SCAN=m
8960+
8961+#
8962+# SCSI Transports
8963+#
8964+# CONFIG_SCSI_SPI_ATTRS is not set
8965+# CONFIG_SCSI_FC_ATTRS is not set
8966+# CONFIG_SCSI_ISCSI_ATTRS is not set
8967+# CONFIG_SCSI_SAS_LIBSAS is not set
8968+# CONFIG_SCSI_SRP_ATTRS is not set
8969+CONFIG_SCSI_LOWLEVEL=y
8970+# CONFIG_ISCSI_TCP is not set
8971+# CONFIG_SCSI_BNX2_ISCSI is not set
8972+# CONFIG_BE2ISCSI is not set
8973+# CONFIG_BLK_DEV_3W_XXXX_RAID is not set
8974+# CONFIG_SCSI_HPSA is not set
8975+# CONFIG_SCSI_3W_9XXX is not set
8976+# CONFIG_SCSI_3W_SAS is not set
8977+# CONFIG_SCSI_ACARD is not set
8978+# CONFIG_SCSI_AACRAID is not set
8979+# CONFIG_SCSI_AIC7XXX is not set
8980+# CONFIG_SCSI_AIC7XXX_OLD is not set
8981+# CONFIG_SCSI_AIC79XX is not set
8982+# CONFIG_SCSI_AIC94XX is not set
8983+# CONFIG_SCSI_MVSAS is not set
8984+# CONFIG_SCSI_DPT_I2O is not set
8985+# CONFIG_SCSI_ADVANSYS is not set
8986+# CONFIG_SCSI_ARCMSR is not set
8987+# CONFIG_MEGARAID_NEWGEN is not set
8988+# CONFIG_MEGARAID_LEGACY is not set
8989+# CONFIG_MEGARAID_SAS is not set
8990+# CONFIG_SCSI_MPT2SAS is not set
8991+# CONFIG_SCSI_HPTIOP is not set
8992+# CONFIG_SCSI_BUSLOGIC is not set
8993+# CONFIG_LIBFC is not set
8994+# CONFIG_LIBFCOE is not set
8995+# CONFIG_FCOE is not set
8996+# CONFIG_SCSI_DMX3191D is not set
8997+# CONFIG_SCSI_EATA is not set
8998+# CONFIG_SCSI_FUTURE_DOMAIN is not set
8999+# CONFIG_SCSI_GDTH is not set
9000+# CONFIG_SCSI_IPS is not set
9001+# CONFIG_SCSI_INITIO is not set
9002+# CONFIG_SCSI_INIA100 is not set
9003+# CONFIG_SCSI_STEX is not set
9004+# CONFIG_SCSI_SYM53C8XX_2 is not set
9005+# CONFIG_SCSI_QLOGIC_1280 is not set
9006+# CONFIG_SCSI_QLA_FC is not set
9007+# CONFIG_SCSI_QLA_ISCSI is not set
9008+# CONFIG_SCSI_LPFC is not set
9009+# CONFIG_SCSI_DC395x is not set
9010+# CONFIG_SCSI_DC390T is not set
9011+# CONFIG_SCSI_NSP32 is not set
9012+# CONFIG_SCSI_DEBUG is not set
9013+# CONFIG_SCSI_PMCRAID is not set
9014+# CONFIG_SCSI_PM8001 is not set
9015+# CONFIG_SCSI_SRP is not set
9016+# CONFIG_SCSI_BFA_FC is not set
9017+# CONFIG_SCSI_DH is not set
9018+# CONFIG_SCSI_OSD_INITIATOR is not set
9019+# CONFIG_ATA is not set
9020+CONFIG_MD=y
9021+CONFIG_BLK_DEV_MD=y
9022+CONFIG_MD_AUTODETECT=y
9023+CONFIG_MD_LINEAR=y
9024+CONFIG_MD_RAID0=y
9025+CONFIG_MD_RAID1=y
9026+CONFIG_MD_RAID10=y
9027+# CONFIG_MD_RAID456 is not set
9028+CONFIG_MD_MULTIPATH=y
9029+CONFIG_MD_FAULTY=y
9030+CONFIG_BLK_DEV_DM=y
9031+# CONFIG_DM_DEBUG is not set
9032+CONFIG_DM_CRYPT=y
9033+CONFIG_DM_SNAPSHOT=y
9034+CONFIG_DM_MIRROR=y
9035+# CONFIG_DM_LOG_USERSPACE is not set
9036+CONFIG_DM_ZERO=y
9037+# CONFIG_DM_MULTIPATH is not set
9038+# CONFIG_DM_DELAY is not set
9039+# CONFIG_DM_UEVENT is not set
9040+# CONFIG_FUSION is not set
9041+
9042+#
9043+# IEEE 1394 (FireWire) support
9044+#
9045+
9046+#
9047+# You can enable one or both FireWire driver stacks.
9048+#
9049+
9050+#
9051+# The newer stack is recommended.
9052+#
9053+# CONFIG_FIREWIRE is not set
9054+# CONFIG_IEEE1394 is not set
9055+# CONFIG_I2O is not set
9056+# CONFIG_MACINTOSH_DRIVERS is not set
9057+CONFIG_NETDEVICES=y
9058+CONFIG_DUMMY=y
9059+# CONFIG_BONDING is not set
9060+# CONFIG_MACVLAN is not set
9061+# CONFIG_EQUALIZER is not set
9062+CONFIG_TUN=y
9063+# CONFIG_VETH is not set
9064+# CONFIG_ARCNET is not set
9065+# CONFIG_PHYLIB is not set
9066+CONFIG_NET_ETHERNET=y
9067+CONFIG_MII=y
9068+# CONFIG_HAPPYMEAL is not set
9069+# CONFIG_SUNGEM is not set
9070+# CONFIG_CASSINI is not set
9071+# CONFIG_NET_VENDOR_3COM is not set
9072+# CONFIG_ETHOC is not set
9073+# CONFIG_DNET is not set
9074+# CONFIG_NET_TULIP is not set
9075+# CONFIG_HP100 is not set
9076+# CONFIG_IBM_NEW_EMAC is not set
9077+CONFIG_IBM_NEW_EMAC_ZMII=y
9078+# CONFIG_IBM_NEW_EMAC_RGMII is not set
9079+# CONFIG_IBM_NEW_EMAC_TAH is not set
9080+# CONFIG_IBM_NEW_EMAC_EMAC4 is not set
9081+# CONFIG_IBM_NEW_EMAC_NO_FLOW_CTRL is not set
9082+# CONFIG_IBM_NEW_EMAC_MAL_CLR_ICINTSTAT is not set
9083+# CONFIG_IBM_NEW_EMAC_MAL_COMMON_ERR is not set
9084+# CONFIG_NET_PCI is not set
9085+# CONFIG_B44 is not set
9086+# CONFIG_KS8842 is not set
9087+# CONFIG_KS8851_MLL is not set
9088+# CONFIG_ATL2 is not set
9089+# CONFIG_XILINX_EMACLITE is not set
9090+CONFIG_NETDEV_1000=y
9091+# CONFIG_ACENIC is not set
9092+# CONFIG_DL2K is not set
9093+CONFIG_E1000=y
9094+CONFIG_E1000E=y
9095+# CONFIG_IP1000 is not set
9096+CONFIG_IGB=y
9097+CONFIG_IGBVF=y
9098+# CONFIG_NS83820 is not set
9099+# CONFIG_HAMACHI is not set
9100+# CONFIG_YELLOWFIN is not set
9101+# CONFIG_R8169 is not set
9102+# CONFIG_SIS190 is not set
9103+# CONFIG_SKGE is not set
9104+# CONFIG_SKY2 is not set
9105+# CONFIG_VIA_VELOCITY is not set
9106+# CONFIG_TIGON3 is not set
9107+# CONFIG_BNX2 is not set
9108+# CONFIG_CNIC is not set
9109+# CONFIG_MV643XX_ETH is not set
9110+# CONFIG_XILINX_LL_TEMAC is not set
9111+# CONFIG_QLA3XXX is not set
9112+# CONFIG_ATL1 is not set
9113+# CONFIG_ATL1E is not set
9114+# CONFIG_ATL1C is not set
9115+# CONFIG_JME is not set
9116+# CONFIG_NETDEV_10000 is not set
9117+# CONFIG_TR is not set
9118+CONFIG_WLAN=y
9119+# CONFIG_AIRO is not set
9120+# CONFIG_ATMEL is not set
9121+# CONFIG_PRISM54 is not set
9122+CONFIG_USB_ZD1201=y
9123+# CONFIG_HOSTAP is not set
9124+
9125+#
9126+# Enable WiMAX (Networking options) to see the WiMAX drivers
9127+#
9128+
9129+#
9130+# USB Network Adapters
9131+#
9132+# CONFIG_USB_CATC is not set
9133+# CONFIG_USB_KAWETH is not set
9134+# CONFIG_USB_PEGASUS is not set
9135+# CONFIG_USB_RTL8150 is not set
9136+# CONFIG_USB_USBNET is not set
9137+# CONFIG_USB_IPHETH is not set
9138+# CONFIG_WAN is not set
9139+# CONFIG_RIONET is not set
9140+# CONFIG_FDDI is not set
9141+# CONFIG_HIPPI is not set
9142+CONFIG_PPP=m
9143+CONFIG_PPP_MULTILINK=y
9144+CONFIG_PPP_FILTER=y
9145+CONFIG_PPP_ASYNC=m
9146+CONFIG_PPP_SYNC_TTY=m
9147+CONFIG_PPP_DEFLATE=m
9148+CONFIG_PPP_BSDCOMP=m
9149+# CONFIG_PPP_MPPE is not set
9150+CONFIG_PPPOE=m
9151+CONFIG_SLIP=m
9152+CONFIG_SLIP_COMPRESSED=y
9153+CONFIG_SLHC=m
9154+CONFIG_SLIP_SMART=y
9155+CONFIG_SLIP_MODE_SLIP6=y
9156+# CONFIG_NET_FC is not set
9157+CONFIG_NETCONSOLE=y
9158+# CONFIG_NETCONSOLE_DYNAMIC is not set
9159+CONFIG_NETPOLL=y
9160+CONFIG_NETPOLL_TRAP=y
9161+CONFIG_NET_POLL_CONTROLLER=y
9162+# CONFIG_VMXNET3 is not set
9163+# CONFIG_ISDN is not set
9164+# CONFIG_PHONE is not set
9165+
9166+#
9167+# Input device support
9168+#
9169+CONFIG_INPUT=y
9170+# CONFIG_INPUT_FF_MEMLESS is not set
9171+# CONFIG_INPUT_POLLDEV is not set
9172+# CONFIG_INPUT_SPARSEKMAP is not set
9173+
9174+#
9175+# Userland interfaces
9176+#
9177+CONFIG_INPUT_MOUSEDEV=y
9178+CONFIG_INPUT_MOUSEDEV_PSAUX=y
9179+CONFIG_INPUT_MOUSEDEV_SCREEN_X=1024
9180+CONFIG_INPUT_MOUSEDEV_SCREEN_Y=768
9181+# CONFIG_INPUT_JOYDEV is not set
9182+# CONFIG_INPUT_EVDEV is not set
9183+# CONFIG_INPUT_EVBUG is not set
9184+
9185+#
9186+# Input Device Drivers
9187+#
9188+# CONFIG_INPUT_KEYBOARD is not set
9189+# CONFIG_INPUT_MOUSE is not set
9190+# CONFIG_INPUT_JOYSTICK is not set
9191+# CONFIG_INPUT_TABLET is not set
9192+# CONFIG_INPUT_TOUCHSCREEN is not set
9193+# CONFIG_INPUT_MISC is not set
9194+
9195+#
9196+# Hardware I/O ports
9197+#
9198+CONFIG_SERIO=y
9199+CONFIG_SERIO_I8042=y
9200+CONFIG_SERIO_SERPORT=y
9201+# CONFIG_SERIO_PCIPS2 is not set
9202+CONFIG_SERIO_LIBPS2=y
9203+# CONFIG_SERIO_RAW is not set
9204+# CONFIG_SERIO_XILINX_XPS_PS2 is not set
9205+# CONFIG_SERIO_ALTERA_PS2 is not set
9206+# CONFIG_GAMEPORT is not set
9207+
9208+#
9209+# Character devices
9210+#
9211+CONFIG_VT=y
9212+CONFIG_CONSOLE_TRANSLATIONS=y
9213+CONFIG_VT_CONSOLE=y
9214+CONFIG_HW_CONSOLE=y
9215+# CONFIG_VT_HW_CONSOLE_BINDING is not set
9216+CONFIG_DEVKMEM=y
9217+# CONFIG_SERIAL_NONSTANDARD is not set
9218+CONFIG_N_GSM=y
9219+# CONFIG_NOZOMI is not set
9220+
9221+#
9222+# Serial drivers
9223+#
9224+# CONFIG_SERIAL_8250 is not set
9225+
9226+#
9227+# Non-8250 serial port support
9228+#
9229+# CONFIG_SERIAL_UARTLITE is not set
9230+CONFIG_SERIAL_CORE=y
9231+CONFIG_SERIAL_CORE_CONSOLE=y
9232+# CONFIG_SERIAL_JSM is not set
9233+# CONFIG_SERIAL_OF_PLATFORM_NWPSERIAL is not set
9234+# CONFIG_SERIAL_TIMBERDALE is not set
9235+# CONFIG_SERIAL_GRLIB_GAISLER_APBUART is not set
9236+# CONFIG_SERIAL_ALTERA_JTAGUART is not set
9237+# CONFIG_SERIAL_ALTERA_UART is not set
9238+CONFIG_UNIX98_PTYS=y
9239+# CONFIG_DEVPTS_MULTIPLE_INSTANCES is not set
9240+CONFIG_LEGACY_PTYS=y
9241+CONFIG_LEGACY_PTY_COUNT=20
9242+# CONFIG_HVC_UDBG is not set
9243+# CONFIG_IPMI_HANDLER is not set
9244+# CONFIG_HW_RANDOM is not set
9245+# CONFIG_NVRAM is not set
9246+# CONFIG_GEN_RTC is not set
9247+# CONFIG_R3964 is not set
9248+# CONFIG_APPLICOM is not set
9249+# CONFIG_RAW_DRIVER is not set
9250+# CONFIG_TCG_TPM is not set
9251+CONFIG_DEVPORT=y
9252+# CONFIG_RAMOOPS is not set
9253+# CONFIG_I2C is not set
9254+# CONFIG_SPI is not set
9255+
9256+#
9257+# PPS support
9258+#
9259+# CONFIG_PPS is not set
9260+CONFIG_ARCH_WANT_OPTIONAL_GPIOLIB=y
9261+# CONFIG_GPIOLIB is not set
9262+# CONFIG_W1 is not set
9263+# CONFIG_POWER_SUPPLY is not set
9264+# CONFIG_HWMON is not set
9265+CONFIG_THERMAL=y
9266+# CONFIG_WATCHDOG is not set
9267+CONFIG_SSB_POSSIBLE=y
9268+
9269+#
9270+# Sonics Silicon Backplane
9271+#
9272+# CONFIG_SSB is not set
9273+# CONFIG_MFD_SUPPORT is not set
9274+# CONFIG_REGULATOR is not set
9275+# CONFIG_MEDIA_SUPPORT is not set
9276+
9277+#
9278+# Graphics support
9279+#
9280+# CONFIG_AGP is not set
9281+# CONFIG_VGA_ARB is not set
9282+# CONFIG_DRM is not set
9283+# CONFIG_VGASTATE is not set
9284+# CONFIG_VIDEO_OUTPUT_CONTROL is not set
9285+# CONFIG_FB is not set
9286+# CONFIG_BACKLIGHT_LCD_SUPPORT is not set
9287+
9288+#
9289+# Display device support
9290+#
9291+# CONFIG_DISPLAY_SUPPORT is not set
9292+
9293+#
9294+# Console display driver support
9295+#
9296+CONFIG_DUMMY_CONSOLE=y
9297+# CONFIG_SOUND is not set
9298+CONFIG_HID_SUPPORT=y
9299+CONFIG_HID=y
9300+CONFIG_HIDRAW=y
9301+
9302+#
9303+# USB Input Devices
9304+#
9305+CONFIG_USB_HID=y
9306+CONFIG_HID_PID=y
9307+CONFIG_USB_HIDDEV=y
9308+
9309+#
9310+# Special HID drivers
9311+#
9312+CONFIG_HID_3M_PCT=y
9313+CONFIG_HID_A4TECH=y
9314+CONFIG_HID_APPLE=y
9315+# CONFIG_HID_BELKIN is not set
9316+# CONFIG_HID_CANDO is not set
9317+# CONFIG_HID_CHERRY is not set
9318+# CONFIG_HID_CHICONY is not set
9319+# CONFIG_HID_CYPRESS is not set
9320+# CONFIG_HID_DRAGONRISE is not set
9321+# CONFIG_HID_EGALAX is not set
9322+# CONFIG_HID_EZKEY is not set
9323+# CONFIG_HID_KYE is not set
9324+# CONFIG_HID_GYRATION is not set
9325+# CONFIG_HID_TWINHAN is not set
9326+# CONFIG_HID_KENSINGTON is not set
9327+# CONFIG_HID_LOGITECH is not set
9328+# CONFIG_HID_MICROSOFT is not set
9329+# CONFIG_HID_MOSART is not set
9330+# CONFIG_HID_MONTEREY is not set
9331+# CONFIG_HID_NTRIG is not set
9332+# CONFIG_HID_ORTEK is not set
9333+# CONFIG_HID_PANTHERLORD is not set
9334+# CONFIG_HID_PETALYNX is not set
9335+# CONFIG_HID_PICOLCD is not set
9336+# CONFIG_HID_QUANTA is not set
9337+# CONFIG_HID_ROCCAT is not set
9338+# CONFIG_HID_ROCCAT_KONE is not set
9339+# CONFIG_HID_SAMSUNG is not set
9340+# CONFIG_HID_SONY is not set
9341+# CONFIG_HID_STANTUM is not set
9342+# CONFIG_HID_SUNPLUS is not set
9343+# CONFIG_HID_GREENASIA is not set
9344+# CONFIG_HID_SMARTJOYPLUS is not set
9345+# CONFIG_HID_TOPSEED is not set
9346+# CONFIG_HID_THRUSTMASTER is not set
9347+# CONFIG_HID_ZEROPLUS is not set
9348+# CONFIG_HID_ZYDACRON is not set
9349+CONFIG_USB_SUPPORT=y
9350+CONFIG_USB_ARCH_HAS_HCD=y
9351+CONFIG_USB_ARCH_HAS_OHCI=y
9352+CONFIG_USB_ARCH_HAS_EHCI=y
9353+CONFIG_USB=y
9354+# CONFIG_USB_DEBUG is not set
9355+CONFIG_USB_ANNOUNCE_NEW_DEVICES=y
9356+
9357+#
9358+# Miscellaneous USB options
9359+#
9360+CONFIG_USB_DEVICEFS=y
9361+CONFIG_USB_DEVICE_CLASS=y
9362+CONFIG_USB_DYNAMIC_MINORS=y
9363+# CONFIG_USB_OTG_WHITELIST is not set
9364+# CONFIG_USB_OTG_BLACKLIST_HUB is not set
9365+CONFIG_USB_MON=y
9366+# CONFIG_USB_WUSB is not set
9367+# CONFIG_USB_WUSB_CBAF is not set
9368+
9369+#
9370+# USB Host Controller Drivers
9371+#
9372+# CONFIG_USB_C67X00_HCD is not set
9373+# CONFIG_USB_XHCI_HCD is not set
9374+CONFIG_USB_EHCI_HCD=y
9375+CONFIG_USB_EHCI_ROOT_HUB_TT=y
9376+# CONFIG_USB_EHCI_TT_NEWSCHED is not set
9377+CONFIG_USB_EHCI_BIG_ENDIAN_MMIO=y
9378+CONFIG_USB_EHCI_BIG_ENDIAN_DESC=y
9379+CONFIG_XPS_USB_HCD_XILINX=y
9380+# CONFIG_USB_EHCI_HCD_PPC_OF is not set
9381+# CONFIG_USB_OXU210HP_HCD is not set
9382+CONFIG_USB_CI13612_HCD=y
9383+# CONFIG_USB_ISP116X_HCD is not set
9384+# CONFIG_USB_ISP1760_HCD is not set
9385+# CONFIG_USB_ISP1362_HCD is not set
9386+# CONFIG_USB_OHCI_HCD is not set
9387+# CONFIG_USB_UHCI_HCD is not set
9388+# CONFIG_USB_SL811_HCD is not set
9389+# CONFIG_USB_R8A66597_HCD is not set
9390+# CONFIG_USB_WHCI_HCD is not set
9391+# CONFIG_USB_HWA_HCD is not set
9392+
9393+#
9394+# USB Device Class drivers
9395+#
9396+# CONFIG_USB_ACM is not set
9397+# CONFIG_USB_PRINTER is not set
9398+# CONFIG_USB_WDM is not set
9399+# CONFIG_USB_TMC is not set
9400+
9401+#
9402+# NOTE: USB_STORAGE depends on SCSI but BLK_DEV_SD may
9403+#
9404+
9405+#
9406+# also be needed; see USB_STORAGE Help for more info
9407+#
9408+CONFIG_USB_STORAGE=y
9409+# CONFIG_USB_STORAGE_DEBUG is not set
9410+# CONFIG_USB_STORAGE_DATAFAB is not set
9411+# CONFIG_USB_STORAGE_FREECOM is not set
9412+# CONFIG_USB_STORAGE_ISD200 is not set
9413+# CONFIG_USB_STORAGE_USBAT is not set
9414+# CONFIG_USB_STORAGE_SDDR09 is not set
9415+# CONFIG_USB_STORAGE_SDDR55 is not set
9416+# CONFIG_USB_STORAGE_JUMPSHOT is not set
9417+# CONFIG_USB_STORAGE_ALAUDA is not set
9418+# CONFIG_USB_STORAGE_ONETOUCH is not set
9419+# CONFIG_USB_STORAGE_KARMA is not set
9420+# CONFIG_USB_STORAGE_CYPRESS_ATACB is not set
9421+CONFIG_USB_LIBUSUAL=y
9422+
9423+#
9424+# USB Imaging devices
9425+#
9426+# CONFIG_USB_MDC800 is not set
9427+# CONFIG_USB_MICROTEK is not set
9428+
9429+#
9430+# USB port drivers
9431+#
9432+# CONFIG_USB_SERIAL is not set
9433+
9434+#
9435+# USB Miscellaneous drivers
9436+#
9437+# CONFIG_USB_EMI62 is not set
9438+# CONFIG_USB_EMI26 is not set
9439+# CONFIG_USB_ADUTUX is not set
9440+# CONFIG_USB_SEVSEG is not set
9441+# CONFIG_USB_RIO500 is not set
9442+# CONFIG_USB_LEGOTOWER is not set
9443+# CONFIG_USB_LCD is not set
9444+# CONFIG_USB_LED is not set
9445+# CONFIG_USB_CYPRESS_CY7C63 is not set
9446+# CONFIG_USB_CYTHERM is not set
9447+# CONFIG_USB_IDMOUSE is not set
9448+# CONFIG_USB_FTDI_ELAN is not set
9449+# CONFIG_USB_APPLEDISPLAY is not set
9450+# CONFIG_USB_SISUSBVGA is not set
9451+# CONFIG_USB_LD is not set
9452+# CONFIG_USB_TRANCEVIBRATOR is not set
9453+# CONFIG_USB_IOWARRIOR is not set
9454+# CONFIG_USB_TEST is not set
9455+# CONFIG_USB_ISIGHTFW is not set
9456+# CONFIG_USB_GADGET is not set
9457+
9458+#
9459+# OTG and related infrastructure
9460+#
9461+# CONFIG_NOP_USB_XCEIV is not set
9462+# CONFIG_UWB is not set
9463+# CONFIG_MMC is not set
9464+# CONFIG_MEMSTICK is not set
9465+# CONFIG_NEW_LEDS is not set
9466+# CONFIG_ACCESSIBILITY is not set
9467+# CONFIG_INFINIBAND is not set
9468+# CONFIG_EDAC is not set
9469+# CONFIG_RTC_CLASS is not set
9470+# CONFIG_DMADEVICES is not set
9471+# CONFIG_AUXDISPLAY is not set
9472+# CONFIG_UIO is not set
9473+# CONFIG_STAGING is not set
9474+
9475+#
9476+# LSI Drivers (APP3, APP3K, and ACP)
9477+#
9478+CONFIG_SERIAL_ACP=y
9479+CONFIG_SERIAL_ACP_CONSOLE=y
9480+# CONFIG_SERIAL_ACP_CONSOLE_POLL is not set
9481+CONFIG_LSI_NET=y
9482+CONFIG_LSI_NET_NUM_RX_DESC=16
9483+CONFIG_LSI_NET_RX_BUF_SZ=131072
9484+CONFIG_LSI_NET_NUM_TX_DESC=8
9485+CONFIG_LSI_NET_TX_BUF_SZ=65536
9486+CONFIG_LSI_NAND=y
9487+CONFIG_LSI_UBOOTENV=y
9488+
9489+#
9490+# File systems
9491+#
9492+CONFIG_EXT2_FS=y
9493+# CONFIG_EXT2_FS_XATTR is not set
9494+# CONFIG_EXT2_FS_XIP is not set
9495+# CONFIG_EXT3_FS is not set
9496+# CONFIG_EXT4_FS is not set
9497+# CONFIG_REISERFS_FS is not set
9498+# CONFIG_JFS_FS is not set
9499+CONFIG_FS_POSIX_ACL=y
9500+# CONFIG_XFS_FS is not set
9501+# CONFIG_GFS2_FS is not set
9502+# CONFIG_OCFS2_FS is not set
9503+# CONFIG_BTRFS_FS is not set
9504+# CONFIG_NILFS2_FS is not set
9505+CONFIG_FILE_LOCKING=y
9506+CONFIG_FSNOTIFY=y
9507+# CONFIG_DNOTIFY is not set
9508+CONFIG_INOTIFY=y
9509+CONFIG_INOTIFY_USER=y
9510+# CONFIG_QUOTA is not set
9511+CONFIG_AUTOFS_FS=y
9512+CONFIG_AUTOFS4_FS=y
9513+# CONFIG_FUSE_FS is not set
9514+
9515+#
9516+# Caches
9517+#
9518+# CONFIG_FSCACHE is not set
9519+
9520+#
9521+# CD-ROM/DVD Filesystems
9522+#
9523+# CONFIG_ISO9660_FS is not set
9524+# CONFIG_UDF_FS is not set
9525+
9526+#
9527+# DOS/FAT/NT Filesystems
9528+#
9529+CONFIG_FAT_FS=y
9530+CONFIG_MSDOS_FS=y
9531+CONFIG_VFAT_FS=y
9532+CONFIG_FAT_DEFAULT_CODEPAGE=437
9533+CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1"
9534+# CONFIG_NTFS_FS is not set
9535+
9536+#
9537+# Pseudo filesystems
9538+#
9539+CONFIG_PROC_FS=y
9540+# CONFIG_PROC_KCORE is not set
9541+CONFIG_PROC_SYSCTL=y
9542+CONFIG_PROC_PAGE_MONITOR=y
9543+CONFIG_SYSFS=y
9544+CONFIG_TMPFS=y
9545+# CONFIG_TMPFS_POSIX_ACL is not set
9546+# CONFIG_HUGETLB_PAGE is not set
9547+# CONFIG_CONFIGFS_FS is not set
9548+CONFIG_MISC_FILESYSTEMS=y
9549+# CONFIG_ADFS_FS is not set
9550+# CONFIG_AFFS_FS is not set
9551+# CONFIG_ECRYPT_FS is not set
9552+# CONFIG_HFS_FS is not set
9553+# CONFIG_HFSPLUS_FS is not set
9554+# CONFIG_BEFS_FS is not set
9555+# CONFIG_BFS_FS is not set
9556+# CONFIG_EFS_FS is not set
9557+CONFIG_JFFS2_FS=y
9558+CONFIG_JFFS2_FS_DEBUG=0
9559+CONFIG_JFFS2_FS_WRITEBUFFER=y
9560+# CONFIG_JFFS2_FS_WBUF_VERIFY is not set
9561+# CONFIG_JFFS2_SUMMARY is not set
9562+# CONFIG_JFFS2_FS_XATTR is not set
9563+# CONFIG_JFFS2_COMPRESSION_OPTIONS is not set
9564+CONFIG_JFFS2_ZLIB=y
9565+# CONFIG_JFFS2_LZO is not set
9566+CONFIG_JFFS2_RTIME=y
9567+# CONFIG_JFFS2_RUBIN is not set
9568+# CONFIG_LOGFS is not set
9569+# CONFIG_CRAMFS is not set
9570+# CONFIG_SQUASHFS is not set
9571+# CONFIG_VXFS_FS is not set
9572+# CONFIG_MINIX_FS is not set
9573+# CONFIG_OMFS_FS is not set
9574+# CONFIG_HPFS_FS is not set
9575+# CONFIG_QNX4FS_FS is not set
9576+# CONFIG_ROMFS_FS is not set
9577+# CONFIG_SYSV_FS is not set
9578+# CONFIG_UFS_FS is not set
9579+CONFIG_NETWORK_FILESYSTEMS=y
9580+CONFIG_NFS_FS=y
9581+CONFIG_NFS_V3=y
9582+CONFIG_NFS_V3_ACL=y
9583+CONFIG_NFS_V4=y
9584+# CONFIG_NFS_V4_1 is not set
9585+CONFIG_ROOT_NFS=y
9586+# CONFIG_NFSD is not set
9587+CONFIG_LOCKD=y
9588+CONFIG_LOCKD_V4=y
9589+CONFIG_NFS_ACL_SUPPORT=y
9590+CONFIG_NFS_COMMON=y
9591+CONFIG_SUNRPC=y
9592+CONFIG_SUNRPC_GSS=y
9593+CONFIG_RPCSEC_GSS_KRB5=y
9594+# CONFIG_RPCSEC_GSS_SPKM3 is not set
9595+# CONFIG_SMB_FS is not set
9596+# CONFIG_CEPH_FS is not set
9597+# CONFIG_CIFS is not set
9598+# CONFIG_NCP_FS is not set
9599+# CONFIG_CODA_FS is not set
9600+# CONFIG_AFS_FS is not set
9601+
9602+#
9603+# Partition Types
9604+#
9605+# CONFIG_PARTITION_ADVANCED is not set
9606+CONFIG_MSDOS_PARTITION=y
9607+CONFIG_NLS=y
9608+CONFIG_NLS_DEFAULT="iso8859-1"
9609+CONFIG_NLS_CODEPAGE_437=y
9610+# CONFIG_NLS_CODEPAGE_737 is not set
9611+# CONFIG_NLS_CODEPAGE_775 is not set
9612+CONFIG_NLS_CODEPAGE_850=y
9613+# CONFIG_NLS_CODEPAGE_852 is not set
9614+# CONFIG_NLS_CODEPAGE_855 is not set
9615+# CONFIG_NLS_CODEPAGE_857 is not set
9616+# CONFIG_NLS_CODEPAGE_860 is not set
9617+# CONFIG_NLS_CODEPAGE_861 is not set
9618+# CONFIG_NLS_CODEPAGE_862 is not set
9619+# CONFIG_NLS_CODEPAGE_863 is not set
9620+# CONFIG_NLS_CODEPAGE_864 is not set
9621+CONFIG_NLS_CODEPAGE_865=y
9622+# CONFIG_NLS_CODEPAGE_866 is not set
9623+# CONFIG_NLS_CODEPAGE_869 is not set
9624+# CONFIG_NLS_CODEPAGE_936 is not set
9625+# CONFIG_NLS_CODEPAGE_950 is not set
9626+# CONFIG_NLS_CODEPAGE_932 is not set
9627+# CONFIG_NLS_CODEPAGE_949 is not set
9628+# CONFIG_NLS_CODEPAGE_874 is not set
9629+# CONFIG_NLS_ISO8859_8 is not set
9630+# CONFIG_NLS_CODEPAGE_1250 is not set
9631+# CONFIG_NLS_CODEPAGE_1251 is not set
9632+CONFIG_NLS_ASCII=y
9633+CONFIG_NLS_ISO8859_1=y
9634+# CONFIG_NLS_ISO8859_2 is not set
9635+# CONFIG_NLS_ISO8859_3 is not set
9636+# CONFIG_NLS_ISO8859_4 is not set
9637+# CONFIG_NLS_ISO8859_5 is not set
9638+# CONFIG_NLS_ISO8859_6 is not set
9639+# CONFIG_NLS_ISO8859_7 is not set
9640+# CONFIG_NLS_ISO8859_9 is not set
9641+# CONFIG_NLS_ISO8859_13 is not set
9642+# CONFIG_NLS_ISO8859_14 is not set
9643+# CONFIG_NLS_ISO8859_15 is not set
9644+# CONFIG_NLS_KOI8_R is not set
9645+# CONFIG_NLS_KOI8_U is not set
9646+# CONFIG_NLS_UTF8 is not set
9647+# CONFIG_DLM is not set
9648+# CONFIG_BINARY_PRINTF is not set
9649+
9650+#
9651+# Library routines
9652+#
9653+CONFIG_BITREVERSE=y
9654+CONFIG_GENERIC_FIND_LAST_BIT=y
9655+CONFIG_CRC_CCITT=m
9656+# CONFIG_CRC16 is not set
9657+# CONFIG_CRC_T10DIF is not set
9658+# CONFIG_CRC_ITU_T is not set
9659+CONFIG_CRC32=y
9660+# CONFIG_CRC7 is not set
9661+# CONFIG_LIBCRC32C is not set
9662+CONFIG_ZLIB_INFLATE=y
9663+CONFIG_ZLIB_DEFLATE=y
9664+CONFIG_DECOMPRESS_GZIP=y
9665+CONFIG_HAS_IOMEM=y
9666+CONFIG_HAS_IOPORT=y
9667+CONFIG_HAS_DMA=y
9668+CONFIG_NLATTR=y
9669+CONFIG_GENERIC_ATOMIC64=y
9670+
9671+#
9672+# Kernel hacking
9673+#
9674+# CONFIG_PRINTK_TIME is not set
9675+CONFIG_ENABLE_WARN_DEPRECATED=y
9676+CONFIG_ENABLE_MUST_CHECK=y
9677+CONFIG_FRAME_WARN=1024
9678+CONFIG_MAGIC_SYSRQ=y
9679+# CONFIG_STRIP_ASM_SYMS is not set
9680+# CONFIG_UNUSED_SYMBOLS is not set
9681+CONFIG_DEBUG_FS=y
9682+# CONFIG_HEADERS_CHECK is not set
9683+CONFIG_DEBUG_KERNEL=y
9684+# CONFIG_DEBUG_SHIRQ is not set
9685+# CONFIG_DETECT_SOFTLOCKUP is not set
9686+# CONFIG_DETECT_HUNG_TASK is not set
9687+CONFIG_SCHED_DEBUG=y
9688+# CONFIG_SCHEDSTATS is not set
9689+# CONFIG_TIMER_STATS is not set
9690+# CONFIG_DEBUG_OBJECTS is not set
9691+# CONFIG_SLUB_DEBUG_ON is not set
9692+# CONFIG_SLUB_STATS is not set
9693+# CONFIG_DEBUG_KMEMLEAK is not set
9694+# CONFIG_DEBUG_RT_MUTEXES is not set
9695+# CONFIG_RT_MUTEX_TESTER is not set
9696+# CONFIG_DEBUG_SPINLOCK is not set
9697+# CONFIG_DEBUG_MUTEXES is not set
9698+# CONFIG_DEBUG_LOCK_ALLOC is not set
9699+# CONFIG_PROVE_LOCKING is not set
9700+# CONFIG_LOCK_STAT is not set
9701+# CONFIG_DEBUG_SPINLOCK_SLEEP is not set
9702+# CONFIG_DEBUG_LOCKING_API_SELFTESTS is not set
9703+# CONFIG_DEBUG_KOBJECT is not set
9704+# CONFIG_DEBUG_HIGHMEM is not set
9705+CONFIG_DEBUG_BUGVERBOSE=y
9706+CONFIG_DEBUG_INFO=y
9707+# CONFIG_DEBUG_VM is not set
9708+# CONFIG_DEBUG_WRITECOUNT is not set
9709+# CONFIG_DEBUG_MEMORY_INIT is not set
9710+# CONFIG_DEBUG_LIST is not set
9711+# CONFIG_DEBUG_SG is not set
9712+# CONFIG_DEBUG_NOTIFIERS is not set
9713+# CONFIG_DEBUG_CREDENTIALS is not set
9714+# CONFIG_RCU_TORTURE_TEST is not set
9715+# CONFIG_RCU_CPU_STALL_DETECTOR is not set
9716+# CONFIG_BACKTRACE_SELF_TEST is not set
9717+# CONFIG_DEBUG_BLOCK_EXT_DEVT is not set
9718+# CONFIG_DEBUG_FORCE_WEAK_PER_CPU is not set
9719+# CONFIG_LKDTM is not set
9720+# CONFIG_FAULT_INJECTION is not set
9721+# CONFIG_LATENCYTOP is not set
9722+CONFIG_SYSCTL_SYSCALL_CHECK=y
9723+# CONFIG_DEBUG_PAGEALLOC is not set
9724+CONFIG_HAVE_FUNCTION_TRACER=y
9725+CONFIG_HAVE_FUNCTION_GRAPH_TRACER=y
9726+CONFIG_HAVE_DYNAMIC_FTRACE=y
9727+CONFIG_HAVE_FTRACE_MCOUNT_RECORD=y
9728+CONFIG_RING_BUFFER=y
9729+CONFIG_RING_BUFFER_ALLOW_SWAP=y
9730+CONFIG_TRACING_SUPPORT=y
9731+CONFIG_FTRACE=y
9732+# CONFIG_FUNCTION_TRACER is not set
9733+# CONFIG_IRQSOFF_TRACER is not set
9734+# CONFIG_SCHED_TRACER is not set
9735+# CONFIG_ENABLE_DEFAULT_TRACERS is not set
9736+# CONFIG_BOOT_TRACER is not set
9737+CONFIG_BRANCH_PROFILE_NONE=y
9738+# CONFIG_PROFILE_ANNOTATED_BRANCHES is not set
9739+# CONFIG_PROFILE_ALL_BRANCHES is not set
9740+# CONFIG_STACK_TRACER is not set
9741+# CONFIG_KMEMTRACE is not set
9742+# CONFIG_WORKQUEUE_TRACER is not set
9743+# CONFIG_BLK_DEV_IO_TRACE is not set
9744+# CONFIG_RING_BUFFER_BENCHMARK is not set
9745+# CONFIG_DYNAMIC_DEBUG is not set
9746+# CONFIG_DMA_API_DEBUG is not set
9747+# CONFIG_ATOMIC64_SELFTEST is not set
9748+# CONFIG_SAMPLES is not set
9749+CONFIG_HAVE_ARCH_KGDB=y
9750+# CONFIG_KGDB is not set
9751+# CONFIG_PPC_DISABLE_WERROR is not set
9752+CONFIG_PPC_WERROR=y
9753+CONFIG_PRINT_STACK_DEPTH=64
9754+# CONFIG_DEBUG_STACKOVERFLOW is not set
9755+# CONFIG_DEBUG_STACK_USAGE is not set
9756+# CONFIG_DEBUG_PER_CPU_MAPS is not set
9757+# CONFIG_PPC_EMULATED_STATS is not set
9758+# CONFIG_CODE_PATCHING_SELFTEST is not set
9759+# CONFIG_FTR_FIXUP_SELFTEST is not set
9760+# CONFIG_MSI_BITMAP_SELFTEST is not set
9761+CONFIG_XMON=y
9762+CONFIG_XMON_DEFAULT=y
9763+CONFIG_XMON_DISASSEMBLY=y
9764+CONFIG_DEBUGGER=y
9765+# CONFIG_VIRQ_DEBUG is not set
9766+# CONFIG_BDI_SWITCH is not set
9767+# CONFIG_PPC_EARLY_DEBUG is not set
9768+
9769+#
9770+# Security options
9771+#
9772+CONFIG_KEYS=y
9773+# CONFIG_KEYS_DEBUG_PROC_KEYS is not set
9774+# CONFIG_SECURITY is not set
9775+# CONFIG_SECURITYFS is not set
9776+# CONFIG_DEFAULT_SECURITY_SELINUX is not set
9777+# CONFIG_DEFAULT_SECURITY_SMACK is not set
9778+# CONFIG_DEFAULT_SECURITY_TOMOYO is not set
9779+CONFIG_DEFAULT_SECURITY_DAC=y
9780+CONFIG_DEFAULT_SECURITY=""
9781+CONFIG_CRYPTO=y
9782+
9783+#
9784+# Crypto core or helper
9785+#
9786+CONFIG_CRYPTO_ALGAPI=y
9787+CONFIG_CRYPTO_ALGAPI2=y
9788+CONFIG_CRYPTO_AEAD=y
9789+CONFIG_CRYPTO_AEAD2=y
9790+CONFIG_CRYPTO_BLKCIPHER=y
9791+CONFIG_CRYPTO_BLKCIPHER2=y
9792+CONFIG_CRYPTO_HASH=y
9793+CONFIG_CRYPTO_HASH2=y
9794+CONFIG_CRYPTO_RNG=y
9795+CONFIG_CRYPTO_RNG2=y
9796+CONFIG_CRYPTO_PCOMP=y
9797+CONFIG_CRYPTO_MANAGER=y
9798+CONFIG_CRYPTO_MANAGER2=y
9799+CONFIG_CRYPTO_GF128MUL=y
9800+CONFIG_CRYPTO_NULL=y
9801+# CONFIG_CRYPTO_PCRYPT is not set
9802+CONFIG_CRYPTO_WORKQUEUE=y
9803+# CONFIG_CRYPTO_CRYPTD is not set
9804+CONFIG_CRYPTO_AUTHENC=y
9805+# CONFIG_CRYPTO_TEST is not set
9806+
9807+#
9808+# Authenticated Encryption with Associated Data
9809+#
9810+# CONFIG_CRYPTO_CCM is not set
9811+CONFIG_CRYPTO_GCM=y
9812+CONFIG_CRYPTO_SEQIV=y
9813+
9814+#
9815+# Block modes
9816+#
9817+CONFIG_CRYPTO_CBC=y
9818+CONFIG_CRYPTO_CTR=y
9819+# CONFIG_CRYPTO_CTS is not set
9820+# CONFIG_CRYPTO_ECB is not set
9821+# CONFIG_CRYPTO_LRW is not set
9822+# CONFIG_CRYPTO_PCBC is not set
9823+# CONFIG_CRYPTO_XTS is not set
9824+
9825+#
9826+# Hash modes
9827+#
9828+CONFIG_CRYPTO_HMAC=y
9829+CONFIG_CRYPTO_XCBC=y
9830+# CONFIG_CRYPTO_VMAC is not set
9831+
9832+#
9833+# Digest
9834+#
9835+# CONFIG_CRYPTO_CRC32C is not set
9836+CONFIG_CRYPTO_GHASH=y
9837+# CONFIG_CRYPTO_MD4 is not set
9838+CONFIG_CRYPTO_MD5=y
9839+# CONFIG_CRYPTO_MICHAEL_MIC is not set
9840+# CONFIG_CRYPTO_RMD128 is not set
9841+# CONFIG_CRYPTO_RMD160 is not set
9842+# CONFIG_CRYPTO_RMD256 is not set
9843+# CONFIG_CRYPTO_RMD320 is not set
9844+CONFIG_CRYPTO_SHA1=y
9845+CONFIG_CRYPTO_SHA256=y
9846+# CONFIG_CRYPTO_SHA512 is not set
9847+# CONFIG_CRYPTO_TGR192 is not set
9848+# CONFIG_CRYPTO_WP512 is not set
9849+
9850+#
9851+# Ciphers
9852+#
9853+CONFIG_CRYPTO_AES=y
9854+# CONFIG_CRYPTO_ANUBIS is not set
9855+# CONFIG_CRYPTO_ARC4 is not set
9856+# CONFIG_CRYPTO_BLOWFISH is not set
9857+# CONFIG_CRYPTO_CAMELLIA is not set
9858+# CONFIG_CRYPTO_CAST5 is not set
9859+# CONFIG_CRYPTO_CAST6 is not set
9860+CONFIG_CRYPTO_DES=y
9861+# CONFIG_CRYPTO_FCRYPT is not set
9862+# CONFIG_CRYPTO_KHAZAD is not set
9863+# CONFIG_CRYPTO_SALSA20 is not set
9864+# CONFIG_CRYPTO_SEED is not set
9865+# CONFIG_CRYPTO_SERPENT is not set
9866+# CONFIG_CRYPTO_TEA is not set
9867+# CONFIG_CRYPTO_TWOFISH is not set
9868+
9869+#
9870+# Compression
9871+#
9872+CONFIG_CRYPTO_DEFLATE=y
9873+# CONFIG_CRYPTO_ZLIB is not set
9874+# CONFIG_CRYPTO_LZO is not set
9875+
9876+#
9877+# Random Number Generation
9878+#
9879+# CONFIG_CRYPTO_ANSI_CPRNG is not set
9880+CONFIG_CRYPTO_HW=y
9881+# CONFIG_CRYPTO_DEV_HIFN_795X is not set
9882+CONFIG_CRYPTO_DEV_PPC4XX=y
9883+# CONFIG_PPC_CLOCK is not set
9884+# CONFIG_VIRTUALIZATION is not set
9885diff --git a/arch/powerpc/configs/acpiss_defconfig b/arch/powerpc/configs/acpiss_defconfig
9886new file mode 100644
9887index 0000000..a9e909f
9888--- /dev/null
9889+++ b/arch/powerpc/configs/acpiss_defconfig
9890@@ -0,0 +1,1054 @@
9891+#
9892+# Automatically generated make config: don't edit
9893+# Linux kernel version: 2.6.35
9894+# Wed Sep 14 11:18:14 2011
9895+#
9896+# CONFIG_PPC64 is not set
9897+
9898+#
9899+# Processor support
9900+#
9901+# CONFIG_PPC_BOOK3S_32 is not set
9902+# CONFIG_PPC_85xx is not set
9903+# CONFIG_PPC_8xx is not set
9904+# CONFIG_40x is not set
9905+CONFIG_44x=y
9906+# CONFIG_E200 is not set
9907+CONFIG_PPC_FPU=y
9908+CONFIG_4xx=y
9909+CONFIG_BOOKE=y
9910+CONFIG_PTE_64BIT=y
9911+CONFIG_PHYS_64BIT=y
9912+CONFIG_PPC_MMU_NOHASH=y
9913+CONFIG_PPC_MMU_NOHASH_32=y
9914+# CONFIG_PPC_MM_SLICES is not set
9915+CONFIG_SMP=y
9916+CONFIG_NR_CPUS=4
9917+# CONFIG_NOT_COHERENT_CACHE is not set
9918+CONFIG_PPC32=y
9919+CONFIG_WORD_SIZE=32
9920+CONFIG_ARCH_PHYS_ADDR_T_64BIT=y
9921+CONFIG_MMU=y
9922+CONFIG_GENERIC_CMOS_UPDATE=y
9923+CONFIG_GENERIC_TIME=y
9924+CONFIG_GENERIC_TIME_VSYSCALL=y
9925+CONFIG_GENERIC_CLOCKEVENTS=y
9926+CONFIG_GENERIC_HARDIRQS=y
9927+CONFIG_GENERIC_HARDIRQS_NO__DO_IRQ=y
9928+# CONFIG_HAVE_SETUP_PER_CPU_AREA is not set
9929+# CONFIG_NEED_PER_CPU_EMBED_FIRST_CHUNK is not set
9930+CONFIG_IRQ_PER_CPU=y
9931+CONFIG_NR_IRQS=512
9932+CONFIG_STACKTRACE_SUPPORT=y
9933+CONFIG_HAVE_LATENCYTOP_SUPPORT=y
9934+CONFIG_TRACE_IRQFLAGS_SUPPORT=y
9935+CONFIG_LOCKDEP_SUPPORT=y
9936+CONFIG_RWSEM_XCHGADD_ALGORITHM=y
9937+CONFIG_ARCH_HAS_ILOG2_U32=y
9938+CONFIG_GENERIC_HWEIGHT=y
9939+CONFIG_GENERIC_FIND_NEXT_BIT=y
9940+# CONFIG_ARCH_NO_VIRT_TO_BUS is not set
9941+CONFIG_PPC=y
9942+CONFIG_EARLY_PRINTK=y
9943+CONFIG_GENERIC_NVRAM=y
9944+CONFIG_SCHED_OMIT_FRAME_POINTER=y
9945+CONFIG_ARCH_MAY_HAVE_PC_FDC=y
9946+CONFIG_PPC_OF=y
9947+CONFIG_OF=y
9948+CONFIG_PPC_UDBG_16550=y
9949+CONFIG_GENERIC_TBSYNC=y
9950+CONFIG_AUDIT_ARCH=y
9951+CONFIG_GENERIC_BUG=y
9952+CONFIG_DTC=y
9953+# CONFIG_DEFAULT_UIMAGE is not set
9954+CONFIG_ARCH_HIBERNATION_POSSIBLE=y
9955+CONFIG_PPC_DCR_NATIVE=y
9956+# CONFIG_PPC_DCR_MMIO is not set
9957+CONFIG_PPC_DCR=y
9958+CONFIG_ARCH_SUPPORTS_DEBUG_PAGEALLOC=y
9959+CONFIG_PPC_ADV_DEBUG_REGS=y
9960+CONFIG_PPC_ADV_DEBUG_IACS=4
9961+CONFIG_PPC_ADV_DEBUG_DACS=2
9962+CONFIG_PPC_ADV_DEBUG_DVCS=2
9963+CONFIG_PPC_ADV_DEBUG_DAC_RANGE=y
9964+CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
9965+CONFIG_CONSTRUCTORS=y
9966+
9967+#
9968+# General setup
9969+#
9970+CONFIG_EXPERIMENTAL=y
9971+CONFIG_LOCK_KERNEL=y
9972+CONFIG_INIT_ENV_ARG_LIMIT=32
9973+CONFIG_CROSS_COMPILE="powerpc-linux-"
9974+CONFIG_LOCALVERSION=""
9975+CONFIG_LOCALVERSION_AUTO=y
9976+CONFIG_SWAP=y
9977+CONFIG_SYSVIPC=y
9978+CONFIG_SYSVIPC_SYSCTL=y
9979+CONFIG_POSIX_MQUEUE=y
9980+CONFIG_POSIX_MQUEUE_SYSCTL=y
9981+# CONFIG_BSD_PROCESS_ACCT is not set
9982+# CONFIG_TASKSTATS is not set
9983+# CONFIG_AUDIT is not set
9984+
9985+#
9986+# RCU Subsystem
9987+#
9988+CONFIG_TREE_RCU=y
9989+# CONFIG_TREE_PREEMPT_RCU is not set
9990+# CONFIG_TINY_RCU is not set
9991+# CONFIG_RCU_TRACE is not set
9992+CONFIG_RCU_FANOUT=32
9993+# CONFIG_RCU_FANOUT_EXACT is not set
9994+# CONFIG_TREE_RCU_TRACE is not set
9995+# CONFIG_IKCONFIG is not set
9996+CONFIG_LOG_BUF_SHIFT=14
9997+# CONFIG_CGROUPS is not set
9998+CONFIG_SYSFS_DEPRECATED=y
9999+CONFIG_SYSFS_DEPRECATED_V2=y
10000+# CONFIG_RELAY is not set
10001+# CONFIG_NAMESPACES is not set
10002+CONFIG_BLK_DEV_INITRD=y
10003+CONFIG_INITRAMFS_SOURCE=""
10004+CONFIG_RD_GZIP=y
10005+# CONFIG_RD_BZIP2 is not set
10006+# CONFIG_RD_LZMA is not set
10007+# CONFIG_RD_LZO is not set
10008+# CONFIG_CC_OPTIMIZE_FOR_SIZE is not set
10009+CONFIG_SYSCTL=y
10010+CONFIG_ANON_INODES=y
10011+CONFIG_EMBEDDED=y
10012+CONFIG_SYSCTL_SYSCALL=y
10013+CONFIG_KALLSYMS=y
10014+# CONFIG_KALLSYMS_ALL is not set
10015+CONFIG_KALLSYMS_EXTRA_PASS=y
10016+CONFIG_HOTPLUG=y
10017+CONFIG_PRINTK=y
10018+CONFIG_BUG=y
10019+CONFIG_ELF_CORE=y
10020+CONFIG_BASE_FULL=y
10021+CONFIG_FUTEX=y
10022+CONFIG_EPOLL=y
10023+CONFIG_SIGNALFD=y
10024+CONFIG_TIMERFD=y
10025+CONFIG_EVENTFD=y
10026+CONFIG_SHMEM=y
10027+CONFIG_AIO=y
10028+CONFIG_HAVE_PERF_EVENTS=y
10029+
10030+#
10031+# Kernel Performance Events And Counters
10032+#
10033+CONFIG_PERF_EVENTS=y
10034+# CONFIG_PERF_COUNTERS is not set
10035+# CONFIG_DEBUG_PERF_USE_VMALLOC is not set
10036+CONFIG_VM_EVENT_COUNTERS=y
10037+CONFIG_SLUB_DEBUG=y
10038+CONFIG_COMPAT_BRK=y
10039+# CONFIG_SLAB is not set
10040+CONFIG_SLUB=y
10041+# CONFIG_SLOB is not set
10042+CONFIG_PROFILING=y
10043+CONFIG_OPROFILE=y
10044+CONFIG_HAVE_OPROFILE=y
10045+# CONFIG_KPROBES is not set
10046+CONFIG_HAVE_EFFICIENT_UNALIGNED_ACCESS=y
10047+CONFIG_HAVE_IOREMAP_PROT=y
10048+CONFIG_HAVE_KPROBES=y
10049+CONFIG_HAVE_KRETPROBES=y
10050+CONFIG_HAVE_ARCH_TRACEHOOK=y
10051+CONFIG_HAVE_DMA_ATTRS=y
10052+CONFIG_USE_GENERIC_SMP_HELPERS=y
10053+CONFIG_HAVE_REGS_AND_STACK_ACCESS_API=y
10054+CONFIG_HAVE_DMA_API_DEBUG=y
10055+
10056+#
10057+# GCOV-based kernel profiling
10058+#
10059+# CONFIG_GCOV_KERNEL is not set
10060+# CONFIG_SLOW_WORK is not set
10061+# CONFIG_HAVE_GENERIC_DMA_COHERENT is not set
10062+CONFIG_SLABINFO=y
10063+CONFIG_RT_MUTEXES=y
10064+CONFIG_BASE_SMALL=0
10065+CONFIG_MODULES=y
10066+CONFIG_MODULE_FORCE_LOAD=y
10067+CONFIG_MODULE_UNLOAD=y
10068+CONFIG_MODULE_FORCE_UNLOAD=y
10069+CONFIG_MODVERSIONS=y
10070+CONFIG_MODULE_SRCVERSION_ALL=y
10071+CONFIG_STOP_MACHINE=y
10072+CONFIG_BLOCK=y
10073+CONFIG_LBDAF=y
10074+# CONFIG_BLK_DEV_BSG is not set
10075+# CONFIG_BLK_DEV_INTEGRITY is not set
10076+
10077+#
10078+# IO Schedulers
10079+#
10080+CONFIG_IOSCHED_NOOP=y
10081+CONFIG_IOSCHED_DEADLINE=y
10082+CONFIG_IOSCHED_CFQ=y
10083+# CONFIG_DEFAULT_DEADLINE is not set
10084+CONFIG_DEFAULT_CFQ=y
10085+# CONFIG_DEFAULT_NOOP is not set
10086+CONFIG_DEFAULT_IOSCHED="cfq"
10087+# CONFIG_INLINE_SPIN_TRYLOCK is not set
10088+# CONFIG_INLINE_SPIN_TRYLOCK_BH is not set
10089+# CONFIG_INLINE_SPIN_LOCK is not set
10090+# CONFIG_INLINE_SPIN_LOCK_BH is not set
10091+# CONFIG_INLINE_SPIN_LOCK_IRQ is not set
10092+# CONFIG_INLINE_SPIN_LOCK_IRQSAVE is not set
10093+CONFIG_INLINE_SPIN_UNLOCK=y
10094+# CONFIG_INLINE_SPIN_UNLOCK_BH is not set
10095+CONFIG_INLINE_SPIN_UNLOCK_IRQ=y
10096+# CONFIG_INLINE_SPIN_UNLOCK_IRQRESTORE is not set
10097+# CONFIG_INLINE_READ_TRYLOCK is not set
10098+# CONFIG_INLINE_READ_LOCK is not set
10099+# CONFIG_INLINE_READ_LOCK_BH is not set
10100+# CONFIG_INLINE_READ_LOCK_IRQ is not set
10101+# CONFIG_INLINE_READ_LOCK_IRQSAVE is not set
10102+CONFIG_INLINE_READ_UNLOCK=y
10103+# CONFIG_INLINE_READ_UNLOCK_BH is not set
10104+CONFIG_INLINE_READ_UNLOCK_IRQ=y
10105+# CONFIG_INLINE_READ_UNLOCK_IRQRESTORE is not set
10106+# CONFIG_INLINE_WRITE_TRYLOCK is not set
10107+# CONFIG_INLINE_WRITE_LOCK is not set
10108+# CONFIG_INLINE_WRITE_LOCK_BH is not set
10109+# CONFIG_INLINE_WRITE_LOCK_IRQ is not set
10110+# CONFIG_INLINE_WRITE_LOCK_IRQSAVE is not set
10111+CONFIG_INLINE_WRITE_UNLOCK=y
10112+# CONFIG_INLINE_WRITE_UNLOCK_BH is not set
10113+CONFIG_INLINE_WRITE_UNLOCK_IRQ=y
10114+# CONFIG_INLINE_WRITE_UNLOCK_IRQRESTORE is not set
10115+CONFIG_MUTEX_SPIN_ON_OWNER=y
10116+# CONFIG_FREEZER is not set
10117+CONFIG_PPC4xx_PCI_EXPRESS=y
10118+
10119+#
10120+# Platform support
10121+#
10122+# CONFIG_PPC_CELL is not set
10123+# CONFIG_PPC_CELL_NATIVE is not set
10124+# CONFIG_PQ2ADS is not set
10125+CONFIG_PPC_47x=y
10126+# CONFIG_BAMBOO is not set
10127+# CONFIG_EBONY is not set
10128+# CONFIG_SAM440EP is not set
10129+# CONFIG_SEQUOIA is not set
10130+# CONFIG_TAISHAN is not set
10131+# CONFIG_KATMAI is not set
10132+# CONFIG_RAINIER is not set
10133+# CONFIG_WARP is not set
10134+# CONFIG_ARCHES is not set
10135+# CONFIG_CANYONLANDS is not set
10136+# CONFIG_GLACIER is not set
10137+# CONFIG_REDWOOD is not set
10138+# CONFIG_EIGER is not set
10139+# CONFIG_YOSEMITE is not set
10140+# CONFIG_ISS4xx is not set
10141+# CONFIG_ICON is not set
10142+CONFIG_ACP=y
10143+CONFIG_ACPISS=y
10144+# CONFIG_ACP_X1V1 is not set
10145+# CONFIG_XILINX_VIRTEX440_GENERIC_BOARD is not set
10146+# CONFIG_PPC44x_SIMPLE is not set
10147+# CONFIG_PPC4xx_GPIO is not set
10148+CONFIG_440GP=y
10149+# CONFIG_IPIC is not set
10150+CONFIG_MPIC=y
10151+# CONFIG_MPIC_WEIRD is not set
10152+# CONFIG_PPC_I8259 is not set
10153+# CONFIG_PPC_RTAS is not set
10154+# CONFIG_MMIO_NVRAM is not set
10155+# CONFIG_PPC_MPC106 is not set
10156+# CONFIG_PPC_970_NAP is not set
10157+# CONFIG_PPC_INDIRECT_IO is not set
10158+# CONFIG_GENERIC_IOMAP is not set
10159+# CONFIG_CPU_FREQ is not set
10160+# CONFIG_FSL_ULI1575 is not set
10161+CONFIG_OF_RTC=y
10162+# CONFIG_SIMPLE_GPIO is not set
10163+
10164+#
10165+# Kernel options
10166+#
10167+# CONFIG_HIGHMEM is not set
10168+# CONFIG_NO_HZ is not set
10169+# CONFIG_HIGH_RES_TIMERS is not set
10170+CONFIG_GENERIC_CLOCKEVENTS_BUILD=y
10171+CONFIG_HZ_100=y
10172+# CONFIG_HZ_250 is not set
10173+# CONFIG_HZ_300 is not set
10174+# CONFIG_HZ_1000 is not set
10175+CONFIG_HZ=100
10176+# CONFIG_SCHED_HRTICK is not set
10177+CONFIG_PREEMPT_NONE=y
10178+# CONFIG_PREEMPT_VOLUNTARY is not set
10179+# CONFIG_PREEMPT is not set
10180+CONFIG_BINFMT_ELF=y
10181+# CONFIG_CORE_DUMP_DEFAULT_ELF_HEADERS is not set
10182+# CONFIG_HAVE_AOUT is not set
10183+# CONFIG_BINFMT_MISC is not set
10184+CONFIG_MATH_EMULATION=y
10185+# CONFIG_IOMMU_HELPER is not set
10186+# CONFIG_SWIOTLB is not set
10187+CONFIG_ARCH_ENABLE_MEMORY_HOTPLUG=y
10188+CONFIG_ARCH_HAS_WALK_MEMORY=y
10189+CONFIG_ARCH_ENABLE_MEMORY_HOTREMOVE=y
10190+CONFIG_IRQ_ALL_CPUS=y
10191+CONFIG_SPARSE_IRQ=y
10192+CONFIG_MAX_ACTIVE_REGIONS=32
10193+CONFIG_ARCH_FLATMEM_ENABLE=y
10194+CONFIG_ARCH_POPULATES_NODE_MAP=y
10195+CONFIG_SELECT_MEMORY_MODEL=y
10196+CONFIG_FLATMEM_MANUAL=y
10197+# CONFIG_DISCONTIGMEM_MANUAL is not set
10198+# CONFIG_SPARSEMEM_MANUAL is not set
10199+CONFIG_FLATMEM=y
10200+CONFIG_FLAT_NODE_MEM_MAP=y
10201+CONFIG_HAVE_MEMBLOCK=y
10202+CONFIG_PAGEFLAGS_EXTENDED=y
10203+CONFIG_SPLIT_PTLOCK_CPUS=4
10204+CONFIG_MIGRATION=y
10205+CONFIG_PHYS_ADDR_T_64BIT=y
10206+CONFIG_ZONE_DMA_FLAG=1
10207+CONFIG_BOUNCE=y
10208+CONFIG_VIRT_TO_BUS=y
10209+# CONFIG_KSM is not set
10210+CONFIG_DEFAULT_MMAP_MIN_ADDR=4096
10211+CONFIG_STDBINUTILS=y
10212+CONFIG_PPC_4K_PAGES=y
10213+# CONFIG_PPC_16K_PAGES is not set
10214+# CONFIG_PPC_64K_PAGES is not set
10215+# CONFIG_PPC_256K_PAGES is not set
10216+CONFIG_FORCE_MAX_ZONEORDER=11
10217+CONFIG_PROC_DEVICETREE=y
10218+CONFIG_CMDLINE_BOOL=y
10219+CONFIG_CMDLINE="root=/dev/issblk3 rw mem=256M lpj=15990784"
10220+CONFIG_EXTRA_TARGETS=""
10221+CONFIG_SECCOMP=y
10222+CONFIG_ISA_DMA_API=y
10223+
10224+#
10225+# Bus options
10226+#
10227+CONFIG_ZONE_DMA=y
10228+# CONFIG_NEED_DMA_MAP_STATE is not set
10229+CONFIG_NEED_SG_DMA_LENGTH=y
10230+CONFIG_4xx_SOC=y
10231+CONFIG_PPC_PCI_CHOICE=y
10232+# CONFIG_PCI is not set
10233+# CONFIG_PCI_DOMAINS is not set
10234+# CONFIG_PCI_SYSCALL is not set
10235+# CONFIG_ARCH_SUPPORTS_MSI is not set
10236+# CONFIG_PCCARD is not set
10237+CONFIG_HAS_RAPIDIO=y
10238+# CONFIG_RAPIDIO is not set
10239+
10240+#
10241+# Advanced setup
10242+#
10243+CONFIG_ADVANCED_OPTIONS=y
10244+# CONFIG_LOWMEM_SIZE_BOOL is not set
10245+CONFIG_LOWMEM_SIZE=0x30000000
10246+CONFIG_RELOCATABLE=y
10247+CONFIG_PAGE_OFFSET_BOOL=y
10248+CONFIG_PAGE_OFFSET=0xc0000000
10249+CONFIG_KERNEL_START_BOOL=y
10250+CONFIG_KERNEL_START=0xc0400000
10251+CONFIG_PHYSICAL_START=0x00000000
10252+CONFIG_TASK_SIZE_BOOL=y
10253+CONFIG_TASK_SIZE=0xc0000000
10254+CONFIG_NET=y
10255+
10256+#
10257+# Networking options
10258+#
10259+CONFIG_PACKET=y
10260+CONFIG_UNIX=y
10261+# CONFIG_NET_KEY is not set
10262+CONFIG_INET=y
10263+# CONFIG_IP_MULTICAST is not set
10264+# CONFIG_IP_ADVANCED_ROUTER is not set
10265+CONFIG_IP_FIB_HASH=y
10266+CONFIG_IP_PNP=y
10267+CONFIG_IP_PNP_DHCP=y
10268+CONFIG_IP_PNP_BOOTP=y
10269+# CONFIG_IP_PNP_RARP is not set
10270+# CONFIG_NET_IPIP is not set
10271+# CONFIG_NET_IPGRE is not set
10272+# CONFIG_ARPD is not set
10273+# CONFIG_SYN_COOKIES is not set
10274+# CONFIG_INET_AH is not set
10275+# CONFIG_INET_ESP is not set
10276+# CONFIG_INET_IPCOMP is not set
10277+# CONFIG_INET_XFRM_TUNNEL is not set
10278+# CONFIG_INET_TUNNEL is not set
10279+# CONFIG_INET_XFRM_MODE_TRANSPORT is not set
10280+# CONFIG_INET_XFRM_MODE_TUNNEL is not set
10281+# CONFIG_INET_XFRM_MODE_BEET is not set
10282+# CONFIG_INET_LRO is not set
10283+CONFIG_INET_DIAG=y
10284+CONFIG_INET_TCP_DIAG=y
10285+# CONFIG_TCP_CONG_ADVANCED is not set
10286+CONFIG_TCP_CONG_CUBIC=y
10287+CONFIG_DEFAULT_TCP_CONG="cubic"
10288+# CONFIG_TCP_MD5SIG is not set
10289+# CONFIG_IPV6 is not set
10290+# CONFIG_NETWORK_SECMARK is not set
10291+# CONFIG_NETFILTER is not set
10292+# CONFIG_IP_DCCP is not set
10293+# CONFIG_IP_SCTP is not set
10294+# CONFIG_RDS is not set
10295+# CONFIG_TIPC is not set
10296+# CONFIG_ATM is not set
10297+# CONFIG_L2TP is not set
10298+# CONFIG_BRIDGE is not set
10299+# CONFIG_VLAN_8021Q is not set
10300+# CONFIG_DECNET is not set
10301+# CONFIG_LLC2 is not set
10302+# CONFIG_IPX is not set
10303+# CONFIG_ATALK is not set
10304+# CONFIG_X25 is not set
10305+# CONFIG_LAPB is not set
10306+# CONFIG_ECONET is not set
10307+# CONFIG_WAN_ROUTER is not set
10308+# CONFIG_PHONET is not set
10309+# CONFIG_IEEE802154 is not set
10310+# CONFIG_NET_SCHED is not set
10311+# CONFIG_DCB is not set
10312+CONFIG_RPS=y
10313+
10314+#
10315+# Network testing
10316+#
10317+# CONFIG_NET_PKTGEN is not set
10318+# CONFIG_HAMRADIO is not set
10319+# CONFIG_CAN is not set
10320+# CONFIG_IRDA is not set
10321+# CONFIG_BT is not set
10322+# CONFIG_AF_RXRPC is not set
10323+CONFIG_WIRELESS=y
10324+# CONFIG_CFG80211 is not set
10325+# CONFIG_LIB80211 is not set
10326+
10327+#
10328+# CFG80211 needs to be enabled for MAC80211
10329+#
10330+
10331+#
10332+# Some wireless drivers require a rate control algorithm
10333+#
10334+# CONFIG_WIMAX is not set
10335+# CONFIG_RFKILL is not set
10336+# CONFIG_NET_9P is not set
10337+# CONFIG_CAIF is not set
10338+
10339+#
10340+# Device Drivers
10341+#
10342+
10343+#
10344+# Generic Driver Options
10345+#
10346+CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug"
10347+# CONFIG_DEVTMPFS is not set
10348+CONFIG_STANDALONE=y
10349+CONFIG_PREVENT_FIRMWARE_BUILD=y
10350+CONFIG_FW_LOADER=y
10351+CONFIG_FIRMWARE_IN_KERNEL=y
10352+CONFIG_EXTRA_FIRMWARE=""
10353+# CONFIG_DEBUG_DRIVER is not set
10354+# CONFIG_DEBUG_DEVRES is not set
10355+# CONFIG_SYS_HYPERVISOR is not set
10356+CONFIG_CONNECTOR=y
10357+CONFIG_PROC_EVENTS=y
10358+CONFIG_MTD=y
10359+# CONFIG_MTD_DEBUG is not set
10360+# CONFIG_MTD_TESTS is not set
10361+# CONFIG_MTD_CONCAT is not set
10362+CONFIG_MTD_PARTITIONS=y
10363+# CONFIG_MTD_REDBOOT_PARTS is not set
10364+# CONFIG_MTD_CMDLINE_PARTS is not set
10365+CONFIG_MTD_OF_PARTS=y
10366+# CONFIG_MTD_AR7_PARTS is not set
10367+
10368+#
10369+# User Modules And Translation Layers
10370+#
10371+CONFIG_MTD_CHAR=y
10372+CONFIG_MTD_BLKDEVS=y
10373+CONFIG_MTD_BLOCK=y
10374+# CONFIG_FTL is not set
10375+# CONFIG_NFTL is not set
10376+# CONFIG_INFTL is not set
10377+# CONFIG_RFD_FTL is not set
10378+# CONFIG_SSFDC is not set
10379+# CONFIG_SM_FTL is not set
10380+# CONFIG_MTD_OOPS is not set
10381+
10382+#
10383+# RAM/ROM/Flash chip drivers
10384+#
10385+# CONFIG_MTD_CFI is not set
10386+CONFIG_MTD_JEDECPROBE=y
10387+CONFIG_MTD_GEN_PROBE=y
10388+# CONFIG_MTD_CFI_ADV_OPTIONS is not set
10389+CONFIG_MTD_MAP_BANK_WIDTH_1=y
10390+CONFIG_MTD_MAP_BANK_WIDTH_2=y
10391+CONFIG_MTD_MAP_BANK_WIDTH_4=y
10392+# CONFIG_MTD_MAP_BANK_WIDTH_8 is not set
10393+# CONFIG_MTD_MAP_BANK_WIDTH_16 is not set
10394+# CONFIG_MTD_MAP_BANK_WIDTH_32 is not set
10395+CONFIG_MTD_CFI_I1=y
10396+CONFIG_MTD_CFI_I2=y
10397+# CONFIG_MTD_CFI_I4 is not set
10398+# CONFIG_MTD_CFI_I8 is not set
10399+# CONFIG_MTD_CFI_INTELEXT is not set
10400+CONFIG_MTD_CFI_AMDSTD=y
10401+# CONFIG_MTD_CFI_STAA is not set
10402+CONFIG_MTD_CFI_UTIL=y
10403+# CONFIG_MTD_RAM is not set
10404+# CONFIG_MTD_ROM is not set
10405+# CONFIG_MTD_ABSENT is not set
10406+
10407+#
10408+# Mapping drivers for chip access
10409+#
10410+# CONFIG_MTD_COMPLEX_MAPPINGS is not set
10411+# CONFIG_MTD_PHYSMAP is not set
10412+CONFIG_MTD_PHYSMAP_OF=y
10413+# CONFIG_MTD_PLATRAM is not set
10414+
10415+#
10416+# Self-contained MTD device drivers
10417+#
10418+# CONFIG_MTD_SLRAM is not set
10419+# CONFIG_MTD_PHRAM is not set
10420+# CONFIG_MTD_MTDRAM is not set
10421+# CONFIG_MTD_BLOCK2MTD is not set
10422+
10423+#
10424+# Disk-On-Chip Device Drivers
10425+#
10426+# CONFIG_MTD_DOC2000 is not set
10427+# CONFIG_MTD_DOC2001 is not set
10428+# CONFIG_MTD_DOC2001PLUS is not set
10429+# CONFIG_MTD_NAND is not set
10430+# CONFIG_MTD_ONENAND is not set
10431+
10432+#
10433+# LPDDR flash memory drivers
10434+#
10435+# CONFIG_MTD_LPDDR is not set
10436+
10437+#
10438+# UBI - Unsorted block images
10439+#
10440+# CONFIG_MTD_UBI is not set
10441+CONFIG_OF_FLATTREE=y
10442+CONFIG_OF_DYNAMIC=y
10443+CONFIG_OF_DEVICE=y
10444+# CONFIG_PARPORT is not set
10445+CONFIG_BLK_DEV=y
10446+# CONFIG_BLK_DEV_FD is not set
10447+# CONFIG_BLK_DEV_COW_COMMON is not set
10448+# CONFIG_BLK_DEV_LOOP is not set
10449+# CONFIG_BLK_DEV_DRBD is not set
10450+# CONFIG_BLK_DEV_NBD is not set
10451+CONFIG_BLK_DEV_RAM=y
10452+CONFIG_BLK_DEV_RAM_COUNT=16
10453+CONFIG_BLK_DEV_RAM_SIZE=35000
10454+# CONFIG_BLK_DEV_XIP is not set
10455+CONFIG_BLK_DEV_ISS=y
10456+# CONFIG_CDROM_PKTCDVD is not set
10457+# CONFIG_ATA_OVER_ETH is not set
10458+# CONFIG_XILINX_SYSACE is not set
10459+# CONFIG_BLK_DEV_HD is not set
10460+CONFIG_MISC_DEVICES=y
10461+# CONFIG_ENCLOSURE_SERVICES is not set
10462+# CONFIG_C2PORT is not set
10463+
10464+#
10465+# EEPROM support
10466+#
10467+# CONFIG_EEPROM_93CX6 is not set
10468+CONFIG_HAVE_IDE=y
10469+# CONFIG_IDE is not set
10470+
10471+#
10472+# SCSI device support
10473+#
10474+CONFIG_SCSI_MOD=y
10475+# CONFIG_RAID_ATTRS is not set
10476+# CONFIG_SCSI is not set
10477+# CONFIG_SCSI_DMA is not set
10478+# CONFIG_SCSI_NETLINK is not set
10479+# CONFIG_ATA is not set
10480+# CONFIG_MD is not set
10481+# CONFIG_MACINTOSH_DRIVERS is not set
10482+CONFIG_NETDEVICES=y
10483+CONFIG_DUMMY=y
10484+# CONFIG_BONDING is not set
10485+# CONFIG_MACVLAN is not set
10486+# CONFIG_EQUALIZER is not set
10487+CONFIG_TUN=y
10488+# CONFIG_VETH is not set
10489+# CONFIG_NET_ETHERNET is not set
10490+CONFIG_IBM_NEW_EMAC_ZMII=y
10491+CONFIG_NETDEV_1000=y
10492+# CONFIG_MV643XX_ETH is not set
10493+# CONFIG_XILINX_LL_TEMAC is not set
10494+CONFIG_NETDEV_10000=y
10495+CONFIG_WLAN=y
10496+# CONFIG_HOSTAP is not set
10497+
10498+#
10499+# Enable WiMAX (Networking options) to see the WiMAX drivers
10500+#
10501+# CONFIG_WAN is not set
10502+# CONFIG_PPP is not set
10503+# CONFIG_SLIP is not set
10504+# CONFIG_NETCONSOLE is not set
10505+# CONFIG_NETPOLL is not set
10506+# CONFIG_NET_POLL_CONTROLLER is not set
10507+# CONFIG_ISDN is not set
10508+# CONFIG_PHONE is not set
10509+
10510+#
10511+# Input device support
10512+#
10513+# CONFIG_INPUT is not set
10514+
10515+#
10516+# Hardware I/O ports
10517+#
10518+# CONFIG_SERIO is not set
10519+# CONFIG_GAMEPORT is not set
10520+
10521+#
10522+# Character devices
10523+#
10524+# CONFIG_VT is not set
10525+CONFIG_DEVKMEM=y
10526+# CONFIG_SERIAL_NONSTANDARD is not set
10527+# CONFIG_N_GSM is not set
10528+
10529+#
10530+# Serial drivers
10531+#
10532+CONFIG_SERIAL_8250=y
10533+CONFIG_SERIAL_8250_CONSOLE=y
10534+CONFIG_SERIAL_8250_NR_UARTS=4
10535+CONFIG_SERIAL_8250_RUNTIME_UARTS=4
10536+CONFIG_SERIAL_8250_EXTENDED=y
10537+# CONFIG_SERIAL_8250_MANY_PORTS is not set
10538+CONFIG_SERIAL_8250_SHARE_IRQ=y
10539+# CONFIG_SERIAL_8250_DETECT_IRQ is not set
10540+# CONFIG_SERIAL_8250_RSA is not set
10541+
10542+#
10543+# Non-8250 serial port support
10544+#
10545+# CONFIG_SERIAL_UARTLITE is not set
10546+CONFIG_SERIAL_CORE=y
10547+CONFIG_SERIAL_CORE_CONSOLE=y
10548+CONFIG_SERIAL_OF_PLATFORM=y
10549+# CONFIG_SERIAL_OF_PLATFORM_NWPSERIAL is not set
10550+# CONFIG_SERIAL_TIMBERDALE is not set
10551+# CONFIG_SERIAL_GRLIB_GAISLER_APBUART is not set
10552+# CONFIG_SERIAL_ALTERA_JTAGUART is not set
10553+# CONFIG_SERIAL_ALTERA_UART is not set
10554+CONFIG_UNIX98_PTYS=y
10555+# CONFIG_DEVPTS_MULTIPLE_INSTANCES is not set
10556+CONFIG_LEGACY_PTYS=y
10557+CONFIG_LEGACY_PTY_COUNT=256
10558+# CONFIG_HVC_UDBG is not set
10559+# CONFIG_IPMI_HANDLER is not set
10560+# CONFIG_HW_RANDOM is not set
10561+# CONFIG_NVRAM is not set
10562+# CONFIG_GEN_RTC is not set
10563+# CONFIG_R3964 is not set
10564+# CONFIG_RAW_DRIVER is not set
10565+# CONFIG_TCG_TPM is not set
10566+# CONFIG_RAMOOPS is not set
10567+# CONFIG_I2C is not set
10568+# CONFIG_SPI is not set
10569+
10570+#
10571+# PPS support
10572+#
10573+# CONFIG_PPS is not set
10574+CONFIG_ARCH_WANT_OPTIONAL_GPIOLIB=y
10575+# CONFIG_GPIOLIB is not set
10576+# CONFIG_W1 is not set
10577+# CONFIG_POWER_SUPPLY is not set
10578+# CONFIG_HWMON is not set
10579+CONFIG_THERMAL=y
10580+# CONFIG_WATCHDOG is not set
10581+CONFIG_SSB_POSSIBLE=y
10582+
10583+#
10584+# Sonics Silicon Backplane
10585+#
10586+# CONFIG_SSB is not set
10587+# CONFIG_MFD_SUPPORT is not set
10588+# CONFIG_REGULATOR is not set
10589+# CONFIG_MEDIA_SUPPORT is not set
10590+
10591+#
10592+# Graphics support
10593+#
10594+# CONFIG_VGASTATE is not set
10595+# CONFIG_VIDEO_OUTPUT_CONTROL is not set
10596+# CONFIG_FB is not set
10597+# CONFIG_BACKLIGHT_LCD_SUPPORT is not set
10598+
10599+#
10600+# Display device support
10601+#
10602+# CONFIG_DISPLAY_SUPPORT is not set
10603+# CONFIG_SOUND is not set
10604+# CONFIG_USB_SUPPORT is not set
10605+# CONFIG_MMC is not set
10606+# CONFIG_MEMSTICK is not set
10607+# CONFIG_NEW_LEDS is not set
10608+# CONFIG_ACCESSIBILITY is not set
10609+# CONFIG_EDAC is not set
10610+# CONFIG_RTC_CLASS is not set
10611+# CONFIG_DMADEVICES is not set
10612+# CONFIG_AUXDISPLAY is not set
10613+# CONFIG_UIO is not set
10614+# CONFIG_STAGING is not set
10615+
10616+#
10617+# LSI Drivers (APP3, APP3K, and ACP)
10618+#
10619+# CONFIG_SERIAL_ACP is not set
10620+# CONFIG_LSI_NET is not set
10621+# CONFIG_LSI_NAND is not set
10622+# CONFIG_LSI_PLX_PCIE_BRIDGE is not set
10623+
10624+#
10625+# File systems
10626+#
10627+CONFIG_EXT2_FS=y
10628+# CONFIG_EXT2_FS_XATTR is not set
10629+# CONFIG_EXT2_FS_XIP is not set
10630+CONFIG_EXT3_FS=y
10631+# CONFIG_EXT3_DEFAULTS_TO_ORDERED is not set
10632+CONFIG_EXT3_FS_XATTR=y
10633+# CONFIG_EXT3_FS_POSIX_ACL is not set
10634+# CONFIG_EXT3_FS_SECURITY is not set
10635+# CONFIG_EXT4_FS is not set
10636+CONFIG_JBD=y
10637+# CONFIG_JBD_DEBUG is not set
10638+CONFIG_FS_MBCACHE=y
10639+# CONFIG_REISERFS_FS is not set
10640+# CONFIG_JFS_FS is not set
10641+# CONFIG_FS_POSIX_ACL is not set
10642+# CONFIG_XFS_FS is not set
10643+# CONFIG_GFS2_FS is not set
10644+# CONFIG_OCFS2_FS is not set
10645+# CONFIG_BTRFS_FS is not set
10646+# CONFIG_NILFS2_FS is not set
10647+CONFIG_FILE_LOCKING=y
10648+CONFIG_FSNOTIFY=y
10649+CONFIG_DNOTIFY=y
10650+CONFIG_INOTIFY=y
10651+CONFIG_INOTIFY_USER=y
10652+# CONFIG_QUOTA is not set
10653+# CONFIG_AUTOFS_FS is not set
10654+# CONFIG_AUTOFS4_FS is not set
10655+# CONFIG_FUSE_FS is not set
10656+
10657+#
10658+# Caches
10659+#
10660+# CONFIG_FSCACHE is not set
10661+
10662+#
10663+# CD-ROM/DVD Filesystems
10664+#
10665+# CONFIG_ISO9660_FS is not set
10666+# CONFIG_UDF_FS is not set
10667+
10668+#
10669+# DOS/FAT/NT Filesystems
10670+#
10671+# CONFIG_MSDOS_FS is not set
10672+# CONFIG_VFAT_FS is not set
10673+# CONFIG_NTFS_FS is not set
10674+
10675+#
10676+# Pseudo filesystems
10677+#
10678+CONFIG_PROC_FS=y
10679+CONFIG_PROC_KCORE=y
10680+CONFIG_PROC_SYSCTL=y
10681+CONFIG_PROC_PAGE_MONITOR=y
10682+CONFIG_SYSFS=y
10683+CONFIG_TMPFS=y
10684+# CONFIG_TMPFS_POSIX_ACL is not set
10685+# CONFIG_HUGETLB_PAGE is not set
10686+# CONFIG_CONFIGFS_FS is not set
10687+CONFIG_MISC_FILESYSTEMS=y
10688+# CONFIG_ADFS_FS is not set
10689+# CONFIG_AFFS_FS is not set
10690+# CONFIG_HFS_FS is not set
10691+# CONFIG_HFSPLUS_FS is not set
10692+# CONFIG_BEFS_FS is not set
10693+# CONFIG_BFS_FS is not set
10694+# CONFIG_EFS_FS is not set
10695+# CONFIG_JFFS2_FS is not set
10696+# CONFIG_LOGFS is not set
10697+CONFIG_CRAMFS=y
10698+# CONFIG_SQUASHFS is not set
10699+# CONFIG_VXFS_FS is not set
10700+# CONFIG_MINIX_FS is not set
10701+# CONFIG_OMFS_FS is not set
10702+# CONFIG_HPFS_FS is not set
10703+# CONFIG_QNX4FS_FS is not set
10704+# CONFIG_ROMFS_FS is not set
10705+# CONFIG_SYSV_FS is not set
10706+# CONFIG_UFS_FS is not set
10707+# CONFIG_NETWORK_FILESYSTEMS is not set
10708+
10709+#
10710+# Partition Types
10711+#
10712+# CONFIG_PARTITION_ADVANCED is not set
10713+CONFIG_MSDOS_PARTITION=y
10714+# CONFIG_NLS is not set
10715+# CONFIG_DLM is not set
10716+# CONFIG_BINARY_PRINTF is not set
10717+
10718+#
10719+# Library routines
10720+#
10721+CONFIG_BITREVERSE=y
10722+CONFIG_GENERIC_FIND_LAST_BIT=y
10723+# CONFIG_CRC_CCITT is not set
10724+# CONFIG_CRC16 is not set
10725+# CONFIG_CRC_T10DIF is not set
10726+# CONFIG_CRC_ITU_T is not set
10727+CONFIG_CRC32=y
10728+# CONFIG_CRC7 is not set
10729+# CONFIG_LIBCRC32C is not set
10730+CONFIG_ZLIB_INFLATE=y
10731+CONFIG_DECOMPRESS_GZIP=y
10732+CONFIG_HAS_IOMEM=y
10733+CONFIG_HAS_IOPORT=y
10734+CONFIG_HAS_DMA=y
10735+CONFIG_NLATTR=y
10736+CONFIG_GENERIC_ATOMIC64=y
10737+
10738+#
10739+# Kernel hacking
10740+#
10741+# CONFIG_PRINTK_TIME is not set
10742+CONFIG_ENABLE_WARN_DEPRECATED=y
10743+CONFIG_ENABLE_MUST_CHECK=y
10744+CONFIG_FRAME_WARN=1024
10745+CONFIG_MAGIC_SYSRQ=y
10746+# CONFIG_STRIP_ASM_SYMS is not set
10747+# CONFIG_UNUSED_SYMBOLS is not set
10748+CONFIG_DEBUG_FS=y
10749+# CONFIG_HEADERS_CHECK is not set
10750+CONFIG_DEBUG_KERNEL=y
10751+# CONFIG_DEBUG_SHIRQ is not set
10752+CONFIG_DETECT_SOFTLOCKUP=y
10753+# CONFIG_BOOTPARAM_SOFTLOCKUP_PANIC is not set
10754+CONFIG_BOOTPARAM_SOFTLOCKUP_PANIC_VALUE=0
10755+# CONFIG_DETECT_HUNG_TASK is not set
10756+CONFIG_SCHED_DEBUG=y
10757+# CONFIG_SCHEDSTATS is not set
10758+# CONFIG_TIMER_STATS is not set
10759+# CONFIG_DEBUG_OBJECTS is not set
10760+# CONFIG_SLUB_DEBUG_ON is not set
10761+# CONFIG_SLUB_STATS is not set
10762+# CONFIG_DEBUG_KMEMLEAK is not set
10763+# CONFIG_DEBUG_RT_MUTEXES is not set
10764+# CONFIG_RT_MUTEX_TESTER is not set
10765+# CONFIG_DEBUG_SPINLOCK is not set
10766+# CONFIG_DEBUG_MUTEXES is not set
10767+# CONFIG_DEBUG_LOCK_ALLOC is not set
10768+# CONFIG_PROVE_LOCKING is not set
10769+# CONFIG_LOCK_STAT is not set
10770+# CONFIG_DEBUG_SPINLOCK_SLEEP is not set
10771+# CONFIG_DEBUG_LOCKING_API_SELFTESTS is not set
10772+# CONFIG_DEBUG_KOBJECT is not set
10773+# CONFIG_DEBUG_BUGVERBOSE is not set
10774+CONFIG_DEBUG_INFO=y
10775+# CONFIG_DEBUG_VM is not set
10776+# CONFIG_DEBUG_WRITECOUNT is not set
10777+# CONFIG_DEBUG_MEMORY_INIT is not set
10778+# CONFIG_DEBUG_LIST is not set
10779+# CONFIG_DEBUG_SG is not set
10780+# CONFIG_DEBUG_NOTIFIERS is not set
10781+# CONFIG_DEBUG_CREDENTIALS is not set
10782+# CONFIG_RCU_TORTURE_TEST is not set
10783+# CONFIG_RCU_CPU_STALL_DETECTOR is not set
10784+# CONFIG_BACKTRACE_SELF_TEST is not set
10785+# CONFIG_DEBUG_BLOCK_EXT_DEVT is not set
10786+# CONFIG_DEBUG_FORCE_WEAK_PER_CPU is not set
10787+# CONFIG_LKDTM is not set
10788+# CONFIG_FAULT_INJECTION is not set
10789+# CONFIG_LATENCYTOP is not set
10790+CONFIG_SYSCTL_SYSCALL_CHECK=y
10791+# CONFIG_DEBUG_PAGEALLOC is not set
10792+CONFIG_HAVE_FUNCTION_TRACER=y
10793+CONFIG_HAVE_FUNCTION_GRAPH_TRACER=y
10794+CONFIG_HAVE_DYNAMIC_FTRACE=y
10795+CONFIG_HAVE_FTRACE_MCOUNT_RECORD=y
10796+CONFIG_RING_BUFFER=y
10797+CONFIG_RING_BUFFER_ALLOW_SWAP=y
10798+CONFIG_TRACING_SUPPORT=y
10799+CONFIG_FTRACE=y
10800+# CONFIG_FUNCTION_TRACER is not set
10801+# CONFIG_IRQSOFF_TRACER is not set
10802+# CONFIG_SCHED_TRACER is not set
10803+# CONFIG_ENABLE_DEFAULT_TRACERS is not set
10804+# CONFIG_BOOT_TRACER is not set
10805+CONFIG_BRANCH_PROFILE_NONE=y
10806+# CONFIG_PROFILE_ANNOTATED_BRANCHES is not set
10807+# CONFIG_PROFILE_ALL_BRANCHES is not set
10808+# CONFIG_STACK_TRACER is not set
10809+# CONFIG_KMEMTRACE is not set
10810+# CONFIG_WORKQUEUE_TRACER is not set
10811+# CONFIG_BLK_DEV_IO_TRACE is not set
10812+# CONFIG_RING_BUFFER_BENCHMARK is not set
10813+# CONFIG_DYNAMIC_DEBUG is not set
10814+# CONFIG_DMA_API_DEBUG is not set
10815+# CONFIG_ATOMIC64_SELFTEST is not set
10816+# CONFIG_SAMPLES is not set
10817+CONFIG_HAVE_ARCH_KGDB=y
10818+# CONFIG_KGDB is not set
10819+# CONFIG_PPC_DISABLE_WERROR is not set
10820+CONFIG_PPC_WERROR=y
10821+CONFIG_PRINT_STACK_DEPTH=64
10822+# CONFIG_DEBUG_STACKOVERFLOW is not set
10823+# CONFIG_DEBUG_STACK_USAGE is not set
10824+# CONFIG_DEBUG_PER_CPU_MAPS is not set
10825+# CONFIG_PPC_EMULATED_STATS is not set
10826+# CONFIG_CODE_PATCHING_SELFTEST is not set
10827+# CONFIG_FTR_FIXUP_SELFTEST is not set
10828+# CONFIG_MSI_BITMAP_SELFTEST is not set
10829+# CONFIG_XMON is not set
10830+# CONFIG_VIRQ_DEBUG is not set
10831+# CONFIG_BDI_SWITCH is not set
10832+# CONFIG_PPC_EARLY_DEBUG is not set
10833+
10834+#
10835+# Security options
10836+#
10837+# CONFIG_KEYS is not set
10838+# CONFIG_SECURITY is not set
10839+# CONFIG_SECURITYFS is not set
10840+# CONFIG_DEFAULT_SECURITY_SELINUX is not set
10841+# CONFIG_DEFAULT_SECURITY_SMACK is not set
10842+# CONFIG_DEFAULT_SECURITY_TOMOYO is not set
10843+CONFIG_DEFAULT_SECURITY_DAC=y
10844+CONFIG_DEFAULT_SECURITY=""
10845+CONFIG_CRYPTO=y
10846+
10847+#
10848+# Crypto core or helper
10849+#
10850+CONFIG_CRYPTO_ALGAPI=y
10851+CONFIG_CRYPTO_ALGAPI2=y
10852+CONFIG_CRYPTO_AEAD2=y
10853+CONFIG_CRYPTO_BLKCIPHER=y
10854+CONFIG_CRYPTO_BLKCIPHER2=y
10855+CONFIG_CRYPTO_HASH=y
10856+CONFIG_CRYPTO_HASH2=y
10857+CONFIG_CRYPTO_RNG2=y
10858+CONFIG_CRYPTO_PCOMP=y
10859+CONFIG_CRYPTO_MANAGER=y
10860+CONFIG_CRYPTO_MANAGER2=y
10861+# CONFIG_CRYPTO_GF128MUL is not set
10862+# CONFIG_CRYPTO_NULL is not set
10863+# CONFIG_CRYPTO_PCRYPT is not set
10864+CONFIG_CRYPTO_WORKQUEUE=y
10865+# CONFIG_CRYPTO_CRYPTD is not set
10866+# CONFIG_CRYPTO_AUTHENC is not set
10867+# CONFIG_CRYPTO_TEST is not set
10868+
10869+#
10870+# Authenticated Encryption with Associated Data
10871+#
10872+# CONFIG_CRYPTO_CCM is not set
10873+# CONFIG_CRYPTO_GCM is not set
10874+# CONFIG_CRYPTO_SEQIV is not set
10875+
10876+#
10877+# Block modes
10878+#
10879+CONFIG_CRYPTO_CBC=y
10880+# CONFIG_CRYPTO_CTR is not set
10881+# CONFIG_CRYPTO_CTS is not set
10882+CONFIG_CRYPTO_ECB=y
10883+# CONFIG_CRYPTO_LRW is not set
10884+CONFIG_CRYPTO_PCBC=y
10885+# CONFIG_CRYPTO_XTS is not set
10886+
10887+#
10888+# Hash modes
10889+#
10890+# CONFIG_CRYPTO_HMAC is not set
10891+# CONFIG_CRYPTO_XCBC is not set
10892+# CONFIG_CRYPTO_VMAC is not set
10893+
10894+#
10895+# Digest
10896+#
10897+# CONFIG_CRYPTO_CRC32C is not set
10898+# CONFIG_CRYPTO_GHASH is not set
10899+# CONFIG_CRYPTO_MD4 is not set
10900+CONFIG_CRYPTO_MD5=y
10901+# CONFIG_CRYPTO_MICHAEL_MIC is not set
10902+# CONFIG_CRYPTO_RMD128 is not set
10903+# CONFIG_CRYPTO_RMD160 is not set
10904+# CONFIG_CRYPTO_RMD256 is not set
10905+# CONFIG_CRYPTO_RMD320 is not set
10906+# CONFIG_CRYPTO_SHA1 is not set
10907+# CONFIG_CRYPTO_SHA256 is not set
10908+# CONFIG_CRYPTO_SHA512 is not set
10909+# CONFIG_CRYPTO_TGR192 is not set
10910+# CONFIG_CRYPTO_WP512 is not set
10911+
10912+#
10913+# Ciphers
10914+#
10915+# CONFIG_CRYPTO_AES is not set
10916+# CONFIG_CRYPTO_ANUBIS is not set
10917+# CONFIG_CRYPTO_ARC4 is not set
10918+# CONFIG_CRYPTO_BLOWFISH is not set
10919+# CONFIG_CRYPTO_CAMELLIA is not set
10920+# CONFIG_CRYPTO_CAST5 is not set
10921+# CONFIG_CRYPTO_CAST6 is not set
10922+CONFIG_CRYPTO_DES=y
10923+# CONFIG_CRYPTO_FCRYPT is not set
10924+# CONFIG_CRYPTO_KHAZAD is not set
10925+# CONFIG_CRYPTO_SALSA20 is not set
10926+# CONFIG_CRYPTO_SEED is not set
10927+# CONFIG_CRYPTO_SERPENT is not set
10928+# CONFIG_CRYPTO_TEA is not set
10929+# CONFIG_CRYPTO_TWOFISH is not set
10930+
10931+#
10932+# Compression
10933+#
10934+# CONFIG_CRYPTO_DEFLATE is not set
10935+# CONFIG_CRYPTO_ZLIB is not set
10936+# CONFIG_CRYPTO_LZO is not set
10937+
10938+#
10939+# Random Number Generation
10940+#
10941+# CONFIG_CRYPTO_ANSI_CPRNG is not set
10942+# CONFIG_CRYPTO_HW is not set
10943+# CONFIG_PPC_CLOCK is not set
10944+# CONFIG_VIRTUALIZATION is not set
10945diff --git a/arch/powerpc/include/asm/asm-compat.h b/arch/powerpc/include/asm/asm-compat.h
10946index decad95..1e65560 100644
10947--- a/arch/powerpc/include/asm/asm-compat.h
10948+++ b/arch/powerpc/include/asm/asm-compat.h
10949@@ -71,6 +71,29 @@
10950 #define PPC405_ERR77(ra,rb)
10951 #define PPC405_ERR77_SYNC
10952 #endif
10953+
10954+#ifdef CONFIG_PPC_47x
10955+#define PPC476_ERR_DCBx() \
10956+ BEGIN_FTR_SECTION; \
10957+ lwsync; \
10958+ END_FTR_SECTION_IFSET(CPU_FTR_476_DD1_1)
10959+#define PPC476_ERR_MTPID PPC476_ERR_DCBx
10960+#define PPC476_ERR_DCI() \
10961+ BEGIN_FTR_SECTION; \
10962+ dci; \
10963+ END_FTR_SECTION_IFSET(CPU_FTR_476_DD1)
10964+#define PPC476_ERR_ISYNC() \
10965+ BEGIN_FTR_SECTION; \
10966+ isync; \
10967+ END_FTR_SECTION_IFSET(CPU_FTR_476_DD1_1)
10968+#else /* ! CONFIG_PPC_47x */
10969+#define PPC476_ERR_DCBx()
10970+#define PPC476_ERR_MTPID()
10971+#define PPC476_ERR_DCI()
10972+#define PPC476_ERR_ISYNC()
10973+#endif /* CONFIG_PPC_47x */
10974+
10975 #endif
10976
10977+
10978 #endif /* _ASM_POWERPC_ASM_COMPAT_H */
10979diff --git a/arch/powerpc/include/asm/cputable.h b/arch/powerpc/include/asm/cputable.h
10980index c0d842c..49c4c6a 100644
10981--- a/arch/powerpc/include/asm/cputable.h
10982+++ b/arch/powerpc/include/asm/cputable.h
10983@@ -158,6 +158,7 @@ extern const char *powerpc_base_platform;
10984 #define CPU_FTR_NEED_COHERENT ASM_CONST(0x0000000000020000)
10985 #define CPU_FTR_NO_BTIC ASM_CONST(0x0000000000040000)
10986 #define CPU_FTR_DEBUG_LVL_EXC ASM_CONST(0x0000000000080000)
10987+#define CPU_FTR_476_DD1_1 CPU_FTR_DEBUG_LVL_EXC
10988 #define CPU_FTR_NODSISRALIGN ASM_CONST(0x0000000000100000)
10989 #define CPU_FTR_PPC_LE ASM_CONST(0x0000000000200000)
10990 #define CPU_FTR_REAL_LE ASM_CONST(0x0000000000400000)
10991@@ -168,6 +169,7 @@ extern const char *powerpc_base_platform;
10992 #define CPU_FTR_LWSYNC ASM_CONST(0x0000000008000000)
10993 #define CPU_FTR_NOEXECUTE ASM_CONST(0x0000000010000000)
10994 #define CPU_FTR_INDEXED_DCR ASM_CONST(0x0000000020000000)
10995+#define CPU_FTR_476_DD1 ASM_CONST(0x0000000040000000)
10996
10997 /*
10998 * Add the 64-bit processor unique features in the top half of the word;
10999diff --git a/arch/powerpc/include/asm/dcr-native.h b/arch/powerpc/include/asm/dcr-native.h
11000index 7d2e623..52e2ae7 100644
11001--- a/arch/powerpc/include/asm/dcr-native.h
11002+++ b/arch/powerpc/include/asm/dcr-native.h
11003@@ -50,15 +50,35 @@ extern unsigned int __mfdcr(unsigned int reg);
11004 static inline unsigned int mfdcrx(unsigned int reg)
11005 {
11006 unsigned int ret;
11007- asm volatile(".long 0x7c000206 | (%0 << 21) | (%1 << 16)"
11008+ asm volatile(
11009+#ifdef CONFIG_PPC_47x
11010+ /*
11011+ * Workaround: move reg to an spr prior to mfdcrx instruction
11012+ */
11013+ /* __stringify(BEGIN_FTR_SECTION) */
11014+ "mtspr "__stringify(SPRN_SPRG_WSCRATCH_CRIT)",%1;"
11015+ /* __stringify(END_FTR_SECTION_IFSET(CPU_FTR_476_DD1_1)) */
11016+#endif
11017+ ".long 0x7c000206 | (%0 << 21) | (%1 << 16)"
11018 : "=r" (ret) : "r" (reg));
11019 return ret;
11020 }
11021
11022 static inline void mtdcrx(unsigned int reg, unsigned int val)
11023 {
11024- asm volatile(".long 0x7c000306 | (%0 << 21) | (%1 << 16)"
11025- : : "r" (val), "r" (reg));
11026+ asm volatile(
11027+#ifdef CONFIG_PPC_47x
11028+ /*
11029+ * Workaround: move reg to an spr prior to mtdcrx instruction.
11030+ * (Would love to get the FTR_SECTION macros working for
11031+ * inlined assembler -- shaggy)
11032+ */
11033+ /* __stringify(BEGIN_FTR_SECTION) */
11034+ "mtspr "__stringify(SPRN_SPRG_WSCRATCH_CRIT)",%1;"
11035+ /* __stringify(END_FTR_SECTION_IFSET(CPU_FTR_476_DD1_1)) */
11036+#endif
11037+ ".long 0x7c000306 | (%0 << 21) | (%1 << 16)"
11038+ : : "r" (val), "r" (reg));
11039 }
11040
11041 #define mfdcr(rn) \
11042diff --git a/arch/powerpc/include/asm/lsi.h b/arch/powerpc/include/asm/lsi.h
11043new file mode 100644
11044index 0000000..c2a3d44
11045--- /dev/null
11046+++ b/arch/powerpc/include/asm/lsi.h
11047@@ -0,0 +1,6 @@
11048+#ifndef __ASM_LSI_H
11049+#define __ASM_LSI_H
11050+
11051+extern int acp_clock_get(int, unsigned long *);
11052+
11053+#endif
11054diff --git a/arch/powerpc/include/asm/mpic.h b/arch/powerpc/include/asm/mpic.h
11055index df18989..8cc514e 100644
11056--- a/arch/powerpc/include/asm/mpic.h
11057+++ b/arch/powerpc/include/asm/mpic.h
11058@@ -323,6 +323,8 @@ struct mpic
11059 #ifdef CONFIG_PM
11060 struct mpic_irq_save *save_data;
11061 #endif
11062+
11063+ int cpu;
11064 };
11065
11066 /*
11067diff --git a/arch/powerpc/include/asm/ppc-opcode.h b/arch/powerpc/include/asm/ppc-opcode.h
11068index e472659..25e15a9 100644
11069--- a/arch/powerpc/include/asm/ppc-opcode.h
11070+++ b/arch/powerpc/include/asm/ppc-opcode.h
11071@@ -19,6 +19,10 @@
11072 #define PPC_INST_DCBA 0x7c0005ec
11073 #define PPC_INST_DCBA_MASK 0xfc0007fe
11074 #define PPC_INST_DCBAL 0x7c2005ec
11075+#define PPC_INST_DCBF 0x7c0000ac
11076+#define PPC_INST_DCBF_MASK 0xfc0007fe
11077+#define PPC_INST_DCBZ 0x7c0007ec
11078+#define PPC_INST_DCBZ_MASK 0xfc0007fe
11079 #define PPC_INST_DCBZL 0x7c2007ec
11080 #define PPC_INST_ISEL 0x7c00001e
11081 #define PPC_INST_ISEL_MASK 0xfc00003e
11082diff --git a/arch/powerpc/include/asm/reg.h b/arch/powerpc/include/asm/reg.h
11083index c5cae0d..a1dcdb3 100644
11084--- a/arch/powerpc/include/asm/reg.h
11085+++ b/arch/powerpc/include/asm/reg.h
11086@@ -933,7 +933,8 @@
11087 #define PVR_403GC 0x00200200
11088 #define PVR_403GCX 0x00201400
11089 #define PVR_405GP 0x40110000
11090-#define PVR_476 0x11a52000
11091+#define PVR_476 0x00050000
11092+#define PVR_476X2 0x11b22080
11093 #define PVR_STB03XXX 0x40310000
11094 #define PVR_NP405H 0x41410000
11095 #define PVR_NP405L 0x41610000
11096diff --git a/arch/powerpc/include/asm/reg_booke.h b/arch/powerpc/include/asm/reg_booke.h
11097index 0f0ad9f..85aaed6 100644
11098--- a/arch/powerpc/include/asm/reg_booke.h
11099+++ b/arch/powerpc/include/asm/reg_booke.h
11100@@ -307,6 +307,8 @@
11101 #define ESR_IMCN 0x40000000 /* Instr. Machine Check - Non-config */
11102 #define ESR_IMCB 0x20000000 /* Instr. Machine Check - Bus error */
11103 #define ESR_IMCT 0x10000000 /* Instr. Machine Check - Timeout */
11104+#define ESR_POT1 0x20000000 /* 476 - IOCR1 trap */
11105+#define ESR_POT2 0x10000000 /* 476 - IOCR2 trap */
11106 #define ESR_PIL 0x08000000 /* Program Exception - Illegal */
11107 #define ESR_PPR 0x04000000 /* Program Exception - Privileged */
11108 #define ESR_PTR 0x02000000 /* Program Exception - Trap */
11109@@ -658,6 +660,14 @@
11110 #define MMUBE1_VBE3 0x00000004
11111 #define MMUBE1_VBE4 0x00000002
11112 #define MMUBE1_VBE5 0x00000001
11113+#define SPRN_IOCCR 860
11114+#define IOCCR_IOCR1EN 0x80000000
11115+#define IOCCR_IOCR1M 0x40000000
11116+#define IOCCR_IOCR2EN 0x20000000
11117+#define IOCCR_IOCR2M 0x10000000
11118+#define SPRN_IOCR1 861
11119+#define SPRN_IOCR2 862
11120+
11121
11122 #endif /* __ASM_POWERPC_REG_BOOKE_H__ */
11123 #endif /* __KERNEL__ */
11124diff --git a/arch/powerpc/include/asm/spinlock.h b/arch/powerpc/include/asm/spinlock.h
11125index f9611bd..3d783e6 100644
11126--- a/arch/powerpc/include/asm/spinlock.h
11127+++ b/arch/powerpc/include/asm/spinlock.h
11128@@ -109,16 +109,14 @@ extern void __rw_yield(arch_rwlock_t *lock);
11129 static inline void arch_spin_lock(arch_spinlock_t *lock)
11130 {
11131 CLEAR_IO_SYNC;
11132- while (1) {
11133- if (likely(__arch_spin_trylock(lock) == 0))
11134- break;
11135- do {
11136- HMT_low();
11137- if (SHARED_PROCESSOR)
11138- __spin_yield(lock);
11139- } while (unlikely(lock->slock != 0));
11140- HMT_medium();
11141- }
11142+ if (likely(__arch_spin_trylock(lock) == 0))
11143+ return;
11144+ do {
11145+ HMT_low();
11146+ if (SHARED_PROCESSOR)
11147+ __spin_yield(lock);
11148+ } while (unlikely(__arch_spin_trylock(lock) != 0));
11149+ HMT_medium();
11150 }
11151
11152 static inline
11153@@ -132,11 +130,9 @@ void arch_spin_lock_flags(arch_spinlock_t *lock, unsigned long flags)
11154 break;
11155 local_save_flags(flags_dis);
11156 local_irq_restore(flags);
11157- do {
11158- HMT_low();
11159- if (SHARED_PROCESSOR)
11160- __spin_yield(lock);
11161- } while (unlikely(lock->slock != 0));
11162+ HMT_low();
11163+ if (SHARED_PROCESSOR)
11164+ __spin_yield(lock);
11165 HMT_medium();
11166 local_irq_restore(flags_dis);
11167 }
11168@@ -229,28 +225,20 @@ static inline long __arch_write_trylock(arch_rwlock_t *rw)
11169
11170 static inline void arch_read_lock(arch_rwlock_t *rw)
11171 {
11172- while (1) {
11173- if (likely(__arch_read_trylock(rw) > 0))
11174- break;
11175- do {
11176- HMT_low();
11177- if (SHARED_PROCESSOR)
11178- __rw_yield(rw);
11179- } while (unlikely(rw->lock < 0));
11180+ while (unlikely(__arch_read_trylock(rw) <= 0)) {
11181+ HMT_low();
11182+ if (SHARED_PROCESSOR)
11183+ __rw_yield(rw);
11184 HMT_medium();
11185 }
11186 }
11187
11188 static inline void arch_write_lock(arch_rwlock_t *rw)
11189 {
11190- while (1) {
11191- if (likely(__arch_write_trylock(rw) == 0))
11192- break;
11193- do {
11194- HMT_low();
11195- if (SHARED_PROCESSOR)
11196- __rw_yield(rw);
11197- } while (unlikely(rw->lock != 0));
11198+ while (unlikely(__arch_write_trylock(rw) != 0)) {
11199+ HMT_low();
11200+ if (SHARED_PROCESSOR)
11201+ __rw_yield(rw);
11202 HMT_medium();
11203 }
11204 }
11205diff --git a/arch/powerpc/kernel/cputable.c b/arch/powerpc/kernel/cputable.c
11206index 9fb9332..7096cc1 100644
11207--- a/arch/powerpc/kernel/cputable.c
11208+++ b/arch/powerpc/kernel/cputable.c
11209@@ -8,6 +8,8 @@
11210 * modify it under the terms of the GNU General Public License
11211 * as published by the Free Software Foundation; either version
11212 * 2 of the License, or (at your option) any later version.
11213+ *
11214+ * These patches add ACP3400 support signed-off-by: john.jacques@lsi.com
11215 */
11216
11217 #include <linux/string.h>
11218@@ -1816,9 +1818,35 @@ static struct cpu_spec __initdata cpu_specs[] = {
11219 .machine_check = machine_check_440A,
11220 .platform = "ppc440",
11221 },
11222+ { /* 476 DD1 core - needs DD1.1 feature as well */
11223+ .pvr_mask = 0x800fffff,
11224+ .pvr_value = 0x11a50000,
11225+ .cpu_name = "476 DD1",
11226+ .cpu_features = CPU_FTRS_47X | CPU_FTR_476_DD1 |
11227+ CPU_FTR_476_DD1_1 | CPU_FTR_FPU_UNAVAILABLE,
11228+ .cpu_user_features = COMMON_USER_BOOKE,
11229+ .mmu_features = MMU_FTR_TYPE_47x,
11230+ .icache_bsize = 32,
11231+ .dcache_bsize = 128,
11232+ .machine_check = machine_check_47x,
11233+ .platform = "ppc470",
11234+ },
11235+ { /* 476 DD1.1 core */
11236+ .pvr_mask = 0x800fffff,
11237+ .pvr_value = 0x00052040,
11238+ .cpu_name = "476",
11239+ .cpu_features = CPU_FTRS_47X | CPU_FTR_476_DD1_1 |
11240+ CPU_FTR_FPU_UNAVAILABLE,
11241+ .cpu_user_features = COMMON_USER_BOOKE,
11242+ .mmu_features = MMU_FTR_TYPE_47x,
11243+ .icache_bsize = 32,
11244+ .dcache_bsize = 128,
11245+ .machine_check = machine_check_47x,
11246+ .platform = "ppc470",
11247+ },
11248 { /* 476 DD2 core */
11249- .pvr_mask = 0xffffffff,
11250- .pvr_value = 0x11a52080,
11251+ .pvr_mask = 0x800fffff,
11252+ .pvr_value = 0x00052080,
11253 .cpu_name = "476",
11254 .cpu_features = CPU_FTRS_47X | CPU_FTR_476_DD2,
11255 .cpu_user_features = COMMON_USER_BOOKE |
11256@@ -1833,7 +1861,7 @@ static struct cpu_spec __initdata cpu_specs[] = {
11257 { /* 476 iss */
11258 .pvr_mask = 0xffff0000,
11259 .pvr_value = 0x00050000,
11260- .cpu_name = "476",
11261+ .cpu_name = "476 ISS",
11262 .cpu_features = CPU_FTRS_47X,
11263 .cpu_user_features = COMMON_USER_BOOKE |
11264 PPC_FEATURE_HAS_FPU,
11265diff --git a/arch/powerpc/kernel/entry_32.S b/arch/powerpc/kernel/entry_32.S
11266index 56212bc..49e40c5 100644
11267--- a/arch/powerpc/kernel/entry_32.S
11268+++ b/arch/powerpc/kernel/entry_32.S
11269@@ -143,6 +143,12 @@ transfer_to_handler:
11270 addi r2,r12,-THREAD
11271 tovirt(r2,r2) /* set r2 to current */
11272 beq 2f /* if from user, fix up THREAD.regs */
11273+#ifdef CONFIG_PPC_47x
11274+BEGIN_FTR_SECTION
11275+ li r11,0
11276+ mtspr SPRN_IOCCR,r11
11277+END_FTR_SECTION_IFSET(CPU_FTR_476_DD1_1)
11278+#endif /* CONFIG_PPC_47x */
11279 addi r11,r1,STACK_FRAME_OVERHEAD
11280 stw r11,PT_REGS(r12)
11281 #if defined(CONFIG_40x) || defined(CONFIG_BOOKE)
11282@@ -281,6 +287,12 @@ stack_ovf:
11283 0:
11284
11285 _GLOBAL(DoSyscall)
11286+#ifdef CONFIG_PPC_47x
11287+BEGIN_FTR_SECTION
11288+ li r11,0
11289+ mtspr SPRN_IOCCR,r11
11290+END_FTR_SECTION_IFSET(CPU_FTR_476_DD1_1)
11291+#endif /* CONFIG_PPC_47x */
11292 stw r3,ORIG_GPR3(r1)
11293 li r12,0
11294 stw r12,RESULT(r1)
11295@@ -382,6 +394,16 @@ BEGIN_MMU_FTR_SECTION
11296 1:
11297 END_MMU_FTR_SECTION_IFCLR(MMU_FTR_TYPE_47x)
11298 #endif /* CONFIG_44x */
11299+#ifdef CONFIG_PPC_47x
11300+BEGIN_FTR_SECTION
11301+ lwz r7,_MSR(r1)
11302+ andi. r5,r7,MSR_PR
11303+ beq 11f
11304+ lis r4,(IOCCR_IOCR1EN|IOCCR_IOCR2EN)@h
11305+ mtspr SPRN_IOCCR,r4
11306+11:
11307+END_FTR_SECTION_IFSET(CPU_FTR_476_DD1_1)
11308+#endif /* CONFIG_PPC_47x */
11309 BEGIN_FTR_SECTION
11310 lwarx r7,0,r1
11311 END_FTR_SECTION_IFSET(CPU_FTR_NEED_PAIRED_STWCX)
11312@@ -717,7 +739,7 @@ END_FTR_SECTION_IFSET(CPU_FTR_SPE)
11313 fast_exception_return:
11314 #if !(defined(CONFIG_4xx) || defined(CONFIG_BOOKE))
11315 andi. r10,r9,MSR_RI /* check for recoverable interrupt */
11316- beq 1f /* if not, we've got problems */
11317+ beq try_recov_exception /* if not, we've got problems */
11318 #endif
11319
11320 2: REST_4GPRS(3, r11)
11321@@ -737,7 +759,8 @@ fast_exception_return:
11322
11323 #if !(defined(CONFIG_4xx) || defined(CONFIG_BOOKE))
11324 /* check if the exception happened in a restartable section */
11325-1: lis r3,exc_exit_restart_end@ha
11326+try_recov_exception:
11327+ lis r3,exc_exit_restart_end@ha
11328 addi r3,r3,exc_exit_restart_end@l
11329 cmplw r12,r3
11330 bge 3f
11331@@ -811,6 +834,14 @@ restore_user:
11332 bnel- load_dbcr0
11333 #endif
11334
11335+#ifdef CONFIG_PPC_47x
11336+BEGIN_FTR_SECTION
11337+ lis r0,(IOCCR_IOCR1EN|IOCCR_IOCR2EN)@h
11338+ mtspr SPRN_IOCCR,r0
11339+1:
11340+END_FTR_SECTION_IFSET(CPU_FTR_476_DD1_1)
11341+#endif /* CONFIG_PPC_47x */
11342+
11343 #ifdef CONFIG_PREEMPT
11344 b restore
11345
11346diff --git a/arch/powerpc/kernel/head_booke.h b/arch/powerpc/kernel/head_booke.h
11347index a0bf158..c8e38c8 100644
11348--- a/arch/powerpc/kernel/head_booke.h
11349+++ b/arch/powerpc/kernel/head_booke.h
11350@@ -164,7 +164,8 @@
11351 */
11352 #define START_EXCEPTION(label) \
11353 .align 5; \
11354-label:
11355+label: \
11356+ PPC476_ERR_ISYNC()
11357
11358 #define FINISH_EXCEPTION(func) \
11359 bl transfer_to_handler_full; \
11360@@ -173,12 +174,14 @@ label:
11361
11362 #define EXCEPTION(n, label, hdlr, xfer) \
11363 START_EXCEPTION(label); \
11364+ PPC476_ERR_DCI(); \
11365 NORMAL_EXCEPTION_PROLOG; \
11366 addi r3,r1,STACK_FRAME_OVERHEAD; \
11367 xfer(n, hdlr)
11368
11369 #define CRITICAL_EXCEPTION(n, label, hdlr) \
11370 START_EXCEPTION(label); \
11371+ PPC476_ERR_DCI(); \
11372 CRITICAL_EXCEPTION_PROLOG; \
11373 addi r3,r1,STACK_FRAME_OVERHEAD; \
11374 EXC_XFER_TEMPLATE(hdlr, n+2, (MSR_KERNEL & ~(MSR_ME|MSR_DE|MSR_CE)), \
11375@@ -378,6 +381,7 @@ label:
11376
11377 #define DECREMENTER_EXCEPTION \
11378 START_EXCEPTION(Decrementer) \
11379+ PPC476_ERR_DCI(); \
11380 NORMAL_EXCEPTION_PROLOG; \
11381 lis r0,TSR_DIS@h; /* Setup the DEC interrupt mask */ \
11382 mtspr SPRN_TSR,r0; /* Clear the DEC interrupt */ \
11383diff --git a/arch/powerpc/kernel/misc_32.S b/arch/powerpc/kernel/misc_32.S
11384index 998a100..88c1793 100644
11385--- a/arch/powerpc/kernel/misc_32.S
11386+++ b/arch/powerpc/kernel/misc_32.S
11387@@ -392,7 +392,10 @@ _GLOBAL(flush_dcache_range)
11388 beqlr
11389 mtctr r4
11390
11391-1: dcbf 0,r3
11392+1: PPC476_ERR_DCBx()
11393+ dcbf 0,r3
11394+ PPC476_ERR_DCBx()
11395+
11396 addi r3,r3,L1_CACHE_BYTES
11397 bdnz 1b
11398 sync /* wait for dcbst's to get to ram */
11399@@ -506,7 +509,9 @@ _GLOBAL(clear_pages)
11400 li r0,PAGE_SIZE/L1_CACHE_BYTES
11401 slw r0,r0,r4
11402 mtctr r0
11403-1: dcbz 0,r3
11404+1: PPC476_ERR_DCBx()
11405+ dcbz 0,r3
11406+ PPC476_ERR_DCBx()
11407 addi r3,r3,L1_CACHE_BYTES
11408 bdnz 1b
11409 blr
11410@@ -550,7 +555,9 @@ _GLOBAL(copy_page)
11411 mtctr r0
11412 1:
11413 dcbt r11,r4
11414+ PPC476_ERR_DCBx()
11415 dcbz r5,r3
11416+ PPC476_ERR_DCBx()
11417 COPY_16_BYTES
11418 #if L1_CACHE_BYTES >= 32
11419 COPY_16_BYTES
11420@@ -837,3 +844,25 @@ relocate_new_kernel_end:
11421 relocate_new_kernel_size:
11422 .long relocate_new_kernel_end - relocate_new_kernel
11423 #endif
11424+
11425+#ifdef CONFIG_PPC_47x
11426+_GLOBAL(__dcbf)
11427+ lwsync
11428+1: dcbf 0,r3
11429+ lwsync
11430+ li r3,0
11431+ blr
11432+_GLOBAL(__dcbz)
11433+ lwsync
11434+2: dcbz 0,r3
11435+ lwsync
11436+ li r3,0
11437+ blr
11438+3: li r3,-EFAULT
11439+ blr
11440+ .section __ex_table,"a"
11441+ .align 2
11442+ .long 1b,3b
11443+ .long 2b,3b
11444+ .text
11445+#endif /* CONFIG_PPC_47x */
11446diff --git a/arch/powerpc/kernel/misc_64.S b/arch/powerpc/kernel/misc_64.S
11447index e89df59..6238a0d 100644
11448--- a/arch/powerpc/kernel/misc_64.S
11449+++ b/arch/powerpc/kernel/misc_64.S
11450@@ -631,3 +631,25 @@ _GLOBAL(kexec_sequence)
11451 li r5,0
11452 blr /* image->start(physid, image->start, 0); */
11453 #endif /* CONFIG_KEXEC */
11454+
11455+#ifdef CONFIG_PPC_47x
11456+_GLOBAL(__dcbf)
11457+ lwsync
11458+1: dcbf 0,r3
11459+ lwsync
11460+ li r3,0
11461+ blr
11462+_GLOBAL(__dcbz)
11463+ lwsync
11464+2: dcbz 0,r3
11465+ lwsync
11466+ li r3,0
11467+ blr
11468+3: li r3,-EFAULT
11469+ blr
11470+ .section __ex_table,"a"
11471+ .align 2
11472+ .long 1b,3b
11473+ .long 2b,3b
11474+ .text
11475+#endif /* CONFIG_PPC_47x */
11476diff --git a/arch/powerpc/kernel/smp.c b/arch/powerpc/kernel/smp.c
11477index 8ebc670..fae9a08 100644
11478--- a/arch/powerpc/kernel/smp.c
11479+++ b/arch/powerpc/kernel/smp.c
11480@@ -13,6 +13,8 @@
11481 * modify it under the terms of the GNU General Public License
11482 * as published by the Free Software Foundation; either version
11483 * 2 of the License, or (at your option) any later version.
11484+ *
11485+ * These patches add ACP3400 support signed-off-by: john.jacques@lsi.com
11486 */
11487
11488 #undef DEBUG
11489@@ -357,6 +359,9 @@ int generic_cpu_disable(void)
11490 {
11491 unsigned int cpu = smp_processor_id();
11492
11493+#ifdef CONFIG_ACP
11494+ printk("%s:%d - cpu=%u\n", __FILE__, __LINE__, cpu);
11495+#endif
11496 if (cpu == boot_cpuid)
11497 return -EBUSY;
11498
11499@@ -493,9 +498,15 @@ int __cpuinit __cpu_up(unsigned int cpu)
11500 * use this value that I found through experimentation.
11501 * -- Cort
11502 */
11503- if (system_state < SYSTEM_RUNNING)
11504+ if (system_state < SYSTEM_RUNNING) {
11505+#ifndef CONFIG_ACPISS
11506 for (c = 50000; c && !cpu_callin_map[cpu]; c--)
11507 udelay(100);
11508+#else /* CONFIG_ACPISS */
11509+ for (c = 500; c && !cpu_callin_map[cpu]; c--)
11510+ udelay(10);
11511+#endif /* CONFIG_ACPISS */
11512+ }
11513 #ifdef CONFIG_HOTPLUG_CPU
11514 else
11515 /*
11516diff --git a/arch/powerpc/kernel/traps.c b/arch/powerpc/kernel/traps.c
11517index 1a01414..f404950 100644
11518--- a/arch/powerpc/kernel/traps.c
11519+++ b/arch/powerpc/kernel/traps.c
11520@@ -866,6 +866,31 @@ static int emulate_isel(struct pt_regs *regs, u32 instword)
11521 return 0;
11522 }
11523
11524+#ifdef CONFIG_PPC_47x
11525+
11526+extern int __dcbf(unsigned long ea);
11527+extern int __dcbz(unsigned long ea);
11528+
11529+static int emulate_dcbf(struct pt_regs *regs, u32 instword)
11530+{
11531+ u8 rA = (instword >> 16) & 0x1f;
11532+ u8 rB = (instword >> 11) & 0x1f;
11533+ unsigned long ea = regs->gpr[rB] + ((rA == 0) ? 0 : regs->gpr[rA]);
11534+
11535+ return __dcbf(ea);
11536+}
11537+
11538+static int emulate_dcbz(struct pt_regs *regs, u32 instword)
11539+{
11540+ u8 rA = (instword >> 16) & 0x1f;
11541+ u8 rB = (instword >> 11) & 0x1f;
11542+ unsigned long ea = regs->gpr[rB] + ((rA == 0) ? 0 : regs->gpr[rA]);
11543+
11544+ return __dcbz(ea);
11545+}
11546+
11547+#endif /* CONFIG_PPC_47x */
11548+
11549 static int emulate_instruction(struct pt_regs *regs)
11550 {
11551 u32 instword;
11552@@ -941,6 +966,18 @@ static int emulate_instruction(struct pt_regs *regs)
11553 }
11554 #endif
11555
11556+#ifdef CONFIG_PPC_47x
11557+ /* Emulate dcbf instruction */
11558+ if ((instword & PPC_INST_DCBF_MASK) == PPC_INST_DCBF) {
11559+ return emulate_dcbf(regs, instword);
11560+ }
11561+
11562+ /* Emulate dcbz instruction */
11563+ if ((instword & PPC_INST_DCBZ_MASK) == PPC_INST_DCBZ) {
11564+ return emulate_dcbz(regs, instword);
11565+ }
11566+#endif /* CONFIG_47x */
11567+
11568 return -EINVAL;
11569 }
11570
11571@@ -956,6 +993,14 @@ void __kprobes program_check_exception(struct pt_regs *regs)
11572
11573 /* We can now get here via a FP Unavailable exception if the core
11574 * has no FPU, in that case the reason flags will be 0 */
11575+#ifdef CONFIG_PPC_47x
11576+ /* Make IOC instruction traps look like illegal instructions
11577+ * so we hit the proper emulation code path
11578+ */
11579+ if (mmu_has_feature(MMU_FTR_TYPE_47x) &&
11580+ (reason & (ESR_POT1 | ESR_POT2)))
11581+ reason |= ESR_PIL;
11582+#endif /* CONFIG_PPC_47x */
11583
11584 if (reason & REASON_FP) {
11585 /* IEEE FP exception */
11586diff --git a/arch/powerpc/kernel/udbg.c b/arch/powerpc/kernel/udbg.c
11587index 23d65ab..2f5a3f4 100644
11588--- a/arch/powerpc/kernel/udbg.c
11589+++ b/arch/powerpc/kernel/udbg.c
11590@@ -7,6 +7,8 @@
11591 * modify it under the terms of the GNU General Public License
11592 * as published by the Free Software Foundation; either version
11593 * 2 of the License, or (at your option) any later version.
11594+ *
11595+ * These patches add ACP3400 support signed-off-by: john.jacques@lsi.com
11596 */
11597
11598 #include <stdarg.h>
11599diff --git a/arch/powerpc/kernel/udbg_16550.c b/arch/powerpc/kernel/udbg_16550.c
11600index 6837f83..9470841 100644
11601--- a/arch/powerpc/kernel/udbg_16550.c
11602+++ b/arch/powerpc/kernel/udbg_16550.c
11603@@ -3,11 +3,108 @@
11604 *
11605 * Copyright (C) 2001-2005 PPC 64 Team, IBM Corp
11606 *
11607- * This program is free software; you can redistribute it and/or
11608- * modify it under the terms of the GNU General Public License
11609- * as published by the Free Software Foundation; either version
11610- * 2 of the License, or (at your option) any later version.
11611+ * This program is free software; you can redistribute it and/or
11612+ * modify it under the terms of the GNU General Public License
11613+ * as published by the Free Software Foundation; either version
11614+ * 2 of the License, or (at your option) any later version.
11615+ *
11616+ * These patches add ACP3400 support signed-off-by: john.jacques@lsi.com
11617 */
11618+
11619+#if defined(CONFIG_ACP) && !defined(CONFIG_ACPISS)
11620+
11621+#include <asm/io.h>
11622+#include <asm/udbg.h>
11623+
11624+/*
11625+ ======================================================================
11626+ ======================================================================
11627+ serial
11628+ ======================================================================
11629+ ======================================================================
11630+*/
11631+
11632+static void *uart_base;
11633+
11634+#define UART_DR 0x00
11635+#define UART_FR 0x18
11636+#define UART_IBRD 0x24
11637+#define UART_FBRD 0x28
11638+#define UART_LCR_H 0x2c
11639+#define UART_CR 0x30
11640+#define UART_IFLS 0x34
11641+#define UART_IMSC 0x38
11642+#define UART_ECR 0x04
11643+
11644+#define FR_RXFE 0x10
11645+#define FR_TXFF 0x20
11646+
11647+#if defined(CONFIG_PPC_EARLY_DEBUG_44x) || defined(CONFIG_ACPISS)
11648+static void
11649+acp_putc(char c)
11650+{
11651+ while (0 != (in_le32(uart_base + UART_FR) & FR_TXFF))
11652+ ;
11653+
11654+ if ('\n' == c) {
11655+ out_le32(uart_base + UART_DR, '\r');
11656+ while (0 != (in_le32(uart_base + UART_FR) & FR_TXFF))
11657+ ;
11658+ }
11659+
11660+ out_le32(uart_base + UART_DR, c);
11661+
11662+ return;
11663+}
11664+
11665+static int
11666+acp_getc(void)
11667+{
11668+ while (0 != (in_le32(uart_base + UART_FR) & FR_RXFE))
11669+ ;
11670+ return in_le32(uart_base + UART_DR);
11671+}
11672+#endif
11673+
11674+unsigned int
11675+udbg_probe_uart_speed(void __iomem *comport, unsigned int clock)
11676+{
11677+ return 9600;
11678+}
11679+
11680+void
11681+udbg_init_uart(void __iomem *comport, unsigned int speed, unsigned int clock)
11682+{
11683+ out_le32(uart_base + UART_IFLS, 0);
11684+ out_le32(uart_base + UART_IMSC, 0x700);
11685+ out_le32(uart_base + UART_ECR, 0);
11686+
11687+ return;
11688+}
11689+
11690+void __init
11691+udbg_init_44x_as1(void)
11692+{
11693+#if defined(CONFIG_ACPISS)
11694+ uart_base = (void *)0xf0004000;
11695+ udbg_putc = acp_putc;
11696+ udbg_getc = acp_getc;
11697+#elif defined(CONFIG_PPC_EARLY_DEBUG_44x)
11698+ unsigned long long uart_phys_address;
11699+
11700+ uart_phys_address =
11701+ ((unsigned long long)CONFIG_PPC_EARLY_DEBUG_44x_PHYSHIGH << 32) |
11702+ (unsigned long long)CONFIG_PPC_EARLY_DEBUG_44x_PHYSLOW;
11703+ uart_base = ioremap(uart_phys_address, 0x1000);
11704+ udbg_putc = acp_putc;
11705+ udbg_getc = acp_getc;
11706+#endif
11707+
11708+ return;
11709+}
11710+
11711+#else
11712+
11713 #include <linux/types.h>
11714 #include <asm/udbg.h>
11715 #include <asm/io.h>
11716@@ -36,14 +133,14 @@ struct NS16550 {
11717 #define dlm ier
11718 #define dlab lcr
11719
11720-#define LSR_DR 0x01 /* Data ready */
11721-#define LSR_OE 0x02 /* Overrun */
11722-#define LSR_PE 0x04 /* Parity error */
11723-#define LSR_FE 0x08 /* Framing error */
11724-#define LSR_BI 0x10 /* Break */
11725+#define LSR_DR 0x01 /* Data ready */
11726+#define LSR_OE 0x02 /* Overrun */
11727+#define LSR_PE 0x04 /* Parity error */
11728+#define LSR_FE 0x08 /* Framing error */
11729+#define LSR_BI 0x10 /* Break */
11730 #define LSR_THRE 0x20 /* Xmit holding register empty */
11731 #define LSR_TEMT 0x40 /* Xmitter empty */
11732-#define LSR_ERR 0x80 /* Error */
11733+#define LSR_ERR 0x80 /* Error */
11734
11735 #define LCR_DLAB 0x80
11736
11737@@ -220,6 +317,17 @@ void udbg_init_pas_realmode(void)
11738 #ifdef CONFIG_PPC_EARLY_DEBUG_44x
11739 #include <platforms/44x/44x.h>
11740
11741+static unsigned long udbg_44x_comport = PPC44x_EARLY_DEBUG_VIRTADDR;
11742+
11743+static int __init early_parse_comport(char *p)
11744+{
11745+ if (!p || !(*p))
11746+ return 0;
11747+ udbg_44x_comport = simple_strtoul(p, 0, 16);
11748+ return 0;
11749+}
11750+early_param("uart_addr", early_parse_comport);
11751+
11752 static void udbg_44x_as1_flush(void)
11753 {
11754 if (udbg_comport) {
11755@@ -251,7 +359,7 @@ static int udbg_44x_as1_getc(void)
11756 void __init udbg_init_44x_as1(void)
11757 {
11758 udbg_comport =
11759- (struct NS16550 __iomem *)PPC44x_EARLY_DEBUG_VIRTADDR;
11760+ (struct NS16550 __iomem *)udbg_44x_comport;
11761
11762 udbg_putc = udbg_44x_as1_putc;
11763 udbg_flush = udbg_44x_as1_flush;
11764@@ -349,3 +457,5 @@ void __init udbg_init_wsp(void)
11765 udbg_getc_poll = udbg_wsp_getc_poll;
11766 }
11767 #endif /* CONFIG_PPC_EARLY_DEBUG_WSP */
11768+
11769+#endif
11770diff --git a/arch/powerpc/lib/copy_32.S b/arch/powerpc/lib/copy_32.S
11771index 55f19f9..b47a0f6 100644
11772--- a/arch/powerpc/lib/copy_32.S
11773+++ b/arch/powerpc/lib/copy_32.S
11774@@ -12,6 +12,7 @@
11775 #include <asm/cache.h>
11776 #include <asm/errno.h>
11777 #include <asm/ppc_asm.h>
11778+#include <asm/cputable.h>
11779
11780 #define COPY_16_BYTES \
11781 lwz r7,4(r4); \
11782@@ -98,7 +99,9 @@ _GLOBAL(cacheable_memzero)
11783 bdnz 4b
11784 3: mtctr r9
11785 li r7,4
11786-10: dcbz r7,r6
11787+10: PPC476_ERR_DCBx()
11788+ dcbz r7,r6
11789+ PPC476_ERR_DCBx()
11790 addi r6,r6,CACHELINE_BYTES
11791 bdnz 10b
11792 clrlwi r5,r8,32-LG_CACHELINE_BYTES
11793@@ -368,7 +371,9 @@ _GLOBAL(__copy_tofrom_user)
11794 mtctr r8
11795
11796 53: dcbt r3,r4
11797+ PPC476_ERR_DCBx()
11798 54: dcbz r11,r6
11799+ PPC476_ERR_DCBx()
11800 .section __ex_table,"a"
11801 .align 2
11802 .long 54b,105f
11803diff --git a/arch/powerpc/mm/44x_mmu.c b/arch/powerpc/mm/44x_mmu.c
11804index 024acab..c16d796 100644
11805--- a/arch/powerpc/mm/44x_mmu.c
11806+++ b/arch/powerpc/mm/44x_mmu.c
11807@@ -78,11 +78,7 @@ static void __init ppc44x_pin_tlb(unsigned int virt, unsigned int phys)
11808 "tlbwe %1,%3,%5\n"
11809 "tlbwe %0,%3,%6\n"
11810 :
11811-#ifdef CONFIG_PPC47x
11812- : "r" (PPC47x_TLB2_S_RWX),
11813-#else
11814 : "r" (PPC44x_TLB_SW | PPC44x_TLB_SR | PPC44x_TLB_SX | PPC44x_TLB_G),
11815-#endif
11816 "r" (phys),
11817 "r" (virt | PPC44x_TLB_VALID | PPC44x_TLB_256M),
11818 "r" (entry),
11819diff --git a/arch/powerpc/mm/init_32.c b/arch/powerpc/mm/init_32.c
11820index 5de0f25..960b9cc 100644
11821--- a/arch/powerpc/mm/init_32.c
11822+++ b/arch/powerpc/mm/init_32.c
11823@@ -141,6 +141,11 @@ void __init MMU_init(void)
11824 * entries, so we need to adjust lowmem to match the amount we can map
11825 * in the fixed entries */
11826 adjust_total_lowmem();
11827+#elif CONFIG_PPC_47x && CONFIG_RELOCATABLE
11828+ /*
11829+ * FIXME: Probably not the safest calculation, but it works for now
11830+ */
11831+/* __initial_memory_limit_addr += memstart_addr; */
11832 #endif /* CONFIG_FSL_BOOKE */
11833
11834 if (total_lowmem > __max_low_memory) {
11835diff --git a/arch/powerpc/platforms/44x/Kconfig b/arch/powerpc/platforms/44x/Kconfig
11836index e958b6f..e187e4a 100644
11837--- a/arch/powerpc/platforms/44x/Kconfig
11838+++ b/arch/powerpc/platforms/44x/Kconfig
11839@@ -197,6 +197,32 @@ config ICON
11840 help
11841 This option enables support for the AMCC PPC440SPe evaluation board.
11842
11843+config ACP
11844+ bool "Support for LSI's ACP Platform"
11845+ depends on (44x || 40x)
11846+ select PPC4xx_PCI_EXPRESS
11847+ default n
11848+ select 440GP
11849+ select PPC_FPU
11850+ select HAS_RAPIDIO
11851+
11852+config ACPISS
11853+ bool "ACP on the ISS 4xx Simulator"
11854+ depends on ACP
11855+ default n
11856+ select OF_RTC
11857+ help
11858+ This option enables support for the ACP on the IBM ISS
11859+ simulation environment
11860+
11861+config ACP_X1V1
11862+ bool "ACP, X1V1 Version"
11863+ depends on ACP
11864+ default n
11865+ select HAS_RAPIDIO
11866+ help
11867+ Workarounds for the X1V1 version of the ACP.
11868+
11869 #config LUAN
11870 # bool "Luan"
11871 # depends on 44x
11872diff --git a/arch/powerpc/platforms/44x/Makefile b/arch/powerpc/platforms/44x/Makefile
11873index 553db60..d3388ed 100644
11874--- a/arch/powerpc/platforms/44x/Makefile
11875+++ b/arch/powerpc/platforms/44x/Makefile
11876@@ -10,3 +10,5 @@ obj-$(CONFIG_XILINX_VIRTEX_5_FXT) += virtex.o
11877 obj-$(CONFIG_XILINX_ML510) += virtex_ml510.o
11878 obj-$(CONFIG_ISS4xx) += iss4xx.o
11879 obj-$(CONFIG_CANYONLANDS)+= canyonlands.o
11880+obj-$(CONFIG_ACPISS) += iss4xx.o
11881+obj-$(CONFIG_ACP) += acpx1.o
11882diff --git a/arch/powerpc/platforms/44x/acpx1.c b/arch/powerpc/platforms/44x/acpx1.c
11883new file mode 100644
11884index 0000000..85d4059
11885--- /dev/null
11886+++ b/arch/powerpc/platforms/44x/acpx1.c
11887@@ -0,0 +1,182 @@
11888+/*
11889+ * PPC476 board specific routines
11890+ *
11891+ * Copyright 2009 Torez Smith, IBM Corporation.
11892+ *
11893+ * Based on earlier code:
11894+ * Matt Porter <mporter@kernel.crashing.org>
11895+ * Copyright 2002-2005 MontaVista Software Inc.
11896+ *
11897+ * Eugene Surovegin <eugene.surovegin@zultys.com> or <ebs@ebshome.net>
11898+ * Copyright (c) 2003-2005 Zultys Technologies
11899+ *
11900+ * Rewritten and ported to the merged powerpc tree:
11901+ * Copyright 2007 David Gibson <dwg@au1.ibm.com>, IBM Corporation.
11902+ *
11903+ * This program is free software; you can redistribute it and/or modify it
11904+ * under the terms of the GNU General Public License as published by the
11905+ * Free Software Foundation; either version 2 of the License, or (at your
11906+ * option) any later version.
11907+ *
11908+ * These patches add ACP3400 support signed-off-by: john.jacques@lsi.com
11909+ */
11910+
11911+#include <linux/init.h>
11912+#include <linux/of_platform.h>
11913+#include <linux/rtc.h>
11914+
11915+#include <asm/machdep.h>
11916+#include <asm/prom.h>
11917+#include <asm/udbg.h>
11918+#include <asm/time.h>
11919+#include <asm/uic.h>
11920+#include <asm/ppc4xx.h>
11921+#include <asm/mpic.h>
11922+#include <asm/mmu.h>
11923+
11924+static __initdata struct of_device_id acpx14xx_of_bus[] = {
11925+ { .compatible = "ibm,plb4", },
11926+ { .compatible = "ibm,plb6", },
11927+ { .compatible = "ibm,opb", },
11928+ { .compatible = "ibm,ebc", },
11929+ { .compatible = "acp,rapidio-delta", },
11930+ {},
11931+};
11932+
11933+static __initdata struct of_device_id acp_rtc[] = {
11934+ { .compatible = "ds1743-nvram", },
11935+ {}
11936+};
11937+
11938+
11939+static int __init acpx14xx_device_probe(void)
11940+{
11941+ struct device_node *child;
11942+
11943+ of_platform_bus_probe(NULL, acpx14xx_of_bus, NULL);
11944+
11945+ for_each_child_of_node(of_find_node_by_path("/"), child) {
11946+ if (of_match_node(acp_rtc, child)) {
11947+ of_platform_device_create(child, "rtc", NULL);
11948+ }
11949+ }
11950+
11951+ return 0;
11952+}
11953+machine_device_initcall(acpx14xx, acpx14xx_device_probe);
11954+
11955+/* We can have either UICs or MPICs */
11956+static void __init acpx14xx_init_irq(void)
11957+{
11958+ struct device_node *np;
11959+
11960+ /* Find top level interrupt controller */
11961+ for_each_node_with_property(np, "interrupt-controller") {
11962+ if (of_get_property(np, "interrupts", NULL) == NULL)
11963+ break;
11964+ }
11965+ if (np == NULL)
11966+ panic("Can't find top level interrupt controller");
11967+
11968+ /* Check type and do appropriate initialization */
11969+ if (of_device_is_compatible(np, "chrp,open-pic")) {
11970+ /* The MPIC driver will get everything it needs from the
11971+ * device-tree, just pass 0 to all arguments
11972+ */
11973+ struct mpic *mpic =
11974+ mpic_alloc(np, 0, MPIC_PRIMARY, 0, 0, " MPIC ");
11975+ BUG_ON(mpic == NULL);
11976+ mpic_init(mpic);
11977+ ppc_md.get_irq = mpic_get_irq;
11978+ } else
11979+ panic("Unrecognized top level interrupt controller");
11980+}
11981+
11982+#ifdef CONFIG_SMP
11983+static void __cpuinit smp_acpx14xx_setup_cpu(int cpu)
11984+{
11985+ mpic_setup_this_cpu();
11986+}
11987+
11988+static int __cpuinit smp_acpx14xx_kick_cpu(int cpu)
11989+{
11990+ struct device_node *cpunode = of_get_cpu_node(cpu, NULL);
11991+ const u64 *spin_table_addr_prop;
11992+ u32 *spin_table;
11993+ extern void start_secondary_47x(void);
11994+
11995+ BUG_ON(cpunode == NULL);
11996+
11997+ /* Assume spin table. We could test for the enable-method in
11998+ * the device-tree but currently there's little point as it's
11999+ * our only supported method
12000+ */
12001+ spin_table_addr_prop =
12002+ of_get_property(cpunode, "cpu-release-addr", NULL);
12003+
12004+ if (spin_table_addr_prop == NULL) {
12005+ pr_err("CPU%d: Can't start, macpx1ing cpu-release-addr !\n",
12006+ cpu);
12007+ return -ENOSYS;
12008+ }
12009+
12010+ /* Assume it's mapped as part of the linear mapping. This is a bit
12011+ * fishy but will work fine for now
12012+ */
12013+ spin_table = (u32 *)__va(*spin_table_addr_prop);
12014+ pr_debug("CPU%d: Spin table mapped at %p\n", cpu, spin_table);
12015+
12016+ spin_table[3] = cpu;
12017+ smp_wmb();
12018+ spin_table[1] = __pa(start_secondary_47x);
12019+ mb();
12020+
12021+ return 0;
12022+}
12023+
12024+static struct smp_ops_t acpx1_smp_ops = {
12025+ .probe = smp_mpic_probe,
12026+ .message_pass = smp_mpic_message_pass,
12027+ .setup_cpu = smp_acpx14xx_setup_cpu,
12028+ .kick_cpu = smp_acpx14xx_kick_cpu,
12029+ .give_timebase = smp_generic_give_timebase,
12030+ .take_timebase = smp_generic_take_timebase,
12031+};
12032+
12033+static void __init acpx14xx_smp_init(void)
12034+{
12035+ if (mmu_has_feature(MMU_FTR_TYPE_47x))
12036+ smp_ops = &acpx1_smp_ops;
12037+}
12038+
12039+#else /* CONFIG_SMP */
12040+static void __init acpx14xx_smp_init(void) { }
12041+#endif /* CONFIG_SMP */
12042+
12043+static void __init acpx14xx_setup_arch(void)
12044+{
12045+ acpx14xx_smp_init();
12046+}
12047+
12048+/*
12049+ * Called very early, MMU is off, device-tree isn't unflattened
12050+ */
12051+static int __init acpx14xx_probe(void)
12052+{
12053+ unsigned long root = of_get_flat_dt_root();
12054+
12055+ if (!of_flat_dt_is_compatible(root, "ibm,acpx1-4xx"))
12056+ return 0;
12057+
12058+ return 1;
12059+}
12060+
12061+define_machine(acpx14xx) {
12062+ .name = "ACPX1",
12063+ .probe = acpx14xx_probe,
12064+ .progress = udbg_progress,
12065+ .init_IRQ = acpx14xx_init_irq,
12066+ .setup_arch = acpx14xx_setup_arch,
12067+ .restart = ppc4xx_reset_system,
12068+ .calibrate_decr = generic_calibrate_decr,
12069+};
12070diff --git a/arch/powerpc/sysdev/mpic.c b/arch/powerpc/sysdev/mpic.c
12071index 58d7a53..862bf7b 100644
12072--- a/arch/powerpc/sysdev/mpic.c
12073+++ b/arch/powerpc/sysdev/mpic.c
12074@@ -155,7 +155,7 @@ static inline unsigned int mpic_processor_id(struct mpic *mpic)
12075 unsigned int cpu = 0;
12076
12077 if (mpic->flags & MPIC_PRIMARY)
12078- cpu = hard_smp_processor_id();
12079+ cpu = raw_smp_processor_id();
12080
12081 return cpu;
12082 }
12083@@ -340,6 +340,15 @@ static inline void mpic_map(struct mpic *mpic, struct device_node *node,
12084 #define mpic_map(m,n,p,b,o,s) _mpic_map_mmio(m,p,b,o,s)
12085 #endif /* !CONFIG_PPC_DCR */
12086
12087+static inline void mpic_init_vector(struct mpic *mpic, int source)
12088+{
12089+ /* start with vector = source number, and masked */
12090+ u32 vecpri = MPIC_VECPRI_MASK | source | (8 << MPIC_VECPRI_PRIORITY_SHIFT);
12091+
12092+ /* init hw */
12093+ mpic_irq_write(source, MPIC_INFO(IRQ_VECTOR_PRI), vecpri);
12094+ mpic_irq_write(source, MPIC_INFO(IRQ_DESTINATION), 1 << mpic->cpu);
12095+}
12096
12097
12098 /* Check if we have one of those nice broken MPICs with a flipped endian on
12099@@ -701,6 +710,14 @@ static inline void mpic_eoi(struct mpic *mpic)
12100 * Linux descriptor level callbacks
12101 */
12102
12103+/* Determine if the linux irq is a timer interrupt */
12104+static unsigned int mpic_is_timer_interrupt(struct mpic *mpic, unsigned int irq)
12105+{
12106+ unsigned int src = virq_to_hw(irq);
12107+
12108+ return (src >= mpic->timer_vecs[0] && src <= mpic->timer_vecs[3]);
12109+}
12110+
12111
12112 void mpic_unmask_irq(struct irq_data *d)
12113 {
12114@@ -1051,6 +1068,15 @@ static int mpic_host_map(struct irq_host *h, unsigned int virq,
12115 if (hw >= mpic->irq_count)
12116 return -EINVAL;
12117
12118+ /* If the MPIC was reset, then all vectors have already been
12119+ * initialized. Otherwise, the appropriate vector needs to be
12120+ * initialized here to ensure that only used sources are setup with
12121+ * a vector.
12122+ */
12123+ if (mpic->flags & MPIC_NO_RESET)
12124+ if (!(mpic_is_ipi(mpic, hw) || mpic_is_timer_interrupt(mpic, hw)))
12125+ mpic_init_vector(mpic, hw);
12126+
12127 mpic_msi_reserve_hwirq(mpic, hw);
12128
12129 /* Default chip */
12130@@ -1417,8 +1443,7 @@ void __init mpic_set_default_senses(struct mpic *mpic, u8 *senses, int count)
12131
12132 void __init mpic_init(struct mpic *mpic)
12133 {
12134- int i;
12135- int cpu;
12136+ int i, cpu;
12137
12138 BUG_ON(mpic->num_sources == 0);
12139
12140diff --git a/arch/powerpc/sysdev/ppc4xx_soc.c b/arch/powerpc/sysdev/ppc4xx_soc.c
12141index d3d6ce3..76f423c 100644
12142--- a/arch/powerpc/sysdev/ppc4xx_soc.c
12143+++ b/arch/powerpc/sysdev/ppc4xx_soc.c
12144@@ -20,10 +20,14 @@
12145 #include <linux/interrupt.h>
12146 #include <linux/irq.h>
12147 #include <linux/of_platform.h>
12148+#include <linux/cpu.h>
12149
12150 #include <asm/dcr.h>
12151 #include <asm/dcr-regs.h>
12152 #include <asm/reg.h>
12153+#ifdef CONFIG_ACP
12154+#include <asm/mpic.h>
12155+#endif
12156
12157 static u32 dcrbase_l2c;
12158
12159@@ -190,6 +194,48 @@ static int __init ppc4xx_l2c_probe(void)
12160 }
12161 arch_initcall(ppc4xx_l2c_probe);
12162
12163+#ifdef CONFIG_ACP
12164+
12165+static int restart_mode = 0;
12166+
12167+/*
12168+ * Issue a "core" reset.
12169+ */
12170+
12171+void
12172+acp_jump_to_boot_loader(void *input)
12173+{
12174+ mpic_teardown_this_cpu(0);
12175+ /* This is only valid in the "core" reset case, so 0x10000000. */
12176+ mtspr(SPRN_DBCR0, mfspr(SPRN_DBCR0) | 0x10000000);
12177+
12178+ while (1)
12179+ ; /* Just in case the jump fails. */
12180+}
12181+
12182+/*
12183+ * Get all other cores to run "acp_jump_to_boot_loader()" then go
12184+ * there as well.
12185+ */
12186+
12187+void
12188+acp_reset_cores(void)
12189+{
12190+ int cpu;
12191+
12192+ for_each_possible_cpu(cpu) {
12193+ if (cpu != smp_processor_id())
12194+ smp_call_function_single(cpu, acp_jump_to_boot_loader,
12195+ NULL, 0);
12196+ }
12197+
12198+ acp_jump_to_boot_loader(NULL);
12199+}
12200+
12201+
12202+#endif
12203+
12204+
12205 /*
12206 * Apply a system reset. Alternatively a board specific value may be
12207 * provided via the "reset-type" property in the cpu node.
12208@@ -214,8 +260,52 @@ void ppc4xx_reset_system(char *cmd)
12209 reset_type = prop[0] << 28;
12210 }
12211
12212+#ifdef CONFIG_ACP
12213+ if (restart_mode) /* cold reset */
12214+ reset_type = DBCR0_RST_SYSTEM;
12215+ printk(KERN_DEBUG"Resetting using '%s' mode\n", restart_mode ? "cold" : "warm");
12216+
12217+ if (DBCR0_RST_CORE == reset_type) {
12218+ acp_reset_cores();
12219+ } else {
12220+ mtspr(SPRN_DBCR0, mfspr(SPRN_DBCR0) | reset_type);
12221+ }
12222+#else
12223 mtspr(SPRN_DBCR0, mfspr(SPRN_DBCR0) | reset_type);
12224+#endif
12225
12226 while (1)
12227 ; /* Just in case the reset doesn't work */
12228 }
12229+
12230+#ifdef CONFIG_ACP
12231+static ssize_t restart_mode_show(struct kobject *kobj,
12232+ struct kobj_attribute *attr, char *buf)
12233+{
12234+ return sprintf(buf, "%s\n", restart_mode ? "cold" : "warm");
12235+}
12236+
12237+static ssize_t restart_mode_store(struct kobject *kobj,
12238+ struct kobj_attribute *attr,
12239+ const char *buf, size_t n)
12240+{
12241+ if (strncmp(buf, "cold", min_t(int, n, 4)) == 0)
12242+ restart_mode = 1;
12243+ else if (strncmp(buf, "warm", min_t(int, n, 4)) == 0)
12244+ restart_mode = 0;
12245+ else
12246+ return -EINVAL;
12247+ return n;
12248+}
12249+
12250+static struct kobj_attribute restart_mode_attr =
12251+ __ATTR(restart_mode, 0600, restart_mode_show, restart_mode_store);
12252+
12253+static int __init restart_mode_sysfs(void)
12254+{
12255+ extern struct kobject *power_kobj;
12256+ return sysfs_create_file(power_kobj, &restart_mode_attr.attr);
12257+}
12258+
12259+late_initcall(restart_mode_sysfs);
12260+#endif
12261diff --git a/drivers/Kconfig b/drivers/Kconfig
12262index 3bb154d..ff5f578 100644
12263--- a/drivers/Kconfig
12264+++ b/drivers/Kconfig
12265@@ -126,4 +126,6 @@ source "drivers/hwspinlock/Kconfig"
12266
12267 source "drivers/clocksource/Kconfig"
12268
12269+source "drivers/lsi/Kconfig"
12270+
12271 endmenu
12272diff --git a/drivers/Makefile b/drivers/Makefile
12273index 09f3232..5444771 100644
12274--- a/drivers/Makefile
12275+++ b/drivers/Makefile
12276@@ -116,6 +116,8 @@ obj-$(CONFIG_BCMA) += bcma/
12277 obj-$(CONFIG_VHOST_NET) += vhost/
12278 obj-$(CONFIG_VLYNQ) += vlynq/
12279 obj-$(CONFIG_STAGING) += staging/
12280+obj-$(CONFIG_ACPISS) += lsi/
12281+obj-$(CONFIG_ACP) += lsi/
12282 obj-y += platform/
12283 obj-y += ieee802154/
12284 #common clk code
12285diff --git a/drivers/block/Kconfig b/drivers/block/Kconfig
12286index 717d6e4..5812725 100644
12287--- a/drivers/block/Kconfig
12288+++ b/drivers/block/Kconfig
12289@@ -383,6 +383,10 @@ config BLK_DEV_XIP
12290 will prevent RAM block device backing store memory from being
12291 allocated from highmem (only a problem for highmem systems).
12292
12293+config BLK_DEV_ISS
12294+ bool "Support ISS Simulator Block Device"
12295+ default n
12296+
12297 config CDROM_PKTCDVD
12298 tristate "Packet writing on CD/DVD media"
12299 depends on !UML
12300diff --git a/drivers/block/Makefile b/drivers/block/Makefile
12301index 76646e9..ab74aa6 100644
12302--- a/drivers/block/Makefile
12303+++ b/drivers/block/Makefile
12304@@ -34,6 +34,7 @@ obj-$(CONFIG_VIODASD) += viodasd.o
12305 obj-$(CONFIG_BLK_DEV_SX8) += sx8.o
12306 obj-$(CONFIG_BLK_DEV_UB) += ub.o
12307 obj-$(CONFIG_BLK_DEV_HD) += hd.o
12308+obj-$(CONFIG_BLK_DEV_ISS) += iss_blk.o
12309
12310 obj-$(CONFIG_XEN_BLKDEV_FRONTEND) += xen-blkfront.o
12311 obj-$(CONFIG_XEN_BLKDEV_BACKEND) += xen-blkback/
12312diff --git a/drivers/block/iss_blk.c b/drivers/block/iss_blk.c
12313new file mode 100644
12314index 0000000..be9128d
12315--- /dev/null
12316+++ b/drivers/block/iss_blk.c
12317@@ -0,0 +1,394 @@
12318+/*
12319+ * PPC476 board specific routines
12320+ *
12321+ * Copyright 2009 Torez Smith, IBM Corporation.
12322+ *
12323+ * This program is free software; you can redistribute it and/or modify it
12324+ * under the terms of the GNU General Public License as published by the
12325+ * Free Software Foundation; either version 2 of the License, or (at your
12326+ * option) any later version.
12327+ */
12328+
12329+/*
12330+ * Simple block device for the ISS simulator
12331+ */
12332+
12333+#undef DEBUG
12334+
12335+#include <linux/major.h>
12336+#include <linux/kernel.h>
12337+#include <linux/module.h>
12338+#include <linux/init.h>
12339+#include <linux/sched.h>
12340+#include <linux/fs.h>
12341+#include <linux/errno.h>
12342+#include <linux/file.h>
12343+#include <linux/ioctl.h>
12344+#include <linux/blkdev.h>
12345+#include <linux/of.h>
12346+
12347+#include <linux/io.h>
12348+
12349+#define MAJOR_NR 63 /* FIXME */
12350+#define NUM_ISS_BLK_MINOR 4
12351+
12352+/* Command codes */
12353+enum {
12354+ ISS_BD_CMD_NOP = 0,
12355+ ISS_BD_CMD_OPEN = 1,
12356+ ISS_BD_CMD_CLOSE = 2,
12357+ ISS_BD_CMD_READ = 3,
12358+ ISS_BD_CMD_WRITE = 4,
12359+ ISS_BD_CMD_STATUS = 5,
12360+ ISS_BD_CMD_CHKCHANGE = 6,
12361+ ISS_BD_CMD_SYNC = 7,
12362+ ISS_BD_CMD_GET_BLKSIZE = 8,
12363+ ISS_BD_CMD_GET_DEVSIZE = 9,
12364+};
12365+
12366+/* Status codes */
12367+enum {
12368+ ISS_BD_STATUS_OK = 0,
12369+ ISS_BD_STATUS_OP_ER = 1, /* Open error */
12370+ ISS_BD_ALREADY_OPEN = 2, /* Block file already open */
12371+ ISS_BD_NOT_OPEN = 3, /* Block file not open */
12372+ ISS_BD_BAD_DEV_NUM = 4, /* Bad device number */
12373+ ISS_BD_BAD_SEC_CNT = 5, /* Bad sector number */
12374+ ISS_BD_SEEK_ERROR = 6, /* Bad sector count */
12375+ ISS_BD_RW_ERROR = 7, /* Read/Write error */
12376+ ISS_BD_SIZE_ERROR = 8, /* Unable to determine file size */
12377+ ISS_BD_FILE_CHANGED = 9, /* Media has changed */
12378+};
12379+
12380+struct iss_blk_regs {
12381+ u8 cmd;
12382+ u8 pad0[3];
12383+ u32 stat;
12384+ u32 sector;
12385+ u32 count;
12386+ u32 devno;
12387+ u32 size;
12388+ u8 pad1[0x1e8];
12389+ u8 data[0x800];
12390+};
12391+
12392+struct iss_blk {
12393+ struct gendisk *disk;
12394+ unsigned int devno;
12395+ unsigned int sectsize;
12396+ unsigned int capacity;
12397+ unsigned int present;
12398+ unsigned int changed;
12399+} iss_blks[NUM_ISS_BLK_MINOR];
12400+
12401+static spinlock_t iss_blk_qlock;
12402+static spinlock_t iss_blk_reglock;
12403+static struct iss_blk_regs __iomem *iss_blk_regs;
12404+
12405+struct request *iss_req;
12406+static bool iss_end_request(int err)
12407+{
12408+ unsigned int bytes = blk_rq_cur_bytes(iss_req);
12409+
12410+ if (__blk_end_request(iss_req, err, bytes))
12411+ return true;
12412+ iss_req = NULL;
12413+ return false;
12414+}
12415+
12416+static void iss_blk_setup(struct iss_blk *ib)
12417+{
12418+ unsigned long flags;
12419+ u32 stat;
12420+
12421+ pr_debug("iss_blk_setup %d\n", ib->devno);
12422+
12423+ spin_lock_irqsave(&iss_blk_reglock, flags);
12424+ out_8(iss_blk_regs->data, 0);
12425+ out_be32(&iss_blk_regs->devno, ib->devno);
12426+ out_8(&iss_blk_regs->cmd, ISS_BD_CMD_OPEN);
12427+ stat = in_be32(&iss_blk_regs->stat);
12428+ if (stat != ISS_BD_STATUS_OK) {
12429+ pr_debug(" -> no file\n");
12430+ goto failed;
12431+ }
12432+ out_8(&iss_blk_regs->cmd, ISS_BD_CMD_GET_BLKSIZE);
12433+ ib->sectsize = in_be32(&iss_blk_regs->size);
12434+ if (ib->sectsize != 512) {
12435+ pr_err("issblk: unsupported sector size %d\n", ib->sectsize);
12436+ goto failed;
12437+ }
12438+ out_8(&iss_blk_regs->cmd, ISS_BD_CMD_GET_DEVSIZE);
12439+ ib->capacity = in_be32(&iss_blk_regs->size);
12440+ ib->present = 1;
12441+ ib->changed = 0;
12442+ spin_unlock_irqrestore(&iss_blk_reglock, flags);
12443+
12444+ pr_debug(" -> 0x%x sectors 0f %d bytes\n",
12445+ ib->capacity, ib->sectsize);
12446+
12447+ blk_queue_bounce_limit(ib->disk->queue, BLK_BOUNCE_HIGH);
12448+ blk_queue_logical_block_size(ib->disk->queue, ib->sectsize);
12449+ set_capacity(ib->disk, ib->capacity);
12450+ return;
12451+
12452+ failed:
12453+ spin_unlock_irqrestore(&iss_blk_reglock, flags);
12454+}
12455+
12456+static int __iss_blk_read(struct iss_blk *ib, void *buffer,
12457+ unsigned long sector, unsigned long count)
12458+{
12459+ unsigned long lcount, flags;
12460+ u32 stat;
12461+
12462+ pr_debug("__iss_blk_read 0x%ld sectors @ 0x%lx\n", count, sector);
12463+
12464+ while (count) {
12465+ lcount = min(count, 4ul);
12466+ spin_lock_irqsave(&iss_blk_reglock, flags);
12467+ out_be32(&iss_blk_regs->devno, ib->devno);
12468+ out_be32(&iss_blk_regs->sector, sector);
12469+ out_be32(&iss_blk_regs->count, lcount);
12470+ out_8(&iss_blk_regs->cmd, ISS_BD_CMD_READ);
12471+ stat = in_be32(&iss_blk_regs->stat);
12472+ if (stat != ISS_BD_STATUS_OK) {
12473+ spin_unlock_irqrestore(&iss_blk_reglock, flags);
12474+ return -EIO;
12475+ }
12476+ memcpy_fromio(buffer, &iss_blk_regs->data,
12477+ lcount * ib->sectsize);
12478+ spin_unlock_irqrestore(&iss_blk_reglock, flags);
12479+ count -= lcount;
12480+ sector += lcount;
12481+ buffer += lcount * ib->sectsize;
12482+ }
12483+ return 0;
12484+}
12485+
12486+static int __iss_blk_write(struct iss_blk *ib, void *buffer,
12487+ unsigned long sector, unsigned long count)
12488+{
12489+ unsigned long lcount, flags;
12490+ u32 stat;
12491+
12492+ pr_debug("__iss_blk_write 0x%ld sectors @ 0x%lx\n", count, sector);
12493+
12494+ while (count) {
12495+ lcount = min(count, 4ul);
12496+ spin_lock_irqsave(&iss_blk_reglock, flags);
12497+ out_be32(&iss_blk_regs->devno, ib->devno);
12498+ out_be32(&iss_blk_regs->sector, sector);
12499+ out_be32(&iss_blk_regs->count, lcount);
12500+ memcpy_toio(&iss_blk_regs->data, buffer, lcount * ib->sectsize);
12501+ out_8(&iss_blk_regs->cmd, ISS_BD_CMD_WRITE);
12502+ stat = in_be32(&iss_blk_regs->stat);
12503+ spin_unlock_irqrestore(&iss_blk_reglock, flags);
12504+ if (stat != ISS_BD_STATUS_OK)
12505+ return -EIO;
12506+ count -= lcount;
12507+ sector += lcount;
12508+ buffer += lcount * ib->sectsize;
12509+ }
12510+ return 0;
12511+}
12512+
12513+static void iss_blk_do_request(struct request_queue *q)
12514+{
12515+ struct iss_blk *ib = q->queuedata;
12516+ int rc = 0;
12517+
12518+ pr_debug("iss_do_request dev %d\n", ib->devno);
12519+
12520+ while (iss_req || ((iss_req = blk_fetch_request(q)) != NULL)) {
12521+ pr_debug(" -> req @ %p, changed: %d\n", iss_req, ib->changed);
12522+ if (ib->changed) {
12523+ iss_end_request(-EIO); /* failure */
12524+ continue;
12525+ }
12526+ switch (rq_data_dir(iss_req)) {
12527+ case READ:
12528+ rc = __iss_blk_read(ib, iss_req->buffer,
12529+ blk_rq_pos(iss_req),
12530+ blk_rq_cur_sectors(iss_req));
12531+ break;
12532+ case WRITE:
12533+ rc = __iss_blk_write(ib, iss_req->buffer,
12534+ blk_rq_pos(iss_req),
12535+ blk_rq_cur_sectors(iss_req));
12536+ };
12537+
12538+ pr_debug(" -> ending request, rc = %d\n", rc);
12539+ if (rc)
12540+ iss_end_request(-EIO);
12541+ else
12542+ iss_end_request(0);
12543+ }
12544+}
12545+
12546+static int iss_blk_release(struct gendisk *disk, fmode_t mode)
12547+{
12548+ struct iss_blk *ib = disk->private_data;
12549+ unsigned long flags;
12550+
12551+ pr_debug("issblk%d: release !\n", disk->first_minor);
12552+
12553+ spin_lock_irqsave(&iss_blk_reglock, flags);
12554+ out_be32(&iss_blk_regs->devno, ib->devno);
12555+ out_8(&iss_blk_regs->cmd, ISS_BD_CMD_SYNC);
12556+ spin_unlock_irqrestore(&iss_blk_reglock, flags);
12557+
12558+ return 0;
12559+}
12560+
12561+static int iss_blk_revalidate(struct gendisk *disk)
12562+{
12563+ struct iss_blk *ib = disk->private_data;
12564+ unsigned long flags;
12565+
12566+ pr_debug("issblk%d: revalidate !\n", disk->first_minor);
12567+
12568+ if (ib->present && ib->changed) {
12569+ spin_lock_irqsave(&iss_blk_reglock, flags);
12570+ out_be32(&iss_blk_regs->devno, ib->devno);
12571+ out_8(&iss_blk_regs->cmd, ISS_BD_CMD_CLOSE);
12572+ ib->present = ib->changed = 0;
12573+ spin_unlock_irqrestore(&iss_blk_reglock, flags);
12574+ }
12575+ iss_blk_setup(ib);
12576+ return 0;
12577+}
12578+
12579+static int iss_blk_media_changed(struct gendisk *disk)
12580+{
12581+ struct iss_blk *ib = disk->private_data;
12582+ u32 stat;
12583+
12584+ pr_debug("issblk%d: media_changed !\n", disk->first_minor);
12585+
12586+ out_be32(&iss_blk_regs->devno, ib->devno);
12587+ out_8(&iss_blk_regs->cmd, ISS_BD_CMD_STATUS);
12588+ stat = in_be32(&iss_blk_regs->stat);
12589+ if (stat == ISS_BD_FILE_CHANGED)
12590+ ib->changed = 1;
12591+
12592+ return ib->changed;
12593+}
12594+
12595+static int iss_blk_open(struct block_device *bdev, fmode_t mode)
12596+{
12597+ struct gendisk *disk = bdev->bd_disk;
12598+ struct iss_blk *ib = disk->private_data;
12599+
12600+ pr_debug("issblk%d: open !\n", disk->first_minor);
12601+
12602+ check_disk_change(bdev);
12603+ if (ib->changed)
12604+ iss_blk_setup(ib);
12605+ if (!ib->present)
12606+ return -ENOMEDIUM;
12607+ return 0;
12608+}
12609+
12610+static struct block_device_operations iss_blk_fops = {
12611+ .owner = THIS_MODULE,
12612+ .open = iss_blk_open,
12613+ .release = iss_blk_release,
12614+ .media_changed = iss_blk_media_changed,
12615+ .revalidate_disk = iss_blk_revalidate,
12616+};
12617+
12618+static int __init iss_blk_init(void)
12619+{
12620+ struct device_node *np;
12621+ int i;
12622+
12623+ pr_debug("iss_regs offsets:\n");
12624+ pr_debug(" cmd : 0x%x\n", offsetof(struct iss_blk_regs, cmd));
12625+ pr_debug(" stat : 0x%x\n", offsetof(struct iss_blk_regs, stat));
12626+ pr_debug(" sector : 0x%x\n", offsetof(struct iss_blk_regs, sector));
12627+ pr_debug(" count : 0x%x\n", offsetof(struct iss_blk_regs, count));
12628+ pr_debug(" devno : 0x%x\n", offsetof(struct iss_blk_regs, devno));
12629+ pr_debug(" size : 0x%x\n", offsetof(struct iss_blk_regs, size));
12630+ pr_debug(" data : 0x%x\n", offsetof(struct iss_blk_regs, data));
12631+
12632+ np = of_find_node_by_path("/iss-block");
12633+ if (np == NULL)
12634+ return -ENODEV;
12635+ iss_blk_regs = of_iomap(np, 0);
12636+ if (iss_blk_regs == NULL) {
12637+ pr_err("issblk: Failed to map registers\n");
12638+ return -ENOMEM;
12639+ }
12640+
12641+ if (register_blkdev(MAJOR_NR, "iss_blk"))
12642+ return -EIO;
12643+
12644+ spin_lock_init(&iss_blk_qlock);
12645+ spin_lock_init(&iss_blk_reglock);
12646+
12647+ printk(KERN_INFO "ISS Block driver initializing for %d minors\n",
12648+ NUM_ISS_BLK_MINOR);
12649+
12650+ for (i = 0; i < NUM_ISS_BLK_MINOR; i++) {
12651+ struct gendisk *disk = alloc_disk(1);
12652+ struct request_queue *q;
12653+ struct iss_blk *ib = &iss_blks[i];
12654+
12655+ if (!disk) {
12656+ pr_err("issblk%d: Failed to allocate disk\n", i);
12657+ break;
12658+ }
12659+
12660+ q = blk_init_queue(iss_blk_do_request, &iss_blk_qlock);
12661+ if (q == NULL) {
12662+ pr_err("issblk%d: Failed to init queue\n", i);
12663+ put_disk(disk);
12664+ break;
12665+ }
12666+ q->queuedata = ib;
12667+
12668+ ib->disk = disk;
12669+ ib->devno = i;
12670+ ib->present = 0;
12671+ ib->changed = 0;
12672+ ib->capacity = 0;
12673+ ib->sectsize = 512;
12674+
12675+ disk->major = MAJOR_NR;
12676+ disk->first_minor = i;
12677+ disk->fops = &iss_blk_fops;
12678+ disk->private_data = &iss_blks[i];
12679+ disk->flags = GENHD_FL_REMOVABLE;
12680+ disk->queue = q;
12681+ sprintf(disk->disk_name, "issblk%d", i);
12682+
12683+ iss_blk_setup(ib);
12684+
12685+ add_disk(disk);
12686+ }
12687+
12688+ return 0;
12689+}
12690+
12691+static void __exit iss_blk_exit(void)
12692+{
12693+ int i;
12694+
12695+ unregister_blkdev(MAJOR_NR, "iss_blk");
12696+
12697+ for (i = 0; i < NUM_ISS_BLK_MINOR; i++) {
12698+ struct iss_blk *ib = &iss_blks[i];
12699+
12700+ if (ib->present) {
12701+ out_be32(&iss_blk_regs->devno, ib->devno);
12702+ out_8(&iss_blk_regs->cmd, ISS_BD_CMD_CLOSE);
12703+ }
12704+ }
12705+}
12706+
12707+module_init(iss_blk_init);
12708+module_exit(iss_blk_exit);
12709+
12710+MODULE_DESCRIPTION("ISS Simulator Block Device");
12711+MODULE_LICENSE("GPL");
12712diff --git a/drivers/dma/Kconfig b/drivers/dma/Kconfig
12713index 25cf327..188a686 100644
12714--- a/drivers/dma/Kconfig
12715+++ b/drivers/dma/Kconfig
12716@@ -33,6 +33,10 @@ if DMADEVICES
12717
12718 comment "DMA Devices"
12719
12720+config LSI_DMA
12721+ select DMA_ENGINE
12722+ tristate "ACP GP-DMA"
12723+
12724 config INTEL_MID_DMAC
12725 tristate "Intel MID DMA support for Peripheral DMA controllers"
12726 depends on PCI && X86
12727diff --git a/drivers/dma/lsi-dma.c b/drivers/dma/lsi-dma.c
12728new file mode 100644
12729index 0000000..307e01d
12730--- /dev/null
12731+++ b/drivers/dma/lsi-dma.c
12732@@ -0,0 +1,549 @@
12733+/*
12734+ * drivers/dma/lsu-dma.c
12735+ *
12736+ * This file contains a driver for the LSI ACP 34xx DMA engine
12737+ *
12738+ * Copyright 2011 Mentor Graphics
12739+ *
12740+ * The code contained herein is licensed under the GNU General Public
12741+ * License. You may obtain a copy of the GNU General Public License
12742+ * Version 2 or later at the following locations:
12743+ *
12744+ * http://www.opensource.org/licenses/gpl-license.html
12745+ * http://www.gnu.org/copyleft/gpl.html
12746+ */
12747+#include <linux/init.h>
12748+#include <linux/types.h>
12749+#include <linux/mm.h>
12750+#include <linux/interrupt.h>
12751+#include <linux/spinlock.h>
12752+#include <linux/device.h>
12753+#include <linux/dma-mapping.h>
12754+#include <linux/slab.h>
12755+#include <linux/platform_device.h>
12756+#include <linux/dmaengine.h>
12757+
12758+#include <linux/delay.h>
12759+#include "lsi-dma.h"
12760+
12761+#define MAX_DMA_CHANNELS 4
12762+#define GP_DMA_IRQ (35)
12763+
12764+struct lsidma_engine;
12765+
12766+struct lsidma_channel {
12767+ struct lsidma_engine *lsidma_engine;
12768+ unsigned int channel;
12769+ unsigned int lsidma_channel;
12770+ int irq;
12771+
12772+ struct dma_chan chan;
12773+
12774+ spinlock_t lock;
12775+ struct dma_async_tx_descriptor desc;
12776+ dma_cookie_t last_completed;
12777+ enum dma_status status;
12778+
12779+ enum dma_slave_buswidth word_size;
12780+ dma_addr_t per_address;
12781+ u32 watermark_level;
12782+ int dma_request;
12783+ struct scatterlist *sg_list;
12784+};
12785+
12786+struct lsidma_engine {
12787+ struct device *dev;
12788+ struct device_dma_parameters dma_parms;
12789+ struct dma_device dma_device;
12790+ struct lsidma_channel channel[MAX_DMA_CHANNELS];
12791+ bool done;
12792+ void __iomem *base;
12793+};
12794+
12795+static struct lsidma_channel *to_lsidma_chan(struct dma_chan *chan)
12796+{
12797+ return container_of(chan, struct lsidma_channel, chan);
12798+}
12799+
12800+static inline void __iomem *BASE(struct lsidma_channel *dmac)
12801+{
12802+ return dmac->lsidma_engine->base + dmac->lsidma_channel * 0x40;
12803+}
12804+
12805+#if 0
12806+static void imxdma_handle(struct imxdma_channel *imxdmac)
12807+{
12808+ if (imxdmac->desc.callback)
12809+ imxdmac->desc.callback(imxdmac->desc.callback_param);
12810+ imxdmac->last_completed = imxdmac->desc.cookie;
12811+}
12812+
12813+
12814+static void imxdma_irq_handler(int channel, void *data)
12815+{
12816+ struct imxdma_channel *imxdmac = data;
12817+
12818+ imxdmac->status = DMA_SUCCESS;
12819+ imxdma_handle(imxdmac);
12820+}
12821+
12822+static void imxdma_err_handler(int channel, void *data, int error)
12823+{
12824+ struct imxdma_channel *imxdmac = data;
12825+
12826+ imxdmac->status = DMA_ERROR;
12827+ imxdma_handle(imxdmac);
12828+}
12829+
12830+static void imxdma_progression(int channel, void *data,
12831+ struct scatterlist *sg)
12832+{
12833+ struct imxdma_channel *imxdmac = data;
12834+
12835+ imxdmac->status = DMA_SUCCESS;
12836+ imxdma_handle(imxdmac);
12837+}
12838+
12839+static int imxdma_control(struct dma_chan *chan, enum dma_ctrl_cmd cmd,
12840+ unsigned long arg)
12841+{
12842+ struct imxdma_channel *imxdmac = to_imxdma_chan(chan);
12843+ struct dma_slave_config *dmaengine_cfg = (void *)arg;
12844+ int ret;
12845+ unsigned int mode = 0;
12846+
12847+ switch (cmd) {
12848+ case DMA_TERMINATE_ALL:
12849+ imxdmac->status = DMA_ERROR;
12850+ imx_dma_disable(imxdmac->imxdma_channel);
12851+ return 0;
12852+ case DMA_SLAVE_CONFIG:
12853+ if (dmaengine_cfg->direction == DMA_FROM_DEVICE) {
12854+ imxdmac->per_address = dmaengine_cfg->src_addr;
12855+ imxdmac->watermark_level = dmaengine_cfg->src_maxburst;
12856+ imxdmac->word_size = dmaengine_cfg->src_addr_width;
12857+ } else {
12858+ imxdmac->per_address = dmaengine_cfg->dst_addr;
12859+ imxdmac->watermark_level = dmaengine_cfg->dst_maxburst;
12860+ imxdmac->word_size = dmaengine_cfg->dst_addr_width;
12861+ }
12862+
12863+ switch (imxdmac->word_size) {
12864+ case DMA_SLAVE_BUSWIDTH_1_BYTE:
12865+ mode = IMX_DMA_MEMSIZE_8;
12866+ break;
12867+ case DMA_SLAVE_BUSWIDTH_2_BYTES:
12868+ mode = IMX_DMA_MEMSIZE_16;
12869+ break;
12870+ default:
12871+ case DMA_SLAVE_BUSWIDTH_4_BYTES:
12872+ mode = IMX_DMA_MEMSIZE_32;
12873+ break;
12874+ }
12875+ ret = imx_dma_config_channel(imxdmac->imxdma_channel,
12876+ mode | IMX_DMA_TYPE_FIFO,
12877+ IMX_DMA_MEMSIZE_32 | IMX_DMA_TYPE_LINEAR,
12878+ imxdmac->dma_request, 1);
12879+
12880+ if (ret)
12881+ return ret;
12882+
12883+ imx_dma_config_burstlen(imxdmac->imxdma_channel,
12884+ imxdmac->watermark_level * imxdmac->word_size);
12885+
12886+ return 0;
12887+ default:
12888+ return -ENOSYS;
12889+ }
12890+
12891+ return -EINVAL;
12892+}
12893+
12894+static void imxdma_free_chan_resources(struct dma_chan *chan)
12895+{
12896+ struct imxdma_channel *imxdmac = to_imxdma_chan(chan);
12897+
12898+ imx_dma_disable(imxdmac->imxdma_channel);
12899+
12900+ if (imxdmac->sg_list) {
12901+ kfree(imxdmac->sg_list);
12902+ imxdmac->sg_list = NULL;
12903+ }
12904+}
12905+
12906+static struct dma_async_tx_descriptor *imxdma_prep_slave_sg(
12907+ struct dma_chan *chan, struct scatterlist *sgl,
12908+ unsigned int sg_len, enum dma_data_direction direction,
12909+ unsigned long flags)
12910+{
12911+ struct imxdma_channel *imxdmac = to_imxdma_chan(chan);
12912+ struct scatterlist *sg;
12913+ int i, ret, dma_length = 0;
12914+ unsigned int dmamode;
12915+
12916+ if (imxdmac->status == DMA_IN_PROGRESS)
12917+ return NULL;
12918+
12919+ imxdmac->status = DMA_IN_PROGRESS;
12920+
12921+ for_each_sg(sgl, sg, sg_len, i) {
12922+ dma_length += sg->length;
12923+ }
12924+
12925+ if (direction == DMA_FROM_DEVICE)
12926+ dmamode = DMA_MODE_READ;
12927+ else
12928+ dmamode = DMA_MODE_WRITE;
12929+
12930+ switch (imxdmac->word_size) {
12931+ case DMA_SLAVE_BUSWIDTH_4_BYTES:
12932+ if (sgl->length & 3 || sgl->dma_address & 3)
12933+ return NULL;
12934+ break;
12935+ case DMA_SLAVE_BUSWIDTH_2_BYTES:
12936+ if (sgl->length & 1 || sgl->dma_address & 1)
12937+ return NULL;
12938+ break;
12939+ case DMA_SLAVE_BUSWIDTH_1_BYTE:
12940+ break;
12941+ default:
12942+ return NULL;
12943+ }
12944+
12945+ ret = imx_dma_setup_sg(imxdmac->imxdma_channel, sgl, sg_len,
12946+ dma_length, imxdmac->per_address, dmamode);
12947+ if (ret)
12948+ return NULL;
12949+
12950+ return &imxdmac->desc;
12951+}
12952+
12953+static struct dma_async_tx_descriptor *imxdma_prep_dma_cyclic(
12954+ struct dma_chan *chan, dma_addr_t dma_addr, size_t buf_len,
12955+ size_t period_len, enum dma_data_direction direction)
12956+{
12957+ struct imxdma_channel *imxdmac = to_imxdma_chan(chan);
12958+ struct imxdma_engine *imxdma = imxdmac->imxdma;
12959+ int i, ret;
12960+ unsigned int periods = buf_len / period_len;
12961+ unsigned int dmamode;
12962+
12963+ dev_dbg(imxdma->dev, "%s channel: %d buf_len=%d period_len=%d\n",
12964+ __func__, imxdmac->channel, buf_len, period_len);
12965+
12966+ if (imxdmac->status == DMA_IN_PROGRESS)
12967+ return NULL;
12968+ imxdmac->status = DMA_IN_PROGRESS;
12969+
12970+ ret = imx_dma_setup_progression_handler(imxdmac->imxdma_channel,
12971+ imxdma_progression);
12972+ if (ret) {
12973+ dev_err(imxdma->dev, "Failed to setup the DMA handler\n");
12974+ return NULL;
12975+ }
12976+
12977+ if (imxdmac->sg_list)
12978+ kfree(imxdmac->sg_list);
12979+
12980+ imxdmac->sg_list = kcalloc(periods + 1,
12981+ sizeof(struct scatterlist), GFP_KERNEL);
12982+ if (!imxdmac->sg_list)
12983+ return NULL;
12984+
12985+ sg_init_table(imxdmac->sg_list, periods);
12986+
12987+ for (i = 0; i < periods; i++) {
12988+ imxdmac->sg_list[i].page_link = 0;
12989+ imxdmac->sg_list[i].offset = 0;
12990+ imxdmac->sg_list[i].dma_address = dma_addr;
12991+ imxdmac->sg_list[i].length = period_len;
12992+ dma_addr += period_len;
12993+ }
12994+
12995+ /* close the loop */
12996+ imxdmac->sg_list[periods].offset = 0;
12997+ imxdmac->sg_list[periods].length = 0;
12998+ imxdmac->sg_list[periods].page_link =
12999+ ((unsigned long)imxdmac->sg_list | 0x01) & ~0x02;
13000+
13001+ if (direction == DMA_FROM_DEVICE)
13002+ dmamode = DMA_MODE_READ;
13003+ else
13004+ dmamode = DMA_MODE_WRITE;
13005+
13006+ ret = imx_dma_setup_sg(imxdmac->imxdma_channel, imxdmac->sg_list, periods,
13007+ IMX_DMA_LENGTH_LOOP, imxdmac->per_address, dmamode);
13008+ if (ret)
13009+ return NULL;
13010+
13011+ return &imxdmac->desc;
13012+}
13013+
13014+#endif
13015+
13016+static void lsidma_dump(struct lsidma_engine *e)
13017+{
13018+ int i;
13019+
13020+ printk("DMA Engine register dump (mmapped src = %p)\n", e->base);
13021+ for (i = 0; i < 0x40 * MAX_DMA_CHANNELS / sizeof(u32); i ++ ) {
13022+ printk("%08X ", __raw_readl(e->base + i * sizeof(u32)));
13023+ if ((i + 1 ) % 4 == 0)
13024+ printk("\n");
13025+ }
13026+ printk("\n");
13027+}
13028+
13029+static void lsidma_handle(struct lsidma_channel *dmac, enum dma_status status)
13030+{
13031+ if (dmac->desc.callback)
13032+ dmac->desc.callback(dmac->desc.callback_param);
13033+ dmac->last_completed = dmac->desc.cookie;
13034+ dmac->status = DMA_SUCCESS;
13035+}
13036+
13037+static irqreturn_t lsidma_isr(int _irq, void *_dmac)
13038+{
13039+ struct lsidma_channel *dmac = _dmac;
13040+ void __iomem *base = BASE(dmac);
13041+ u32 status;
13042+
13043+ status = __raw_readl(base + DMA_STATUS);
13044+
13045+ /* confirm and clear the interrupt */
13046+ __raw_writel(status, base + DMA_STATUS);
13047+
13048+ printk("%s: channel status %08x\n", __func__, status);
13049+
13050+ if (status & (1<<3)) {
13051+ lsidma_handle(dmac, DMA_SUCCESS);
13052+ return IRQ_HANDLED;
13053+ }
13054+
13055+ if (status & 0xF0) {
13056+ lsidma_handle(dmac, DMA_ERROR);
13057+ return IRQ_HANDLED;
13058+ }
13059+
13060+ return IRQ_HANDLED;
13061+}
13062+
13063+static dma_cookie_t lsidma_assign_cookie(struct lsidma_channel *dmac)
13064+{
13065+ dma_cookie_t cookie = dmac->chan.cookie;
13066+
13067+ if (++cookie < 0)
13068+ cookie = 1;
13069+
13070+ dmac->chan.cookie = dmac->desc.cookie = cookie;
13071+ return cookie;
13072+}
13073+
13074+
13075+static dma_cookie_t lsidma_tx_submit(struct dma_async_tx_descriptor *tx)
13076+{
13077+ struct lsidma_channel *dmac = to_lsidma_chan(tx->chan);
13078+ dma_cookie_t cookie;
13079+ void __iomem *base = BASE(dmac);
13080+ u32 cfg;
13081+
13082+ spin_lock_irq(&dmac->lock);
13083+ cookie = lsidma_assign_cookie(dmac);
13084+
13085+ cfg = __raw_readl(base + DMA_CHANNEL_CONFIG);
13086+ printk("%s: current cfg = %08x\n", __func__, cfg);
13087+ __raw_writel(cfg | DMA_CONFIG_TX_EN, base + DMA_CHANNEL_CONFIG);
13088+
13089+ printk("%s: SUBMITTED the work item!\n", __func__);
13090+ spin_unlock_irq(&dmac->lock);
13091+
13092+ return cookie;
13093+}
13094+
13095+
13096+static int lsidma_alloc_chan_resources(struct dma_chan *chan)
13097+{
13098+ struct lsidma_channel *dmac = to_lsidma_chan(chan);
13099+ void __iomem *base = BASE(dmac);
13100+
13101+ printk("%s\n", __func__);
13102+
13103+ dma_async_tx_descriptor_init(&dmac->desc, chan);
13104+ dmac->desc.tx_submit = lsidma_tx_submit;
13105+ dmac->desc.flags = DMA_CTRL_ACK;
13106+ dmac->status = DMA_SUCCESS;
13107+
13108+ printk("about to enable channel\n");
13109+ ssleep(5);
13110+ __raw_writel(DMA_CONFIG_CHAN_EN, base + DMA_CHANNEL_CONFIG);
13111+ ssleep(5);
13112+
13113+ lsidma_dump(dmac->lsidma_engine);
13114+
13115+ return 0;
13116+}
13117+
13118+static void lsidma_free_chan_resources(struct dma_chan *chan)
13119+{
13120+ struct lsidma_channel *dmac = to_lsidma_chan(chan);
13121+ printk("%s\n", __func__);
13122+ lsidma_dump(dmac->lsidma_engine);
13123+}
13124+
13125+static void lsidma_issue_pending(struct dma_chan *chan)
13126+{
13127+ /*
13128+ * Nothing to do. We only have a single descriptor
13129+ */
13130+}
13131+
13132+static enum dma_status lsidma_tx_status(struct dma_chan *chan,
13133+ dma_cookie_t cookie,
13134+ struct dma_tx_state *txstate)
13135+{
13136+ dma_cookie_t last_used = cookie;
13137+ struct lsidma_channel *dmac = to_lsidma_chan(chan);
13138+ enum dma_status ret = 0;
13139+
13140+ printk("%s\n", __func__);
13141+ lsidma_dump(dmac->lsidma_engine);
13142+
13143+ last_used = chan->cookie;
13144+ ret = dma_async_is_complete(cookie, dmac->last_completed, last_used);
13145+ dma_set_tx_state(txstate, dmac->last_completed, last_used, 0);
13146+
13147+ return ret;
13148+}
13149+
13150+static struct dma_async_tx_descriptor *lsidma_prep_memcpy(struct dma_chan *chan,
13151+ dma_addr_t dst,
13152+ dma_addr_t src,
13153+ size_t size,
13154+ unsigned long dma_flags)
13155+{
13156+ struct lsidma_channel *dmac = to_lsidma_chan(chan);
13157+
13158+ return &dmac->desc;
13159+}
13160+
13161+static int __exit lsidma_remove(struct device *pdev)
13162+{
13163+ struct lsidma_engine *lsidma = dev_get_drvdata(pdev);
13164+ int i;
13165+
13166+ if (!lsidma)
13167+ return 0;
13168+
13169+ if (lsidma->done)
13170+ dma_async_device_unregister(&lsidma->dma_device);
13171+
13172+ for (i = 0; i < MAX_DMA_CHANNELS; i++) {
13173+ struct lsidma_channel *dmac = &lsidma->channel[i];
13174+
13175+ if (dmac->channel == i) /* initialized ok */
13176+ free_irq(GP_DMA_IRQ + i, dmac);
13177+ }
13178+
13179+ iounmap(lsidma->base);
13180+ kfree(lsidma);
13181+ dev_set_drvdata(pdev, NULL);
13182+
13183+ return 0;
13184+}
13185+
13186+static int __init lsidma_probe(struct device *pdev)
13187+{
13188+ struct lsidma_engine *lsidma;
13189+ int ret, i;
13190+
13191+ printk("%s\n", __func__);
13192+
13193+ lsidma = kzalloc(sizeof *lsidma, GFP_KERNEL);
13194+ if (!lsidma)
13195+ return -ENOMEM;
13196+
13197+ lsidma->dev = lsidma->dma_device.dev = pdev;
13198+
13199+ dev_set_drvdata(pdev, lsidma);
13200+
13201+ dma_cap_zero(lsidma->dma_device.cap_mask);
13202+ dma_cap_set(DMA_MEMCPY, lsidma->dma_device.cap_mask);
13203+
13204+ lsidma->dma_device.device_alloc_chan_resources = lsidma_alloc_chan_resources;
13205+ lsidma->dma_device.device_free_chan_resources = lsidma_free_chan_resources;
13206+ lsidma->dma_device.device_tx_status = lsidma_tx_status;
13207+ lsidma->dma_device.device_issue_pending = lsidma_issue_pending;
13208+ lsidma->dma_device.device_prep_dma_memcpy = lsidma_prep_memcpy;
13209+
13210+ INIT_LIST_HEAD(&lsidma->dma_device.channels);
13211+
13212+ lsidma->base = ioremap(0x20004e0000ull, 0x40 * MAX_DMA_CHANNELS);
13213+
13214+ /* Initialize channel parameters */
13215+ for (i = 0; i < MAX_DMA_CHANNELS; i++) {
13216+ struct lsidma_channel *dmac = &lsidma->channel[i];
13217+
13218+
13219+ dmac->lsidma_engine = lsidma;
13220+ spin_lock_init(&dmac->lock);
13221+ dmac->chan.device = &lsidma->dma_device;
13222+
13223+ dmac->irq = irq_create_mapping(NULL, GP_DMA_IRQ + i);
13224+ dev_info(pdev, "channel %d, irq %d\n", i, dmac->irq);
13225+ ret = request_irq(dmac->irq, lsidma_isr,
13226+ IRQF_SHARED, "lsi-dma", dmac);
13227+ if (ret) {
13228+ dev_err(pdev, "failed to request_irq, error = %d\n", ret);
13229+ goto err_init;
13230+ }
13231+
13232+ dmac->channel = i;
13233+
13234+ /* Add the channel to the DMAC list */
13235+ list_add_tail(&dmac->chan.device_node, &lsidma->dma_device.channels);
13236+ }
13237+
13238+ lsidma_dump(lsidma);
13239+
13240+ ret = dma_async_device_register(&lsidma->dma_device);
13241+ if (ret) {
13242+ dev_err(pdev, "unable to register\n");
13243+ goto err_init;
13244+ }
13245+ lsidma->done = true;
13246+
13247+ return 0;
13248+
13249+err_init:
13250+ lsidma_remove(pdev);
13251+ dev_set_drvdata(pdev, NULL);
13252+ return ret;
13253+}
13254+
13255+
13256+static struct platform_driver lsidma_driver = {
13257+ .driver = {
13258+ .name = "lsi-dma",
13259+ .probe = lsidma_probe,
13260+ .remove = __exit_p(lsidma_remove),
13261+ .owner = THIS_MODULE,
13262+ },
13263+};
13264+
13265+static struct platform_device *lsidma_dev = NULL;
13266+
13267+static int __init lsidma_module_init(void)
13268+{
13269+ lsidma_dev = platform_device_register_simple("lsi-dma", -1, NULL, 0);
13270+ return platform_driver_register(&lsidma_driver);
13271+}
13272+subsys_initcall(lsidma_module_init);
13273+
13274+static void __exit lsidma_module_exit(void)
13275+{
13276+ platform_driver_unregister(&lsidma_driver);
13277+ platform_device_unregister(lsidma_dev);
13278+}
13279+module_exit(lsidma_module_exit)
13280+
13281+MODULE_LICENSE("GPL");
13282diff --git a/drivers/dma/lsi-dma.h b/drivers/dma/lsi-dma.h
13283new file mode 100644
13284index 0000000..6137dd5
13285--- /dev/null
13286+++ b/drivers/dma/lsi-dma.h
13287@@ -0,0 +1,42 @@
13288+#ifndef __LSI_DMA_H
13289+#define __LSI_DMA_H
13290+
13291+#define DMA_X_SRC_COUNT 0x00
13292+#define DMA_Y_SRC_COUNT 0x04
13293+#define DMA_X_MODIF_SRC 0x08
13294+#define DMA_Y_MODIF_SRC 0x0c
13295+#define DMA_SRC_CUR_ADDR 0x10
13296+#define DMA_SRC_ACCESS 0x14
13297+ #define DMA_SRC_ACCESS_BURST_TYPE (1<<15)
13298+ #define DMA_SRC_ACCESS_TAIL_LENGTH(x) (((x) & 0xF) << 11)
13299+ #define DMA_SRC_ACCESS_ROTATOR_LENGTH(x) (((x) & 1F) << 6)
13300+ #define DMA_SRC_ACCESS_SRC_SIZE(x) (((x) & 7) << 3)
13301+ #define DMA_SRC_ACCESS_SRC_BURST(x) (((x) & 7) << 0)
13302+#define DMA_SRC_MASK 0x18
13303+#define DMA_X_DST_COUNT 0x1c
13304+#define DMA_Y_DST_COUNT 0x20
13305+#define DMA_X_MODIF_DST 0x24
13306+#define DMA_Y_MODIF_DST 0x28
13307+#define DMA_DST_CUR_ADDR 0x2C
13308+#define DMA_DST_ACCESS 0x30
13309+ #define DMA_DST_ACCESS_DST_SIZE(x) (((x) & 7) << 3)
13310+ #define DMA_DST_ACCESS_DST_BURST(x) (((x) & 7) << 0)
13311+#define DMA_NXT_DESCR 0x34
13312+#define DMA_CHANNEL_CONFIG 0x38
13313+ #define DMA_CONFIG_DST_SPACE(x) (((x) & 7) << 26)
13314+ #define DMA_CONFIG_SRC_SPACE(x) (((x) & 7) << 23)
13315+ #define DMA_CONFIG_EXT_PRIORITY (1<<22)
13316+ #define DMA_CONFIG_PRIORITY_ROW (1<<21)
13317+ #define DMA_CONFIG_PRIORITY (1<<20)
13318+ #define DMA_CONFIG_CHANNEL_PRIORITY(x) (((x) & 3) << 16)
13319+ #define DMA_CONFIG_LAST_BLOCK (1<<15)
13320+ #define DMA_CONFIG_CLEAR_FIFO (1<<14)
13321+ #define DMA_CONFIG_START_MEM_LOAD (1<<13)
13322+ #define DMA_CONFIG_STOP_DST_EOB (1<<11)
13323+ #define DMA_CONFIG_INT_DST_EOT (1<<7)
13324+ #define DMA_CONFIG_INT_DST_EOB (1<<6)
13325+ #define DMA_CONFIG_TX_EN (1<<1)
13326+ #define DMA_CONFIG_CHAN_EN (1<<0)
13327+#define DMA_STATUS 0x3C
13328+
13329+#endif /* __LSI_DMA_H */
13330diff --git a/drivers/i2c/busses/Kconfig b/drivers/i2c/busses/Kconfig
13331index 646068e..246d4d1 100644
13332--- a/drivers/i2c/busses/Kconfig
13333+++ b/drivers/i2c/busses/Kconfig
13334@@ -434,6 +434,12 @@ config I2C_IXP2000
13335 This driver is deprecated and will be dropped soon. Use i2c-gpio
13336 instead.
13337
13338+config I2C_LSI
13339+ tristate "LSI ACP3448"
13340+ depends on PPC
13341+ help
13342+ no help
13343+
13344 config I2C_MPC
13345 tristate "MPC107/824x/85xx/512x/52xx/83xx/86xx"
13346 depends on PPC
13347diff --git a/drivers/i2c/busses/Makefile b/drivers/i2c/busses/Makefile
13348index e6cf294..359d655 100644
13349--- a/drivers/i2c/busses/Makefile
13350+++ b/drivers/i2c/busses/Makefile
13351@@ -41,6 +41,7 @@ obj-$(CONFIG_I2C_IMX) += i2c-imx.o
13352 obj-$(CONFIG_I2C_INTEL_MID) += i2c-intel-mid.o
13353 obj-$(CONFIG_I2C_IOP3XX) += i2c-iop3xx.o
13354 obj-$(CONFIG_I2C_IXP2000) += i2c-ixp2000.o
13355+obj-$(CONFIG_I2C_LSI) += i2c-lsi.o
13356 obj-$(CONFIG_I2C_MPC) += i2c-mpc.o
13357 obj-$(CONFIG_I2C_MV64XXX) += i2c-mv64xxx.o
13358 obj-$(CONFIG_I2C_MXS) += i2c-mxs.o
13359diff --git a/drivers/i2c/busses/i2c-lsi.c b/drivers/i2c/busses/i2c-lsi.c
13360new file mode 100644
13361index 0000000..79a6ef2
13362--- /dev/null
13363+++ b/drivers/i2c/busses/i2c-lsi.c
13364@@ -0,0 +1,352 @@
13365+/*
13366+ * (C) Copyright 2011
13367+ *
13368+ * This file is licensed under the terms of the GNU General Public
13369+ * License version 2. This program is licensed "as is" without any
13370+ * warranty of any kind, whether express or implied.
13371+ */
13372+
13373+#include <linux/kernel.h>
13374+#include <linux/module.h>
13375+#include <linux/sched.h>
13376+#include <linux/init.h>
13377+#include <linux/of_platform.h>
13378+#include <linux/of_i2c.h>
13379+#include <linux/slab.h>
13380+
13381+#include <linux/io.h>
13382+#include <linux/i2c.h>
13383+#include <linux/interrupt.h>
13384+#include <linux/delay.h>
13385+
13386+#include <asm/lsi.h>
13387+#include "i2c-lsi.h"
13388+
13389+#define DRV_NAME "i2c-lsi"
13390+
13391+struct lsi_iic {
13392+ struct device *dev;
13393+ void __iomem *base;
13394+ u32 interrupt;
13395+ wait_queue_head_t queue;
13396+ struct i2c_adapter adap;
13397+ int irq;
13398+ u32 real_clk;
13399+};
13400+
13401+static void lsi_iic_writel(u32 data, void __iomem *addr)
13402+{
13403+ printk("%s, 0x%x ==> %p\n", __func__, data, addr);
13404+ __raw_writel(data, addr);
13405+}
13406+
13407+static u32 lsi_iic_readl(void __iomem *addr)
13408+{
13409+ u32 r;
13410+
13411+ r = __raw_readl(addr);
13412+ printk("%s, 0x%x <== %p\n", __func__, r, addr);
13413+ return r;
13414+}
13415+
13416+static void __devinit lsi_iic_setup_clock(struct lsi_iic *i2c, u32 clock)
13417+{
13418+ unsigned long freq;
13419+ u32 divisor;
13420+
13421+ BUG_ON(acp_clock_get(1, &freq));
13422+
13423+ divisor = freq / clock;
13424+ printk("System clock %ld, requested %d, divisor = %x\n", freq, clock, divisor);
13425+
13426+ lsi_iic_writel((MCCFG_LPD(divisor / 2) | MCCFG_HPD(divisor - divisor / 2)), i2c->base + MCCFG);
13427+}
13428+
13429+static irqreturn_t lsi_iic_isr(int irq, void *dev_id)
13430+{
13431+ struct mpc_i2c *i2c = dev_id;
13432+#if 0
13433+ if (readb(i2c->base + MPC_I2C_SR) & CSR_MIF) {
13434+ /* Read again to allow register to stabilise */
13435+ i2c->interrupt = readb(i2c->base + MPC_I2C_SR);
13436+ writeb(0, i2c->base + MPC_I2C_SR);
13437+ wake_up(&i2c->queue);
13438+ }
13439+#endif
13440+ return IRQ_HANDLED;
13441+}
13442+
13443+static void lsi_iic_regdump(struct lsi_iic *i2c)
13444+{
13445+#if 0
13446+ int i;
13447+
13448+ printk("%s at %p\n", __func__, i2c->base);
13449+ for (i = 0; i <= 0x10; i ++ ) {
13450+ printk("%08X: 0x%08x\n", i * 4, lsi_iic_readl(i2c->base + i * 4));
13451+ }
13452+#endif
13453+}
13454+
13455+static int lsi_iic_busyloop(struct lsi_iic *i2c, int offset)
13456+{
13457+ int count = 100;
13458+ u32 r;
13459+
13460+ lsi_iic_regdump(i2c);
13461+ printk("Entering %s...(%d)", __func__, offset);
13462+ while (--count > 0) {
13463+ r = lsi_iic_readl(i2c->base + offset);
13464+ printk("%X,", r);
13465+ if (r != 0)
13466+ break;
13467+ udelay(1000);
13468+ }
13469+
13470+ printk("\nDone\n");
13471+ return count <= 0 ? -ETIMEDOUT : 0;
13472+}
13473+
13474+static int lsi_iic_read(struct lsi_iic *i2c, int target, u8 *data, int length, int restart, int tenbit)
13475+{
13476+ u32 d1, d2;
13477+ int actual_length;
13478+ int ret = 0;
13479+
13480+ for(;;) {
13481+ lsi_iic_writel(MTC_MMA | MTC_STOP | (tenbit ? MTC_TBAM : 0), i2c->base + MTC);
13482+
13483+ lsi_iic_writel(MHC_HPD(0x80) | MHC_LPD(0x00), i2c->base + MStartSHC);
13484+ lsi_iic_writel(MHC_HPD(0x00) | MHC_LPD(0x80), i2c->base + MStopSHC);
13485+ lsi_iic_writel(MHC_HPD(0x14) | MHC_LPD(0x14), i2c->base + MDSHC);
13486+
13487+ lsi_iic_writel(target, i2c->base + MSA);
13488+
13489+ actual_length = clamp_t(int, length, 0, sizeof(u32) * 2 - 1);
13490+ lsi_iic_writel( MRC_RR | MRC_NUMBYTES(actual_length), i2c->base + MRC);
13491+
13492+ ret = lsi_iic_busyloop(i2c, MRS);
13493+ if (ret < 0)
13494+ break;
13495+
13496+ d1 = lsi_iic_readl(i2c->base + MRX0);
13497+ d2 = lsi_iic_readl(i2c->base + MRX1);
13498+
13499+ memcpy(data, &d1, clamp_t(int, actual_length, 0, sizeof(u32)));
13500+ actual_length -= sizeof(u32);
13501+ length -= sizeof(u32);
13502+ data += sizeof(u32);
13503+
13504+ memcpy(data, &d2, clamp_t(int, actual_length, 0, sizeof(u32)));
13505+ actual_length -= sizeof(u32);
13506+ length -= sizeof(u32);
13507+ data += sizeof(u32);
13508+
13509+ if (length <= 0)
13510+ break;
13511+ }
13512+ return ret >= 0 ? 1 : ret;
13513+}
13514+
13515+static int lsi_iic_write(struct lsi_iic *i2c, int target, u8 *data, int length, int restart, int tenbit)
13516+{
13517+ u32 d1, d2;
13518+ int d1_len, d2_len;
13519+ int ret = 0;
13520+
13521+ for (;;) {
13522+ lsi_iic_writel(MTC_MOC | MTC_MMA | MTC_STOP | (tenbit ? MTC_TBAM : 0), i2c->base + MTC);
13523+
13524+ lsi_iic_writel(MHC_HPD(0x80) | MHC_LPD(0x00), i2c->base + MStartSHC);
13525+ lsi_iic_writel(MHC_HPD(0x00) | MHC_LPD(0x80), i2c->base + MStopSHC);
13526+ lsi_iic_writel(MHC_HPD(0x14) | MHC_LPD(0x14), i2c->base + MDSHC);
13527+
13528+ lsi_iic_writel(MTC_MMA | MTC_STOP | (tenbit ? MTC_TBAM : 0), i2c->base + MTC);
13529+
13530+ lsi_iic_writel(target, i2c->base + MSA);
13531+
13532+ d1 = d2 = 0;
13533+
13534+ d1_len = clamp_t(int, length, 0, sizeof(u32));
13535+ memcpy(&d1, data, min_t(int, d1_len, sizeof(u32)));
13536+ data += d1_len;
13537+ length -= d1_len;
13538+
13539+ d2_len = clamp_t(int, length, 0, sizeof(u32));
13540+ memcpy(&d2, data, min_t(int, d2_len, sizeof(u32)));
13541+ data += d2_len;
13542+ length -= d2_len;
13543+
13544+ lsi_iic_writel(d1, i2c->base + MTX0);
13545+ lsi_iic_writel(d2, i2c->base + MTX1);
13546+
13547+ lsi_iic_writel( MTC_MMA |
13548+ MTC_STOP |
13549+ (tenbit ? MTC_TBAM : 0) |
13550+ MTC_NUMBYTES(d1_len + d2_len) |
13551+ MTC_TR,
13552+ i2c->base + MTC);
13553+
13554+ ret = lsi_iic_busyloop(i2c, MTS);
13555+
13556+ if (length == 0 || ret < 0)
13557+ break;
13558+ }
13559+ return ret >= 0 ? 1 : ret;
13560+}
13561+
13562+static int lsi_iic_xfer(struct i2c_adapter *adap, struct i2c_msg *msgs, int num)
13563+{
13564+ struct i2c_msg *pmsg;
13565+ int i, ret = 0;
13566+ struct lsi_iic *i2c = i2c_get_adapdata(adap);
13567+
13568+ lsi_iic_setup_clock(i2c, 400);
13569+ for (i = 0; ret >= 0 && i < num; i++) {
13570+ pmsg = &msgs[i];
13571+ printk( /* dev_dbg(i2c->dev, */
13572+ "Doing %s %d bytes from/to 0x%02x - %d of %d messages\n",
13573+ pmsg->flags & I2C_M_RD ? "read" : "write",
13574+ pmsg->len, pmsg->addr, i + 1, num);
13575+ if (pmsg->flags & I2C_M_RD)
13576+ ret = lsi_iic_read(i2c, pmsg->addr, pmsg->buf, pmsg->len, i, pmsg->flags & I2C_M_TEN);
13577+ else
13578+ ret = lsi_iic_write(i2c, pmsg->addr, pmsg->buf, pmsg->len, i, pmsg->flags & I2C_M_TEN);
13579+ }
13580+
13581+ return ret;
13582+}
13583+
13584+static u32 lsi_iic_functionality(struct i2c_adapter *adap)
13585+{
13586+ return I2C_FUNC_I2C | I2C_FUNC_SMBUS_EMUL;
13587+}
13588+
13589+static const struct i2c_algorithm lsi_iic_algo = {
13590+ .master_xfer = lsi_iic_xfer,
13591+ .functionality = lsi_iic_functionality,
13592+};
13593+
13594+static struct i2c_adapter lsi_iic_ops = {
13595+ .owner = THIS_MODULE,
13596+ .name = "LSI adapter",
13597+ .algo = &lsi_iic_algo,
13598+ .timeout = HZ,
13599+};
13600+
13601+static int __devinit lsi_iic_probe(struct platform_device *op)
13602+{
13603+ struct lsi_iic *i2c;
13604+ const u32 *prop;
13605+ u32 clock = 0;
13606+ int result = 0;
13607+ int plen;
13608+
13609+ i2c = kzalloc(sizeof(*i2c), GFP_KERNEL);
13610+ if (!i2c)
13611+ return -ENOMEM;
13612+
13613+ i2c->dev = &op->dev; /* for debug and error output */
13614+
13615+ init_waitqueue_head(&i2c->queue);
13616+
13617+ i2c->base = of_iomap(op->dev.of_node, 0);
13618+ if (!i2c->base) {
13619+ dev_err(i2c->dev, "failed to map controller\n");
13620+ result = -ENOMEM;
13621+ goto fail_map;
13622+ }
13623+
13624+ i2c->irq = irq_of_parse_and_map(op->dev.of_node, 0);
13625+ if (i2c->irq) { /* no i2c->irq implies polling */
13626+ result = request_irq(i2c->irq, lsi_iic_isr,
13627+ IRQF_SHARED, "i2c-lsi", i2c);
13628+ if (result < 0) {
13629+ dev_err(i2c->dev, "failed to attach interrupt\n");
13630+ goto fail_request;
13631+ }
13632+ }
13633+ dev_set_drvdata(&op->dev, i2c);
13634+
13635+ prop = of_get_property(op->dev.of_node, "clock-frequency", &plen);
13636+ if (prop && plen == sizeof(u32))
13637+ clock = *prop;
13638+ if (clock == 0)
13639+ clock = 400;
13640+ lsi_iic_setup_clock(i2c, clock);
13641+
13642+ i2c->adap = lsi_iic_ops;
13643+ i2c_set_adapdata(&i2c->adap, i2c);
13644+ i2c->adap.dev.parent = &op->dev;
13645+ i2c->adap.dev.of_node = of_node_get(op->dev.of_node);
13646+
13647+ result = i2c_add_adapter(&i2c->adap);
13648+ if (result < 0) {
13649+ dev_err(i2c->dev, "failed to add adapter\n");
13650+ goto fail_add;
13651+ }
13652+
13653+ of_i2c_register_devices(&i2c->adap);
13654+ printk("%s mmapped at %p, irq %d\n", DRV_NAME, i2c->base, i2c->irq);
13655+
13656+ return result;
13657+
13658+ fail_add:
13659+ dev_set_drvdata(&op->dev, NULL);
13660+ free_irq(i2c->irq, i2c);
13661+ fail_request:
13662+ irq_dispose_mapping(i2c->irq);
13663+ iounmap(i2c->base);
13664+ fail_map:
13665+ kfree(i2c);
13666+ return result;
13667+};
13668+
13669+static int __devexit lsi_iic_remove(struct platform_device *op)
13670+{
13671+ struct lsi_iic *i2c = dev_get_drvdata(&op->dev);
13672+
13673+ i2c_del_adapter(&i2c->adap);
13674+ dev_set_drvdata(&op->dev, NULL);
13675+
13676+ if (i2c->irq)
13677+ free_irq(i2c->irq, i2c);
13678+
13679+ irq_dispose_mapping(i2c->irq);
13680+ iounmap(i2c->base);
13681+ kfree(i2c);
13682+ return 0;
13683+};
13684+
13685+
13686+static const struct of_device_id lsi_iic_of_match[] = {
13687+ {.compatible = "acp-i2c", },
13688+ {},
13689+};
13690+MODULE_DEVICE_TABLE(of, lsi_iic_of_match);
13691+
13692+/* Structure for a device driver */
13693+static struct platform_driver lsi_iic_driver = {
13694+ .probe = lsi_iic_probe,
13695+ .remove = __devexit_p(lsi_iic_remove),
13696+ .driver = {
13697+ .owner = THIS_MODULE,
13698+ .name = DRV_NAME,
13699+ .of_match_table = lsi_iic_of_match,
13700+ },
13701+};
13702+
13703+static int __init lsi_iic_init(void)
13704+{
13705+ return platform_driver_register(&lsi_iic_driver);
13706+}
13707+
13708+static void __exit lsi_iic_exit(void)
13709+{
13710+ platform_driver_unregister(&lsi_iic_driver);
13711+}
13712+
13713+module_init(lsi_iic_init);
13714+module_exit(lsi_iic_exit);
13715+
13716+MODULE_LICENSE("GPL");
13717diff --git a/drivers/i2c/busses/i2c-lsi.h b/drivers/i2c/busses/i2c-lsi.h
13718new file mode 100644
13719index 0000000..da00b65
13720--- /dev/null
13721+++ b/drivers/i2c/busses/i2c-lsi.h
13722@@ -0,0 +1,60 @@
13723+#ifndef LSI_I2C_H__
13724+#define LSI_I2C_H__
13725+
13726+#define MTC 0x00 /* Master Transmit Config */
13727+#define MTC_STOP (1<<29)
13728+#define MTC_MOC (1<<10)
13729+#define MTC_TC (1<<9)
13730+#define MTC_MMA (1<<8)
13731+#define MTC_TBAM (1<<7)
13732+#define MTC_LE (1<<5)
13733+#define MTC_TR (1<<0)
13734+#define MTC_NUMBYTES(x) (((x) & 0x0F) << 1)
13735+
13736+#define MRC 0x04 /* Master Receive Config */
13737+#define MRC_LE (1<<5)
13738+#define MRC_NUMBYTES(x) (((x) & 0x0F) << 1)
13739+#define MRC_RR (1<<0)
13740+
13741+#define MTS 0x08 /* Master Transmit Status */
13742+#define MTS_ERROR 0x02
13743+#define MTS_DONE 0x01
13744+
13745+#define MRS 0x0C /* Master Receive Status */
13746+#define MRS_NUMBYTES(r) (((r) >> 1) & 0xF)
13747+#define MRS_ERROR 0x02
13748+#define MRS_DONE 0x01
13749+
13750+#define MIE 0x10 /* Master Interrupt Enable */
13751+#define MI_EREI (1<<3)
13752+#define MI_ERCI (1<<2)
13753+#define MI_ETEI (1<<1)
13754+#define MI_ETDI (1<<0)
13755+
13756+#define MIC 0x14 /* Master Interrupt Clear */
13757+
13758+#define MIS 0x18 /* Master Interrupt Status */
13759+
13760+#define MCCFG 0x1C /* CLK config */
13761+#define MCCFG_LPD(x) ((x) & 0x3FF)
13762+#define MCCFG_HPD(x) (((x) & 0x3FF) << 16)
13763+
13764+#define MHC_LPD(x) ((x) & 0x3FF)
13765+#define MHC_HPD(x) (((x) & 0x3FF) << 16)
13766+#define MStartSHC 0x20 /* StartSetupHoldConfig */
13767+#define MStopSHC 0x24 /* StopSetupHoldConfig */
13768+#define MDSHC 0x28 /* DataSetupHoldConfig */
13769+
13770+#define MBM 0x2C /* Master Bypass Mode */
13771+#define MBM_EPBM (1<<2)
13772+#define MBM_SCLV (1<<1)
13773+#define MBM_SDAV (1<<0)
13774+
13775+#define MSA 0x30 /* Master Slave Address */
13776+
13777+#define MTX0 0x34 /* Transmit data */
13778+#define MTX1 0x38
13779+#define MRX0 0x3C /* Receive data */
13780+#define MRX1 0x40
13781+
13782+#endif /* LSI_I2C_H__ */
13783diff --git a/drivers/lsi/Kconfig b/drivers/lsi/Kconfig
13784new file mode 100644
13785index 0000000..565f7fc
13786--- /dev/null
13787+++ b/drivers/lsi/Kconfig
13788@@ -0,0 +1,104 @@
13789+menu "LSI Drivers (APP3, APP3K, and ACP)"
13790+
13791+config SERIAL_ACP
13792+ bool "LSI's Serial Driver for the ACP"
13793+ select SERIAL_CORE
13794+ help
13795+ Handles the serial ports (there are two) on LSI's ACP board
13796+ and the simulated serial port provided by ISS.
13797+
13798+config SERIAL_ACP_CONSOLE
13799+ bool "Console on the ACP serial port"
13800+ depends on SERIAL_ACP=y
13801+ select SERIAL_CORE_CONSOLE
13802+ help
13803+ If you say Y here, it will be possible to use a serial port as the
13804+ system console (the system console is the device which receives all
13805+ kernel messages and warnings and which allows logins in single user
13806+ mode). This could be useful if some terminal or printer is connected
13807+ to that serial port.
13808+
13809+ Even if you say Y here, the currently visible virtual console
13810+ (/dev/tty0) will still be used as the system console by default, but
13811+ you can alter that using a kernel command line option such as
13812+ "console=ttyS1". (Try "man bootparam" or see the documentation of
13813+ your boot loader (grub or lilo or loadlin) about how to pass options
13814+ to the kernel at boot time.)
13815+
13816+ If you don't have a VGA card installed and you say Y here, the
13817+ kernel will automatically use the first serial line, /dev/ttyS0, as
13818+ system console.
13819+
13820+ You can set that using a kernel command line option such as
13821+ "console=uart8250,io,0x3f8,9600n8"
13822+ "console=uart8250,mmio,0xff5e0000,115200n8".
13823+ and it will switch to normal serial console when the corresponding
13824+ port is ready.
13825+ "earlycon=uart8250,io,0x3f8,9600n8"
13826+ "earlycon=uart8250,mmio,0xff5e0000,115200n8".
13827+ it will not only setup early console.
13828+
13829+ If unsure, say N.
13830+
13831+config SERIAL_ACP_CONSOLE_POLL
13832+ bool "Don't use interrupts in the ACP serial driver"
13833+ depends on SERIAL_ACP_CONSOLE
13834+ select CONSOLE_POLL
13835+ help
13836+ When selected, the ACP serial driver won't use interrupts.
13837+ This is only intended to be used for debugging.
13838+
13839+ If unsure, say N.
13840+
13841+config LSI_NET
13842+ bool "Network interface for LSI's APP and ACP"
13843+ help
13844+ Network interface driver for LSI's APP and ACP series boards.
13845+
13846+config LSI_NET_NUM_RX_DESC
13847+ int "NIC driver: Number of receive descriptors"
13848+ depends on LSI_NET
13849+ default "4"
13850+ help
13851+ The number of receive descriptors to allocate.
13852+
13853+config LSI_NET_RX_BUF_SZ
13854+ int "NIC driver: Size of the receive buffer"
13855+ depends on LSI_NET
13856+ default "32768"
13857+ help
13858+ The size of the receive buffer.
13859+
13860+config LSI_NET_NUM_TX_DESC
13861+ int "NIC driver: Number of transmit descriptors"
13862+ depends on LSI_NET
13863+ default "4"
13864+ help
13865+ The number of transmit descriptors to allocate.
13866+
13867+config LSI_NET_TX_BUF_SZ
13868+ int "NIC driver: Size of the transmit buffer"
13869+ depends on LSI_NET
13870+ default "32768"
13871+ help
13872+ The size of the transmit buffer.
13873+
13874+config LSI_NAND
13875+ bool "NAND Driver for LSI's APP and ACP"
13876+ depends on ACP
13877+ select MTD_NAND
13878+ help
13879+ Add NAND support to LSI's APP/ACP boards.
13880+
13881+config LSI_UBOOTENV
13882+ bool "U-Boot Environment Access for LSI's APP and ACP"
13883+ depends on ( ACP && LSI_NAND && CRC32 )
13884+ help
13885+ Add U-Boot environment access on LSI's APP/ACP boards.
13886+
13887+config LSI_PLX_PCIE_BRIDGE
13888+ bool "PLX 8608 PCIe bridge for LSI's ACP"
13889+ help
13890+ PLX 8608 configuration driver for LSI's ACP boards.
13891+
13892+endmenu
13893diff --git a/drivers/lsi/Makefile b/drivers/lsi/Makefile
13894new file mode 100644
13895index 0000000..ce6d25a
13896--- /dev/null
13897+++ b/drivers/lsi/Makefile
13898@@ -0,0 +1 @@
13899+obj-y += acp/
13900diff --git a/drivers/lsi/acp/Makefile b/drivers/lsi/acp/Makefile
13901new file mode 100644
13902index 0000000..6a8fca8
13903--- /dev/null
13904+++ b/drivers/lsi/acp/Makefile
13905@@ -0,0 +1,13 @@
13906+# Makefile for LSI drivers
13907+# Note that some of these use the U-Boot environment, so nand must be first,
13908+# then ubootenv...
13909+obj-y += clocks.o
13910+obj-$(CONFIG_ACP) += ncr.o
13911+obj-$(CONFIG_LSI_NAND) += nand.o
13912+obj-$(CONFIG_LSI_UBOOTENV) += ubootenv.o
13913+obj-$(CONFIG_ACP) += version.o
13914+obj-y += wrappers.o
13915+obj-$(CONFIG_SERIAL_ACP) += serial.o
13916+obj-$(CONFIG_LSI_NET) += net.o
13917+obj-$(CONFIG_LSI_PLX_PCIE_BRIDGE) +=pci_plx.o
13918+#obj-y += test.o
13919diff --git a/drivers/lsi/acp/clocks.c b/drivers/lsi/acp/clocks.c
13920new file mode 100644
13921index 0000000..c6d1389
13922--- /dev/null
13923+++ b/drivers/lsi/acp/clocks.c
13924@@ -0,0 +1,253 @@
13925+/*
13926+ * Copyright (C) 2009 LSI Corporation
13927+ *
13928+ * See file CREDITS for list of people who contributed to this
13929+ * project.
13930+ *
13931+ * This program is free software; you can redistribute it and/or
13932+ * modify it under the terms of the GNU General Public License as
13933+ * published by the Free Software Foundation; either version 2 of
13934+ * the License, or (at your option) any later version.
13935+ *
13936+ * This program is distributed in the hope that it will be useful,
13937+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
13938+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13939+ * GNU General Public License for more details.
13940+ *
13941+ * You should have received a copy of the GNU General Public License
13942+ * along with this program; if not, write to the Free Software
13943+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
13944+ * MA 02111-1307 USA
13945+ */
13946+
13947+#include <linux/module.h>
13948+#include <asm/dcr-native.h>
13949+
13950+#define CLK_REF0 125000000
13951+
13952+extern int is_asic(void);
13953+
13954+/*
13955+ ===============================================================================
13956+ ===============================================================================
13957+ Private Interface
13958+ ===============================================================================
13959+ ===============================================================================
13960+*/
13961+
13962+static unsigned char ps[] = {1, 3, 2, 4};
13963+
13964+static unsigned char idiv[] = {
13965+ 1, 16, 17, 30, 13, 18, 7, 31, 14, 11, 19, 21, 27, 8, 23, 32,
13966+ 15, 29, 12, 6, 10, 20, 26, 22, 28, 5, 9, 25, 4, 24, 3, 2};
13967+
13968+static unsigned char odiv[] = {
13969+ 1, 2, 28, 27, 22, 21, 30, 29, 24, 23, 12, 11, 16, 15, 32, 31,
13970+ 26, 25, 20, 19, 10, 9, 14, 13, 18, 17, 8, 7, 6, 5, 4, 3};
13971+
13972+static unsigned char mult[] = {
13973+ 1, 123, 117, 251, 245, 69, 111, 125, 119, 95, 105, 197, 239,
13974+ 163, 63, 253, 247, 187, 57, 223, 233, 207, 157, 71, 113, 15,
13975+ 89, 37, 191, 19, 99, 127, 121, 109, 93, 61, 185, 155, 13, 97,
13976+ 107, 11, 9, 81, 31, 49, 83, 199, 241, 33, 181, 143, 217, 173,
13977+ 51, 165, 65, 85, 151, 147, 227, 41, 201, 255, 249, 243, 195,
13978+ 237, 221, 231, 35, 189, 59, 183, 79, 29, 141, 215, 145, 225,
13979+ 235, 219, 27, 139, 137, 135, 175, 209, 159, 53, 45, 177, 211,
13980+ 23, 167, 73, 115, 67, 103, 161, 55, 205, 87, 17, 91, 153, 7,
13981+ 47, 179, 171, 149, 39, 193, 229, 77, 213, 25, 133, 43, 21,
13982+ 101, 203, 5, 169, 75, 131, 3, 129, 1, 250, 244, 124, 118, 196,
13983+ 238, 252, 246, 222, 232, 70, 112, 36, 190, 126, 120, 60, 184,
13984+ 96, 106, 80, 30, 198, 240, 142, 216, 164, 64, 146, 226, 254,
13985+ 248, 236, 220, 188, 58, 28, 140, 224, 234, 138, 136, 208, 158,
13986+ 176, 210, 72, 114, 160, 54, 16, 90, 46, 178, 38, 192, 212, 24,
13987+ 20, 100, 168, 74, 128, 122, 116, 68, 110, 94, 104, 162, 62,
13988+ 186, 56, 206, 156, 14, 88, 18, 98, 108, 92, 154, 12, 10, 8,
13989+ 48, 82, 32, 180, 172, 50, 84, 150, 40, 200, 242, 194, 230, 34,
13990+ 182, 78, 214, 144, 218, 26, 134, 174, 52, 44, 22, 166, 66,
13991+ 102, 204, 86, 152, 6, 170, 148, 228, 76, 132, 42, 202, 4, 130,
13992+ 2
13993+};
13994+
13995+#define PREDIV(value) (idiv[(((value) & 0xfc000000) >> 26)])
13996+#define MULTINT(value) (((value) & 0x00000ffe) >> 1)
13997+#define MULTINT_PRE(value) (ps[((MULTINT((value)) & 0x300) >> 8)])
13998+#define MULTINT_MAIN(value) (mult[(MULTINT((value)) & 0xff)])
13999+#define RANGEA(value) (((value) & 0x03f80000) >> 19)
14000+#define RANGEA_PRE(value) (ps[((RANGEA((value)) & 0x60) >> 5)])
14001+#define RANGEA_MAIN(value) (odiv[(RANGEA((value)) & 0x1f)])
14002+#define RANGEB(value) (((value) & 0x0007f000) >> 12)
14003+#define RANGEB_PRE(value) (ps[((RANGEB((value)) & 0x60) >> 5)])
14004+#define RANGEB_MAIN(value) (odiv[(RANGEB((value)) & 0x1f)])
14005+
14006+/*
14007+ ------------------------------------------------------------------------------
14008+ get_ppc_pll
14009+
14010+ Assumes the the PPC PLL is locked...
14011+*/
14012+
14013+static int
14014+get_ppc_pll(unsigned long *dco, unsigned long *pllouta, unsigned long *plloutb)
14015+{
14016+ unsigned long ctrl;
14017+
14018+ ctrl = mfdcr(0xd02);
14019+
14020+ *dco = (CLK_REF0 / 1000 / PREDIV(ctrl));
14021+ *dco *= (MULTINT_PRE(ctrl) * MULTINT_MAIN(ctrl));
14022+ *pllouta = *dco / (RANGEA_PRE(ctrl) * RANGEA_MAIN(ctrl));
14023+ *plloutb = *dco / (RANGEB_PRE(ctrl) * RANGEB_MAIN(ctrl));
14024+
14025+#if 0
14026+ printf("0x%x %d 0x%x (%d %d) 0x%x (%d %d) 0x%x (%d %d)\n",
14027+ ctrl, PREDIV(ctrl),
14028+ MULTINT(ctrl), MULTINT_PRE(ctrl), MULTINT_MAIN(ctrl),
14029+ RANGEA(ctrl), RANGEA_PRE(ctrl), RANGEA_MAIN(ctrl),
14030+ RANGEB(ctrl), RANGEB_PRE(ctrl), RANGEB_MAIN(ctrl));
14031+#endif
14032+
14033+ return 0;
14034+}
14035+
14036+/*
14037+ -------------------------------------------------------------------------------
14038+ acp_clock_get_asic
14039+*/
14040+
14041+static int
14042+acp_clock_get_asic(int clock, unsigned long *frequency)
14043+{
14044+ unsigned long mcgc;
14045+ unsigned long mcgs;
14046+ unsigned long dco = 0;
14047+ unsigned long pllouta;
14048+ unsigned long plloutb;
14049+
14050+ *frequency = 0ULL;
14051+
14052+ mcgc = mfdcr(0xd00);
14053+ mcgs = mfdcr(0xd01);
14054+
14055+ switch (clock) {
14056+ case 0: /* PPC */
14057+ if (0 == (mcgc & 0xc0000000)) {
14058+ /* ppc_clk is clk_ref0 */
14059+ *frequency = CLK_REF0 / 1000;
14060+ } else if (0 == get_ppc_pll(&dco, &pllouta, &plloutb)) {
14061+ if (1 == ((mcgc & 0xc0000000) >> 30)) {
14062+ *frequency = pllouta;
14063+ } else {
14064+ *frequency = pllouta / 2;
14065+ }
14066+ } else {
14067+ return -1;
14068+ }
14069+ break;
14070+ case 1: /* Peripheral */
14071+ if (0 == (mcgc & 0x08000000)) {
14072+ /* clk_per is clk_ref0 */
14073+ *frequency = CLK_REF0 / 1000;
14074+ } else {
14075+ /* clk_per is clk_pllb_ppc */
14076+ if (0 == (mcgs & 0x80000000) ||
14077+ (0 == dco &&
14078+ 0 != get_ppc_pll(&dco, &pllouta, &plloutb))) {
14079+ return -1;
14080+ }
14081+
14082+ *frequency = plloutb;
14083+ }
14084+ break;
14085+ default:
14086+ return -1;
14087+ break;
14088+ }
14089+
14090+ return 0;
14091+}
14092+
14093+/*
14094+ -------------------------------------------------------------------------------
14095+ acp_glock_get_emulation
14096+*/
14097+
14098+static int
14099+acp_clock_get_emulation(int clock, unsigned long *frequency)
14100+{
14101+ *frequency = 0ULL;
14102+
14103+ /*
14104+ Clocks are only available on the ASIC.
14105+ */
14106+ switch (clock) {
14107+ case 0: /* PPC */
14108+ *frequency = 12500;
14109+ break;
14110+ case 1: /* Peripheral */
14111+ *frequency = 6500;
14112+ break;
14113+ default:
14114+ return -1;
14115+ break;
14116+ }
14117+
14118+ return 0;
14119+}
14120+
14121+/*
14122+ -------------------------------------------------------------------------------
14123+ acp_glock_get_iss
14124+*/
14125+
14126+static int
14127+acp_clock_get_iss(int clock, unsigned long *frequency)
14128+{
14129+ *frequency = 0ULL;
14130+
14131+ /*
14132+ Clocks are only available on the ASIC.
14133+ */
14134+ switch (clock) {
14135+ case 0: /* PPC */
14136+ *frequency = 12500;
14137+ break;
14138+ case 1: /* Peripheral */
14139+ *frequency = 6500;
14140+ break;
14141+ default:
14142+ return -1;
14143+ break;
14144+ }
14145+
14146+ return 0;
14147+}
14148+
14149+/*
14150+ ===============================================================================
14151+ ===============================================================================
14152+ Public Interface
14153+ ===============================================================================
14154+ ===============================================================================
14155+*/
14156+
14157+/*
14158+ -------------------------------------------------------------------------------
14159+ acp_clock_get
14160+*/
14161+
14162+int
14163+acp_clock_get(int clock, unsigned long *frequency)
14164+{
14165+#ifdef CONFIG_ACPISS
14166+ return acp_clock_get_iss(clock, frequency);
14167+#else
14168+ if (0 == is_asic()) {
14169+ return acp_clock_get_emulation(clock, frequency);
14170+ } else {
14171+ return acp_clock_get_asic(clock, frequency);
14172+ }
14173+
14174+ return -1;
14175+#endif
14176+}
14177+EXPORT_SYMBOL(acp_clock_get);
14178diff --git a/drivers/lsi/acp/nand.c b/drivers/lsi/acp/nand.c
14179new file mode 100644
14180index 0000000..7953e4f
14181--- /dev/null
14182+++ b/drivers/lsi/acp/nand.c
14183@@ -0,0 +1,3666 @@
14184+/*
14185+ * drivers/lsi/acp/nand.c
14186+ *
14187+ * NAND Controller Driver for LSI's ACP
14188+ *
14189+ * Copyright (C) 2009 LSI Inc.
14190+ *
14191+ * This program is free software; you can redistribute it and/or modify
14192+ * it under the terms of the GNU General Public License as published by
14193+ * the Free Software Foundation; either version 2 of the License, or
14194+ * (at your option) any later version.
14195+ *
14196+ * This program is distributed in the hope that it will be useful,
14197+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
14198+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14199+ * GNU General Public License for more details.
14200+ *
14201+ * You should have received a copy of the GNU General Public License
14202+ * along with this program; if not, write to the Free Software
14203+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
14204+ *
14205+ */
14206+
14207+#include <linux/slab.h>
14208+#include <linux/module.h>
14209+#include <linux/init.h>
14210+#include <linux/spinlock.h>
14211+#include <linux/delay.h>
14212+#include <linux/mtd/mtd.h>
14213+#include <linux/mtd/nand.h>
14214+#include <linux/mtd/partitions.h>
14215+#include <linux/of.h>
14216+#include <asm/io.h>
14217+#include <asm/delay.h>
14218+#include <asm/cacheflush.h>
14219+
14220+/* -- DEBUG --------------------------------------------------------- */
14221+
14222+#undef DEBUG
14223+/*#define DEBUG*/
14224+#if defined(DEBUG)
14225+#define DEBUG_PRINT(format, args...) do { \
14226+printk(KERN_CRIT "appnic:%d - DEBUG - ", __LINE__); \
14227+printk(KERN_CRIT format, ##args); \
14228+} while (0);
14229+#else
14230+#define DEBUG_PRINT(format, args...)
14231+#endif
14232+
14233+/* -- LOGIO --------------------------------------------------------- */
14234+
14235+#undef LOGIO
14236+#define LOGIO
14237+#ifdef LOGIO
14238+int enable_logio = 0;
14239+static inline unsigned long _READL(const char *, int, unsigned long);
14240+static inline unsigned long
14241+_READL(const char *file, int line, unsigned long address)
14242+{
14243+ unsigned long value;
14244+
14245+ value = readl(address);
14246+
14247+ if (0 != enable_logio)
14248+ printk("%s:%d - Read 0x%08lx from 0x%08lx\n",
14249+ file, line, value, address);
14250+
14251+ return value;
14252+}
14253+#define READL(address) _READL(__FILE__, __LINE__, (address))
14254+static inline void _WRITEL(const char *, int, unsigned long, unsigned long);
14255+static inline void
14256+_WRITEL(const char *file, int line, unsigned long value, unsigned long address)
14257+{
14258+ writel(value, address);
14259+
14260+ if (0 != enable_logio)
14261+ printk( "%s:%d - Wrote 0x%08lx to 0x%08lx\n",
14262+ file, line, value, address);
14263+
14264+ return;
14265+}
14266+#define WRITEL(value, address) _WRITEL(__FILE__, __LINE__, (value), (address))
14267+#else /* LOGIO */
14268+#define READL(address) readl((address))
14269+#define WRITEL(value, address) writel((value), (address))
14270+#endif /* LOGIO */
14271+
14272+/*
14273+ ----------------------------------------------------------------------
14274+*/
14275+
14276+#define NAND_DATA_REG 0x00000000
14277+#define NAND_CMD_REG 0x00008000
14278+#define NAND_INDEX_REG 0x00008004
14279+#define NAND_STATUS1_REG 0x00008008
14280+#define NAND_STATUS2_REG 0x0000800C
14281+#define NAND_ID0_REG 0x00008010
14282+#define NAND_ID1_REG 0x00008014
14283+#define NAND_ID2_REG 0x00008018
14284+#define NAND_ID3_REG 0x0000801C
14285+#define NAND_ID4_REG 0x00008020
14286+#define NAND_ID5_REG 0x00008024
14287+#define NAND_ID6_REG 0x00008028
14288+#define NAND_ID7_REG 0x0000802C
14289+#define NAND_INTR_EN_REG 0x00008030
14290+#define NAND_INTR_STATUS_REG 0x00008034
14291+#define NAND_INTR_REG 0x00008038
14292+#define NAND_ECC_ADDR_LOG_REG 0x0000803C
14293+#define NAND_ECC_VAL_REG 0x00008040
14294+#define NAND_ECC_INJECT_REG 0x00008044
14295+#define NAND_EXT_INDEX_REG 0x00008048
14296+#define NAND_TIMING1_REG 0x0000804C
14297+#define NAND_TIMING2_REG 0x00008050
14298+#define NAND_CONFIG_REG 0x00008054
14299+#define NAND_PECC_REG 0x00008058
14300+
14301+#define EP501_NAND_DATA_REG 0x0000
14302+#define EP501_NAND_CMD_REG 0x8000
14303+#define EP501_NAND_INDEX_REG 0x8004
14304+#define EP501_NAND_STATUS0_REG 0x8008
14305+#define EP501_NAND_STATUS1_REG 0x800C
14306+#define EP501_NAND_ID0_REG 0x8010
14307+#define EP501_NAND_ID1_REG 0x8014
14308+#define EP501_NAND_ID2_REG 0x8018
14309+#define EP501_NAND_ID3_REG 0x801C
14310+#define EP501_NAND_ID4_REG 0x8020
14311+#define EP501_NAND_ID5_REG 0x8024
14312+#define EP501_NAND_ID6_REG 0x8028
14313+#define EP501_NAND_ID7_REG 0x802C
14314+#define EP501_NAND_INTR_EN_REG 0x8030
14315+#define EP501_NAND_INTR_STATUS_REG 0x8034
14316+#define EP501_NAND_INTR_REG 0x8038
14317+#define EP501_NAND_ECC_ADDR_LOG_REG 0x803C
14318+#define EP501_NAND_ECC_VAL_REG 0x8040
14319+#define EP501_NAND_ECC_INJECT_REG 0x8044
14320+#define EP501_NAND_EXT_INDEX_REG 0x8048
14321+#define EP501_NAND_TIMING0_REG 0x804C
14322+#define EP501_NAND_TIMING1_REG 0x8050
14323+#define EP501_NAND_CONFIG_REG 0x8054
14324+#define EP501_NAND_PECC_REG 0x8058
14325+
14326+#define EP501G1_NAND_DATA_REG 0x0000
14327+#define EP501G1_NAND_CMD_REG 0x8000
14328+#define EP501G1_NAND_INDEX_REG 0x8004
14329+#define EP501G1_NAND_STATUS0_REG 0x8008
14330+#define EP501G1_NAND_ID0_REG 0x8010
14331+#define EP501G1_NAND_ID2_REG 0x8018
14332+#define EP501G1_NAND_ID4_REG 0x8020
14333+#define EP501G1_NAND_ID6_REG 0x8028
14334+#define EP501G1_NAND_INTR_EN_REG 0x8030
14335+#define EP501G1_NAND_INTR_STATUS_REG 0x8034
14336+#define EP501G1_NAND_INTR_REG 0x8038
14337+#define EP501G1_NAND_EXT_INDEX_REG 0x8048
14338+#define EP501G1_NAND_TIMING0_REG 0x804C
14339+#define EP501G1_NAND_TIMING1_REG 0x8050
14340+#define EP501G1_NAND_CONFIG_REG 0x8054
14341+#define EP501G1_NAND_1BIT_ECC0_STATUS 0x8058
14342+#define EP501G1_NAND_1BIT_ECC1_STATUS 0x805c
14343+#define EP501G1_NAND_1BIT_ECC2_STATUS 0x8060
14344+#define EP501G1_NAND_1BIT_ECC3_STATUS 0x8064
14345+#define EP501G1_NAND_1BIT_ECC4_STATUS 0x8068
14346+#define EP501G1_NAND_1BIT_ECC5_STATUS 0x806c
14347+#define EP501G1_NAND_1BIT_ECC6_STATUS 0x8070
14348+#define EP501G1_NAND_1BIT_ECC7_STATUS 0x8074
14349+#define EP501G1_NAND_BCH_STATUS 0x807c
14350+#define EP501G1_NAND_SYN_R12_S0 0x8080
14351+#define EP501G1_NAND_SYN_R34_S0 0x8084
14352+#define EP501G1_NAND_SYN_R56_S0 0x8088
14353+#define EP501G1_NAND_SYN_R78_S0 0x808c
14354+#define EP501G1_NAND_SYN_R12_S1 0x8090
14355+#define EP501G1_NAND_SYN_R34_S1 0x8094
14356+#define EP501G1_NAND_SYN_R56_S1 0x8098
14357+#define EP501G1_NAND_SYN_R78_S1 0x809c
14358+#define EP501G1_NAND_SYN_R12_S2 0x80a0
14359+#define EP501G1_NAND_SYN_R34_S2 0x80a4
14360+#define EP501G1_NAND_SYN_R56_S2 0x80a8
14361+#define EP501G1_NAND_SYN_R78_S2 0x80ac
14362+#define EP501G1_NAND_SYN_R12_S3 0x80b0
14363+#define EP501G1_NAND_SYN_R34_S3 0x80b4
14364+#define EP501G1_NAND_SYN_R56_S3 0x80b8
14365+#define EP501G1_NAND_SYN_R78_S3 0x80bc
14366+#define EP501G1_NAND_SYN_R12_S4 0x80c0
14367+#define EP501G1_NAND_SYN_R34_S4 0x80c4
14368+#define EP501G1_NAND_SYN_R56_S4 0x80c8
14369+#define EP501G1_NAND_SYN_R78_S4 0x80cc
14370+#define EP501G1_NAND_SYN_R12_S5 0x80d0
14371+#define EP501G1_NAND_SYN_R34_S5 0x80d4
14372+#define EP501G1_NAND_SYN_R56_S5 0x80d8
14373+#define EP501G1_NAND_SYN_R78_S5 0x80dc
14374+#define EP501G1_NAND_SYN_R12_S6 0x80e0
14375+#define EP501G1_NAND_SYN_R34_S6 0x80e4
14376+#define EP501G1_NAND_SYN_R56_S6 0x80e8
14377+#define EP501G1_NAND_SYN_R78_S6 0x80ec
14378+#define EP501G1_NAND_SYN_R12_S7 0x80f0
14379+#define EP501G1_NAND_SYN_R34_S7 0x80f4
14380+#define EP501G1_NAND_SYN_R56_S7 0x80f8
14381+#define EP501G1_NAND_SYN_R78_S7 0x80fc
14382+
14383+#define EP501G3_NAND_DATA_REG 0x0000
14384+#define EP501G3_NAND_CMD_REG 0x8000
14385+#define EP501G3_NAND_INDEX_REG 0x8004
14386+#define EP501G3_NAND_STATUS0_REG 0x8008
14387+#define EP501G3_NAND_ID0_REG 0x8010
14388+#define EP501G3_NAND_ID2_REG 0x8018
14389+#define EP501G3_NAND_ID4_REG 0x8020
14390+#define EP501G3_NAND_ID6_REG 0x8028
14391+#define EP501G3_NAND_INTR_EN_REG 0x8030
14392+#define EP501G3_NAND_INTR_STATUS_REG 0x8034
14393+#define EP501G3_NAND_INTR_REG 0x8038
14394+#define EP501G3_NAND_EXT_INDEX_REG 0x8048
14395+#define EP501G3_NAND_TIMING0_REG 0x804C
14396+#define EP501G3_NAND_TIMING1_REG 0x8050
14397+#define EP501G3_NAND_CONFIG_REG 0x8054
14398+#define EP501G3_NAND_TIMING2_REG 0x805c
14399+#define EP501G3_NAND_BCH_STATUS 0x807c
14400+#define EP501G3_NAND_SYN_R12_S0 0x8080
14401+#define EP501G3_NAND_SYN_R34_S0 0x8084
14402+#define EP501G3_NAND_SYN_R56_S0 0x8088
14403+#define EP501G3_NAND_SYN_R78_S0 0x808c
14404+#define EP501G3_NAND_SYN_R12_S1 0x8090
14405+#define EP501G3_NAND_SYN_R34_S1 0x8094
14406+#define EP501G3_NAND_SYN_R56_S1 0x8098
14407+#define EP501G3_NAND_SYN_R78_S1 0x809c
14408+#define EP501G3_NAND_SYN_R12_S2 0x80a0
14409+#define EP501G3_NAND_SYN_R34_S2 0x80a4
14410+#define EP501G3_NAND_SYN_R56_S2 0x80a8
14411+#define EP501G3_NAND_SYN_R78_S2 0x80ac
14412+#define EP501G3_NAND_SYN_R12_S3 0x80b0
14413+#define EP501G3_NAND_SYN_R34_S3 0x80b4
14414+#define EP501G3_NAND_SYN_R56_S3 0x80b8
14415+#define EP501G3_NAND_SYN_R78_S3 0x80bc
14416+#define EP501G3_NAND_SYN_R12_S4 0x80c0
14417+#define EP501G3_NAND_SYN_R34_S4 0x80c4
14418+#define EP501G3_NAND_SYN_R56_S4 0x80c8
14419+#define EP501G3_NAND_SYN_R78_S4 0x80cc
14420+#define EP501G3_NAND_SYN_R12_S5 0x80d0
14421+#define EP501G3_NAND_SYN_R34_S5 0x80d4
14422+#define EP501G3_NAND_SYN_R56_S5 0x80d8
14423+#define EP501G3_NAND_SYN_R78_S5 0x80dc
14424+#define EP501G3_NAND_SYN_R12_S6 0x80e0
14425+#define EP501G3_NAND_SYN_R34_S6 0x80e4
14426+#define EP501G3_NAND_SYN_R56_S6 0x80e8
14427+#define EP501G3_NAND_SYN_R78_S6 0x80ec
14428+#define EP501G3_NAND_SYN_R12_S7 0x80f0
14429+#define EP501G3_NAND_SYN_R34_S7 0x80f4
14430+#define EP501G3_NAND_SYN_R56_S7 0x80f8
14431+#define EP501G3_NAND_SYN_R78_S7 0x80fc
14432+#define EP501G3_NAND_SYN_R12_S8 0x8100
14433+#define EP501G3_NAND_SYN_R34_S8 0x8104
14434+#define EP501G3_NAND_SYN_R56_S8 0x8108
14435+#define EP501G3_NAND_SYN_R78_S8 0x810c
14436+#define EP501G3_NAND_SYN_R12_S9 0x8110
14437+#define EP501G3_NAND_SYN_R34_S9 0x8114
14438+#define EP501G3_NAND_SYN_R56_S9 0x8118
14439+#define EP501G3_NAND_SYN_R78_S9 0x811c
14440+#define EP501G3_NAND_SYN_R12_S10 0x8120
14441+#define EP501G3_NAND_SYN_R34_S10 0x8124
14442+#define EP501G3_NAND_SYN_R56_S10 0x8128
14443+#define EP501G3_NAND_SYN_R78_S10 0x812c
14444+#define EP501G3_NAND_SYN_R12_S11 0x8130
14445+#define EP501G3_NAND_SYN_R34_S11 0x8134
14446+#define EP501G3_NAND_SYN_R56_S11 0x8138
14447+#define EP501G3_NAND_SYN_R78_S11 0x813c
14448+#define EP501G3_NAND_SYN_R12_S12 0x8140
14449+#define EP501G3_NAND_SYN_R34_S12 0x8144
14450+#define EP501G3_NAND_SYN_R56_S12 0x8148
14451+#define EP501G3_NAND_SYN_R78_S12 0x814c
14452+#define EP501G3_NAND_SYN_R12_S13 0x8150
14453+#define EP501G3_NAND_SYN_R34_S13 0x8154
14454+#define EP501G3_NAND_SYN_R56_S13 0x8158
14455+#define EP501G3_NAND_SYN_R78_S13 0x815c
14456+#define EP501G3_NAND_SYN_R12_S14 0x8160
14457+#define EP501G3_NAND_SYN_R34_S14 0x8164
14458+#define EP501G3_NAND_SYN_R56_S14 0x8168
14459+#define EP501G3_NAND_SYN_R78_S14 0x816c
14460+#define EP501G3_NAND_SYN_R12_S15 0x8170
14461+#define EP501G3_NAND_SYN_R34_S15 0x8174
14462+#define EP501G3_NAND_SYN_R56_S15 0x8178
14463+#define EP501G3_NAND_SYN_R78_S15 0x817c
14464+
14465+/*
14466+ ==============================================================================
14467+ ==============================================================================
14468+ Some Oddities...
14469+
14470+ -1-
14471+ Reading EP501 registers while the device is calculating ECC will
14472+ hang the AHB. As the only way to know that an ECC calculation is in
14473+ progress is to read the "extra bits" added to the interrupt status
14474+ register, this can cause problems. To get around this, the
14475+ PECC_BUSY signal from the controller is also available in a general
14476+ purpose system register. 0x149.0.0xc/0x0020_0040_0000_c00c, bit 24.
14477+ So, before reading the interrupt status register (or any other
14478+ register for that matter) make sure the bit mentioned above is
14479+ clear. See BZ21212.
14480+
14481+ -2-
14482+ Extra bits have been added to the interrupt status register. See
14483+ BZ21196. From that defect...
14484+
14485+ == Bit 0
14486+ This bit is set when un-correctable ECC is detected. This bit can be
14487+ cleared by writing "0" to this register. Writing "1" has no
14488+ effect. An interrupt is generated if this bit and the enable bit
14489+ (bit 0) in the Interrupt Enable Register are "1". This bit is not
14490+ set if ECC is disabled.
14491+
14492+ == Bit 1
14493+ This bit is set when correctable ECC is detected. This bit can be
14494+ cleared by writing "0" to this register. Writing "1" has no
14495+ effect. An interrupt is generated if this bit and the enable bit
14496+ (bit 1) in the Interrupt Enable Register are "1". This bit is not
14497+ set if ECC is disabled.
14498+
14499+ == Bit 2
14500+ This bit is set when a rising edge is detected on the non gated
14501+ READY/BUSY# input from the NAND Flash. This bit can be cleared by
14502+ writing a "0" to this register. Writing a "1" has no effect. An
14503+ interrupt is generated if this bit and the enable bit (bit 2) in the
14504+ Interrupt Enable Register are "1".
14505+
14506+ == Bit 3
14507+ This bit is set when a falling edge is detected on the non gated
14508+ READY/BUSY# input from the NAND Flash. This bit can be cleared by
14509+ writing a "0" to this register. Writing a "1" has no effect. An
14510+ interrupt is generated if this bit and the enable bit (bit 3) in the
14511+ Interrupt Enable Register are "1".
14512+
14513+ == Bit 4
14514+ This bit is set when a falling edge is detected on the PECC_BUSY
14515+ signal which indicates when the NAND controller has taken control of
14516+ the NAND Flash for ECC byte access. This bit can be cleared by
14517+ writing a "0" to this register. Writing a "1" has no effect. An
14518+ interrupt is generated if this bit and the enable bit (bit 4) in the
14519+ Interrupt Enable Register are "1".
14520+
14521+ == Bit 5
14522+ This bit is read only and is the synchronized level on the non gated
14523+ READY/BUSY# input from the NAND Flash. This bit can be used to poll
14524+ the status of this signal and is not used to generate an interrupt.
14525+
14526+ == Bit 6
14527+ This bit is read only and indicates the level on the PECC_BUSY
14528+ signal which indicates when the NAND controller has taken control of
14529+ the NAND Flash for ECC byte access. This bit can be used to poll the
14530+ level of this signal and is not used to generate an interrupt.
14531+
14532+ ==============================================================================
14533+ ==============================================================================
14534+*/
14535+
14536+static void *gpreg_base;
14537+
14538+#define LSI_NAND_PECC_BUSY_REGISTER (gpreg_base + 0x00c)
14539+
14540+#ifdef CONFIG_ACP_X1V1
14541+#define LSI_NAND_PECC_BUSY_MASK (1 << 25)
14542+#else
14543+#define LSI_NAND_PECC_BUSY_MASK (1 << 28)
14544+#endif
14545+
14546+/*
14547+ ----------------------------------------------------------------------
14548+ MTD structures
14549+*/
14550+
14551+static struct mtd_info lsi_nand_mtd = { 0 };
14552+static struct nand_chip lsi_nand_chip = { 0 };
14553+
14554+#define NAND_CMD_START_ECC_READ 0x23
14555+
14556+#define NAND_CMD_CE_OFF_501 0xEE
14557+#define NAND_CMD_CE_OFF_501G1 0xEE
14558+#define NAND_CMD_CE_OFF_501G3 0xFE
14559+static int nand_cmd_ce_off;
14560+
14561+typedef union {
14562+ unsigned long raw;
14563+
14564+ struct {
14565+#ifdef CONFIG_ACP
14566+ unsigned long th:8;
14567+ unsigned long trp:8;
14568+ unsigned long twp:8;
14569+ unsigned long ts:8;
14570+#else
14571+ unsigned long ts:8;
14572+ unsigned long twp:8;
14573+ unsigned long trp:8;
14574+ unsigned long th:8;
14575+#endif
14576+ } __attribute__ ((packed)) bits;
14577+} nand_timing_control_register_0_t;
14578+
14579+typedef union {
14580+ unsigned long raw;
14581+
14582+ struct {
14583+#ifdef CONFIG_ACP
14584+ unsigned long twb:8;
14585+ unsigned long trr:8;
14586+ unsigned long trh:8;
14587+ unsigned long twh:8;
14588+#else
14589+ unsigned long twh:8;
14590+ unsigned long trh:8;
14591+ unsigned long trr:8;
14592+ unsigned long twb:8;
14593+#endif
14594+ } __attribute__ ((packed)) bits;
14595+} __attribute__ ((packed)) nand_timing_control_register_1_t;
14596+
14597+typedef union {
14598+ unsigned long raw;
14599+
14600+ struct {
14601+#ifdef CONFIG_ACP
14602+ unsigned long : 8;
14603+ unsigned long trhw : 8;
14604+ unsigned long twhr : 8;
14605+ unsigned long tccs : 8;
14606+#else
14607+ unsigned long tccs : 8;
14608+ unsigned long twhr : 8;
14609+ unsigned long trhw : 8;
14610+ unsigned long : 8;
14611+#endif
14612+ } __attribute__ ( ( packed ) ) bits;
14613+} __attribute__ ( ( packed ) ) nand_timing_control_register_2_t;
14614+
14615+typedef enum {
14616+ LSI_NAND_NONE, LSI_NAND_EP501, LSI_NAND_EP501G1, LSI_NAND_EP501G3
14617+} lsi_nand_type_t;
14618+
14619+static lsi_nand_type_t lsi_nand_type;
14620+
14621+typedef struct page_wise_ecc_status_st {
14622+ unsigned err_bit : 3;
14623+ unsigned column : 9;
14624+ unsigned status : 2;
14625+ unsigned rsvd : 18;
14626+} page_wise_ecc_status_t;
14627+
14628+/*
14629+ ===============================================================================
14630+ ===============================================================================
14631+ Concerning ECC
14632+
14633+ The EP501 only supports 1 bit ECC mode. The EP501G1 supports both 1
14634+ bit and 4 bit modes. The EP501G3 supports 4 bit, 8 bit, and 12 bit.
14635+ The NAND part normally used on ACP boards has 2K pages (supported by
14636+ all three controllers) with 64 bytes of OOB. For a 2K page, 1 bit
14637+ ECC uses 12 bytes, 4 bit ECC uses 32 bytes, 8 bit ECC uses 64 bytes
14638+ and 12 bit ECC uses 80 bytes. In order to to keep the bad block
14639+ markers (first two bytes) and leave some OOB available for file
14640+ systems etc., this driver only supports 1 bit ECC or 4 bit ECC.
14641+
14642+ For now, the EP501 version will use 1 bit ECC (only option), the
14643+ EP501G1 version will use 4 bit (for compabitility with the EP501G3)
14644+ and teh EP501G3 versions will use 4 bit (due to the amount of OOB
14645+ required and for compatibility with the EP501G1).
14646+
14647+ EP501
14648+
14649+ The driver has not been tested with small page (512 byte) devices.
14650+ The only usable option is 2K. So, the OOB should be 64 bytes. The
14651+ first 2 bytes are reserved for marking bad blocks. The last 12
14652+ bytes are reserved for ECC. All other bytes are free. See
14653+ lsi_ep501_2k_ecclayout below.
14654+
14655+ EP501G1
14656+
14657+ This driver has been tested with 2K and 4K page sizes using 1 bit
14658+ and 4 bit ECC.
14659+ ===============================================================================
14660+ ===============================================================================
14661+*/
14662+
14663+static struct nand_ecclayout lsi_2k_1bit_ecclayout = {
14664+ .eccbytes = 12,
14665+ .eccpos = {
14666+ 52, 53, 54, 55, 56, 57,
14667+ 58, 59, 60, 61, 62, 63},
14668+ .oobfree = {{2, 50}}
14669+};
14670+
14671+static struct nand_ecclayout lsi_4k_1bit_ecclayout = {
14672+ .eccbytes = 24,
14673+ .eccpos = {
14674+ 52, 53, 54, 55, 56, 57,
14675+ 58, 59, 60, 61, 62, 63},
14676+ .oobfree = {{2, 50}}
14677+};
14678+
14679+static struct nand_ecclayout lsi_2k_4bit_ecclayout = {
14680+ .eccbytes = 32,
14681+ .eccpos = {
14682+ 32, 33, 34, 35, 36, 37, 38, 39,
14683+ 40, 41, 42, 43, 44, 45, 46, 47,
14684+ 48, 49, 50, 51, 52, 53, 54, 55,
14685+ 56, 57, 58, 59, 60, 61, 62, 63},
14686+ .oobfree = {{2, 30}}
14687+};
14688+
14689+static struct nand_ecclayout lsi_4k_4bit_ecclayout = {
14690+ .eccbytes = 64,
14691+ .eccpos = {
14692+ 64, 65, 66, 67, 68, 69, 70, 71,
14693+ 72, 73, 74, 75, 76, 77, 78, 79,
14694+ 80, 81, 82, 83, 84, 85, 86, 87,
14695+ 88, 89, 90, 91, 92, 93, 94, 95,
14696+ 96, 97, 98, 99, 100, 101, 102, 103,
14697+ 104, 105, 106, 107, 108, 109, 110, 111,
14698+ 112, 113, 114, 115, 116, 117, 118, 119,
14699+ 120, 121, 122, 123, 124, 125, 126, 127
14700+ },
14701+ .oobfree = {{2, 63}}
14702+};
14703+
14704+static struct nand_ecclayout lsi_8k_4bit_ecclayout = {
14705+ .eccbytes = 128,
14706+ .eccpos = {
14707+ 128, 129, 130, 131, 132, 133, 134, 135,
14708+ 136, 137, 138, 139, 140, 141, 142, 143,
14709+ 144, 145, 146, 147, 148, 149, 150, 151,
14710+ 152, 153, 154, 155, 156, 157, 158, 159,
14711+ 160, 161, 162, 163, 164, 165, 166, 167,
14712+ 168, 169, 170, 171, 172, 173, 174, 175,
14713+ 176, 177, 178, 179, 180, 181, 182, 183,
14714+ 184, 185, 186, 187, 188, 189, 190, 191,
14715+ 192, 193, 194, 195, 196, 197, 198, 199,
14716+ 200, 201, 202, 203, 204, 205, 206, 207,
14717+ 208, 209, 210, 211, 212, 213, 214, 215,
14718+ 216, 217, 218, 219, 220, 221, 222, 223,
14719+ 224, 225, 226, 227, 228, 229, 230, 231,
14720+ 232, 233, 234, 235, 236, 237, 238, 239,
14721+ 240, 241, 242, 243, 244, 245, 246, 247,
14722+ 248, 249, 250, 251, 252, 253, 254, 255
14723+ },
14724+ .oobfree = {{2, 126}}
14725+};
14726+
14727+static struct mtd_partition *partition_info;
14728+static const char *probes[] = { "cmdlinepart", NULL };
14729+
14730+/*
14731+ -------------------------------------------------------------------------------
14732+ lsi_nand_hwcontrol
14733+*/
14734+
14735+static void
14736+lsi_nand_hwcontrol(struct mtd_info *mtd, int cmd, unsigned int ctrl)
14737+{
14738+ struct nand_chip *chip = mtd->priv;
14739+
14740+ if (cmd != NAND_CMD_NONE) {
14741+ WRITEL (cmd, (chip->IO_ADDR_W + NAND_CMD_REG));
14742+ }
14743+
14744+ return;
14745+}
14746+
14747+/*
14748+ ------------------------------------------------------------------------------
14749+ lsi_nand_device_ready
14750+
14751+ The READ/BUSY# input from the NAND device(s) (ORed if there are more
14752+ than one) is availble as an extra bit in the interrupt status
14753+ register. Note that this register shouldn't be read unless the
14754+ controller is not in the middle of calculating ECC (see "Some
14755+ Oddities..." above).
14756+*/
14757+
14758+static int
14759+lsi_nand_device_ready(struct mtd_info *mtd)
14760+{
14761+ struct nand_chip *chip = mtd->priv;
14762+ unsigned long interrupt_status;
14763+
14764+ /* Get the status. */
14765+ interrupt_status = READL(chip->IO_ADDR_R + NAND_INTR_STATUS_REG);
14766+
14767+ return interrupt_status & NAND_STATUS_TRUE_READY;
14768+}
14769+
14770+/**
14771+ * lsi_nand_command - [DEFAULT] Send command to NAND large page device
14772+ * @mtd: MTD device structure
14773+ * @command: the command to be sent
14774+ * @column: the column address for this command, -1 if none
14775+ * @page_addr: the page address for this command, -1 if none
14776+ *
14777+ * Send command to NAND device. This is the version for the new large page
14778+ * devices We dont have the separate regions as we have in the small page
14779+ * devices. We must emulate NAND_CMD_READOOB to keep the code compatible.
14780+ */
14781+static void
14782+lsi_nand_command(struct mtd_info *mtd, unsigned int command,
14783+ int column, int page_addr)
14784+{
14785+ register struct nand_chip *chip = mtd->priv;
14786+ unsigned int status = 0;
14787+
14788+ DEBUG_PRINT("command=0x%x\n", command);
14789+ command &= 0xff;
14790+
14791+ /* Emulate NAND_CMD_READOOB */
14792+ if (command == NAND_CMD_READOOB) {
14793+ column += mtd->writesize;
14794+ command = NAND_CMD_READ0;
14795+ }
14796+
14797+ /* return if unhandled command is issued */
14798+ if (command != NAND_CMD_READ0 &&
14799+ command != NAND_CMD_SEQIN &&
14800+ command != NAND_CMD_ERASE1 &&
14801+ command != NAND_CMD_STATUS &&
14802+ command != NAND_CMD_READID &&
14803+ command != NAND_CMD_RESET &&
14804+ command != NAND_CMD_START_ECC_READ &&
14805+ command != NAND_CMD_PAGEPROG &&
14806+ command != NAND_CMD_ERASE2) {
14807+ printk(KERN_ERR
14808+ "lsi_nand_command(): WARN: Unhandled command 0x%x "
14809+ "issued for page=0x%x, column=0x%x.\n",
14810+ command, page_addr, column);
14811+ return;
14812+ }
14813+
14814+ /* Command latch cycle */
14815+ chip->cmd_ctrl(mtd, command,
14816+ NAND_NCE | NAND_CLE | NAND_CTRL_CHANGE);
14817+
14818+ if (column != -1 || page_addr != -1) {
14819+ unsigned long index = 0;
14820+ unsigned long extended_index = 0;
14821+
14822+ /* column number */
14823+ /*
14824+ Since the ACP uses 8 bit device access, only that
14825+ mode is supported.
14826+ */
14827+
14828+ if (LSI_NAND_EP501 == lsi_nand_type) {
14829+ /* column number */
14830+ if (column != -1)
14831+ index = column & 0xfff;
14832+
14833+ /* page and block number */
14834+ if (page_addr != -1)
14835+ index += ((page_addr & 0x7ffff) << 12);
14836+ } else {
14837+ /* column number */
14838+ if (-1 != column) {
14839+ switch (mtd->writesize) {
14840+ case 512:
14841+ index |= (column & 0x1ff);
14842+ break;
14843+ case 2048:
14844+ index |= (column & 0xfff);
14845+ break;
14846+ case 4096:
14847+ index |= (column & 0x1fff);
14848+ break;
14849+ default:
14850+ break;
14851+ }
14852+ }
14853+
14854+ /* page_addr and block number */
14855+ if (-1 != page_addr) {
14856+ switch (mtd->writesize) {
14857+ case 512:
14858+ index |= (page_addr & 0x7fffff) << 9;
14859+ break;
14860+ case 2048:
14861+ index |= (page_addr & 0xfffff) << 12;
14862+ extended_index |= (page_addr & 0xfff00000);
14863+ break;
14864+ case 4096:
14865+ index |= (page_addr & 0x7ffff) << 13;
14866+ extended_index |= (page_addr & 0xfff80000);
14867+ break;
14868+ default:
14869+ break;
14870+ }
14871+ }
14872+ }
14873+
14874+ /* write index reg */
14875+ WRITEL(index, chip->IO_ADDR_W + NAND_INDEX_REG);
14876+
14877+ /* write ext index reg */
14878+ WRITEL(extended_index, chip->IO_ADDR_W + NAND_EXT_INDEX_REG);
14879+
14880+ mb();
14881+ }
14882+
14883+ /* for read command, send 0xe0 so data is populated */
14884+ if (command == NAND_CMD_READ0) {
14885+ chip->cmd_ctrl(mtd, NAND_CMD_RNDOUTSTART,
14886+ NAND_NCE | NAND_CLE | NAND_CTRL_CHANGE);
14887+ do {
14888+ udelay(chip->chip_delay);
14889+ status = READL((void *)LSI_NAND_PECC_BUSY_REGISTER);
14890+ } while (0 != (status & LSI_NAND_PECC_BUSY_MASK));
14891+
14892+ /* wait until CHIP_BUSY goes low */
14893+ do {
14894+ udelay(chip->chip_delay);
14895+ status = chip->dev_ready(mtd);
14896+ } while (!status);
14897+ } else if (command == NAND_CMD_STATUS) {
14898+ udelay(chip->chip_delay);
14899+ }
14900+
14901+ return;
14902+}
14903+
14904+/**
14905+ * lsi_nand_read_buf - [DEFAULT] read chip data into buffer
14906+ * @mtd: MTD device structure
14907+ * @buf: buffer to store date
14908+ * @len: number of bytes to read
14909+ *
14910+ * Default read function for 8bit buswith
14911+ */
14912+static void lsi_nand_read_buf(struct mtd_info *mtd, uint8_t *buf, int len)
14913+{
14914+ int i = 0;
14915+ struct nand_chip * chip = (struct nand_chip *) mtd->priv;
14916+ uint32_t * p = (uint32_t *)buf;
14917+
14918+#if defined(LOGIO)
14919+ if (0 != enable_logio)
14920+ printk("Reading NAND Buffer (len=%d)...\n", len);
14921+#endif
14922+
14923+ for (i = 0; i < (len >> 2); i++) {
14924+ p[i] = readl(chip->IO_ADDR_R);
14925+ }
14926+
14927+ return;
14928+}
14929+
14930+/**
14931+ * lsi_nand_write_buf - [DEFAULT] write buffer to chip
14932+ * @mtd: MTD device structure
14933+ * @buf: data buffer
14934+ * @len: number of bytes to write
14935+ *
14936+ * Default write function for 8bit buswith
14937+ */
14938+static void
14939+lsi_nand_write_buf(struct mtd_info *mtd, const uint8_t *buf, int len)
14940+{
14941+ int i = 0;
14942+ struct nand_chip *chip = mtd->priv;
14943+ uint32_t *p = (uint32_t *)buf;
14944+
14945+#if defined(LOGIO)
14946+ if (0 != enable_logio)
14947+ printk("Writing NAND Buffer (len=%d)...\n", len);
14948+#endif
14949+
14950+ for (i = 0; i < (len >> 2); i++) {
14951+ writel(p[i], chip->IO_ADDR_W);
14952+ }
14953+
14954+ return;
14955+}
14956+
14957+/**
14958+ * lsi_nand_verify_buf - [DEFAULT] Verify chip data against buffer
14959+ * @mtd: MTD device structure
14960+ * @buf: buffer containing the data to compare
14961+ * @len: number of bytes to compare
14962+ *
14963+ * Default verify function for 8bit buswith
14964+ */
14965+static int lsi_nand_verify_buf(struct mtd_info *mtd, const uint8_t *buf, int len)
14966+{
14967+ int i;
14968+ struct nand_chip *chip = mtd->priv;
14969+ uint32_t *p = (uint32_t *)buf;
14970+
14971+ for (i = 0; i < (len >> 2); i++) {
14972+ udelay(chip->chip_delay);
14973+ if (p[i] != readl((uint32_t *)chip->IO_ADDR_R)) {
14974+ return -EFAULT;
14975+ }
14976+ }
14977+
14978+ return 0;
14979+}
14980+
14981+static int lsi_nand_read_status(struct mtd_info *mtd)
14982+{
14983+ struct nand_chip *chip = mtd->priv;
14984+
14985+ chip->cmd_ctrl(mtd, NAND_CMD_STATUS, 0);
14986+
14987+ return READL(chip->IO_ADDR_R + NAND_STATUS1_REG) & 0xff;
14988+}
14989+
14990+
14991+/**
14992+ * lsi_nand_wait - [DEFAULT] wait until the command is done
14993+ * @mtd: MTD device structure
14994+ * @chip: NAND chip structure
14995+ *
14996+ * Wait for command done. This applies to erase and program only
14997+ * Erase can take up to 400ms and program up to 20ms according to
14998+ * general NAND and SmartMedia specs
14999+ */
15000+static int lsi_nand_wait(struct mtd_info *mtd, struct nand_chip *chip)
15001+{
15002+ unsigned long status = 0;
15003+ loff_t offset = 0;
15004+
15005+ /*
15006+ When reading or writing, wait for the
15007+ controller's PECC_BUSY signal to clear.
15008+ */
15009+#if 0
15010+ if (FL_READING == chip->state || FL_WRITING == chip->state) {
15011+ for (;;) {
15012+ status = READL((void *)LSI_NAND_PECC_BUSY_REGISTER);
15013+
15014+ if (0 == (status & LSI_NAND_PECC_BUSY_MASK))
15015+ break;
15016+
15017+ udelay(chip->chip_delay);
15018+ }
15019+ }
15020+#else
15021+ for (;;) {
15022+ status = READL((void *)LSI_NAND_PECC_BUSY_REGISTER);
15023+
15024+ if (0 == (status & LSI_NAND_PECC_BUSY_MASK))
15025+ break;
15026+
15027+ udelay(chip->chip_delay);
15028+ }
15029+#endif
15030+
15031+ /*
15032+ In all cases, wait for the NAND device to be "ready".
15033+
15034+ N.B. The FL_READING case is handled in lsi_nand_command().
15035+ */
15036+
15037+ if (FL_WRITING == chip->state || FL_ERASING == chip->state) {
15038+ for (;;) {
15039+ if (chip->dev_ready(mtd))
15040+ break;
15041+
15042+ udelay(chip->chip_delay);
15043+ }
15044+ }
15045+
15046+ /*
15047+ Then get the status.
15048+ */
15049+
15050+ for (;;) {
15051+ status = lsi_nand_read_status(mtd);
15052+
15053+ if (0 != (status & NAND_STATUS_READY))
15054+ break;
15055+
15056+ udelay(chip->chip_delay);
15057+ }
15058+
15059+ if (status & NAND_STATUS_FAIL) {
15060+ offset = (READL(chip->IO_ADDR_R + NAND_INDEX_REG) /
15061+ mtd->writesize) * mtd->writesize;
15062+ printk(KERN_ERR
15063+ "lsi_nand_wait(): Action %d failed for "
15064+ "Offset: 0x%llx, status 0x%lx\n",
15065+ chip->state, offset, status);
15066+ }
15067+
15068+ return status;
15069+}
15070+
15071+/*
15072+ lsi_nand_ecc_hwctl
15073+*/
15074+
15075+void
15076+lsi_nand_ecc_hwctl(struct mtd_info *mtd, int mode)
15077+{
15078+ /* nothing to do to enable ECC */
15079+ return;
15080+}
15081+
15082+/**
15083+ * lsi_nand_ecc_calculate
15084+ */
15085+
15086+int
15087+lsi_nand_ecc_calculate(struct mtd_info *mtd, const uint8_t *dat,
15088+ uint8_t *ecc_code)
15089+{
15090+ struct nand_chip *chip = mtd->priv;
15091+
15092+ /* start ECC calculation */
15093+ if (chip->state == FL_READING) {
15094+ chip->cmdfunc(mtd, NAND_CMD_START_ECC_READ, -1, -1);
15095+ } else if (chip->state == FL_WRITING) {
15096+ chip->cmdfunc(mtd, NAND_CMD_PAGEPROG, -1, -1);
15097+ }
15098+
15099+ /* wait for PECC_BUSY to go down */
15100+ return chip->waitfunc(mtd, chip);
15101+}
15102+
15103+/**
15104+ * lsi_nand_ecc_correct
15105+ */
15106+
15107+int
15108+lsi_nand_ecc_correct(struct mtd_info *mtd, uint8_t *dat, uint8_t *read_ecc,
15109+ uint8_t *calc_ecc)
15110+{
15111+ /* nothing to do to correct ECC */
15112+ return 0;
15113+}
15114+
15115+/*
15116+ ------------------------------------------------------------------------------
15117+ report_ecc_errors_ep501
15118+*/
15119+
15120+static int
15121+report_ecc_errors_ep501(struct mtd_info *mtd, struct nand_chip *chip,
15122+ uint8_t *buffer, int page)
15123+{
15124+ int rc = 0;
15125+ unsigned long ecc_status;
15126+ page_wise_ecc_status_t *ecc_status_reg =
15127+ (page_wise_ecc_status_t *)&ecc_status;
15128+ int column;
15129+ int i;
15130+
15131+ for (i = 0; i < (mtd->writesize >> 9); i++) {
15132+ ecc_status = READL(chip->IO_ADDR_R + EP501_NAND_PECC_REG);
15133+ column = (i << 9) + ecc_status_reg->column;
15134+
15135+ if (1 == ecc_status_reg->status) {
15136+ printk(KERN_NOTICE
15137+ "Single ECC Error: "
15138+ "Page=0x%x Column=0x%x Bit=0x%x\n",
15139+ page, column, ecc_status_reg->err_bit);
15140+
15141+ if (column < mtd->writesize) {
15142+ buffer[column] ^= (1 << ecc_status_reg->err_bit);
15143+ ++mtd->ecc_stats.corrected;
15144+ } else {
15145+ printk(KERN_ERR
15146+ "Single ECC Error Not Corrected: "
15147+ "Column 0x%x not in "
15148+ "Page Size 0x%x\n",
15149+ column, mtd->writesize);
15150+ rc = -1;
15151+ }
15152+ } else if((ecc_status & 0x3000) == 2) {
15153+ printk(KERN_ERR
15154+ "Uncorrectable ECC Error: "
15155+ "Page=0x%x Column=0x%x\n",
15156+ page, column);
15157+ rc = -1;
15158+ }
15159+ }
15160+
15161+ return rc;
15162+}
15163+
15164+int i_to_a[8192] = {
15165+ -1, 0, 1, 7953, 2, 7715, 7954, 3551, 3, 3313, 7716, 5441,
15166+ 7955, 1529, 3552, 7477, 4, 7239, 3314, 1441, 7717, 7102, 5442,
15167+ 1291, 7956, 7545, 1530, 3075, 3553, 5203, 7478, 2784, 5, 2546,
15168+ 7240, 5080, 3315, 4596, 1442, 4965, 7718, 466, 7103, 7307,
15169+ 5443, 2837, 1292, 822, 7957, 801, 7546, 7001, 1531, 1203,
15170+ 3076, 4294, 3554, 1053, 5204, 3033, 7479, 6073, 2785, 6864, 6,
15171+ 6626, 2547, 7658, 7241, 2691, 5081, 5835, 3316, 2893, 4597,
15172+ 815, 1443, 2795, 4966, 2905, 7719, 3058, 467, 563, 7104, 6763,
15173+ 7308, 1956, 5444, 4056, 2838, 838, 1293, 6335, 823, 965, 7958,
15174+ 3626, 802, 2308, 7547, 4842, 7002, 7279, 1532, 4727, 1204,
15175+ 2462, 3077, 8003, 4295, 4358, 3555, 584, 1054, 7877, 5205,
15176+ 2629, 3034, 2599, 7480, 4992, 6074, 228, 2786, 7069, 6865,
15177+ 6970, 7, 6732, 6627, 4178, 2548, 7845, 7659, 6831, 7242, 5051,
15178+ 2692, 4754, 5082, 8181, 5836, 5864, 3317, 1826, 2894, 346,
15179+ 4598, 7639, 816, 4352, 1444, 2361, 2796, 4313, 4967, 5263,
15180+ 2906, 2391, 7720, 6584, 3059, 3388, 468, 2070, 564, 7693,
15181+ 7105, 7041, 6764, 1387, 7309, 6882, 1957, 4604, 5445, 4120,
15182+ 4057, 1433, 2839, 883, 839, 7765, 1294, 7442, 6336, 4489, 824,
15183+ 2224, 966, 260, 7959, 5281, 3627, 6388, 803, 7420, 2309, 2970,
15184+ 7548, 5597, 4843, 4681, 7003, 4373, 7280, 2453, 1533, 2667,
15185+ 4728, 213, 1205, 7320, 2463, 2557, 3078, 34, 8004, 2655, 4296,
15186+ 577, 4359, 4017, 3556, 727, 585, 4795, 1055, 3138, 7878, 6097,
15187+ 5206, 440, 2630, 3818, 3035, 600, 2600, 7645, 7481, 4303,
15188+ 4993, 2820, 6075, 325, 229, 7021, 2787, 1718, 7070, 8147,
15189+ 6866, 2746, 6971, 6525, 8, 6287, 6733, 3363, 6628, 2882, 4179,
15190+ 2508, 2549, 6263, 7846, 1480, 7660, 7909, 6832, 4562, 7243,
15191+ 6013, 5052, 4065, 2693, 2582, 4755, 2138, 5083, 6783, 8182,
15192+ 6197, 5837, 5184, 5865, 87, 3318, 7602, 1827, 489, 2895, 4557,
15193+ 347, 7177, 4599, 5859, 7640, 2448, 817, 7472, 4353, 2900,
15194+ 1445, 7407, 2362, 5907, 2797, 2639, 4314, 362, 4968, 3697,
15195+ 5264, 202, 2907, 3580, 2392, 1752, 7721, 6899, 6585, 5043,
15196+ 3060, 6150, 3389, 1846, 469, 2732, 2071, 6180, 565, 1726,
15197+ 7694, 7182, 7106, 2215, 7042, 5823, 6765, 5568, 1388, 4135,
15198+ 7310, 3237, 6883, 5359, 1958, 4443, 4605, 1761, 5446, 3779,
15199+ 4121, 136, 4058, 1688, 1434, 339, 2840, 3670, 884, 7987, 840,
15200+ 2417, 7766, 352, 1295, 4024, 7443, 2429, 6337, 8166, 4490,
15201+ 7494, 825, 2319, 2225, 2611, 967, 2330, 261, 7082, 7960, 4389,
15202+ 5282, 6494, 3628, 3940, 6389, 7145, 804, 6593, 7421, 1411,
15203+ 2310, 4211, 2971, 7607, 7549, 5626, 5598, 1695, 4844, 283,
15204+ 4682, 7943, 7004, 6125, 4374, 4813, 7281, 4516, 2454, 7979,
15205+ 1534, 2153, 2668, 3174, 4729, 5507, 214, 5025, 1206, 4956,
15206+ 7321, 2123, 2464, 4075, 2558, 3323, 3079, 1335, 35, 1588,
15207+ 8005, 108, 2656, 6609, 4297, 4114, 578, 795, 4360, 1329, 4018,
15208+ 7401, 3557, 22, 728, 6678, 586, 1995, 4796, 1986, 1056, 3018,
15209+ 3139, 7204, 7879, 4251, 6098, 494, 5207, 4225, 441, 3882,
15210+ 2631, 1195, 3819, 6271, 3036, 7527, 601, 6242, 2601, 5487,
15211+ 7646, 645, 7482, 1544, 4304, 6346, 4994, 3150, 2821, 1857,
15212+ 6076, 7455, 326, 2351, 230, 6456, 7022, 1832, 2788, 4366,
15213+ 1719, 4244, 7071, 550, 8148, 6644, 6867, 3187, 2747, 6803,
15214+ 6972, 1149, 6526, 6444, 9, 6206, 6288, 2811, 6734, 5427, 3364,
15215+ 911, 6629, 4158, 2883, 2949, 4180, 6565, 2509, 3585, 2550,
15216+ 1949, 6264, 4128, 7847, 4006, 1481, 989, 7661, 6406, 7910,
15217+ 5343, 6833, 7568, 4563, 312, 7244, 1160, 6014, 1306, 5053,
15218+ 6108, 4066, 1215, 2694, 1619, 2583, 2680, 4756, 1108, 2139,
15219+ 2912, 5084, 1594, 6784, 3402, 8183, 6279, 6198, 6218, 5838,
15220+ 3764, 5185, 7217, 5866, 2113, 88, 6037, 3319, 7397, 7603,
15221+ 7975, 1828, 6440, 490, 641, 2896, 1748, 4558, 83, 348, 7078,
15222+ 7178, 1757, 4600, 256, 5860, 2387, 7641, 6521, 2449, 4013,
15223+ 818, 6860, 7473, 2780, 4354, 6966, 2901, 961, 1446, 407, 7408,
15224+ 7924, 2363, 5326, 5908, 5249, 2798, 2340, 2640, 7289, 4315,
15225+ 6004, 363, 2397, 4969, 41, 3698, 3987, 5265, 3644, 203, 8057,
15226+ 2908, 6033, 3581, 308, 2393, 953, 1753, 957, 7722, 2263, 6900,
15227+ 4151, 6586, 6256, 5044, 3306, 3061, 6907, 6151, 666, 3390,
15228+ 3005, 1847, 3702, 470, 7369, 2733, 143, 2072, 1402, 6181,
15229+ 3973, 566, 1497, 1727, 6355, 7695, 1173, 7183, 3991, 7107,
15230+ 7741, 2216, 1321, 7043, 5295, 5824, 4278, 6766, 155, 5569,
15231+ 5887, 1389, 4575, 4136, 4973, 7311, 1341, 3238, 5388, 6884,
15232+ 1457, 5360, 5166, 1959, 7705, 4444, 6689, 4606, 7115, 1762,
15233+ 45, 5447, 7163, 3780, 617, 4122, 2381, 137, 1091, 4059, 5817,
15234+ 1689, 3876, 1435, 557, 340, 207, 2841, 538, 3671, 1097, 885,
15235+ 1350, 7988, 7854, 841, 6371, 2418, 2295, 7767, 4908, 353,
15236+ 8061, 1296, 3507, 4025, 1915, 7444, 2936, 2430, 8132, 6338,
15237+ 4787, 8167, 1907, 4491, 5155, 7495, 5269, 826, 3085, 2320,
15238+ 6297, 2226, 2922, 2612, 3837, 968, 6716, 2331, 4718, 262,
15239+ 1885, 7083, 3648, 7961, 6226, 4390, 6049, 5283, 3125, 6495,
15240+ 3250, 3629, 2270, 3941, 4434, 6390, 5127, 7146, 2644, 805,
15241+ 4324, 6594, 5453, 7422, 4400, 1412, 7671, 2311, 4984, 4212,
15242+ 6025, 2972, 1242, 7608, 7293, 7550, 8040, 5627, 7587, 5599,
15243+ 4422, 1696, 4946, 4845, 5735, 284, 6545, 4683, 5959, 7944,
15244+ 2802, 7005, 6615, 6126, 5775, 4375, 3827, 4814, 8070, 7282,
15245+ 1900, 4517, 2992, 2455, 3811, 7980, 2344, 1535, 1514, 2154,
15246+ 2242, 2669, 3606, 3175, 3342, 4730, 5994, 5508, 3459, 215,
15247+ 8155, 5026, 367, 1207, 4938, 4957, 7169, 7322, 5669, 2124,
15248+ 996, 2465, 124, 4076, 5897, 2559, 3950, 3324, 2401, 3080, 533,
15249+ 1336, 7364, 36, 251, 1589, 1944, 8006, 6939, 109, 4524, 2657,
15250+ 4933, 6610, 4319, 4298, 2662, 4115, 1821, 579, 3053, 796,
15251+ 7234, 4361, 4220, 1330, 5621, 4019, 2210, 7402, 6008, 3558,
15252+ 6844, 23, 7380, 729, 6506, 6679, 2092, 587, 7729, 1996, 2081,
15253+ 4797, 2373, 1987, 7412, 1057, 4529, 3019, 3786, 3140, 2191,
15254+ 7205, 7514, 7880, 7256, 4252, 3205, 6099, 4587, 495, 7928,
15255+ 5208, 5401, 4226, 3541, 442, 8089, 3883, 176, 2632, 101, 1196,
15256+ 876, 3820, 1224, 6272, 1450, 3037, 114, 7528, 3485, 602, 1231,
15257+ 6243, 2179, 2602, 5612, 5488, 3432, 7647, 7749, 646, 411,
15258+ 7483, 7864, 1545, 6661, 4305, 4805, 6347, 3197, 4995, 1608,
15259+ 3151, 1137, 2822, 6651, 1858, 5912, 6077, 6944, 7456, 623,
15260+ 327, 7810, 2352, 1488, 231, 4620, 6457, 2494, 7023, 5942,
15261+ 1833, 5253, 2789, 1523, 4367, 8175, 1720, 7903, 4245, 4205,
15262+ 7072, 6559, 551, 2999, 8149, 5121, 6645, 2367, 6868, 8011,
15263+ 3188, 1977, 2748, 5585, 6804, 5377, 6973, 3897, 1150, 64,
15264+ 6527, 4474, 6445, 5330, 10, 5092, 6207, 4692, 6289, 1969,
15265+ 2812, 4236, 6735, 3709, 5428, 3659, 3365, 8017, 912, 7914,
15266+ 6630, 1001, 4159, 7773, 2884, 1739, 2950, 4886, 4181, 5139,
15267+ 6566, 5718, 2510, 3570, 3586, 5347, 2551, 4346, 1950, 1285,
15268+ 6265, 7937, 4129, 2132, 7848, 3967, 4007, 983, 1482, 7508,
15269+ 990, 7665, 7662, 2129, 6407, 4880, 7911, 4233, 5344, 4883,
15270+ 6834, 5701, 7569, 6321, 4564, 2761, 313, 6410, 7245, 932,
15271+ 1161, 7626, 6015, 6423, 1307, 2764, 5054, 2959, 6109, 4334,
15272+ 4067, 6874, 1216, 4567, 2695, 5674, 1620, 4914, 2584, 1644,
15273+ 2681, 6413, 4757, 4667, 1109, 1370, 2140, 899, 2913, 316,
15274+ 5085, 5015, 1595, 5763, 6785, 712, 3403, 5704, 8184, 6725,
15275+ 6280, 4382, 6199, 2256, 6219, 6837, 5839, 7327, 3765, 6706,
15276+ 5186, 385, 7218, 6324, 5867, 1250, 2114, 867, 89, 1872, 6038,
15277+ 7572, 3320, 5022, 7398, 6606, 7604, 7142, 7976, 7940, 1829,
15278+ 1854, 6441, 6641, 491, 1983, 642, 6268, 2897, 7174, 1749, 359,
15279+ 4559, 2505, 84, 2135, 349, 336, 7079, 7491, 7179, 1843, 1758,
15280+ 4132, 4601, 7690, 257, 7762, 5861, 6828, 2388, 4349, 7642,
15281+ 6094, 6522, 7018, 2450, 2967, 4014, 2554, 819, 4962, 6861,
15282+ 4291, 7474, 3548, 2781, 1288, 4355, 7276, 6967, 2596, 2902,
15283+ 5832, 962, 1953, 1447, 173, 408, 2176, 7409, 2089, 7925, 7511,
15284+ 2364, 4202, 5327, 5374, 5909, 3194, 5250, 1485, 2799, 4943,
15285+ 2341, 8067, 2641, 3247, 7290, 7668, 4316, 1941, 6005, 7231,
15286+ 364, 3339, 2398, 993, 4970, 4275, 42, 5163, 3699, 3303, 3988,
15287+ 3970, 5266, 8129, 3645, 3834, 204, 1088, 8058, 7851, 2909,
15288+ 1212, 6034, 6215, 3582, 908, 309, 986, 2394, 5246, 954, 8054,
15289+ 1754, 638, 958, 4010, 7723, 1602, 2264, 5988, 6901, 5811,
15290+ 4152, 1742, 6587, 3012, 6257, 2726, 5045, 5591, 3307, 2887,
15291+ 3062, 2406, 6908, 847, 6152, 397, 667, 4889, 3391, 3098, 3006,
15292+ 2032, 1848, 4196, 3703, 2953, 471, 7055, 7370, 2015, 2734,
15293+ 1631, 144, 1004, 2073, 658, 1403, 4746, 6182, 5787, 3974,
15294+ 6633, 567, 3329, 1498, 4086, 1728, 5215, 6356, 7776, 7696,
15295+ 7433, 1174, 7267, 7184, 2520, 3992, 4162, 7108, 2106, 7742,
15296+ 3804, 2217, 6066, 1322, 3573, 7044, 2038, 5296, 1662, 5825,
15297+ 2754, 4279, 2513, 6767, 3955, 156, 6377, 5570, 5537, 5888,
15298+ 5350, 1390, 7832, 4576, 5546, 4137, 2279, 4974, 3589, 7312,
15299+ 1187, 1342, 7802, 3239, 7349, 5389, 5142, 6885, 4708, 1458,
15300+ 4821, 5361, 4045, 5167, 4184, 1960, 2564, 7706, 5418, 4445,
15301+ 1563, 6690, 5721, 4607, 2980, 7116, 5497, 1763, 6307, 46,
15302+ 6569, 5448, 5770, 7164, 1816, 3781, 3480, 618, 1972, 4123,
15303+ 3397, 2382, 3982, 138, 5383, 1092, 6292, 4060, 5902, 5818,
15304+ 2424, 1690, 1583, 3877, 4239, 1436, 6996, 558, 7872, 341,
15305+ 1428, 208, 2815, 2842, 187, 539, 295, 3672, 7126, 1098, 5095,
15306+ 886, 1706, 1351, 5876, 7989, 5062, 7855, 13, 842, 4081, 6372,
15307+ 5413, 2419, 5408, 2296, 4695, 7768, 4875, 4909, 6701, 354,
15308+ 4286, 8062, 6210, 1297, 5071, 3508, 1276, 4026, 2004, 1916,
15309+ 8020, 7445, 3104, 2937, 4101, 2431, 6810, 8133, 3368, 6339,
15310+ 129, 4788, 2301, 8168, 7357, 1908, 7917, 4492, 7795, 5156,
15311+ 5756, 7496, 3221, 5270, 915, 827, 2163, 3086, 4499, 2321,
15312+ 2201, 6298, 3712, 2227, 3114, 2923, 8077, 2613, 5659, 3838,
15313+ 6738, 969, 2470, 6717, 4700, 2332, 6931, 4719, 3662, 263, 758,
15314+ 1886, 4864, 7084, 1804, 3649, 5431, 7962, 6792, 6227, 5968,
15315+ 4391, 2573, 6050, 388, 5284, 673, 3126, 699, 6496, 3903, 3251,
15316+ 5189, 3630, 3347, 2271, 891, 3942, 6958, 4435, 6327, 6391,
15317+ 3855, 5128, 3920, 7147, 2711, 2645, 7221, 806, 74, 4325, 3517,
15318+ 6595, 504, 5454, 7330, 7423, 3687, 4401, 6168, 1413, 5105,
15319+ 7672, 5842, 2312, 3180, 4985, 1711, 4213, 3890, 6026, 6709,
15320+ 2973, 751, 1243, 5239, 7609, 2045, 7294, 3768, 7551, 5799,
15321+ 8041, 6752, 5628, 2854, 7588, 1875, 5600, 4895, 4423, 3526,
15322+ 1697, 6979, 4947, 92, 4846, 3611, 5736, 1356, 285, 3164, 6546,
15323+ 7575, 4684, 5980, 5960, 1023, 7945, 3355, 2803, 6041, 7006,
15324+ 6162, 6616, 922, 6127, 1068, 5776, 1253, 4376, 977, 3828,
15325+ 7012, 4815, 4740, 8071, 5870, 7283, 2674, 1901, 5881, 4518,
15326+ 6539, 2993, 870, 2456, 7301, 3812, 1381, 7981, 2442, 2345,
15327+ 2117, 1536, 719, 1515, 3499, 2155, 4267, 2243, 715, 2670,
15328+ 6158, 3607, 5795, 3176, 70, 3343, 6788, 4731, 2247, 5995,
15329+ 7994, 5509, 3749, 3460, 5707, 216, 7819, 8156, 1553, 5027,
15330+ 5312, 368, 3406, 1208, 4271, 4939, 169, 4958, 7686, 7170,
15331+ 5018, 7323, 5011, 5670, 928, 2125, 4342, 997, 5088, 2466,
15332+ 2159, 125, 5067, 4077, 183, 5898, 5766, 2560, 1183, 3951,
15333+ 2102, 3325, 7051, 2402, 1598, 3081, 3503, 534, 7159, 1337,
15334+ 7737, 7365, 2259, 37, 403, 252, 7393, 1590, 1156, 1945, 6202,
15335+ 8007, 1519, 6940, 7860, 110, 5397, 4525, 6840, 2658, 529,
15336+ 4934, 1510, 6611, 8036, 4320, 6222, 4299, 723, 2663, 5277,
15337+ 4116, 6580, 1822, 6728, 580, 3622, 3054, 6622, 797, 2542,
15338+ 7235, 8187, 4362, 1540, 4221, 18, 1331, 2149, 5622, 4385,
15339+ 4020, 3775, 2211, 6895, 7403, 7598, 6009, 6283, 3559, 3410,
15340+ 6845, 1031, 24, 1931, 7381, 1647, 730, 6914, 6507, 6478, 6680,
15341+ 4480, 2093, 2587, 588, 372, 7730, 2847, 1997, 6059, 2082,
15342+ 6416, 4798, 3599, 2374, 6433, 1988, 6143, 7413, 2684, 1058,
15343+ 5316, 4530, 3269, 3020, 1677, 3787, 5677, 3141, 7894, 2192,
15344+ 1074, 7206, 8113, 7515, 2698, 7881, 5031, 7257, 192, 4253,
15345+ 449, 3206, 4917, 6100, 4414, 4588, 4549, 496, 1669, 7929,
15346+ 1623, 5209, 1557, 5402, 6925, 4227, 379, 3542, 902, 443, 853,
15347+ 8090, 2531, 3884, 6533, 177, 2143, 2633, 8160, 102, 544, 1197,
15348+ 2623, 877, 319, 3821, 3047, 1225, 5579, 6273, 3638, 1451,
15349+ 2916, 3038, 7823, 115, 3228, 7529, 5689, 3486, 4670, 603,
15350+ 2478, 1232, 6133, 6244, 2057, 2180, 4760, 2603, 220, 5613,
15351+ 300, 5489, 859, 3433, 1373, 7648, 7616, 7750, 3441, 647, 3721,
15352+ 412, 1112, 7484, 5711, 7865, 2025, 1546, 3913, 6662, 6426,
15353+ 4306, 3068, 4806, 6190, 6348, 5336, 3198, 6018, 4996, 3464,
15354+ 1609, 3677, 3152, 780, 1138, 2767, 2823, 1267, 6652, 6669,
15355+ 1859, 428, 5913, 1310, 6078, 3753, 6945, 5475, 7457, 1127,
15356+ 624, 935, 328, 6988, 7811, 1259, 2353, 6117, 1489, 7248, 232,
15357+ 5513, 4621, 7131, 6458, 8096, 2495, 7629, 7024, 3735, 5943,
15358+ 1789, 1834, 5303, 5254, 1164, 2790, 7998, 1524, 2832, 4368,
15359+ 595, 8176, 6877, 1721, 2412, 7904, 7467, 4246, 6451, 4206,
15360+ 4070, 7073, 5999, 6560, 1103, 552, 5150, 3000, 4570, 8150,
15361+ 4928, 5122, 5954, 6646, 5116, 2368, 1219, 6869, 2251, 8012,
15362+ 7503, 3189, 1083, 1978, 2962, 2749, 4040, 5586, 5782, 6805,
15363+ 5654, 5378, 5057, 6974, 4735, 3898, 5100, 1151, 2537, 65,
15364+ 4337, 6528, 2052, 4475, 8108, 6446, 5649, 5331, 6112, 11,
15365+ 5874, 5093, 293, 6208, 6699, 4693, 5411, 6290, 3980, 1970,
15366+ 1814, 2813, 7870, 4237, 2422, 6736, 8075, 3710, 4497, 5429,
15367+ 4862, 3660, 4698, 3366, 4099, 8018, 1274, 913, 5754, 7915,
15368+ 2299, 6631, 4744, 1002, 2013, 4160, 7265, 7774, 4084, 2885,
15369+ 2724, 1740, 5986, 2951, 2030, 4887, 845, 4182, 4819, 5140,
15370+ 7800, 6567, 5495, 5719, 5416, 2511, 1660, 3571, 3802, 3587,
15371+ 5544, 5348, 6375, 2552, 7016, 4347, 7760, 1951, 2594, 1286,
15372+ 4289, 6266, 6639, 7938, 6604, 4130, 7489, 2133, 357, 7849,
15373+ 3832, 3968, 5161, 4008, 8052, 984, 6213, 1483, 5372, 7509,
15374+ 2174, 991, 7229, 7666, 8065, 7663, 981, 2130, 1283, 6408,
15375+ 6319, 4881, 4878, 7912, 3657, 4234, 4690, 5345, 5716, 4884,
15376+ 7771, 6835, 4380, 5702, 5761, 7570, 865, 6322, 6704, 4565,
15377+ 4332, 2762, 7624, 314, 1368, 6411, 4912, 7246, 1257, 933,
15378+ 5473, 1162, 1787, 7627, 7129, 6016, 6188, 6424, 2023, 1308,
15379+ 6667, 2765, 3675, 5055, 5780, 2960, 7501, 6110, 8106, 4335,
15380+ 5098, 4068, 7465, 6875, 2830, 1217, 5952, 4568, 1101, 2696,
15381+ 1072, 5675, 3267, 1621, 4547, 4915, 190, 2585, 6476, 1645,
15382+ 1029, 2682, 6431, 6414, 2845, 4758, 6131, 4668, 3226, 1110,
15383+ 3439, 1371, 298, 2141, 2529, 900, 6923, 2914, 5577, 317, 542,
15384+ 5086, 926, 5016, 167, 1596, 2100, 5764, 5065, 6786, 5793, 713,
15385+ 3497, 3404, 1551, 5705, 7992, 8185, 6620, 6726, 5275, 6281,
15386+ 6893, 4383, 16, 6200, 7391, 2257, 7157, 6220, 1508, 6838,
15387+ 7858, 5840, 6166, 7328, 3515, 3766, 5237, 6707, 1709, 5187,
15388+ 697, 386, 5966, 7219, 3918, 6325, 889, 5868, 7010, 1251, 920,
15389+ 2115, 1379, 868, 5879, 90, 3524, 1873, 6750, 6039, 1021, 7573,
15390+ 1354, 3321, 2121, 5023, 3172, 7399, 793, 6607, 1586, 7605,
15391+ 1409, 7143, 6492, 7977, 4811, 7941, 1693, 1830, 2349, 1855,
15392+ 6344, 6442, 6801, 6642, 4242, 492, 7202, 1984, 6676, 643,
15393+ 6240, 6269, 3880, 2898, 2446, 7175, 487, 1750, 200, 360, 5905,
15394+ 4560, 1478, 2506, 3361, 85, 6195, 2136, 4063, 350, 7985, 337,
15395+ 134, 7080, 2609, 7492, 2427, 7180, 6178, 1844, 5041, 1759,
15396+ 5357, 4133, 5821, 4602, 1385, 7691, 3386, 258, 4487, 7763,
15397+ 1431, 5862, 4752, 6829, 4176, 2389, 4311, 4350, 344, 7643,
15398+ 3816, 6095, 4793, 6523, 8145, 7019, 2818, 2451, 4679, 2968,
15399+ 6386, 4015, 2653, 2555, 211, 820, 7305, 4963, 5078, 6862,
15400+ 3031, 4292, 6999, 7475, 5439, 3549, 7951, 2782, 3073, 1289,
15401+ 1439, 4356, 2460, 7277, 2306, 6968, 226, 2597, 7875, 2903,
15402+ 813, 5833, 7656, 963, 836, 1954, 561, 1448, 874, 174, 3539,
15403+ 409, 3430, 2177, 3483, 7410, 2079, 2090, 7378, 7926, 3203,
15404+ 7512, 3784, 2365, 2997, 4203, 8173, 5328, 62, 5375, 1975,
15405+ 5910, 1135, 3195, 6659, 5251, 2492, 1486, 621, 2800, 6543,
15406+ 4944, 7585, 2342, 2990, 8068, 5773, 2642, 4432, 3248, 6047,
15407+ 7291, 6023, 7669, 5451, 4317, 4522, 1942, 7362, 6006, 5619,
15408+ 7232, 1819, 365, 3457, 3340, 2240, 2399, 5895, 994, 7167,
15409+ 4971, 5885, 4276, 1319, 43, 6687, 5164, 5386, 3700, 664, 3304,
15410+ 4149, 3989, 6353, 3971, 141, 5267, 1905, 8130, 1913, 3646,
15411+ 4716, 3835, 6295, 205, 3874, 1089, 615, 8059, 2293, 7852,
15412+ 1095, 2910, 2678, 1213, 1304, 6035, 7215, 6216, 3400, 3583,
15413+ 2947, 909, 2809, 310, 5341, 987, 4126, 2395, 7287, 5247, 7922,
15414+ 955, 306, 8055, 3985, 1755, 81, 639, 7973, 959, 2778, 4011,
15415+ 2385, 7724, 96, 1603, 6554, 2265, 5730, 5989, 6934, 6902, 150,
15416+ 5812, 4782, 4153, 1614, 1743, 2335, 6588, 4951, 3013, 7450,
15417+ 6258, 5854, 2727, 3665, 5046, 7036, 5592, 435, 3308, 461,
15418+ 2888, 4722, 3063, 6983, 2407, 4035, 6909, 7889, 848, 2473,
15419+ 6153, 5006, 398, 3617, 668, 3682, 4890, 972, 3392, 1701, 3099,
15420+ 3109, 3007, 653, 2033, 4703, 1849, 6089, 4197, 8124, 3704,
15421+ 3962, 2954, 6720, 472, 3530, 7056, 4775, 7371, 6485, 2016,
15422+ 1807, 2735, 1010, 1632, 513, 145, 5001, 1005, 7087, 2074,
15423+ 4427, 659, 2942, 1404, 1473, 4747, 5434, 6183, 6471, 5788,
15424+ 692, 3975, 2719, 6634, 3652, 568, 4899, 3330, 8027, 1499,
15425+ 3279, 4087, 761, 1729, 7092, 5216, 4852, 6357, 3469, 7777,
15426+ 266, 7697, 5604, 7434, 4106, 1175, 3727, 7268, 4867, 7185,
15427+ 5461, 2521, 3449, 3993, 5930, 4163, 1889, 7109, 1879, 2107,
15428+ 947, 7743, 4468, 3805, 2204, 2218, 2740, 6067, 7063, 1323,
15429+ 1143, 3574, 2324, 7045, 7592, 2039, 2436, 5297, 5643, 1663,
15430+ 3715, 5826, 632, 2755, 1866, 4280, 1798, 2514, 6301, 6768,
15431+ 2858, 3956, 5924, 157, 684, 6378, 2166, 5571, 1015, 5538,
15432+ 1362, 5889, 2772, 5351, 830, 1391, 5632, 7833, 6815, 4577,
15433+ 418, 5547, 4502, 4138, 7193, 2280, 739, 4975, 6774, 3590,
15434+ 3089, 7313, 6756, 1188, 5561, 1343, 6514, 7803, 5662, 3240,
15435+ 1637, 7350, 5530, 5390, 3157, 5143, 2616, 6886, 8045, 4709,
15436+ 8138, 1459, 1466, 4822, 6741, 5362, 4635, 4046, 4657, 5168,
15437+ 3288, 4185, 3841, 1961, 5803, 2565, 1923, 7707, 2874, 5419,
15438+ 3117, 4446, 518, 1564, 5742, 6691, 785, 5722, 2230, 4608,
15439+ 7555, 2981, 3373, 7117, 1118, 5498, 8080, 1764, 7337, 6308,
15440+ 4831, 47, 2864, 6570, 2926, 5449, 6045, 5771, 7583, 7165,
15441+ 2238, 1817, 7360, 3782, 7376, 3481, 3537, 619, 6657, 1973,
15442+ 8171, 4124, 2807, 3398, 1302, 2383, 7971, 3983, 7920, 139,
15443+ 4147, 5384, 1317, 1093, 613, 6293, 1911, 4061, 3359, 5903,
15444+ 485, 5819, 5039, 2425, 132, 1691, 6490, 1584, 3170, 3878,
15445+ 6674, 4240, 6342, 1437, 7949, 6997, 5076, 559, 7654, 7873,
15446+ 2304, 342, 4174, 1429, 3384, 209, 6384, 2816, 4791, 2843,
15447+ 1027, 188, 3265, 540, 6921, 296, 3224, 3673, 2021, 7127, 5471,
15448+ 1099, 2828, 5096, 7499, 887, 5964, 1707, 3513, 1352, 6748,
15449+ 5877, 918, 7990, 3495, 5063, 165, 7856, 7155, 14, 5273, 843,
15450+ 5984, 4082, 2011, 6373, 3800, 5414, 7798, 2420, 1812, 5409,
15451+ 291, 2297, 1272, 4696, 4495, 7769, 4688, 4876, 1281, 4910,
15452+ 7622, 6702, 5759, 355, 6602, 4287, 7758, 8063, 2172, 6211,
15453+ 5159, 1298, 7579, 5072, 481, 3509, 3261, 1277, 2007, 4027,
15454+ 477, 2005, 479, 1917, 5918, 8021, 4029, 7446, 6550, 3105,
15455+ 4031, 2938, 4771, 4102, 8023, 2432, 943, 6811, 5920, 8134,
15456+ 5557, 3369, 1919, 6340, 3168, 130, 483, 4789, 3382, 2302,
15457+ 5074, 8169, 3535, 7358, 7581, 1909, 1315, 7918, 1300, 4493,
15458+ 289, 7796, 2009, 5157, 7756, 5757, 1279, 7497, 5469, 3222,
15459+ 3263, 5271, 163, 916, 3511, 828, 1360, 2164, 5922, 3087, 737,
15460+ 4500, 6813, 2322, 7061, 2202, 945, 6299, 1864, 3713, 2434,
15461+ 2228, 5740, 3115, 1921, 2924, 4829, 8078, 3371, 2614, 5528,
15462+ 5660, 5559, 3839, 4655, 6739, 8136, 970, 3615, 2471, 4033,
15463+ 6718, 8122, 4701, 3107, 2333, 4780, 6932, 6552, 4720, 433,
15464+ 3663, 7448, 264, 4850, 759, 8025, 1887, 3447, 4865, 4104,
15465+ 7085, 511, 1805, 4773, 3650, 690, 5432, 2940, 7963, 5846,
15466+ 6793, 4854, 6228, 4454, 5969, 5218, 4392, 3998, 2574, 7094,
15467+ 6051, 6950, 389, 1731, 5285, 7676, 674, 268, 3127, 5226, 700,
15468+ 7779, 6497, 3931, 3904, 3471, 3252, 3421, 5190, 6359, 3631,
15469+ 5109, 3348, 8029, 2272, 3214, 892, 3332, 3943, 5935, 6959,
15470+ 4901, 4436, 5480, 6328, 570, 6392, 1417, 3856, 763, 5129,
15471+ 7535, 3921, 4089, 7148, 4648, 2712, 3281, 2646, 2286, 7222,
15472+ 1501, 807, 6172, 75, 3451, 4326, 1654, 3518, 2523, 6596, 4168,
15473+ 505, 5463, 5455, 6083, 7331, 7187, 7424, 4405, 3688, 1891,
15474+ 4402, 4642, 6169, 4165, 1414, 4645, 5106, 5932, 7673, 3928,
15475+ 5843, 3995, 2313, 3691, 3181, 4108, 4986, 1047, 1712, 7436,
15476+ 4214, 1894, 3891, 5606, 6027, 3758, 6710, 7699, 2974, 7427,
15477+ 752, 4869, 1244, 5695, 5240, 7270, 7610, 4408, 2046, 3729,
15478+ 7295, 745, 3769, 1177, 7552, 7334, 5800, 515, 8042, 4632,
15479+ 6753, 1634, 5629, 7190, 2855, 1012, 7589, 629, 1876, 2737,
15480+ 5601, 5458, 4896, 7089, 4424, 6468, 3527, 1007, 1698, 6086,
15481+ 6980, 5003, 4948, 7033, 93, 147, 4847, 508, 3612, 4777, 5737,
15482+ 5525, 1357, 7058, 286, 5466, 3165, 3532, 6547, 940, 7576, 474,
15483+ 4685, 6599, 5981, 1809, 5961, 3492, 1024, 2018, 7946, 4171,
15484+ 3356, 6487, 2804, 4144, 6042, 7373, 7007, 3521, 6163, 694,
15485+ 6617, 7388, 923, 5790, 6128, 2526, 1069, 6473, 5777, 7462,
15486+ 1254, 6185, 4377, 4329, 978, 3654, 3829, 5369, 7013, 6636,
15487+ 4816, 1657, 4741, 2721, 8072, 4096, 5871, 3977, 7284, 78,
15488+ 2675, 2944, 1902, 3871, 5882, 661, 4519, 3454, 6540, 4429,
15489+ 2994, 1132, 871, 2076, 2457, 810, 7302, 5436, 3813, 4676,
15490+ 1382, 4749, 7982, 6175, 2443, 1475, 2346, 7199, 2118, 1406,
15491+ 1537, 3772, 720, 3619, 1516, 526, 3500, 400, 2156, 1180, 4268,
15492+ 5008, 2244, 7816, 716, 6155, 2671, 7298, 6159, 974, 3608,
15493+ 5977, 5796, 4892, 3177, 748, 71, 3684, 3344, 3852, 6789, 670,
15494+ 4732, 2049, 2248, 4037, 5996, 4925, 7995, 2409, 5510, 3732,
15495+ 3750, 6985, 3461, 1264, 5708, 3065, 217, 7613, 7820, 2475,
15496+ 8157, 3044, 1554, 850, 5028, 4411, 5313, 7891, 369, 3596,
15497+ 3407, 6911, 1209, 5243, 4272, 8126, 4940, 1938, 170, 4199,
15498+ 4959, 7273, 7687, 6091, 7171, 333, 5019, 1851, 7324, 1247,
15499+ 5012, 6722, 5671, 4664, 929, 2956, 2126, 5698, 4343, 3964,
15500+ 998, 5136, 5089, 3706, 2467, 755, 2160, 3111, 126, 7792, 5068,
15501+ 3101, 4078, 4872, 184, 1703, 5899, 6993, 5767, 3394, 2561,
15502+ 2977, 1184, 4705, 3952, 7829, 2103, 2035, 3326, 7430, 7052,
15503+ 655, 2403, 3095, 1599, 3009, 3082, 6713, 3504, 4784, 535,
15504+ 6368, 7160, 5814, 1338, 7702, 7738, 152, 7366, 1494, 2260,
15505+ 6904, 38, 6030, 404, 2337, 253, 6857, 7394, 1745, 1591, 3761,
15506+ 1157, 1616, 1946, 6403, 6203, 4155, 8008, 3894, 1520, 6556,
15507+ 6941, 4617, 7861, 1605, 111, 5609, 5398, 98, 4526, 7253, 6841,
15508+ 7726, 2659, 4217, 530, 6936, 4935, 121, 1511, 5991, 6612,
15509+ 1897, 8037, 5732, 4321, 4981, 6223, 2267, 4300, 1715, 724,
15510+ 437, 2664, 31, 5278, 5594, 4117, 7439, 6581, 7038, 1823, 2358,
15511+ 6729, 5048, 581, 4989, 3623, 4724, 3055, 4053, 6623, 2890,
15512+ 798, 1050, 2543, 463, 7236, 7542, 8188, 3310, 4363, 3184,
15513+ 1541, 7452, 4222, 7524, 19, 3015, 1332, 4111, 2150, 4953,
15514+ 5623, 6122, 4386, 6590, 4021, 2316, 3776, 3667, 2212, 3234,
15515+ 6896, 2729, 7404, 3694, 7599, 5856, 6010, 6780, 6284, 6260,
15516+ 3560, 5193, 3411, 5744, 6846, 1572, 1032, 1566, 25, 6362,
15517+ 1932, 520, 7382, 4626, 1648, 4448, 731, 3255, 6915, 2232,
15518+ 6508, 4462, 6479, 5724, 6681, 3424, 4481, 787, 2094, 1781,
15519+ 2588, 6693, 589, 3907, 373, 1925, 7731, 4261, 2848, 2567,
15520+ 1998, 3474, 6060, 5805, 2083, 7136, 6417, 1963, 4799, 6500,
15521+ 3600, 3119, 2375, 6250, 6434, 5421, 1989, 3934, 6144, 2876,
15522+ 7414, 7839, 2685, 7709, 1059, 703, 5317, 4833, 4531, 1038,
15523+ 3270, 6310, 3021, 7782, 1678, 7339, 3788, 237, 5678, 1766,
15524+ 3142, 3130, 7895, 2928, 2193, 3295, 1075, 6572, 7207, 5229,
15525+ 8114, 2866, 7516, 3863, 2699, 49, 7882, 677, 5032, 3375, 7258,
15526+ 4540, 193, 2983, 4254, 271, 450, 7557, 3207, 5518, 4918, 4610,
15527+ 6101, 5288, 4415, 8082, 4589, 2063, 4550, 5500, 497, 7679,
15528+ 1670, 1120, 7930, 6821, 1624, 7119, 5210, 392, 1558, 5532,
15529+ 5403, 1578, 6926, 7352, 4228, 1734, 380, 1639, 3543, 2500,
15530+ 903, 3242, 444, 6054, 854, 2618, 8091, 775, 2532, 5145, 3885,
15531+ 6953, 6534, 3159, 178, 3744, 2144, 5392, 2634, 2577, 8161,
15532+ 5563, 103, 278, 545, 1190, 1198, 7097, 2624, 6758, 878, 7634,
15533+ 320, 7315, 3822, 4395, 3048, 5664, 1226, 2186, 5580, 7805,
15534+ 6274, 4001, 3639, 6516, 1452, 1397, 2917, 1345, 3039, 5972,
15535+ 7824, 4659, 116, 6852, 3229, 4048, 7530, 5221, 5690, 4637,
15536+ 3487, 6463, 4671, 5364, 604, 6231, 2479, 3843, 1233, 5175,
15537+ 6134, 4187, 6245, 4457, 2058, 3290, 2181, 770, 4761, 5170,
15538+ 2604, 6796, 221, 8140, 5614, 57, 301, 4711, 5490, 4857, 860,
15539+ 8047, 3434, 8101, 1374, 6888, 7649, 7966, 7617, 6743, 7751,
15540+ 4766, 3442, 4824, 648, 5849, 3722, 1468, 413, 5638, 1113,
15541+ 1461, 7485, 7225, 5712, 1364, 7866, 5750, 2026, 5540, 1547,
15542+ 1504, 3914, 1017, 6663, 5948, 6427, 5573, 4307, 2649, 3069,
15543+ 832, 4807, 6236, 6191, 5353, 6349, 2289, 5337, 2774, 3199,
15544+ 2488, 6019, 5891, 4997, 2715, 3465, 5926, 1610, 457, 3678,
15545+ 3958, 3153, 3284, 781, 2860, 1139, 1794, 2768, 6770, 2824,
15546+ 7151, 1268, 2168, 6653, 609, 6670, 6380, 1860, 4651, 429, 686,
15547+ 5914, 5553, 1311, 159, 6079, 3924, 3754, 741, 6946, 3417,
15548+ 5476, 2282, 7458, 4092, 1128, 7195, 625, 7029, 936, 4140, 329,
15549+ 5132, 6989, 3091, 7812, 3848, 1260, 3592, 2354, 7538, 6118,
15550+ 6776, 1490, 6399, 7249, 4977, 233, 3859, 5514, 6817, 4622,
15551+ 1777, 7132, 7835, 6459, 766, 8097, 5634, 2496, 3740, 7630,
15552+ 1393, 7025, 6395, 3736, 4504, 5944, 2484, 1790, 5549, 1835,
15553+ 1420, 5304, 420, 5255, 4508, 1165, 4579, 2791, 6331, 7999,
15554+ 7065, 1525, 5199, 2833, 6069, 4369, 573, 596, 2742, 8177,
15555+ 5259, 6878, 2220, 1722, 4439, 2413, 2326, 7905, 5180, 7468,
15556+ 3576, 4247, 5483, 6452, 1145, 4207, 4512, 4071, 1325, 7074,
15557+ 6962, 6000, 949, 6561, 7564, 1104, 2109, 553, 4904, 5151,
15558+ 1881, 3001, 1169, 4571, 7111, 8151, 3946, 4929, 2206, 5123,
15559+ 1238, 5955, 3807, 6647, 5938, 5117, 4470, 2369, 4583, 1220,
15560+ 7745, 6870, 895, 2252, 1868, 8013, 3566, 7504, 2757, 3190,
15561+ 3335, 1084, 634, 1979, 1839, 2963, 5828, 2750, 2275, 4041,
15562+ 6303, 5587, 4192, 5783, 2516, 6806, 3217, 5655, 1800, 5379,
15563+ 1424, 5058, 4282, 6975, 3351, 4736, 2438, 3899, 2707, 5101,
15564+ 2041, 1152, 8032, 2538, 7594, 66, 5308, 4338, 7047, 6529,
15565+ 3634, 2053, 3717, 4476, 6139, 8109, 1665, 6447, 5112, 5650,
15566+ 5645, 5332, 424, 6113, 5299, 12, 5061, 5875, 1705, 5094, 7125,
15567+ 294, 186, 6209, 4285, 6700, 4874, 4694, 5407, 5412, 4080,
15568+ 6291, 5382, 3981, 3396, 1971, 3479, 1815, 5769, 2814, 1427,
15569+ 7871, 6995, 4238, 1582, 2423, 5901, 6737, 5658, 8076, 3113,
15570+ 3711, 2200, 4498, 2162, 5430, 1803, 4863, 757, 3661, 6930,
15571+ 4699, 2469, 3367, 6809, 4100, 3103, 8019, 2003, 1275, 5070,
15572+ 914, 3220, 5755, 7794, 7916, 7356, 2300, 128, 6632, 5786,
15573+ 4745, 657, 1003, 1630, 2014, 7054, 4161, 2519, 7266, 7432,
15574+ 7775, 5214, 4085, 3328, 2886, 5590, 2725, 3011, 1741, 5810,
15575+ 5987, 1601, 2952, 4195, 2031, 3097, 4888, 396, 846, 2405,
15576+ 4183, 4044, 4820, 4707, 5141, 7348, 7801, 1186, 6568, 6306,
15577+ 5496, 2979, 5720, 1562, 5417, 2563, 2512, 2753, 1661, 2037,
15578+ 3572, 6065, 3803, 2105, 3588, 2278, 5545, 7831, 5349, 5536,
15579+ 6376, 3954, 2553, 2966, 7017, 6093, 4348, 6827, 7761, 7689,
15580+ 1952, 5831, 2595, 7275, 1287, 3547, 4290, 4961, 6267, 1982,
15581+ 6640, 1853, 7939, 7141, 6605, 5021, 4131, 1842, 7490, 335,
15582+ 2134, 2504, 358, 7173, 7850, 1087, 3833, 8128, 3969, 3302,
15583+ 5162, 4274, 4009, 637, 8053, 5245, 985, 907, 6214, 1211, 1484,
15584+ 3193, 5373, 4201, 7510, 2088, 2175, 172, 992, 3338, 7230,
15585+ 1940, 7667, 3246, 8066, 4942, 7664, 7507, 982, 3966, 2131,
15586+ 7936, 1284, 4345, 6409, 2760, 6320, 5700, 4882, 4232, 4879,
15587+ 2128, 7913, 8016, 3658, 3708, 4235, 1968, 4691, 5091, 5346,
15588+ 3569, 5717, 5138, 4885, 1738, 7772, 1000, 6836, 2255, 4381,
15589+ 6724, 5703, 711, 5762, 5014, 7571, 1871, 866, 1249, 6323, 384,
15590+ 6705, 7326, 4566, 6873, 4333, 2958, 2763, 6422, 7625, 931,
15591+ 315, 898, 1369, 4666, 6412, 1643, 4913, 5673, 7247, 6116,
15592+ 1258, 6987, 934, 1126, 5474, 3752, 1163, 5302, 1788, 3734,
15593+ 7628, 8095, 7130, 5512, 6017, 5335, 6189, 3067, 6425, 3912,
15594+ 2024, 5710, 1309, 427, 6668, 1266, 2766, 779, 3676, 3463,
15595+ 5056, 5653, 5781, 4039, 2961, 1082, 7502, 2250, 6111, 5648,
15596+ 8107, 2051, 4336, 2536, 5099, 4734, 4069, 6450, 7466, 2411,
15597+ 6876, 594, 2831, 7997, 1218, 5115, 5953, 4927, 4569, 5149,
15598+ 1102, 5998, 2697, 8112, 1073, 7893, 5676, 1676, 3268, 5315,
15599+ 1622, 1668, 4548, 4413, 4916, 448, 191, 5030, 2586, 4479,
15600+ 6477, 6913, 1646, 1930, 1030, 3409, 2683, 6142, 6432, 3598,
15601+ 6415, 6058, 2846, 371, 4759, 2056, 6132, 2477, 4669, 5688,
15602+ 3227, 7822, 1111, 3720, 3440, 7615, 1372, 858, 299, 219, 2142,
15603+ 6532, 2530, 852, 901, 378, 6924, 1556, 2915, 3637, 5578, 3046,
15604+ 318, 2622, 543, 8159, 5087, 4341, 927, 5010, 5017, 7685, 168,
15605+ 4270, 1597, 7050, 2101, 1182, 5765, 182, 5066, 2158, 6787, 69,
15606+ 5794, 6157, 714, 4266, 3498, 718, 3405, 5311, 1552, 7818,
15607+ 5706, 3748, 7993, 2246, 8186, 2541, 6621, 3621, 6727, 6579,
15608+ 5276, 722, 6282, 7597, 6894, 3774, 4384, 2148, 17, 1539, 6201,
15609+ 1155, 7392, 402, 2258, 7736, 7158, 3502, 6221, 8035, 1509,
15610+ 528, 6839, 5396, 7859, 1518, 5841, 5104, 6167, 3686, 7329,
15611+ 503, 3516, 73, 3767, 2044, 5238, 750, 6708, 3889, 1710, 3179,
15612+ 5188, 3902, 698, 672, 387, 2572, 5967, 6791, 7220, 2710, 3919,
15613+ 3854, 6326, 6957, 890, 3346, 5869, 4739, 7011, 976, 1252,
15614+ 1067, 921, 6161, 2116, 2441, 1380, 7300, 869, 6538, 5880,
15615+ 2673, 91, 6978, 3525, 4894, 1874, 2853, 6751, 5798, 6040,
15616+ 3354, 1022, 5979, 7574, 3163, 1355, 3610, 3322, 4074, 2122,
15617+ 4955, 5024, 5506, 3173, 2152, 7400, 1328, 794, 4113, 6608,
15618+ 107, 1587, 1334, 7606, 4210, 1410, 6592, 7144, 3939, 6493,
15619+ 4388, 7978, 4515, 4812, 6124, 7942, 282, 1694, 5625, 1831,
15620+ 6455, 2350, 7454, 1856, 3149, 6345, 1543, 6443, 1148, 6802,
15621+ 3186, 6643, 549, 4243, 4365, 493, 4250, 7203, 3017, 1985,
15622+ 1994, 6677, 21, 644, 5486, 6241, 7526, 6270, 1194, 3881, 4224,
15623+ 2899, 7471, 2447, 5858, 7176, 4556, 488, 7601, 1751, 3579,
15624+ 201, 3696, 361, 2638, 5906, 7406, 4561, 7908, 1479, 6262,
15625+ 2507, 2881, 3362, 6286, 86, 5183, 6196, 6782, 2137, 2581,
15626+ 4064, 6012, 351, 2416, 7986, 3669, 338, 1687, 135, 3778, 7081,
15627+ 2329, 2610, 2318, 7493, 8165, 2428, 4023, 7181, 1725, 6179,
15628+ 2731, 1845, 6149, 5042, 6898, 1760, 4442, 5358, 3236, 4134,
15629+ 5567, 5822, 2214, 4603, 6881, 1386, 7040, 7692, 2069, 3387,
15630+ 6583, 259, 2223, 4488, 7441, 7764, 882, 1432, 4119, 5863,
15631+ 8180, 4753, 5050, 6830, 7844, 4177, 6731, 2390, 5262, 4312,
15632+ 2360, 4351, 7638, 345, 1825, 7644, 599, 3817, 439, 6096, 3137,
15633+ 4794, 726, 6524, 2745, 8146, 1717, 7020, 324, 2819, 4302,
15634+ 2452, 4372, 4680, 5596, 2969, 7419, 6387, 5280, 4016, 576,
15635+ 2654, 33, 2556, 7319, 212, 2666, 821, 2836, 7306, 465, 4964,
15636+ 4595, 5079, 2545, 6863, 6072, 3032, 1052, 4293, 1202, 7000,
15637+ 800, 7476, 1528, 5440, 3312, 3550, 7714, 7952, 8190, 2783,
15638+ 5202, 3074, 7544, 1290, 7101, 1440, 7238, 4357, 8002, 2461,
15639+ 4726, 7278, 4841, 2307, 3625, 6969, 7068, 227, 4991, 2598,
15640+ 2628, 7876, 583, 2904, 2794, 814, 2892, 5834, 2690, 7657,
15641+ 6625, 964, 6334, 837, 4055, 1955, 6762, 562, 3057, 1449, 1223,
15642+ 875, 100, 175, 8088, 3540, 5400, 410, 7748, 3431, 5611, 2178,
15643+ 1230, 3484, 113, 7411, 2372, 2080, 7728, 2091, 6505, 7379,
15644+ 6843, 7927, 4586, 3204, 7255, 7513, 2190, 3785, 4528, 2366,
15645+ 5120, 2998, 6558, 4204, 7902, 8174, 1522, 5329, 4473, 63,
15646+ 3896, 5376, 5584, 1976, 8010, 5911, 6650, 1136, 1607, 3196,
15647+ 4804, 6660, 7863, 5252, 5941, 2493, 4619, 1487, 7809, 622,
15648+ 6943, 2801, 5958, 6544, 5734, 4945, 4421, 7586, 8039, 2343,
15649+ 3810, 2991, 1899, 8069, 3826, 5774, 6614, 2643, 5126, 4433,
15650+ 2269, 3249, 3124, 6048, 6225, 7292, 1241, 6024, 4983, 7670,
15651+ 4399, 5452, 4323, 4318, 4932, 4523, 6938, 1943, 250, 7363,
15652+ 532, 6007, 2209, 5620, 4219, 7233, 3052, 1820, 2661, 366,
15653+ 8154, 3458, 5993, 3341, 3605, 2241, 1513, 2400, 3949, 5896,
15654+ 123, 995, 5668, 7168, 4937, 4972, 4574, 5886, 154, 4277, 5294,
15655+ 1320, 7740, 44, 7114, 6688, 7704, 5165, 1456, 5387, 1340,
15656+ 3701, 3004, 665, 6906, 3305, 6255, 4150, 2262, 3990, 1172,
15657+ 6354, 1496, 3972, 1401, 142, 7368, 5268, 5154, 1906, 4786,
15658+ 8131, 2935, 1914, 3506, 3647, 1884, 4717, 6715, 3836, 2921,
15659+ 6296, 3084, 206, 556, 3875, 5816, 1090, 2380, 616, 7162, 8060,
15660+ 4907, 2294, 6370, 7853, 1349, 1096, 537, 2911, 1107, 2679,
15661+ 1618, 1214, 6107, 1305, 1159, 6036, 2112, 7216, 3763, 6217,
15662+ 6278, 3401, 1593, 3584, 6564, 2948, 4157, 910, 5426, 2810,
15663+ 6205, 311, 7567, 5342, 6405, 988, 4005, 4127, 1948, 2396,
15664+ 6003, 7288, 2339, 5248, 5325, 7923, 406, 956, 952, 307, 6032,
15665+ 8056, 3643, 3986, 40, 1756, 7077, 82, 1747, 640, 6439, 7974,
15666+ 7396, 960, 6965, 2779, 6859, 4012, 6520, 2386, 255, 7725,
15667+ 7252, 97, 5608, 1604, 4616, 6555, 3893, 2266, 4980, 5731,
15668+ 1896, 5990, 120, 6935, 4216, 6903, 1493, 151, 7701, 5813,
15669+ 6367, 4783, 6712, 4154, 6402, 1615, 3760, 1744, 6856, 2336,
15670+ 6029, 6589, 6121, 4952, 4110, 3014, 7523, 7451, 3183, 6259,
15671+ 6779, 5855, 3693, 2728, 3233, 3666, 2315, 5047, 2357, 7037,
15672+ 7438, 5593, 30, 436, 1714, 3309, 7541, 462, 1049, 2889, 4052,
15673+ 4723, 4988, 3064, 1263, 6984, 3731, 2408, 4924, 4036, 2048,
15674+ 6910, 3595, 7890, 4410, 849, 3043, 2474, 7612, 6154, 7815,
15675+ 5007, 1179, 399, 525, 3618, 3771, 669, 3851, 3683, 747, 4891,
15676+ 5976, 973, 7297, 3393, 6992, 1702, 4871, 3100, 7791, 3110,
15677+ 754, 3008, 3094, 654, 7429, 2034, 7828, 4704, 2976, 1850, 332,
15678+ 6090, 7272, 4198, 1937, 8125, 5242, 3705, 5135, 3963, 5697,
15679+ 2955, 4663, 6721, 1246, 473, 939, 3531, 5465, 7057, 5524,
15680+ 4776, 507, 7372, 4143, 6486, 4170, 2017, 3491, 1808, 6598,
15681+ 2736, 628, 1011, 7189, 1633, 4631, 514, 7333, 146, 7032, 5002,
15682+ 6085, 1006, 6467, 7088, 5457, 2075, 1131, 4428, 3453, 660,
15683+ 3870, 2943, 77, 1405, 7198, 1474, 6174, 4748, 4675, 5435, 809,
15684+ 6184, 7461, 6472, 2525, 5789, 7387, 693, 3520, 3976, 4095,
15685+ 2720, 1656, 6635, 5368, 3653, 4328, 569, 5479, 4900, 5934,
15686+ 3331, 3213, 8028, 5108, 1500, 2285, 3280, 4647, 4088, 7534,
15687+ 762, 1416, 1730, 6949, 7093, 3997, 5217, 4453, 4853, 5845,
15688+ 6358, 3420, 3470, 3930, 7778, 5225, 267, 7675, 7698, 3757,
15689+ 5605, 1893, 7435, 1046, 4107, 3690, 1176, 744, 3728, 4407,
15690+ 7269, 5694, 4868, 7426, 7186, 6082, 5462, 4167, 2522, 1653,
15691+ 3450, 6171, 3994, 3927, 5931, 4644, 4164, 4641, 1890, 4404,
15692+ 7110, 1168, 1880, 4903, 2108, 7563, 948, 6961, 7744, 4582,
15693+ 4469, 5937, 3806, 1237, 2205, 3945, 2219, 5258, 2741, 572,
15694+ 6068, 5198, 7064, 6330, 1324, 4511, 1144, 5482, 3575, 5179,
15695+ 2325, 4438, 7046, 5307, 7593, 8031, 2040, 2706, 2437, 3350,
15696+ 5298, 423, 5644, 5111, 1664, 6138, 3716, 3633, 5827, 1838,
15697+ 633, 3334, 2756, 3565, 1867, 894, 4281, 1423, 1799, 3216,
15698+ 2515, 4191, 6302, 2274, 6769, 1793, 2859, 3283, 3957, 456,
15699+ 5925, 2714, 158, 5552, 685, 4650, 6379, 608, 2167, 7150, 5572,
15700+ 5947, 1016, 1503, 5539, 5749, 1363, 7224, 5890, 2487, 2773,
15701+ 2288, 5352, 6235, 831, 2648, 1392, 3739, 5633, 765, 7834,
15702+ 1776, 6816, 3858, 4578, 4507, 419, 1419, 5548, 2483, 4503,
15703+ 6394, 4139, 7028, 7194, 4091, 2281, 3416, 740, 3923, 4976,
15704+ 6398, 6775, 7537, 3591, 3847, 3090, 5131, 7314, 7633, 6757,
15705+ 7096, 1189, 277, 5562, 2576, 1344, 1396, 6515, 4000, 7804,
15706+ 2185, 5663, 4394, 3241, 2499, 1638, 1733, 7351, 1577, 5531,
15707+ 391, 5391, 3743, 3158, 6952, 5144, 774, 2617, 6053, 6887,
15708+ 8100, 8046, 4856, 4710, 56, 8139, 6795, 1460, 5637, 1467,
15709+ 5848, 4823, 4765, 6742, 7965, 5363, 6462, 4636, 5220, 4047,
15710+ 6851, 4658, 5971, 5169, 769, 3289, 4456, 4186, 5174, 3842,
15711+ 6230, 1962, 7135, 5804, 3473, 2566, 4260, 1924, 3906, 7708,
15712+ 7838, 2875, 3933, 5420, 6249, 3118, 6499, 4447, 4625, 519,
15713+ 6361, 1565, 1571, 5743, 5192, 6692, 1780, 786, 3423, 5723,
15714+ 4461, 2231, 3254, 4609, 5517, 7556, 270, 2982, 4539, 3374,
15715+ 676, 7118, 6820, 1119, 7678, 5499, 2062, 8081, 5287, 1765,
15716+ 236, 7338, 7781, 6309, 1037, 4832, 702, 48, 3862, 2865, 5228,
15717+ 6571, 3294, 2927, 3129, 5450, 6022, 6046, 4431, 5772, 2989,
15718+ 7584, 6542, 7166, 5894, 2239, 3456, 1818, 5618, 7361, 4521,
15719+ 3783, 3202, 7377, 2078, 3482, 3429, 3538, 873, 620, 2491,
15720+ 6658, 1134, 1974, 61, 8172, 2996, 4125, 5340, 2808, 2946,
15721+ 3399, 7214, 1303, 2677, 2384, 2777, 7972, 80, 3984, 305, 7921,
15722+ 7286, 140, 6352, 4148, 663, 5385, 6686, 1318, 5884, 1094,
15723+ 2292, 614, 3873, 6294, 4715, 1912, 1904, 4062, 6194, 3360,
15724+ 1477, 5904, 199, 486, 2445, 5820, 5356, 5040, 6177, 2426,
15725+ 2608, 133, 7984, 1692, 4810, 6491, 1408, 1585, 792, 3171,
15726+ 2120, 3879, 6239, 6675, 7201, 4241, 6800, 6343, 2348, 1438,
15727+ 3072, 7950, 5438, 6998, 3030, 5077, 7304, 560, 835, 7655, 812,
15728+ 7874, 225, 2305, 2459, 343, 4310, 4175, 4751, 1430, 4486,
15729+ 3385, 1384, 210, 2652, 6385, 4678, 2817, 8144, 4792, 3815,
15730+ 2844, 6430, 1028, 6475, 189, 4546, 3266, 1071, 541, 5576,
15731+ 6922, 2528, 297, 3438, 3225, 6130, 3674, 6666, 2022, 6187,
15732+ 7128, 1786, 5472, 1256, 1100, 5951, 2829, 7464, 5097, 8105,
15733+ 7500, 5779, 888, 3917, 5965, 696, 1708, 5236, 3514, 6165,
15734+ 1353, 1020, 6749, 3523, 5878, 1378, 919, 7009, 7991, 1550,
15735+ 3496, 5792, 5064, 2099, 166, 925, 7857, 1507, 7156, 7390, 15,
15736+ 6892, 5274, 6619, 844, 2029, 5985, 2723, 4083, 7264, 2012,
15737+ 4743, 6374, 5543, 3801, 1659, 5415, 5494, 7799, 4818, 2421,
15738+ 7869, 1813, 3979, 5410, 6698, 292, 5873, 2298, 5753, 1273,
15739+ 4098, 4697, 4861, 4496, 8074, 7770, 5715, 4689, 3656, 4877,
15740+ 6318, 1282, 980, 4911, 1367, 7623, 4331, 6703, 864, 5760,
15741+ 4379, 356, 7488, 6603, 6638, 4288, 2593, 7759, 7015, 8064,
15742+ 7228, 2173, 5371, 6212, 8051, 5160, 3831, 1299, 1314, 7580,
15743+ 3534, 5073, 3381, 482, 3167, 3510, 162, 3262, 5468, 1278,
15744+ 7755, 2008, 288, 4028, 5917, 478, 476, 2006, 3260, 480, 7578,
15745+ 1918, 5556, 5919, 942, 8022, 4770, 4030, 6549, 7447, 432,
15746+ 6551, 4779, 3106, 8121, 4032, 3614, 2939, 689, 4772, 510,
15747+ 4103, 3446, 8024, 4849, 2433, 1863, 944, 7060, 6812, 736,
15748+ 5921, 1359, 8135, 4654, 5558, 5527, 3370, 4828, 1920, 5739,
15749+ 6341, 6673, 3169, 6489, 131, 5038, 484, 3358, 4790, 6383,
15750+ 3383, 4173, 2303, 7653, 5075, 7948, 8170, 6656, 3536, 7375,
15751+ 7359, 2237, 7582, 6044, 1910, 612, 1316, 4146, 7919, 7970,
15752+ 1301, 2806, 4494, 1271, 290, 1811, 7797, 3799, 2010, 5983,
15753+ 5158, 2171, 7757, 6601, 5758, 7621, 1280, 4687, 7498, 2827,
15754+ 5470, 2020, 3223, 6920, 3264, 1026, 5272, 7154, 164, 3494,
15755+ 917, 6747, 3512, 5963, 829, 2771, 1361, 1014, 2165, 683, 5923,
15756+ 2857, 3088, 6773, 738, 7192, 4501, 417, 6814, 5631, 2323,
15757+ 1142, 7062, 2739, 2203, 4467, 946, 1878, 6300, 1797, 1865,
15758+ 631, 3714, 5642, 2435, 7591, 2229, 784, 5741, 517, 3116, 2873,
15759+ 1922, 5802, 2925, 2863, 4830, 7336, 8079, 1117, 3372, 7554,
15760+ 2615, 3156, 5529, 1636, 5661, 6513, 5560, 6755, 3840, 3287,
15761+ 4656, 4634, 6740, 1465, 8137, 8044, 971, 3681, 3616, 5005,
15762+ 2472, 7888, 4034, 6982, 6719, 3961, 8123, 6088, 4702, 652,
15763+ 3108, 1700, 2334, 1613, 4781, 149, 6933, 5729, 6553, 95, 4721,
15764+ 460, 434, 7035, 3664, 5853, 7449, 4950, 265, 3468, 4851, 7091,
15765+ 760, 3278, 8026, 4898, 1888, 5929, 3448, 5460, 4866, 3726,
15766+ 4105, 5603, 7086, 5000, 512, 1009, 1806, 6484, 4774, 3529,
15767+ 3651, 2718, 691, 6470, 5433, 1472, 2941, 4426, 7964, 4764,
15768+ 5847, 5636, 6794, 55, 4855, 8099, 6229, 5173, 4455, 768, 5970,
15769+ 6850, 5219, 6461, 4393, 2184, 3999, 1395, 2575, 276, 7095,
15770+ 7632, 6052, 773, 6951, 3742, 390, 1576, 1732, 2498, 5286,
15771+ 2061, 7677, 6819, 675, 4538, 269, 5516, 3128, 3293, 5227,
15772+ 3861, 701, 1036, 7780, 235, 6498, 6248, 3932, 7837, 3905,
15773+ 4259, 3472, 7134, 3253, 4460, 3422, 1779, 5191, 1570, 6360,
15774+ 4624, 3632, 6137, 5110, 422, 3349, 2705, 8030, 5306, 2273,
15775+ 4190, 3215, 1422, 893, 3564, 3333, 1837, 3944, 1236, 5936,
15776+ 4581, 6960, 7562, 4902, 1167, 4437, 5178, 5481, 4510, 6329,
15777+ 5197, 571, 5257, 6393, 2482, 1418, 4506, 3857, 1775, 764,
15778+ 3738, 5130, 3846, 7536, 6397, 3922, 3415, 4090, 7027, 7149,
15779+ 607, 4649, 5551, 2713, 455, 3282, 1792, 2647, 6234, 2287,
15780+ 2486, 7223, 5748, 1502, 5946, 808, 4674, 6173, 7197, 76, 3869,
15781+ 3452, 1130, 4327, 5367, 1655, 4094, 3519, 7386, 2524, 7460,
15782+ 6597, 3490, 4169, 4142, 506, 5523, 5464, 938, 5456, 6466,
15783+ 6084, 7031, 7332, 4630, 7188, 627, 7425, 5693, 4406, 743,
15784+ 3689, 1045, 1892, 3756, 4403, 4640, 4643, 3926, 6170, 1652,
15785+ 4166, 6081, 1415, 7533, 4646, 2284, 5107, 3212, 5933, 5478,
15786+ 7674, 5224, 3929, 3419, 5844, 4452, 3996, 6948, 2314, 3232,
15787+ 3692, 6778, 3182, 7522, 4109, 6120, 4987, 4051, 1048, 7540,
15788+ 1713, 29, 7437, 2356, 4215, 119, 1895, 4979, 3892, 4615, 5607,
15789+ 7251, 6028, 6855, 3759, 6401, 6711, 6366, 7700, 1492, 2975,
15790+ 7827, 7428, 3093, 753, 7790, 4870, 6991, 1245, 4662, 5696,
15791+ 5134, 5241, 1936, 7271, 331, 7611, 3042, 4409, 3594, 2047,
15792+ 4923, 3730, 1262, 7296, 5975, 746, 3850, 3770, 524, 1178,
15793+ 7814, 7553, 1116, 7335, 2862, 5801, 2872, 516, 783, 8043,
15794+ 1464, 4633, 3286, 6754, 6512, 1635, 3155, 5630, 416, 7191,
15795+ 6772, 2856, 682, 1013, 2770, 7590, 5641, 630, 1796, 1877,
15796+ 4466, 2738, 1141, 5602, 3725, 5459, 5928, 4897, 3277, 7090,
15797+ 3467, 4425, 1471, 6469, 2717, 3528, 6483, 1008, 4999, 1699,
15798+ 651, 6087, 3960, 6981, 7887, 5004, 3680, 4949, 5852, 7034,
15799+ 459, 94, 5728, 148, 1612, 4848, 3445, 509, 688, 3613, 8120,
15800+ 4778, 431, 5738, 4827, 5526, 4653, 1358, 735, 7059, 1862, 287,
15801+ 7754, 5467, 161, 3166, 3380, 3533, 1313, 6548, 4769, 941,
15802+ 5555, 7577, 3259, 475, 5916, 4686, 7620, 6600, 2170, 5982,
15803+ 3798, 1810, 1270, 5962, 6746, 3493, 7153, 1025, 6919, 2019,
15804+ 2826, 7947, 7652, 4172, 6382, 3357, 5037, 6488, 6672, 2805,
15805+ 7969, 4145, 611, 6043, 2236, 7374, 6655, 7008, 1377, 3522,
15806+ 1019, 6164, 5235, 695, 3916, 6618, 6891, 7389, 1506, 924,
15807+ 2098, 5791, 1549, 6129, 3437, 2527, 5575, 1070, 4545, 6474,
15808+ 6429, 5778, 8104, 7463, 5950, 1255, 1785, 6186, 6665, 4378,
15809+ 863, 4330, 1366, 979, 6317, 3655, 5714, 3830, 8050, 5370,
15810+ 7227, 7014, 2592, 6637, 7487, 4817, 5493, 1658, 5542, 4742,
15811+ 7263, 2722, 2028, 8073, 4860, 4097, 5752, 5872, 6697, 3978,
15812+ 7868, 7285, 304, 79, 2776, 2676, 7213, 2945, 5339, 1903, 4714,
15813+ 3872, 2291, 5883, 6685, 662, 6351, 4520, 5617, 3455, 5893,
15814+ 6541, 2988, 4430, 6021, 2995, 60, 1133, 2490, 872, 3428, 2077,
15815+ 3201, 2458, 224, 811, 834, 7303, 3029, 5437, 3071, 3814, 8143,
15816+ 4677, 2651, 1383, 4485, 4750, 4309, 7983, 2607, 6176, 5355,
15817+ 2444, 198, 1476, 6193, 2347, 6799, 7200, 6238, 2119, 791,
15818+ 1407, 4809, 1538, 2147, 3773, 7596, 721, 6578, 3620, 2540,
15819+ 1517, 5395, 527, 8034, 3501, 7735, 401, 1154, 2157, 181, 1181,
15820+ 7049, 4269, 7684, 5009, 4340, 2245, 3747, 7817, 5310, 717,
15821+ 4265, 6156, 68, 2672, 6537, 7299, 2440, 6160, 1066, 975, 4738,
15822+ 3609, 3162, 5978, 3353, 5797, 2852, 4893, 6977, 3178, 3888,
15823+ 749, 2043, 72, 502, 3685, 5103, 3345, 6956, 3853, 2709, 6790,
15824+ 2571, 671, 3901, 4733, 2535, 2050, 5647, 2249, 1081, 4038,
15825+ 5652, 5997, 5148, 4926, 5114, 7996, 593, 2410, 6449, 5511,
15826+ 8094, 3733, 5301, 3751, 1125, 6986, 6115, 3462, 778, 1265,
15827+ 426, 5709, 3911, 3066, 5334, 218, 857, 7614, 3719, 7821, 5687,
15828+ 2476, 2055, 8158, 2621, 3045, 3636, 1555, 377, 851, 6531,
15829+ 5029, 447, 4412, 1667, 5314, 1675, 7892, 8111, 370, 6057,
15830+ 3597, 6141, 3408, 1929, 6912, 4478, 1210, 906, 5244, 636,
15831+ 4273, 3301, 8127, 1086, 4941, 3245, 1939, 3337, 171, 2087,
15832+ 4200, 3192, 4960, 3546, 7274, 5830, 7688, 6826, 6092, 2965,
15833+ 7172, 2503, 334, 1841, 5020, 7140, 1852, 1981, 7325, 383,
15834+ 1248, 1870, 5013, 710, 6723, 2254, 5672, 1642, 4665, 897, 930,
15835+ 6421, 2957, 6872, 2127, 4231, 5699, 2759, 4344, 7935, 3965,
15836+ 7506, 999, 1737, 5137, 3568, 5090, 1967, 3707, 8015, 2468,
15837+ 6929, 756, 1802, 2161, 2199, 3112, 5657, 127, 7355, 7793,
15838+ 3219, 5069, 2002, 3102, 6808, 4079, 5406, 4873, 4284, 185,
15839+ 7124, 1704, 5060, 5900, 1581, 6994, 1426, 5768, 3478, 3395,
15840+ 5381, 2562, 1561, 2978, 6305, 1185, 7347, 4706, 4043, 3953,
15841+ 5535, 7830, 2277, 2104, 6064, 2036, 2752, 3327, 5213, 7431,
15842+ 2518, 7053, 1629, 656, 5785, 2404, 395, 3096, 4194, 1600,
15843+ 5809, 3010, 5589, 3083, 2920, 6714, 1883, 3505, 2934, 4785,
15844+ 5153, 536, 1348, 6369, 4906, 7161, 2379, 5815, 555, 1339,
15845+ 1455, 7703, 7113, 7739, 5293, 153, 4573, 7367, 1400, 1495,
15846+ 1171, 2261, 6254, 6905, 3003, 39, 3642, 6031, 951, 405, 5324,
15847+ 2338, 6002, 254, 6519, 6858, 6964, 7395, 6438, 1746, 7076,
15848+ 1592, 6277, 3762, 2111, 1158, 6106, 1617, 1106, 1947, 4004,
15849+ 6404, 7566, 6204, 5425, 4156, 6563, 8009, 5583, 3895, 4472,
15850+ 1521, 7901, 6557, 5119, 6942, 7808, 4618, 5940, 7862, 4803,
15851+ 1606, 6649, 112, 1229, 5610, 7747, 5399, 8087, 99, 1222, 4527,
15852+ 2189, 7254, 4585, 6842, 6504, 7727, 2371, 2660, 3051, 4218,
15853+ 2208, 531, 249, 6937, 4931, 4936, 5667, 122, 3948, 1512, 3604,
15854+ 5992, 8153, 6613, 3825, 1898, 3809, 8038, 4420, 5733, 5957,
15855+ 4322, 4398, 4982, 1240, 6224, 3123, 2268, 5125, 4301, 323,
15856+ 1716, 2744, 725, 3136, 438, 598, 2665, 7318, 32, 575, 5279,
15857+ 7418, 5595, 4371, 4118, 881, 7440, 2222, 6582, 2068, 7039,
15858+ 6880, 1824, 7637, 2359, 5261, 6730, 7843, 5049, 8179, 582,
15859+ 2627, 4990, 7067, 3624, 4840, 4725, 8001, 3056, 6761, 4054,
15860+ 6333, 6624, 2689, 2891, 2793, 799, 1201, 1051, 6071, 2544,
15861+ 4594, 464, 2835, 7237, 7100, 7543, 5201, 8189, 7713, 3311,
15862+ 1527, 4364, 548, 3185, 1147, 1542, 3148, 7453, 6454, 4223,
15863+ 1193, 7525, 5485, 20, 1993, 3016, 4249, 1333, 106, 4112, 1327,
15864+ 2151, 5505, 4954, 4073, 5624, 281, 6123, 4514, 4387, 3938,
15865+ 6591, 4209, 4022, 8164, 2317, 2328, 3777, 1686, 3668, 2415,
15866+ 2213, 5566, 3235, 4441, 6897, 6148, 2730, 1724, 7405, 2637,
15867+ 3695, 3578, 7600, 4555, 5857, 7470, 6011, 2580, 6781, 5182,
15868+ 6285, 2880, 6261, 7907, 3561, 2702, 5194, 7559, 3412, 1772,
15869+ 5745, 452, 6847, 52, 1573, 273, 1033, 4535, 1567, 4256, 26,
15870+ 7519, 6363, 4612, 1933, 7787, 521, 4920, 7383, 3866, 4627,
15871+ 5520, 1649, 1042, 4449, 3209, 732, 8117, 3256, 3377, 6916,
15872+ 3795, 2233, 5034, 6509, 2869, 4463, 679, 6480, 3274, 5725,
15873+ 7884, 6682, 7210, 3425, 2985, 4482, 3026, 788, 195, 2095,
15874+ 5232, 1782, 4542, 2589, 6314, 6694, 7260, 590, 1078, 3908,
15875+ 1122, 374, 5684, 1926, 1672, 7732, 6575, 4262, 7681, 2849,
15876+ 1063, 2568, 499, 1999, 2196, 3475, 7121, 6061, 7344, 5806,
15877+ 1626, 2084, 3298, 7137, 6823, 6418, 707, 1964, 7932, 4800,
15878+ 7898, 6501, 8084, 3601, 246, 3120, 4417, 2376, 2931, 6251,
15879+ 5290, 6435, 5321, 5422, 6103, 1990, 3145, 3935, 5502, 6145,
15880+ 1683, 2877, 4552, 7415, 3133, 7840, 2065, 2686, 4837, 7710,
15881+ 4591, 1060, 5681, 704, 7341, 5318, 243, 4834, 1680, 4532,
15882+ 1769, 1039, 7784, 3271, 3792, 6311, 3023, 3022, 3791, 7783,
15883+ 1768, 1679, 242, 7340, 5680, 3789, 240, 238, 239, 5679, 241,
15884+ 1767, 3790, 3143, 1681, 3131, 4835, 7896, 244, 2929, 5319,
15885+ 2194, 7342, 3296, 705, 1076, 5682, 6573, 1061, 7208, 3024,
15886+ 5230, 6312, 8115, 3793, 2867, 3272, 7517, 7785, 3864, 1040,
15887+ 2700, 1770, 50, 4533, 7883, 3273, 678, 2868, 5033, 3794, 3376,
15888+ 8116, 7259, 6313, 4541, 5231, 194, 3025, 2984, 7209, 4255,
15889+ 4534, 272, 51, 451, 1771, 7558, 2701, 3208, 1041, 5519, 3865,
15890+ 4919, 7786, 4611, 7518, 6102, 5320, 5289, 2930, 4416, 245,
15891+ 8083, 7897, 4590, 4836, 2064, 3132, 4551, 1682, 5501, 3144,
15892+ 498, 1062, 7680, 6574, 1671, 5683, 1121, 1077, 7931, 706,
15893+ 6822, 3297, 1625, 7343, 7120, 2195, 5211, 1627, 393, 5807,
15894+ 1559, 7345, 5533, 6062, 5404, 7122, 1579, 3476, 6927, 2197,
15895+ 7353, 2000, 4229, 7933, 1735, 1965, 381, 708, 1640, 6419,
15896+ 3544, 6824, 2501, 7138, 904, 3299, 3243, 2085, 445, 1673,
15897+ 6055, 1927, 855, 5685, 2619, 375, 8092, 1123, 776, 3909, 2533,
15898+ 1079, 5146, 591, 3886, 500, 6954, 2569, 6535, 1064, 3160,
15899+ 2850, 179, 7682, 3745, 4263, 2145, 6576, 5393, 7733, 2635,
15900+ 4553, 2578, 2878, 8162, 1684, 5564, 6146, 104, 5503, 279,
15901+ 3936, 546, 3146, 1191, 1991, 1199, 4592, 7098, 7711, 2625,
15902+ 4838, 6759, 2687, 879, 2066, 7635, 7841, 321, 3134, 7316,
15903+ 7416, 3823, 4418, 4396, 3121, 3049, 247, 5665, 3602, 1227,
15904+ 8085, 2187, 6502, 5581, 7899, 7806, 4801, 6275, 6104, 4002,
15905+ 5423, 3640, 5322, 6517, 6436, 1453, 5291, 1398, 6252, 2918,
15906+ 2932, 1346, 2377, 3040, 4921, 5973, 522, 7825, 7788, 4660,
15907+ 1934, 117, 4613, 6853, 6364, 3230, 7520, 4049, 27, 7531, 3210,
15908+ 5222, 4450, 5691, 1043, 4638, 1650, 3488, 5521, 6464, 4628,
15909+ 4672, 3867, 5365, 7384, 605, 453, 6232, 5746, 2480, 1773,
15910+ 3844, 3413, 1234, 7560, 5176, 5195, 6135, 2703, 4188, 3562,
15911+ 6246, 4257, 4458, 1568, 2059, 4536, 3291, 1034, 2182, 274,
15912+ 771, 1574, 4762, 53, 5171, 6848, 2605, 196, 6797, 789, 222,
15913+ 3027, 8141, 4483, 5615, 2986, 58, 3426, 302, 7211, 4712, 6683,
15914+ 5491, 7261, 4858, 6695, 861, 6315, 8048, 2590, 3435, 4543,
15915+ 8102, 1783, 1375, 5233, 6889, 2096, 7650, 5035, 7967, 2234,
15916+ 7618, 3796, 6744, 6917, 7752, 3378, 4767, 3257, 3443, 8118,
15917+ 4825, 733, 649, 7885, 5850, 5726, 3723, 3275, 1469, 6481, 414,
15918+ 680, 5639, 4464, 1114, 2870, 1462, 6510, 7486, 2591, 7226,
15919+ 8049, 5713, 6316, 1365, 862, 7867, 6696, 5751, 4859, 2027,
15920+ 7262, 5541, 5492, 1548, 2097, 1505, 6890, 3915, 5234, 1018,
15921+ 1376, 6664, 1784, 5949, 8103, 6428, 4544, 5574, 3436, 4308,
15922+ 4484, 2650, 8142, 3070, 3028, 833, 223, 4808, 790, 6237, 6798,
15923+ 6192, 197, 5354, 2606, 6350, 6684, 2290, 4713, 5338, 7212,
15924+ 2775, 303, 3200, 3427, 2489, 59, 6020, 2987, 5892, 5616, 4998,
15925+ 6482, 2716, 1470, 3466, 3276, 5927, 3724, 1611, 5727, 458,
15926+ 5851, 3679, 7886, 3959, 650, 3154, 6511, 3285, 1463, 782,
15927+ 2871, 2861, 1115, 1140, 4465, 1795, 5640, 2769, 681, 6771,
15928+ 415, 2825, 6918, 7152, 6745, 1269, 3797, 2169, 7619, 6654,
15929+ 2235, 610, 7968, 6671, 5036, 6381, 7651, 1861, 734, 4652,
15930+ 4826, 430, 8119, 687, 3444, 5915, 3258, 5554, 4768, 1312,
15931+ 3379, 160, 7753, 6080, 1651, 3925, 4639, 3755, 1044, 742,
15932+ 5692, 6947, 4451, 3418, 5223, 5477, 3211, 2283, 7532, 7459,
15933+ 7385, 4093, 5366, 1129, 3868, 7196, 4673, 626, 4629, 7030,
15934+ 6465, 937, 5522, 4141, 3489, 330, 1935, 5133, 4661, 6990,
15935+ 7789, 3092, 7826, 7813, 523, 3849, 5974, 1261, 4922, 3593,
15936+ 3041, 2355, 28, 7539, 4050, 6119, 7521, 6777, 3231, 1491,
15937+ 6365, 6400, 6854, 7250, 4614, 4978, 118, 234, 1035, 3860,
15938+ 3292, 5515, 4537, 6818, 2060, 4623, 1569, 1778, 4459, 7133,
15939+ 4258, 7836, 6247, 6460, 6849, 767, 5172, 8098, 54, 5635, 4763,
15940+ 2497, 1575, 3741, 772, 7631, 275, 1394, 2183, 7026, 3414,
15941+ 6396, 3845, 3737, 1774, 4505, 2481, 5945, 5747, 2485, 6233,
15942+ 1791, 454, 5550, 606, 1836, 3563, 1421, 4189, 5305, 2704, 421,
15943+ 6136, 5256, 5196, 4509, 5177, 1166, 7561, 4580, 1235, 2792,
15944+ 2688, 6332, 6760, 8000, 4839, 7066, 2626, 1526, 7712, 5200,
15945+ 7099, 2834, 4593, 6070, 1200, 4370, 7417, 574, 7317, 597,
15946+ 3135, 2743, 322, 8178, 7842, 5260, 7636, 6879, 2067, 2221,
15947+ 880, 1723, 6147, 4440, 5565, 2414, 1685, 2327, 8163, 7906,
15948+ 2879, 5181, 2579, 7469, 4554, 3577, 2636, 4248, 1992, 5484,
15949+ 1192, 6453, 3147, 1146, 547, 4208, 3937, 4513, 280, 4072,
15950+ 5504, 1326, 105, 7075, 6437, 6963, 6518, 6001, 5323, 950,
15951+ 3641, 6562, 5424, 7565, 4003, 1105, 6105, 2110, 6276, 554,
15952+ 2378, 4905, 1347, 5152, 2933, 1882, 2919, 3002, 6253, 1170,
15953+ 1399, 4572, 5292, 7112, 1454, 8152, 3603, 3947, 5666, 4930,
15954+ 248, 2207, 3050, 5124, 3122, 1239, 4397, 5956, 4419, 3808,
15955+ 3824, 6648, 4802, 5939, 7807, 5118, 7900, 4471, 5582, 2370,
15956+ 6503, 4584, 2188, 1221, 8086, 7746, 1228, 6871, 6420, 896,
15957+ 1641, 2253, 709, 1869, 382, 8014, 1966, 3567, 1736, 7505,
15958+ 7934, 2758, 4230, 3191, 2086, 3336, 3244, 1085, 3300, 635,
15959+ 905, 1980, 7139, 1840, 2502, 2964, 6825, 5829, 3545, 2751,
15960+ 6063, 2276, 5534, 4042, 7346, 6304, 1560, 5588, 5808, 4193,
15961+ 394, 5784, 1628, 2517, 5212, 6807, 2001, 3218, 7354, 5656,
15962+ 2198, 1801, 6928, 5380, 3477, 1425, 1580, 5059, 7123, 4283,
15963+ 5405, 6976, 2851, 3352, 3161, 4737, 1065, 2439, 6536, 3900,
15964+ 2570, 2708, 6955, 5102, 501, 2042, 3887, 1153, 7734, 8033,
15965+ 5394, 2539, 6577, 7595, 2146, 67, 4264, 5309, 3746, 4339,
15966+ 7683, 7048, 180, 6530, 376, 3635, 2620, 2054, 5686, 3718, 856,
15967+ 4477, 1928, 6140, 6056, 8110, 1674, 1666, 446, 6448, 592,
15968+ 5113, 5147, 5651, 1080, 5646, 2534, 5333, 3910, 425, 777,
15969+ 6114, 1124, 5300, 8093
15970+};
15971+
15972+int a_to_i[8192] = {
15973+ 1, 2, 4, 8, 16, 32, 64, 128, 256, 512, 1024, 2048, 4096, 1455,
15974+ 2910, 5820, 2263, 4526, 1779, 3558, 7116, 4663, 449, 898,
15975+ 1796, 3592, 7184, 7567, 7857, 6349, 5173, 3525, 7050, 4795,
15976+ 217, 434, 868, 1736, 3472, 6944, 5103, 625, 1250, 2500, 5000,
15977+ 703, 1406, 2812, 5624, 3679, 7358, 7379, 7177, 7613, 7893,
15978+ 6149, 5541, 3813, 7626, 7739, 6617, 5661, 2453, 4906, 1019,
15979+ 2038, 4076, 8152, 6687, 4497, 1677, 3354, 6708, 4551, 1569,
15980+ 3138, 6276, 5287, 3297, 6594, 5675, 2553, 5106, 587, 1174,
15981+ 2348, 4696, 287, 574, 1148, 2296, 4592, 1615, 3230, 6460,
15982+ 6103, 2561, 5122, 3499, 6998, 4867, 937, 1874, 3748, 7496,
15983+ 7999, 7121, 4621, 437, 874, 1748, 3496, 6992, 4879, 945, 1890,
15984+ 3780, 7560, 7871, 6353, 5133, 3509, 7018, 4987, 857, 1714,
15985+ 3428, 6856, 4159, 1489, 2978, 5956, 2855, 5710, 2355, 4710,
15986+ 355, 710, 1420, 2840, 5680, 2511, 5022, 659, 1318, 2636, 5272,
15987+ 3231, 6462, 6099, 2569, 5138, 3467, 6934, 4995, 681, 1362,
15988+ 2724, 5448, 3903, 7806, 6483, 5897, 3005, 6010, 2907, 5814,
15989+ 2243, 4486, 1699, 3398, 6796, 4279, 1217, 2434, 4868, 935,
15990+ 1870, 3740, 7480, 8159, 6673, 4493, 1717, 3434, 6868, 4103,
15991+ 1441, 2882, 5764, 2215, 4430, 1843, 3686, 7372, 7223, 7617,
15992+ 7725, 6645, 5701, 2341, 4682, 315, 630, 1260, 2520, 5040, 719,
15993+ 1438, 2876, 5752, 2399, 4798, 211, 422, 844, 1688, 3376, 6752,
15994+ 4463, 1905, 3810, 7620, 7719, 6625, 5741, 2421, 4842, 123,
15995+ 246, 492, 984, 1968, 3936, 7872, 6191, 5617, 3661, 7322, 7323,
15996+ 7321, 7325, 7317, 7301, 7333, 7397, 7269, 7525, 8037, 7013,
15997+ 4965, 869, 1738, 3476, 6952, 5119, 593, 1186, 2372, 4744, 191,
15998+ 382, 764, 1528, 3056, 6112, 2671, 5342, 3091, 6182, 5603,
15999+ 3689, 7378, 7179, 7609, 7901, 6165, 5509, 3749, 7498, 7995,
16000+ 7129, 4637, 405, 810, 1620, 3240, 6480, 5903, 2993, 5986,
16001+ 2923, 5846, 2051, 4102, 1443, 2886, 5772, 2231, 4462, 1907,
16002+ 3814, 7628, 7735, 6593, 5677, 2549, 5098, 635, 1270, 2540,
16003+ 5080, 543, 1086, 2172, 4344, 1119, 2238, 4476, 1879, 3758,
16004+ 7516, 7959, 7041, 4781, 245, 490, 980, 1960, 3920, 7840, 6383,
16005+ 5233, 3405, 6810, 4251, 1177, 2354, 4708, 359, 718, 1436,
16006+ 2872, 5744, 2383, 4766, 147, 294, 588, 1176, 2352, 4704, 367,
16007+ 734, 1468, 2936, 5872, 2127, 4254, 1171, 2342, 4684, 311, 622,
16008+ 1244, 2488, 4976, 847, 1694, 3388, 6776, 4447, 1809, 3618,
16009+ 7236, 7463, 8161, 6765, 4469, 1861, 3722, 7444, 8071, 6817,
16010+ 4333, 1141, 2282, 4564, 1543, 3086, 6172, 5527, 3713, 7426,
16011+ 8107, 6905, 4189, 1301, 2602, 5204, 3335, 6670, 4531, 1737,
16012+ 3474, 6948, 5095, 609, 1218, 2436, 4872, 959, 1918, 3836,
16013+ 7672, 7775, 6417, 6029, 2741, 5482, 3963, 7926, 6211, 5417,
16014+ 4093, 8186, 6747, 4377, 1949, 3898, 7796, 6471, 5921, 3053,
16015+ 6106, 2587, 5174, 3523, 7046, 4771, 233, 466, 932, 1864, 3728,
16016+ 7456, 8175, 6769, 4429, 1845, 3690, 7380, 7175, 7585, 7917,
16017+ 6261, 5445, 3877, 7754, 6459, 6105, 2589, 5178, 3547, 7094,
16018+ 4803, 41, 82, 164, 328, 656, 1312, 2624, 5248, 3247, 6494,
16019+ 5907, 2953, 5906, 2955, 5910, 2947, 5894, 2979, 5958, 2851,
16020+ 5702, 2339, 4678, 291, 582, 1164, 2328, 4656, 463, 926, 1852,
16021+ 3704, 7408, 7247, 7473, 8141, 6709, 4549, 1573, 3146, 6292,
16022+ 5255, 3233, 6466, 5931, 3065, 6130, 2635, 5270, 3203, 6406,
16023+ 6051, 2793, 5586, 3595, 7190, 7555, 7849, 6397, 5205, 3333,
16024+ 6666, 4539, 1753, 3506, 7012, 4967, 865, 1730, 3460, 6920,
16025+ 5055, 721, 1442, 2884, 5768, 2239, 4478, 1875, 3750, 7500,
16026+ 7991, 7105, 4653, 501, 1002, 2004, 4008, 8016, 6927, 5041,
16027+ 717, 1434, 2868, 5736, 2431, 4862, 83, 166, 332, 664, 1328,
16028+ 2656, 5312, 3119, 6238, 5395, 3977, 7954, 7051, 4793, 221,
16029+ 442, 884, 1768, 3536, 7072, 4847, 113, 226, 452, 904, 1808,
16030+ 3616, 7232, 7471, 8177, 6733, 4405, 1989, 3978, 7956, 7047,
16031+ 4769, 237, 474, 948, 1896, 3792, 7584, 7919, 6257, 5453, 3893,
16032+ 7786, 6523, 5977, 2845, 5690, 2523, 5046, 707, 1414, 2828,
16033+ 5656, 2463, 4926, 979, 1958, 3916, 7832, 6303, 5265, 3213,
16034+ 6426, 6043, 2713, 5426, 4043, 8086, 6787, 4265, 1277, 2554,
16035+ 5108, 583, 1166, 2332, 4664, 479, 958, 1916, 3832, 7664, 7759,
16036+ 6449, 6093, 2613, 5226, 3451, 6902, 4163, 1321, 2642, 5284,
16037+ 3303, 6606, 5683, 2505, 5010, 651, 1302, 2604, 5208, 3359,
16038+ 6718, 4563, 1545, 3090, 6180, 5607, 3681, 7362, 7211, 7673,
16039+ 7773, 6421, 6021, 2725, 5450, 3899, 7798, 6467, 5929, 3069,
16040+ 6138, 2651, 5302, 3267, 6534, 5795, 2281, 4562, 1547, 3094,
16041+ 6188, 5623, 3649, 7298, 7339, 7417, 7261, 7445, 8069, 6821,
16042+ 4325, 1125, 2250, 4500, 1671, 3342, 6684, 4503, 1665, 3330,
16043+ 6660, 4519, 1761, 3522, 7044, 4775, 225, 450, 900, 1800, 3600,
16044+ 7200, 7663, 7793, 6477, 5941, 3013, 6026, 2747, 5494, 3907,
16045+ 7814, 6307, 5353, 3197, 6394, 5211, 3353, 6706, 4555, 1593,
16046+ 3186, 6372, 5223, 3425, 6850, 4139, 1529, 3058, 6116, 2663,
16047+ 5326, 3123, 6246, 5475, 3945, 7890, 6155, 5561, 3805, 7610,
16048+ 7899, 6169, 5533, 3733, 7466, 8187, 6745, 4381, 1941, 3882,
16049+ 7764, 6407, 6049, 2797, 5594, 3611, 7222, 7619, 7721, 6653,
16050+ 5717, 2309, 4618, 443, 886, 1772, 3544, 7088, 4815, 49, 98,
16051+ 196, 392, 784, 1568, 3136, 6272, 5295, 3313, 6626, 5739, 2425,
16052+ 4850, 75, 150, 300, 600, 1200, 2400, 4800, 47, 94, 188, 376,
16053+ 752, 1504, 3008, 6016, 2735, 5470, 3859, 7718, 6627, 5737,
16054+ 2429, 4858, 91, 182, 364, 728, 1456, 2912, 5824, 2095, 4190,
16055+ 1299, 2598, 5196, 3383, 6766, 4467, 1865, 3730, 7460, 8167,
16056+ 6753, 4461, 1909, 3818, 7636, 7687, 6561, 5869, 2165, 4330,
16057+ 1147, 2294, 4588, 1655, 3310, 6620, 5655, 2433, 4866, 939,
16058+ 1878, 3756, 7512, 7967, 7057, 4749, 181, 362, 724, 1448, 2896,
16059+ 5792, 2287, 4574, 1555, 3110, 6220, 5431, 4033, 8066, 6827,
16060+ 4345, 1117, 2234, 4468, 1863, 3726, 7452, 8087, 6785, 4269,
16061+ 1269, 2538, 5076, 519, 1038, 2076, 4152, 1503, 3006, 6012,
16062+ 2903, 5806, 2291, 4582, 1635, 3270, 6540, 5815, 2241, 4482,
16063+ 1707, 3414, 6828, 4343, 1089, 2178, 4356, 1959, 3918, 7836,
16064+ 6295, 5249, 3245, 6490, 5915, 2969, 5938, 3019, 6038, 2691,
16065+ 5382, 4003, 8006, 6947, 5097, 637, 1274, 2548, 5096, 639,
16066+ 1278, 2556, 5112, 607, 1214, 2428, 4856, 95, 190, 380, 760,
16067+ 1520, 3040, 6080, 2607, 5214, 3347, 6694, 4579, 1641, 3282,
16068+ 6564, 5863, 2145, 4290, 1067, 2134, 4268, 1271, 2542, 5084,
16069+ 535, 1070, 2140, 4280, 1247, 2494, 4988, 855, 1710, 3420,
16070+ 6840, 4319, 1041, 2082, 4164, 1319, 2638, 5276, 3223, 6446,
16071+ 6131, 2633, 5266, 3211, 6422, 6019, 2729, 5458, 3851, 7702,
16072+ 6531, 5801, 2301, 4602, 1627, 3254, 6508, 6007, 2881, 5762,
16073+ 2219, 4438, 1795, 3590, 7180, 7607, 7873, 6189, 5621, 3653,
16074+ 7306, 7355, 7385, 7197, 7573, 7813, 6309, 5349, 3173, 6346,
16075+ 5179, 3545, 7090, 4811, 57, 114, 228, 456, 912, 1824, 3648,
16076+ 7296, 7343, 7409, 7245, 7477, 8133, 6693, 4581, 1637, 3274,
16077+ 6548, 5767, 2209, 4418, 1835, 3670, 7340, 7415, 7233, 7469,
16078+ 8181, 6725, 4389, 2021, 4042, 8084, 6791, 4257, 1261, 2522,
16079+ 5044, 711, 1422, 2844, 5688, 2527, 5054, 723, 1446, 2892,
16080+ 5784, 2207, 4414, 2003, 4006, 8012, 6967, 5057, 557, 1114,
16081+ 2228, 4456, 1919, 3838, 7676, 7767, 6401, 6061, 2805, 5610,
16082+ 3707, 7414, 7235, 7465, 8189, 6741, 4357, 1957, 3914, 7828,
16083+ 6279, 5281, 3309, 6618, 5659, 2457, 4914, 971, 1942, 3884,
16084+ 7768, 6431, 6033, 2701, 5402, 3995, 7990, 7107, 4649, 509,
16085+ 1018, 2036, 4072, 8144, 6671, 4529, 1741, 3482, 6964, 5063,
16086+ 545, 1090, 2180, 4360, 1983, 3966, 7932, 6231, 5377, 4013,
16087+ 8026, 6939, 5017, 669, 1338, 2676, 5352, 3199, 6398, 5203,
16088+ 3337, 6674, 4491, 1721, 3442, 6884, 4199, 1377, 2754, 5508,
16089+ 3751, 7502, 7987, 7113, 4669, 469, 938, 1876, 3752, 7504,
16090+ 7951, 7089, 4813, 53, 106, 212, 424, 848, 1696, 3392, 6784,
16091+ 4271, 1265, 2530, 5060, 551, 1102, 2204, 4408, 2015, 4030,
16092+ 8060, 6999, 4865, 941, 1882, 3764, 7528, 8063, 6993, 4877,
16093+ 949, 1898, 3796, 7592, 7935, 6225, 5389, 4021, 8042, 7035,
16094+ 4953, 797, 1594, 3188, 6376, 5247, 3409, 6818, 4331, 1145,
16095+ 2290, 4580, 1639, 3278, 6556, 5783, 2177, 4354, 1963, 3926,
16096+ 7852, 6391, 5185, 3373, 6746, 4379, 1945, 3890, 7780, 6503,
16097+ 5985, 2925, 5850, 2075, 4150, 1475, 2950, 5900, 2999, 5998,
16098+ 2931, 5862, 2147, 4294, 1059, 2118, 4236, 1207, 2414, 4828,
16099+ 23, 46, 92, 184, 368, 736, 1472, 2944, 5888, 2991, 5982, 2835,
16100+ 5670, 2531, 5062, 547, 1094, 2188, 4376, 1951, 3902, 7804,
16101+ 6487, 5889, 2989, 5978, 2843, 5686, 2499, 4998, 675, 1350,
16102+ 2700, 5400, 3999, 7998, 7123, 4617, 445, 890, 1780, 3560,
16103+ 7120, 4623, 433, 866, 1732, 3464, 6928, 5007, 689, 1378, 2756,
16104+ 5512, 3775, 7550, 8019, 6921, 5053, 725, 1450, 2900, 5800,
16105+ 2303, 4606, 1619, 3238, 6476, 5943, 3009, 6018, 2731, 5462,
16106+ 3843, 7686, 6563, 5865, 2173, 4346, 1115, 2230, 4460, 1911,
16107+ 3822, 7644, 7703, 6529, 5805, 2293, 4586, 1659, 3318, 6636,
16108+ 5751, 2369, 4738, 171, 342, 684, 1368, 2736, 5472, 3951, 7902,
16109+ 6163, 5513, 3773, 7546, 8027, 6937, 5021, 661, 1322, 2644,
16110+ 5288, 3327, 6654, 5715, 2313, 4626, 395, 790, 1580, 3160,
16111+ 6320, 5327, 3121, 6242, 5483, 3961, 7922, 6219, 5433, 4061,
16112+ 8122, 6875, 4121, 1437, 2874, 5748, 2375, 4750, 179, 358, 716,
16113+ 1432, 2864, 5728, 2415, 4830, 19, 38, 76, 152, 304, 608, 1216,
16114+ 2432, 4864, 943, 1886, 3772, 7544, 8031, 6929, 5005, 693,
16115+ 1386, 2772, 5544, 3839, 7678, 7763, 6409, 6077, 2773, 5546,
16116+ 3835, 7670, 7747, 6441, 6141, 2645, 5290, 3323, 6646, 5699,
16117+ 2345, 4690, 267, 534, 1068, 2136, 4272, 1231, 2462, 4924, 983,
16118+ 1966, 3932, 7864, 6367, 5137, 3469, 6938, 5019, 665, 1330,
16119+ 2660, 5320, 3135, 6270, 5459, 3849, 7698, 6539, 5817, 2269,
16120+ 4538, 1755, 3510, 7020, 4983, 833, 1666, 3332, 6664, 4543,
16121+ 1745, 3490, 6980, 4903, 993, 1986, 3972, 7944, 7103, 4817, 13,
16122+ 26, 52, 104, 208, 416, 832, 1664, 3328, 6656, 4527, 1777,
16123+ 3554, 7108, 4647, 481, 962, 1924, 3848, 7696, 6543, 5809,
16124+ 2253, 4506, 1691, 3382, 6764, 4471, 1857, 3714, 7428, 8103,
16125+ 6881, 4205, 1397, 2794, 5588, 3591, 7182, 7603, 7881, 6205,
16126+ 5589, 3589, 7178, 7611, 7897, 6173, 5525, 3717, 7434, 8123,
16127+ 6873, 4125, 1429, 2858, 5716, 2311, 4622, 435, 870, 1740,
16128+ 3480, 6960, 5071, 561, 1122, 2244, 4488, 1727, 3454, 6908,
16129+ 4183, 1281, 2562, 5124, 3495, 6990, 4915, 969, 1938, 3876,
16130+ 7752, 6463, 6097, 2573, 5146, 3483, 6966, 5059, 553, 1106,
16131+ 2212, 4424, 1855, 3710, 7420, 7255, 7425, 8109, 6901, 4165,
16132+ 1317, 2634, 5268, 3207, 6414, 6067, 2761, 5522, 3723, 7446,
16133+ 8067, 6825, 4349, 1109, 2218, 4436, 1799, 3598, 7196, 7575,
16134+ 7809, 6317, 5365, 3141, 6282, 5307, 3289, 6578, 5835, 2105,
16135+ 4210, 1355, 2710, 5420, 4087, 8174, 6771, 4425, 1853, 3706,
16136+ 7412, 7239, 7457, 8173, 6773, 4421, 1829, 3658, 7316, 7303,
16137+ 7329, 7405, 7285, 7493, 7973, 7141, 4709, 357, 714, 1428,
16138+ 2856, 5712, 2319, 4638, 403, 806, 1612, 3224, 6448, 6095,
16139+ 2609, 5218, 3435, 6870, 4099, 1449, 2898, 5796, 2279, 4558,
16140+ 1587, 3174, 6348, 5175, 3521, 7042, 4779, 249, 498, 996, 1992,
16141+ 3984, 7968, 7151, 4721, 333, 666, 1332, 2664, 5328, 3087,
16142+ 6174, 5523, 3721, 7442, 8075, 6841, 4317, 1045, 2090, 4180,
16143+ 1287, 2574, 5148, 3479, 6958, 5107, 585, 1170, 2340, 4680,
16144+ 319, 638, 1276, 2552, 5104, 591, 1182, 2364, 4728, 351, 702,
16145+ 1404, 2808, 5616, 3663, 7326, 7315, 7305, 7357, 7381, 7173,
16146+ 7589, 7909, 6245, 5477, 3941, 7882, 6203, 5593, 3613, 7226,
16147+ 7643, 7705, 6557, 5781, 2181, 4362, 1979, 3958, 7916, 6263,
16148+ 5441, 3885, 7770, 6427, 6041, 2717, 5434, 4059, 8118, 6851,
16149+ 4137, 1533, 3066, 6132, 2631, 5262, 3251, 6502, 5987, 2921,
16150+ 5842, 2059, 4118, 1411, 2822, 5644, 2487, 4974, 883, 1766,
16151+ 3532, 7064, 4767, 145, 290, 580, 1160, 2320, 4640, 495, 990,
16152+ 1980, 3960, 7920, 6223, 5425, 4045, 8090, 6811, 4249, 1181,
16153+ 2362, 4724, 327, 654, 1308, 2616, 5232, 3407, 6814, 4243,
16154+ 1161, 2322, 4644, 487, 974, 1948, 3896, 7792, 6479, 5937,
16155+ 3021, 6042, 2715, 5430, 4035, 8070, 6819, 4329, 1149, 2298,
16156+ 4596, 1607, 3214, 6428, 6039, 2689, 5378, 4011, 8022, 6915,
16157+ 5033, 765, 1530, 3060, 6120, 2687, 5374, 3155, 6310, 5347,
16158+ 3177, 6354, 5131, 3513, 7026, 4939, 825, 1650, 3300, 6600,
16159+ 5695, 2513, 5026, 747, 1494, 2988, 5976, 2847, 5694, 2515,
16160+ 5030, 739, 1478, 2956, 5912, 2975, 5950, 3027, 6054, 2787,
16161+ 5574, 3619, 7238, 7459, 8169, 6781, 4437, 1797, 3594, 7188,
16162+ 7559, 7841, 6381, 5237, 3397, 6794, 4283, 1241, 2482, 4964,
16163+ 871, 1742, 3484, 6968, 5087, 529, 1058, 2116, 4232, 1215,
16164+ 2430, 4860, 87, 174, 348, 696, 1392, 2784, 5568, 3631, 7262,
16165+ 7443, 8073, 6845, 4309, 1029, 2058, 4116, 1415, 2830, 5660,
16166+ 2455, 4910, 1011, 2022, 4044, 8088, 6815, 4241, 1165, 2330,
16167+ 4660, 455, 910, 1820, 3640, 7280, 7503, 7985, 7117, 4661, 453,
16168+ 906, 1812, 3624, 7248, 7439, 8113, 6861, 4149, 1477, 2954,
16169+ 5908, 2951, 5902, 2995, 5990, 2915, 5830, 2083, 4166, 1315,
16170+ 2630, 5260, 3255, 6510, 6003, 2889, 5778, 2187, 4374, 1923,
16171+ 3846, 7692, 6583, 5825, 2093, 4186, 1307, 2614, 5228, 3447,
16172+ 6894, 4211, 1353, 2706, 5412, 4071, 8142, 6707, 4553, 1597,
16173+ 3194, 6388, 5191, 3361, 6722, 4395, 2041, 4082, 8164, 6759,
16174+ 4449, 1901, 3802, 7604, 7879, 6177, 5613, 3701, 7402, 7291,
16175+ 7513, 7965, 7061, 4741, 165, 330, 660, 1320, 2640, 5280, 3311,
16176+ 6622, 5651, 2441, 4882, 907, 1814, 3628, 7256, 7455, 8081,
16177+ 6797, 4277, 1221, 2442, 4884, 903, 1806, 3612, 7224, 7647,
16178+ 7697, 6541, 5813, 2245, 4490, 1723, 3446, 6892, 4215, 1345,
16179+ 2690, 5380, 4007, 8014, 6963, 5065, 573, 1146, 2292, 4584,
16180+ 1663, 3326, 6652, 5719, 2305, 4610, 427, 854, 1708, 3416,
16181+ 6832, 4303, 1073, 2146, 4292, 1063, 2126, 4252, 1175, 2350,
16182+ 4700, 279, 558, 1116, 2232, 4464, 1871, 3742, 7484, 8151,
16183+ 6657, 4525, 1781, 3562, 7124, 4615, 417, 834, 1668, 3336,
16184+ 6672, 4495, 1713, 3426, 6852, 4135, 1505, 3010, 6020, 2727,
16185+ 5454, 3891, 7782, 6499, 5993, 2941, 5882, 2139, 4278, 1219,
16186+ 2438, 4876, 951, 1902, 3804, 7608, 7903, 6161, 5517, 3765,
16187+ 7530, 8059, 7001, 4893, 917, 1834, 3668, 7336, 7423, 7249,
16188+ 7437, 8117, 6853, 4133, 1509, 3018, 6036, 2695, 5390, 4019,
16189+ 8038, 7011, 4969, 893, 1786, 3572, 7144, 4735, 337, 674, 1348,
16190+ 2696, 5392, 3983, 7966, 7059, 4745, 189, 378, 756, 1512, 3024,
16191+ 6048, 2799, 5598, 3603, 7206, 7651, 7785, 6525, 5973, 2821,
16192+ 5642, 2491, 4982, 835, 1670, 3340, 6680, 4511, 1681, 3362,
16193+ 6724, 4391, 2017, 4034, 8068, 6823, 4321, 1133, 2266, 4532,
16194+ 1735, 3470, 6940, 5015, 641, 1282, 2564, 5128, 3519, 7038,
16195+ 4947, 777, 1554, 3108, 6216, 5439, 4049, 8098, 6891, 4217,
16196+ 1373, 2746, 5492, 3911, 7822, 6323, 5321, 3133, 6266, 5467,
16197+ 3865, 7730, 6603, 5689, 2525, 5050, 731, 1462, 2924, 5848,
16198+ 2079, 4158, 1491, 2982, 5964, 2871, 5742, 2419, 4838, 99, 198,
16199+ 396, 792, 1584, 3168, 6336, 5167, 3569, 7138, 4715, 377, 754,
16200+ 1508, 3016, 6032, 2703, 5406, 3987, 7974, 7139, 4713, 381,
16201+ 762, 1524, 3048, 6096, 2575, 5150, 3475, 6950, 5091, 617,
16202+ 1234, 2468, 4936, 831, 1662, 3324, 6648, 5727, 2321, 4642,
16203+ 491, 982, 1964, 3928, 7856, 6351, 5169, 3533, 7066, 4763, 153,
16204+ 306, 612, 1224, 2448, 4896, 1007, 2014, 4028, 8056, 7007,
16205+ 4881, 909, 1818, 3636, 7272, 7551, 8017, 6925, 5045, 709,
16206+ 1418, 2836, 5672, 2559, 5118, 595, 1190, 2380, 4760, 159, 318,
16207+ 636, 1272, 2544, 5088, 623, 1246, 2492, 4984, 863, 1726, 3452,
16208+ 6904, 4191, 1297, 2594, 5188, 3367, 6734, 4403, 1993, 3986,
16209+ 7972, 7143, 4705, 365, 730, 1460, 2920, 5840, 2063, 4126,
16210+ 1427, 2854, 5708, 2359, 4718, 371, 742, 1484, 2968, 5936,
16211+ 3023, 6046, 2707, 5414, 4067, 8134, 6691, 4585, 1661, 3322,
16212+ 6644, 5703, 2337, 4674, 299, 598, 1196, 2392, 4784, 207, 414,
16213+ 828, 1656, 3312, 6624, 5743, 2417, 4834, 107, 214, 428, 856,
16214+ 1712, 3424, 6848, 4143, 1521, 3042, 6084, 2599, 5198, 3379,
16215+ 6758, 4451, 1897, 3794, 7588, 7911, 6241, 5485, 3957, 7914,
16216+ 6267, 5465, 3869, 7738, 6619, 5657, 2461, 4922, 987, 1974,
16217+ 3948, 7896, 6175, 5521, 3725, 7450, 8091, 6809, 4253, 1173,
16218+ 2346, 4692, 263, 526, 1052, 2104, 4208, 1359, 2718, 5436,
16219+ 4055, 8110, 6899, 4169, 1341, 2682, 5364, 3143, 6286, 5299,
16220+ 3273, 6546, 5771, 2233, 4466, 1867, 3734, 7468, 8183, 6721,
16221+ 4397, 2037, 4074, 8148, 6663, 4513, 1773, 3546, 7092, 4807,
16222+ 33, 66, 132, 264, 528, 1056, 2112, 4224, 1199, 2398, 4796,
16223+ 215, 430, 860, 1720, 3440, 6880, 4207, 1393, 2786, 5572, 3623,
16224+ 7246, 7475, 8137, 6717, 4565, 1541, 3082, 6164, 5511, 3745,
16225+ 7490, 7979, 7161, 4701, 277, 554, 1108, 2216, 4432, 1807,
16226+ 3614, 7228, 7639, 7681, 6573, 5877, 2117, 4234, 1211, 2422,
16227+ 4844, 119, 238, 476, 952, 1904, 3808, 7616, 7727, 6641, 5709,
16228+ 2357, 4714, 379, 758, 1516, 3032, 6064, 2767, 5534, 3731,
16229+ 7462, 8163, 6761, 4477, 1877, 3754, 7508, 7943, 7073, 4845,
16230+ 117, 234, 468, 936, 1872, 3744, 7488, 7983, 7153, 4685, 309,
16231+ 618, 1236, 2472, 4944, 783, 1566, 3132, 6264, 5471, 3857,
16232+ 7714, 6635, 5753, 2397, 4794, 219, 438, 876, 1752, 3504, 7008,
16233+ 4975, 881, 1762, 3524, 7048, 4799, 209, 418, 836, 1672, 3344,
16234+ 6688, 4591, 1649, 3298, 6596, 5671, 2529, 5058, 555, 1110,
16235+ 2220, 4440, 1823, 3646, 7292, 7511, 7937, 7085, 4853, 69, 138,
16236+ 276, 552, 1104, 2208, 4416, 1839, 3678, 7356, 7383, 7169,
16237+ 7597, 7925, 6213, 5413, 4069, 8138, 6715, 4569, 1565, 3130,
16238+ 6260, 5447, 3873, 7746, 6443, 6137, 2653, 5306, 3291, 6582,
16239+ 5827, 2089, 4178, 1291, 2582, 5164, 3575, 7150, 4723, 329,
16240+ 658, 1316, 2632, 5264, 3215, 6430, 6035, 2697, 5394, 3979,
16241+ 7958, 7043, 4777, 253, 506, 1012, 2024, 4048, 8096, 6895,
16242+ 4209, 1357, 2714, 5428, 4039, 8078, 6835, 4297, 1085, 2170,
16243+ 4340, 1095, 2190, 4380, 1943, 3886, 7772, 6423, 6017, 2733,
16244+ 5466, 3867, 7734, 6595, 5673, 2557, 5114, 603, 1206, 2412,
16245+ 4824, 31, 62, 124, 248, 496, 992, 1984, 3968, 7936, 7087,
16246+ 4849, 77, 154, 308, 616, 1232, 2464, 4928, 815, 1630, 3260,
16247+ 6520, 5983, 2833, 5666, 2539, 5078, 515, 1030, 2060, 4120,
16248+ 1439, 2878, 5756, 2391, 4782, 243, 486, 972, 1944, 3888, 7776,
16249+ 6511, 6001, 2893, 5786, 2203, 4406, 1987, 3974, 7948, 7095,
16250+ 4801, 45, 90, 180, 360, 720, 1440, 2880, 5760, 2223, 4446,
16251+ 1811, 3622, 7244, 7479, 8129, 6701, 4597, 1605, 3210, 6420,
16252+ 6023, 2721, 5442, 3883, 7766, 6403, 6057, 2813, 5626, 3675,
16253+ 7350, 7363, 7209, 7677, 7765, 6405, 6053, 2789, 5578, 3643,
16254+ 7286, 7491, 7977, 7165, 4693, 261, 522, 1044, 2088, 4176,
16255+ 1295, 2590, 5180, 3543, 7086, 4851, 73, 146, 292, 584, 1168,
16256+ 2336, 4672, 303, 606, 1212, 2424, 4848, 79, 158, 316, 632,
16257+ 1264, 2528, 5056, 559, 1118, 2236, 4472, 1887, 3774, 7548,
16258+ 8023, 6913, 5037, 757, 1514, 3028, 6056, 2815, 5630, 3667,
16259+ 7334, 7395, 7273, 7549, 8021, 6917, 5029, 741, 1482, 2964,
16260+ 5928, 3071, 6142, 2643, 5286, 3299, 6598, 5667, 2537, 5074,
16261+ 523, 1046, 2092, 4184, 1311, 2622, 5244, 3415, 6830, 4339,
16262+ 1097, 2194, 4388, 2023, 4046, 8092, 6807, 4225, 1197, 2394,
16263+ 4788, 199, 398, 796, 1592, 3184, 6368, 5231, 3441, 6882, 4203,
16264+ 1401, 2802, 5604, 3687, 7374, 7219, 7625, 7741, 6613, 5637,
16265+ 2469, 4938, 827, 1654, 3308, 6616, 5663, 2449, 4898, 1003,
16266+ 2006, 4012, 8024, 6943, 5009, 653, 1306, 2612, 5224, 3455,
16267+ 6910, 4179, 1289, 2578, 5156, 3559, 7118, 4659, 457, 914,
16268+ 1828, 3656, 7312, 7311, 7345, 7373, 7221, 7621, 7717, 6629,
16269+ 5733, 2405, 4810, 59, 118, 236, 472, 944, 1888, 3776, 7552,
16270+ 7855, 6385, 5197, 3381, 6762, 4475, 1881, 3762, 7524, 8039,
16271+ 7009, 4973, 885, 1770, 3540, 7080, 4863, 81, 162, 324, 648,
16272+ 1296, 2592, 5184, 3375, 6750, 4371, 1929, 3858, 7716, 6631,
16273+ 5729, 2413, 4826, 27, 54, 108, 216, 432, 864, 1728, 3456,
16274+ 6912, 5039, 753, 1506, 3012, 6024, 2751, 5502, 3923, 7846,
16275+ 6371, 5225, 3453, 6906, 4187, 1305, 2610, 5220, 3431, 6862,
16276+ 4147, 1481, 2962, 5924, 3047, 6094, 2611, 5222, 3427, 6854,
16277+ 4131, 1513, 3026, 6052, 2791, 5582, 3635, 7270, 7523, 8041,
16278+ 7037, 4949, 773, 1546, 3092, 6184, 5631, 3665, 7330, 7403,
16279+ 7289, 7517, 7957, 7045, 4773, 229, 458, 916, 1832, 3664, 7328,
16280+ 7407, 7281, 7501, 7989, 7109, 4645, 485, 970, 1940, 3880,
16281+ 7760, 6415, 6065, 2765, 5530, 3739, 7478, 8131, 6697, 4605,
16282+ 1621, 3242, 6484, 5895, 2977, 5954, 2859, 5718, 2307, 4614,
16283+ 419, 838, 1676, 3352, 6704, 4559, 1585, 3170, 6340, 5159,
16284+ 3553, 7106, 4651, 505, 1010, 2020, 4040, 8080, 6799, 4273,
16285+ 1229, 2458, 4916, 967, 1934, 3868, 7736, 6623, 5649, 2445,
16286+ 4890, 923, 1846, 3692, 7384, 7199, 7569, 7821, 6325, 5317,
16287+ 3109, 6218, 5435, 4057, 8114, 6859, 4153, 1501, 3002, 6004,
16288+ 2887, 5774, 2227, 4454, 1891, 3782, 7564, 7863, 6337, 5165,
16289+ 3573, 7146, 4731, 345, 690, 1380, 2760, 5520, 3727, 7454,
16290+ 8083, 6793, 4285, 1237, 2474, 4948, 775, 1550, 3100, 6200,
16291+ 5599, 3601, 7202, 7659, 7801, 6493, 5909, 2949, 5898, 3003,
16292+ 6006, 2883, 5766, 2211, 4422, 1827, 3654, 7308, 7351, 7361,
16293+ 7213, 7669, 7749, 6437, 6117, 2661, 5322, 3131, 6262, 5443,
16294+ 3881, 7762, 6411, 6073, 2781, 5562, 3803, 7606, 7875, 6185,
16295+ 5629, 3669, 7338, 7419, 7257, 7453, 8085, 6789, 4261, 1253,
16296+ 2506, 5012, 647, 1294, 2588, 5176, 3551, 7102, 4819, 9, 18,
16297+ 36, 72, 144, 288, 576, 1152, 2304, 4608, 431, 862, 1724, 3448,
16298+ 6896, 4175, 1329, 2658, 5316, 3111, 6222, 5427, 4041, 8082,
16299+ 6795, 4281, 1245, 2490, 4980, 839, 1678, 3356, 6712, 4575,
16300+ 1553, 3106, 6212, 5415, 4065, 8130, 6699, 4601, 1629, 3258,
16301+ 6516, 5959, 2849, 5698, 2347, 4694, 259, 518, 1036, 2072,
16302+ 4144, 1487, 2974, 5948, 3031, 6062, 2803, 5606, 3683, 7366,
16303+ 7203, 7657, 7805, 6485, 5893, 2981, 5962, 2875, 5750, 2371,
16304+ 4742, 163, 326, 652, 1304, 2608, 5216, 3439, 6878, 4115, 1417,
16305+ 2834, 5668, 2535, 5070, 563, 1126, 2252, 4504, 1695, 3390,
16306+ 6780, 4439, 1793, 3586, 7172, 7591, 7905, 6253, 5493, 3909,
16307+ 7818, 6331, 5337, 3101, 6202, 5595, 3609, 7218, 7627, 7737,
16308+ 6621, 5653, 2437, 4874, 955, 1910, 3820, 7640, 7711, 6545,
16309+ 5773, 2229, 4458, 1915, 3830, 7660, 7799, 6465, 5933, 3061,
16310+ 6122, 2683, 5366, 3139, 6278, 5283, 3305, 6610, 5643, 2489,
16311+ 4978, 843, 1686, 3372, 6744, 4383, 1937, 3874, 7748, 6439,
16312+ 6113, 2669, 5338, 3099, 6198, 5571, 3625, 7250, 7435, 8121,
16313+ 6877, 4117, 1413, 2826, 5652, 2439, 4878, 947, 1894, 3788,
16314+ 7576, 7839, 6289, 5261, 3253, 6506, 6011, 2905, 5810, 2251,
16315+ 4502, 1667, 3334, 6668, 4535, 1729, 3458, 6916, 5031, 737,
16316+ 1474, 2948, 5896, 3007, 6014, 2899, 5798, 2275, 4550, 1571,
16317+ 3142, 6284, 5303, 3265, 6530, 5803, 2297, 4594, 1611, 3222,
16318+ 6444, 6135, 2625, 5250, 3243, 6486, 5891, 2985, 5970, 2827,
16319+ 5654, 2435, 4870, 931, 1862, 3724, 7448, 8095, 6801, 4237,
16320+ 1205, 2410, 4820, 7, 14, 28, 56, 112, 224, 448, 896, 1792,
16321+ 3584, 7168, 7599, 7921, 6221, 5429, 4037, 8074, 6843, 4313,
16322+ 1053, 2106, 4212, 1351, 2702, 5404, 3991, 7982, 7155, 4681,
16323+ 317, 634, 1268, 2536, 5072, 527, 1054, 2108, 4216, 1375, 2750,
16324+ 5500, 3927, 7854, 6387, 5193, 3389, 6778, 4443, 1817, 3634,
16325+ 7268, 7527, 8033, 7021, 4981, 837, 1674, 3348, 6696, 4607,
16326+ 1617, 3234, 6468, 5927, 3041, 6082, 2603, 5206, 3331, 6662,
16327+ 4515, 1769, 3538, 7076, 4839, 97, 194, 388, 776, 1552, 3104,
16328+ 6208, 5423, 4081, 8162, 6763, 4473, 1885, 3770, 7540, 8007,
16329+ 6945, 5101, 629, 1258, 2516, 5032, 767, 1534, 3068, 6136,
16330+ 2655, 5310, 3283, 6566, 5859, 2153, 4306, 1035, 2070, 4140,
16331+ 1527, 3054, 6108, 2583, 5166, 3571, 7142, 4707, 361, 722,
16332+ 1444, 2888, 5776, 2191, 4382, 1939, 3878, 7756, 6455, 6081,
16333+ 2605, 5210, 3355, 6710, 4547, 1577, 3154, 6308, 5351, 3169,
16334+ 6338, 5163, 3577, 7154, 4683, 313, 626, 1252, 2504, 5008, 655,
16335+ 1310, 2620, 5240, 3423, 6846, 4307, 1033, 2066, 4132, 1511,
16336+ 3022, 6044, 2711, 5422, 4083, 8166, 6755, 4457, 1917, 3834,
16337+ 7668, 7751, 6433, 6125, 2677, 5354, 3195, 6390, 5187, 3369,
16338+ 6738, 4363, 1977, 3954, 7908, 6247, 5473, 3949, 7898, 6171,
16339+ 5529, 3741, 7482, 8155, 6681, 4509, 1685, 3370, 6740, 4359,
16340+ 1953, 3906, 7812, 6311, 5345, 3181, 6362, 5147, 3481, 6962,
16341+ 5067, 569, 1138, 2276, 4552, 1599, 3198, 6396, 5207, 3329,
16342+ 6658, 4523, 1785, 3570, 7140, 4711, 353, 706, 1412, 2824,
16343+ 5648, 2447, 4894, 915, 1830, 3660, 7320, 7327, 7313, 7309,
16344+ 7349, 7365, 7205, 7653, 7781, 6501, 5989, 2917, 5834, 2107,
16345+ 4214, 1347, 2694, 5388, 4023, 8046, 7027, 4937, 829, 1658,
16346+ 3316, 6632, 5759, 2385, 4770, 235, 470, 940, 1880, 3760, 7520,
16347+ 8047, 7025, 4941, 821, 1642, 3284, 6568, 5887, 2129, 4258,
16348+ 1259, 2518, 5036, 759, 1518, 3036, 6072, 2783, 5566, 3795,
16349+ 7590, 7907, 6249, 5501, 3925, 7850, 6395, 5209, 3357, 6714,
16350+ 4571, 1561, 3122, 6244, 5479, 3937, 7874, 6187, 5625, 3677,
16351+ 7354, 7387, 7193, 7581, 7829, 6277, 5285, 3301, 6602, 5691,
16352+ 2521, 5042, 715, 1430, 2860, 5720, 2335, 4670, 467, 934, 1868,
16353+ 3736, 7472, 8143, 6705, 4557, 1589, 3178, 6356, 5127, 3489,
16354+ 6978, 4907, 1017, 2034, 4068, 8136, 6719, 4561, 1549, 3098,
16355+ 6196, 5575, 3617, 7234, 7467, 8185, 6749, 4373, 1925, 3850,
16356+ 7700, 6535, 5793, 2285, 4570, 1563, 3126, 6252, 5495, 3905,
16357+ 7810, 6315, 5369, 3165, 6330, 5339, 3097, 6194, 5579, 3641,
16358+ 7282, 7499, 7993, 7133, 4629, 389, 778, 1556, 3112, 6224,
16359+ 5391, 4017, 8034, 7019, 4985, 861, 1722, 3444, 6888, 4223,
16360+ 1361, 2722, 5444, 3879, 7758, 6451, 6089, 2621, 5242, 3419,
16361+ 6838, 4291, 1065, 2130, 4260, 1255, 2510, 5020, 663, 1326,
16362+ 2652, 5304, 3295, 6590, 5843, 2057, 4114, 1419, 2838, 5676,
16363+ 2551, 5102, 627, 1254, 2508, 5016, 671, 1342, 2684, 5368,
16364+ 3167, 6334, 5331, 3081, 6162, 5515, 3769, 7538, 8011, 6969,
16365+ 5085, 533, 1066, 2132, 4264, 1279, 2558, 5116, 599, 1198,
16366+ 2396, 4792, 223, 446, 892, 1784, 3568, 7136, 4719, 369, 738,
16367+ 1476, 2952, 5904, 2959, 5918, 2963, 5926, 3043, 6086, 2595,
16368+ 5190, 3363, 6726, 4387, 2025, 4050, 8100, 6887, 4193, 1389,
16369+ 2778, 5556, 3783, 7566, 7859, 6345, 5181, 3541, 7082, 4859,
16370+ 89, 178, 356, 712, 1424, 2848, 5696, 2351, 4702, 275, 550,
16371+ 1100, 2200, 4400, 1999, 3998, 7996, 7127, 4609, 429, 858,
16372+ 1716, 3432, 6864, 4111, 1457, 2914, 5828, 2087, 4174, 1331,
16373+ 2662, 5324, 3127, 6254, 5491, 3913, 7826, 6283, 5305, 3293,
16374+ 6586, 5851, 2073, 4146, 1483, 2966, 5932, 3063, 6126, 2675,
16375+ 5350, 3171, 6342, 5155, 3561, 7122, 4619, 441, 882, 1764,
16376+ 3528, 7056, 4751, 177, 354, 708, 1416, 2832, 5664, 2543, 5086,
16377+ 531, 1062, 2124, 4248, 1183, 2366, 4732, 343, 686, 1372, 2744,
16378+ 5488, 3919, 7838, 6291, 5257, 3261, 6522, 5979, 2841, 5682,
16379+ 2507, 5014, 643, 1286, 2572, 5144, 3487, 6974, 5075, 521,
16380+ 1042, 2084, 4168, 1343, 2686, 5372, 3159, 6318, 5363, 3145,
16381+ 6290, 5259, 3257, 6514, 5963, 2873, 5746, 2379, 4758, 131,
16382+ 262, 524, 1048, 2096, 4192, 1391, 2782, 5564, 3799, 7598,
16383+ 7923, 6217, 5437, 4053, 8106, 6907, 4185, 1309, 2618, 5236,
16384+ 3399, 6798, 4275, 1225, 2450, 4900, 999, 1998, 3996, 7992,
16385+ 7135, 4625, 397, 794, 1588, 3176, 6352, 5135, 3505, 7010,
16386+ 4971, 889, 1778, 3556, 7112, 4671, 465, 930, 1860, 3720, 7440,
16387+ 8079, 6833, 4301, 1077, 2154, 4308, 1031, 2062, 4124, 1431,
16388+ 2862, 5724, 2327, 4654, 499, 998, 1996, 3992, 7984, 7119,
16389+ 4657, 461, 922, 1844, 3688, 7376, 7183, 7601, 7885, 6197,
16390+ 5573, 3621, 7242, 7483, 8153, 6685, 4501, 1669, 3338, 6676,
16391+ 4487, 1697, 3394, 6788, 4263, 1249, 2498, 4996, 679, 1358,
16392+ 2716, 5432, 4063, 8126, 6867, 4105, 1469, 2938, 5876, 2119,
16393+ 4238, 1203, 2406, 4812, 55, 110, 220, 440, 880, 1760, 3520,
16394+ 7040, 4783, 241, 482, 964, 1928, 3856, 7712, 6639, 5745, 2381,
16395+ 4762, 155, 310, 620, 1240, 2480, 4960, 879, 1758, 3516, 7032,
16396+ 4959, 785, 1570, 3140, 6280, 5311, 3281, 6562, 5867, 2169,
16397+ 4338, 1099, 2198, 4396, 2039, 4078, 8156, 6679, 4481, 1709,
16398+ 3418, 6836, 4295, 1057, 2114, 4228, 1191, 2382, 4764, 151,
16399+ 302, 604, 1208, 2416, 4832, 111, 222, 444, 888, 1776, 3552,
16400+ 7104, 4655, 497, 994, 1988, 3976, 7952, 7055, 4785, 205, 410,
16401+ 820, 1640, 3280, 6560, 5871, 2161, 4322, 1131, 2262, 4524,
16402+ 1783, 3566, 7132, 4631, 385, 770, 1540, 3080, 6160, 5519,
16403+ 3761, 7522, 8043, 7033, 4957, 789, 1578, 3156, 6312, 5375,
16404+ 3153, 6306, 5355, 3193, 6386, 5195, 3385, 6770, 4427, 1849,
16405+ 3698, 7396, 7271, 7521, 8045, 7029, 4933, 805, 1610, 3220,
16406+ 6440, 6143, 2641, 5282, 3307, 6614, 5635, 2473, 4946, 779,
16407+ 1558, 3116, 6232, 5407, 3985, 7970, 7147, 4729, 349, 698,
16408+ 1396, 2792, 5584, 3599, 7198, 7571, 7817, 6333, 5333, 3077,
16409+ 6154, 5563, 3801, 7602, 7883, 6201, 5597, 3605, 7210, 7675,
16410+ 7769, 6429, 6037, 2693, 5386, 4027, 8054, 6979, 4905, 1021,
16411+ 2042, 4084, 8168, 6783, 4433, 1805, 3610, 7220, 7623, 7713,
16412+ 6637, 5749, 2373, 4746, 187, 374, 748, 1496, 2992, 5984, 2927,
16413+ 5854, 2067, 4134, 1507, 3014, 6028, 2743, 5486, 3955, 7910,
16414+ 6243, 5481, 3965, 7930, 6235, 5401, 3997, 7994, 7131, 4633,
16415+ 413, 826, 1652, 3304, 6608, 5647, 2481, 4962, 875, 1750, 3500,
16416+ 7000, 4895, 913, 1826, 3652, 7304, 7359, 7377, 7181, 7605,
16417+ 7877, 6181, 5605, 3685, 7370, 7227, 7641, 7709, 6549, 5765,
16418+ 2213, 4426, 1851, 3702, 7404, 7287, 7489, 7981, 7157, 4677,
16419+ 293, 586, 1172, 2344, 4688, 271, 542, 1084, 2168, 4336, 1103,
16420+ 2206, 4412, 2007, 4014, 8028, 6935, 4993, 685, 1370, 2740,
16421+ 5480, 3967, 7934, 6227, 5385, 4029, 8058, 7003, 4889, 925,
16422+ 1850, 3700, 7400, 7295, 7505, 7949, 7093, 4805, 37, 74, 148,
16423+ 296, 592, 1184, 2368, 4736, 175, 350, 700, 1400, 2800, 5600,
16424+ 3695, 7390, 7187, 7561, 7869, 6357, 5125, 3493, 6986, 4923,
16425+ 985, 1970, 3940, 7880, 6207, 5585, 3597, 7194, 7579, 7833,
16426+ 6301, 5269, 3205, 6410, 6075, 2777, 5554, 3787, 7574, 7811,
16427+ 6313, 5373, 3157, 6314, 5371, 3161, 6322, 5323, 3129, 6258,
16428+ 5451, 3897, 7794, 6475, 5945, 3037, 6074, 2779, 5558, 3779,
16429+ 7558, 7843, 6377, 5245, 3413, 6826, 4347, 1113, 2226, 4452,
16430+ 1895, 3790, 7580, 7831, 6273, 5293, 3317, 6634, 5755, 2393,
16431+ 4786, 203, 406, 812, 1624, 3248, 6496, 5999, 2929, 5858, 2155,
16432+ 4310, 1027, 2054, 4108, 1463, 2926, 5852, 2071, 4142, 1523,
16433+ 3046, 6092, 2615, 5230, 3443, 6886, 4195, 1385, 2770, 5540,
16434+ 3815, 7630, 7731, 6601, 5693, 2517, 5034, 763, 1526, 3052,
16435+ 6104, 2591, 5182, 3539, 7078, 4835, 105, 210, 420, 840, 1680,
16436+ 3360, 6720, 4399, 2033, 4066, 8132, 6695, 4577, 1645, 3290,
16437+ 6580, 5831, 2081, 4162, 1323, 2646, 5292, 3319, 6638, 5747,
16438+ 2377, 4754, 139, 278, 556, 1112, 2224, 4448, 1903, 3806, 7612,
16439+ 7895, 6145, 5549, 3829, 7658, 7803, 6489, 5917, 2965, 5930,
16440+ 3067, 6134, 2627, 5254, 3235, 6470, 5923, 3049, 6098, 2571,
16441+ 5142, 3459, 6918, 5027, 745, 1490, 2980, 5960, 2879, 5758,
16442+ 2387, 4774, 227, 454, 908, 1816, 3632, 7264, 7535, 8049, 6989,
16443+ 4917, 965, 1930, 3860, 7720, 6655, 5713, 2317, 4634, 411, 822,
16444+ 1644, 3288, 6576, 5839, 2097, 4194, 1387, 2774, 5548, 3831,
16445+ 7662, 7795, 6473, 5949, 3029, 6058, 2811, 5622, 3651, 7302,
16446+ 7331, 7401, 7293, 7509, 7941, 7077, 4837, 101, 202, 404, 808,
16447+ 1616, 3232, 6464, 5935, 3057, 6114, 2667, 5334, 3075, 6150,
16448+ 5539, 3817, 7634, 7691, 6585, 5853, 2069, 4138, 1531, 3062,
16449+ 6124, 2679, 5358, 3187, 6374, 5219, 3433, 6866, 4107, 1465,
16450+ 2930, 5860, 2151, 4302, 1075, 2150, 4300, 1079, 2158, 4316,
16451+ 1047, 2094, 4188, 1303, 2606, 5212, 3351, 6702, 4595, 1609,
16452+ 3218, 6436, 6119, 2657, 5314, 3115, 6230, 5379, 4009, 8018,
16453+ 6923, 5049, 733, 1466, 2932, 5864, 2175, 4350, 1107, 2214,
16454+ 4428, 1847, 3694, 7388, 7191, 7553, 7853, 6389, 5189, 3365,
16455+ 6730, 4411, 2009, 4018, 8036, 7015, 4961, 877, 1754, 3508,
16456+ 7016, 4991, 849, 1698, 3396, 6792, 4287, 1233, 2466, 4932,
16457+ 807, 1614, 3228, 6456, 6111, 2577, 5154, 3563, 7126, 4611,
16458+ 425, 850, 1700, 3400, 6800, 4239, 1201, 2402, 4804, 39, 78,
16459+ 156, 312, 624, 1248, 2496, 4992, 687, 1374, 2748, 5496, 3935,
16460+ 7870, 6355, 5129, 3517, 7034, 4955, 793, 1586, 3172, 6344,
16461+ 5183, 3537, 7074, 4843, 121, 242, 484, 968, 1936, 3872, 7744,
16462+ 6447, 6129, 2637, 5274, 3227, 6454, 6083, 2601, 5202, 3339,
16463+ 6678, 4483, 1705, 3410, 6820, 4327, 1121, 2242, 4484, 1703,
16464+ 3406, 6812, 4247, 1153, 2306, 4612, 423, 846, 1692, 3384,
16465+ 6768, 4431, 1841, 3682, 7364, 7207, 7649, 7789, 6517, 5957,
16466+ 2853, 5706, 2363, 4726, 323, 646, 1292, 2584, 5168, 3535,
16467+ 7070, 4755, 137, 274, 548, 1096, 2192, 4384, 2031, 4062, 8124,
16468+ 6871, 4097, 1453, 2906, 5812, 2247, 4494, 1715, 3430, 6860,
16469+ 4151, 1473, 2946, 5892, 2983, 5966, 2867, 5734, 2403, 4806,
16470+ 35, 70, 140, 280, 560, 1120, 2240, 4480, 1711, 3422, 6844,
16471+ 4311, 1025, 2050, 4100, 1447, 2894, 5788, 2199, 4398, 2035,
16472+ 4070, 8140, 6711, 4545, 1581, 3162, 6324, 5319, 3105, 6210,
16473+ 5419, 4089, 8178, 6731, 4409, 2013, 4026, 8052, 6983, 4897,
16474+ 1005, 2010, 4020, 8040, 7039, 4945, 781, 1562, 3124, 6248,
16475+ 5503, 3921, 7842, 6379, 5241, 3421, 6842, 4315, 1049, 2098,
16476+ 4196, 1383, 2766, 5532, 3735, 7470, 8179, 6729, 4413, 2005,
16477+ 4010, 8020, 6919, 5025, 749, 1498, 2996, 5992, 2943, 5886,
16478+ 2131, 4262, 1251, 2502, 5004, 695, 1390, 2780, 5560, 3807,
16479+ 7614, 7891, 6153, 5565, 3797, 7594, 7931, 6233, 5405, 3989,
16480+ 7978, 7163, 4697, 285, 570, 1140, 2280, 4560, 1551, 3102,
16481+ 6204, 5591, 3585, 7170, 7595, 7929, 6237, 5397, 3973, 7946,
16482+ 7099, 4825, 29, 58, 116, 232, 464, 928, 1856, 3712, 7424,
16483+ 8111, 6897, 4173, 1333, 2666, 5332, 3079, 6158, 5555, 3785,
16484+ 7570, 7819, 6329, 5341, 3093, 6186, 5627, 3673, 7346, 7371,
16485+ 7225, 7645, 7701, 6533, 5797, 2277, 4554, 1595, 3190, 6380,
16486+ 5239, 3393, 6786, 4267, 1273, 2546, 5092, 615, 1230, 2460,
16487+ 4920, 991, 1982, 3964, 7928, 6239, 5393, 3981, 7962, 7067,
16488+ 4761, 157, 314, 628, 1256, 2512, 5024, 751, 1502, 3004, 6008,
16489+ 2911, 5822, 2259, 4518, 1763, 3526, 7052, 4791, 193, 386, 772,
16490+ 1544, 3088, 6176, 5615, 3697, 7394, 7275, 7545, 8029, 6933,
16491+ 4997, 677, 1354, 2708, 5416, 4095, 8190, 6739, 4361, 1981,
16492+ 3962, 7924, 6215, 5409, 4077, 8154, 6683, 4505, 1693, 3386,
16493+ 6772, 4423, 1825, 3650, 7300, 7335, 7393, 7277, 7541, 8005,
16494+ 6949, 5093, 613, 1226, 2452, 4904, 1023, 2046, 4092, 8184,
16495+ 6751, 4369, 1933, 3866, 7732, 6599, 5665, 2541, 5082, 539,
16496+ 1078, 2156, 4312, 1055, 2110, 4220, 1367, 2734, 5468, 3863,
16497+ 7726, 6643, 5705, 2365, 4730, 347, 694, 1388, 2776, 5552,
16498+ 3791, 7582, 7827, 6281, 5309, 3285, 6570, 5883, 2137, 4274,
16499+ 1227, 2454, 4908, 1015, 2030, 4060, 8120, 6879, 4113, 1421,
16500+ 2842, 5684, 2503, 5006, 691, 1382, 2764, 5528, 3743, 7486,
16501+ 8147, 6665, 4541, 1749, 3498, 6996, 4871, 929, 1858, 3716,
16502+ 7432, 8127, 6865, 4109, 1461, 2922, 5844, 2055, 4110, 1459,
16503+ 2918, 5836, 2103, 4206, 1395, 2790, 5580, 3639, 7278, 7539,
16504+ 8009, 6973, 5077, 517, 1034, 2068, 4136, 1535, 3070, 6140,
16505+ 2647, 5294, 3315, 6630, 5731, 2409, 4818, 11, 22, 44, 88, 176,
16506+ 352, 704, 1408, 2816, 5632, 2479, 4958, 787, 1574, 3148, 6296,
16507+ 5279, 3217, 6434, 6123, 2681, 5362, 3147, 6294, 5251, 3241,
16508+ 6482, 5899, 3001, 6002, 2891, 5782, 2179, 4358, 1955, 3910,
16509+ 7820, 6327, 5313, 3117, 6234, 5403, 3993, 7986, 7115, 4665,
16510+ 477, 954, 1908, 3816, 7632, 7695, 6577, 5837, 2101, 4202,
16511+ 1403, 2806, 5612, 3703, 7406, 7283, 7497, 7997, 7125, 4613,
16512+ 421, 842, 1684, 3368, 6736, 4367, 1969, 3938, 7876, 6183,
16513+ 5601, 3693, 7386, 7195, 7577, 7837, 6293, 5253, 3237, 6474,
16514+ 5947, 3033, 6066, 2763, 5526, 3715, 7430, 8099, 6889, 4221,
16515+ 1365, 2730, 5460, 3847, 7694, 6579, 5833, 2109, 4218, 1371,
16516+ 2742, 5484, 3959, 7918, 6259, 5449, 3901, 7802, 6491, 5913,
16517+ 2973, 5946, 3035, 6070, 2755, 5510, 3747, 7494, 7971, 7145,
16518+ 4733, 341, 682, 1364, 2728, 5456, 3855, 7710, 6547, 5769,
16519+ 2237, 4474, 1883, 3766, 7532, 8055, 6977, 4909, 1013, 2026,
16520+ 4052, 8104, 6911, 4177, 1293, 2586, 5172, 3527, 7054, 4787,
16521+ 201, 402, 804, 1608, 3216, 6432, 6127, 2673, 5346, 3179, 6358,
16522+ 5123, 3497, 6994, 4875, 953, 1906, 3812, 7624, 7743, 6609,
16523+ 5645, 2485, 4970, 891, 1782, 3564, 7128, 4639, 401, 802, 1604,
16524+ 3208, 6416, 6031, 2737, 5474, 3947, 7894, 6147, 5545, 3837,
16525+ 7674, 7771, 6425, 6045, 2709, 5418, 4091, 8182, 6723, 4393,
16526+ 2045, 4090, 8180, 6727, 4385, 2029, 4058, 8116, 6855, 4129,
16527+ 1517, 3034, 6068, 2759, 5518, 3763, 7526, 8035, 7017, 4989,
16528+ 853, 1706, 3412, 6824, 4351, 1105, 2210, 4420, 1831, 3662,
16529+ 7324, 7319, 7297, 7341, 7413, 7237, 7461, 8165, 6757, 4453,
16530+ 1893, 3786, 7572, 7815, 6305, 5357, 3189, 6378, 5243, 3417,
16531+ 6834, 4299, 1081, 2162, 4324, 1127, 2254, 4508, 1687, 3374,
16532+ 6748, 4375, 1921, 3842, 7684, 6567, 5857, 2157, 4314, 1051,
16533+ 2102, 4204, 1399, 2798, 5596, 3607, 7214, 7667, 7753, 6461,
16534+ 6101, 2565, 5130, 3515, 7030, 4931, 809, 1618, 3236, 6472,
16535+ 5951, 3025, 6050, 2795, 5590, 3587, 7174, 7587, 7913, 6269,
16536+ 5461, 3845, 7690, 6587, 5849, 2077, 4154, 1499, 2998, 5996,
16537+ 2935, 5870, 2163, 4326, 1123, 2246, 4492, 1719, 3438, 6876,
16538+ 4119, 1409, 2818, 5636, 2471, 4942, 819, 1638, 3276, 6552,
16539+ 5791, 2193, 4386, 2027, 4054, 8108, 6903, 4161, 1325, 2650,
16540+ 5300, 3271, 6542, 5811, 2249, 4498, 1675, 3350, 6700, 4599,
16541+ 1601, 3202, 6404, 6055, 2785, 5570, 3627, 7254, 7427, 8105,
16542+ 6909, 4181, 1285, 2570, 5140, 3463, 6926, 5043, 713, 1426,
16543+ 2852, 5704, 2367, 4734, 339, 678, 1356, 2712, 5424, 4047,
16544+ 8094, 6803, 4233, 1213, 2426, 4852, 71, 142, 284, 568, 1136,
16545+ 2272, 4544, 1583, 3166, 6332, 5335, 3073, 6146, 5547, 3833,
16546+ 7666, 7755, 6457, 6109, 2581, 5162, 3579, 7158, 4675, 297,
16547+ 594, 1188, 2376, 4752, 143, 286, 572, 1144, 2288, 4576, 1647,
16548+ 3294, 6588, 5847, 2049, 4098, 1451, 2902, 5804, 2295, 4590,
16549+ 1651, 3302, 6604, 5687, 2497, 4994, 683, 1366, 2732, 5464,
16550+ 3871, 7742, 6611, 5641, 2493, 4986, 859, 1718, 3436, 6872,
16551+ 4127, 1425, 2850, 5700, 2343, 4686, 307, 614, 1228, 2456,
16552+ 4912, 975, 1950, 3900, 7800, 6495, 5905, 2957, 5914, 2971,
16553+ 5942, 3011, 6022, 2723, 5446, 3875, 7750, 6435, 6121, 2685,
16554+ 5370, 3163, 6326, 5315, 3113, 6226, 5387, 4025, 8050, 6987,
16555+ 4921, 989, 1978, 3956, 7912, 6271, 5457, 3853, 7706, 6555,
16556+ 5785, 2205, 4410, 2011, 4022, 8044, 7031, 4929, 813, 1626,
16557+ 3252, 6504, 6015, 2897, 5794, 2283, 4566, 1539, 3078, 6156,
16558+ 5559, 3777, 7554, 7851, 6393, 5213, 3349, 6698, 4603, 1625,
16559+ 3250, 6500, 5991, 2913, 5826, 2091, 4182, 1283, 2566, 5132,
16560+ 3511, 7022, 4979, 841, 1682, 3364, 6728, 4415, 2001, 4002,
16561+ 8004, 6951, 5089, 621, 1242, 2484, 4968, 895, 1790, 3580,
16562+ 7160, 4703, 273, 546, 1092, 2184, 4368, 1935, 3870, 7740,
16563+ 6615, 5633, 2477, 4954, 795, 1590, 3180, 6360, 5151, 3473,
16564+ 6946, 5099, 633, 1266, 2532, 5064, 575, 1150, 2300, 4600,
16565+ 1631, 3262, 6524, 5975, 2817, 5634, 2475, 4950, 771, 1542,
16566+ 3084, 6168, 5535, 3729, 7458, 8171, 6777, 4445, 1813, 3626,
16567+ 7252, 7431, 8097, 6893, 4213, 1349, 2698, 5396, 3975, 7950,
16568+ 7091, 4809, 61, 122, 244, 488, 976, 1952, 3904, 7808, 6319,
16569+ 5361, 3149, 6298, 5275, 3225, 6450, 6091, 2617, 5234, 3403,
16570+ 6806, 4227, 1193, 2386, 4772, 231, 462, 924, 1848, 3696, 7392,
16571+ 7279, 7537, 8013, 6965, 5061, 549, 1098, 2196, 4392, 2047,
16572+ 4094, 8188, 6743, 4353, 1965, 3930, 7860, 6343, 5153, 3565,
16573+ 7130, 4635, 409, 818, 1636, 3272, 6544, 5775, 2225, 4450,
16574+ 1899, 3798, 7596, 7927, 6209, 5421, 4085, 8170, 6779, 4441,
16575+ 1821, 3642, 7284, 7495, 7969, 7149, 4725, 325, 650, 1300,
16576+ 2600, 5200, 3343, 6686, 4499, 1673, 3346, 6692, 4583, 1633,
16577+ 3266, 6532, 5799, 2273, 4546, 1579, 3158, 6316, 5367, 3137,
16578+ 6274, 5291, 3321, 6642, 5707, 2361, 4722, 331, 662, 1324,
16579+ 2648, 5296, 3279, 6558, 5779, 2185, 4370, 1931, 3862, 7724,
16580+ 6647, 5697, 2349, 4698, 283, 566, 1132, 2264, 4528, 1743,
16581+ 3486, 6972, 5079, 513, 1026, 2052, 4104, 1471, 2942, 5884,
16582+ 2135, 4270, 1267, 2534, 5068, 567, 1134, 2268, 4536, 1759,
16583+ 3518, 7036, 4951, 769, 1538, 3076, 6152, 5567, 3793, 7586,
16584+ 7915, 6265, 5469, 3861, 7722, 6651, 5721, 2333, 4666, 475,
16585+ 950, 1900, 3800, 7600, 7887, 6193, 5581, 3637, 7274, 7547,
16586+ 8025, 6941, 5013, 645, 1290, 2580, 5160, 3583, 7166, 4691,
16587+ 265, 530, 1060, 2120, 4240, 1167, 2334, 4668, 471, 942, 1884,
16588+ 3768, 7536, 8015, 6961, 5069, 565, 1130, 2260, 4520, 1791,
16589+ 3582, 7164, 4695, 257, 514, 1028, 2056, 4112, 1423, 2846,
16590+ 5692, 2519, 5038, 755, 1510, 3020, 6040, 2719, 5438, 4051,
16591+ 8102, 6883, 4201, 1405, 2810, 5620, 3655, 7310, 7347, 7369,
16592+ 7229, 7637, 7685, 6565, 5861, 2149, 4298, 1083, 2166, 4332,
16593+ 1143, 2286, 4572, 1559, 3118, 6236, 5399, 3969, 7938, 7083,
16594+ 4857, 93, 186, 372, 744, 1488, 2976, 5952, 2863, 5726, 2323,
16595+ 4646, 483, 966, 1932, 3864, 7728, 6607, 5681, 2509, 5018, 667,
16596+ 1334, 2668, 5336, 3103, 6206, 5587, 3593, 7186, 7563, 7865,
16597+ 6365, 5141, 3461, 6922, 5051, 729, 1458, 2916, 5832, 2111,
16598+ 4222, 1363, 2726, 5452, 3895, 7790, 6515, 5961, 2877, 5754,
16599+ 2395, 4790, 195, 390, 780, 1560, 3120, 6240, 5487, 3953, 7906,
16600+ 6251, 5497, 3933, 7866, 6363, 5145, 3485, 6970, 5083, 537,
16601+ 1074, 2148, 4296, 1087, 2174, 4348, 1111, 2222, 4444, 1815,
16602+ 3630, 7260, 7447, 8065, 6829, 4341, 1093, 2186, 4372, 1927,
16603+ 3854, 7708, 6551, 5761, 2221, 4442, 1819, 3638, 7276, 7543,
16604+ 8001, 6957, 5109, 581, 1162, 2324, 4648, 511, 1022, 2044,
16605+ 4088, 8176, 6735, 4401, 1997, 3994, 7988, 7111, 4641, 493,
16606+ 986, 1972, 3944, 7888, 6159, 5553, 3789, 7578, 7835, 6297,
16607+ 5277, 3221, 6442, 6139, 2649, 5298, 3275, 6550, 5763, 2217,
16608+ 4434, 1803, 3606, 7212, 7671, 7745, 6445, 6133, 2629, 5258,
16609+ 3259, 6518, 5955, 2857, 5714, 2315, 4630, 387, 774, 1548,
16610+ 3096, 6192, 5583, 3633, 7266, 7531, 8057, 7005, 4885, 901,
16611+ 1802, 3604, 7208, 7679, 7761, 6413, 6069, 2757, 5514, 3771,
16612+ 7542, 8003, 6953, 5117, 597, 1194, 2388, 4776, 255, 510, 1020,
16613+ 2040, 4080, 8160, 6767, 4465, 1869, 3738, 7476, 8135, 6689,
16614+ 4589, 1653, 3306, 6612, 5639, 2465, 4930, 811, 1622, 3244,
16615+ 6488, 5919, 2961, 5922, 3051, 6102, 2563, 5126, 3491, 6982,
16616+ 4899, 1001, 2002, 4004, 8008, 6975, 5073, 525, 1050, 2100,
16617+ 4200, 1407, 2814, 5628, 3671, 7342, 7411, 7241, 7485, 8149,
16618+ 6661, 4517, 1765, 3530, 7060, 4743, 161, 322, 644, 1288, 2576,
16619+ 5152, 3567, 7134, 4627, 393, 786, 1572, 3144, 6288, 5263,
16620+ 3249, 6498, 5995, 2937, 5874, 2123, 4246, 1155, 2310, 4620,
16621+ 439, 878, 1756, 3512, 7024, 4943, 817, 1634, 3268, 6536, 5823,
16622+ 2257, 4514, 1771, 3542, 7084, 4855, 65, 130, 260, 520, 1040,
16623+ 2080, 4160, 1327, 2654, 5308, 3287, 6574, 5875, 2121, 4242,
16624+ 1163, 2326, 4652, 503, 1006, 2012, 4024, 8048, 6991, 4913,
16625+ 973, 1946, 3892, 7784, 6527, 5969, 2829, 5658, 2459, 4918,
16626+ 963, 1926, 3852, 7704, 6559, 5777, 2189, 4378, 1947, 3894,
16627+ 7788, 6519, 5953, 2861, 5722, 2331, 4662, 451, 902, 1804,
16628+ 3608, 7216, 7631, 7729, 6605, 5685, 2501, 5002, 699, 1398,
16629+ 2796, 5592, 3615, 7230, 7635, 7689, 6589, 5845, 2053, 4106,
16630+ 1467, 2934, 5868, 2167, 4334, 1139, 2278, 4556, 1591, 3182,
16631+ 6364, 5143, 3457, 6914, 5035, 761, 1522, 3044, 6088, 2623,
16632+ 5246, 3411, 6822, 4323, 1129, 2258, 4516, 1767, 3534, 7068,
16633+ 4759, 129, 258, 516, 1032, 2064, 4128, 1519, 3038, 6076, 2775,
16634+ 5550, 3827, 7654, 7779, 6505, 6013, 2901, 5802, 2299, 4598,
16635+ 1603, 3206, 6412, 6071, 2753, 5506, 3755, 7510, 7939, 7081,
16636+ 4861, 85, 170, 340, 680, 1360, 2720, 5440, 3887, 7774, 6419,
16637+ 6025, 2749, 5498, 3931, 7862, 6339, 5161, 3581, 7162, 4699,
16638+ 281, 562, 1124, 2248, 4496, 1679, 3358, 6716, 4567, 1537,
16639+ 3074, 6148, 5543, 3809, 7618, 7723, 6649, 5725, 2325, 4650,
16640+ 507, 1014, 2028, 4056, 8112, 6863, 4145, 1485, 2970, 5940,
16641+ 3015, 6030, 2739, 5478, 3939, 7878, 6179, 5609, 3709, 7418,
16642+ 7259, 7449, 8093, 6805, 4229, 1189, 2378, 4756, 135, 270, 540,
16643+ 1080, 2160, 4320, 1135, 2270, 4540, 1751, 3502, 7004, 4887,
16644+ 897, 1794, 3588, 7176, 7615, 7889, 6157, 5557, 3781, 7562,
16645+ 7867, 6361, 5149, 3477, 6954, 5115, 601, 1202, 2404, 4808, 63,
16646+ 126, 252, 504, 1008, 2016, 4032, 8064, 6831, 4337, 1101, 2202,
16647+ 4404, 1991, 3982, 7964, 7063, 4737, 173, 346, 692, 1384, 2768,
16648+ 5536, 3823, 7646, 7699, 6537, 5821, 2261, 4522, 1787, 3574,
16649+ 7148, 4727, 321, 642, 1284, 2568, 5136, 3471, 6942, 5011, 649,
16650+ 1298, 2596, 5192, 3391, 6782, 4435, 1801, 3602, 7204, 7655,
16651+ 7777, 6509, 6005, 2885, 5770, 2235, 4470, 1859, 3718, 7436,
16652+ 8119, 6849, 4141, 1525, 3050, 6100, 2567, 5134, 3507, 7014,
16653+ 4963, 873, 1746, 3492, 6984, 4927, 977, 1954, 3908, 7816,
16654+ 6335, 5329, 3085, 6170, 5531, 3737, 7474, 8139, 6713, 4573,
16655+ 1557, 3114, 6228, 5383, 4001, 8002, 6955, 5113, 605, 1210,
16656+ 2420, 4840, 127, 254, 508, 1016, 2032, 4064, 8128, 6703, 4593,
16657+ 1613, 3226, 6452, 6087, 2593, 5186, 3371, 6742, 4355, 1961,
16658+ 3922, 7844, 6375, 5217, 3437, 6874, 4123, 1433, 2866, 5732,
16659+ 2407, 4814, 51, 102, 204, 408, 816, 1632, 3264, 6528, 5807,
16660+ 2289, 4578, 1643, 3286, 6572, 5879, 2113, 4226, 1195, 2390,
16661+ 4780, 247, 494, 988, 1976, 3952, 7904, 6255, 5489, 3917, 7834,
16662+ 6299, 5273, 3229, 6458, 6107, 2585, 5170, 3531, 7062, 4739,
16663+ 169, 338, 676, 1352, 2704, 5408, 4079, 8158, 6675, 4489, 1725,
16664+ 3450, 6900, 4167, 1313, 2626, 5252, 3239, 6478, 5939, 3017,
16665+ 6034, 2699, 5398, 3971, 7942, 7075, 4841, 125, 250, 500, 1000,
16666+ 2000, 4000, 8000, 6959, 5105, 589, 1178, 2356, 4712, 383, 766,
16667+ 1532, 3064, 6128, 2639, 5278, 3219, 6438, 6115, 2665, 5330,
16668+ 3083, 6166, 5507, 3753, 7506, 7947, 7097, 4829, 21, 42, 84,
16669+ 168, 336, 672, 1344, 2688, 5376, 4015, 8030, 6931, 5001, 701,
16670+ 1402, 2804, 5608, 3711, 7422, 7251, 7433, 8125, 6869, 4101,
16671+ 1445, 2890, 5780, 2183, 4366, 1971, 3942, 7884, 6199, 5569,
16672+ 3629, 7258, 7451, 8089, 6813, 4245, 1157, 2314, 4628, 391,
16673+ 782, 1564, 3128, 6256, 5455, 3889, 7778, 6507, 6009, 2909,
16674+ 5818, 2267, 4534, 1731, 3462, 6924, 5047, 705, 1410, 2820,
16675+ 5640, 2495, 4990, 851, 1702, 3404, 6808, 4255, 1169, 2338,
16676+ 4676, 295, 590, 1180, 2360, 4720, 335, 670, 1340, 2680, 5360,
16677+ 3151, 6302, 5267, 3209, 6418, 6027, 2745, 5490, 3915, 7830,
16678+ 6275, 5289, 3325, 6650, 5723, 2329, 4658, 459, 918, 1836,
16679+ 3672, 7344, 7375, 7217, 7629, 7733, 6597, 5669, 2533, 5066,
16680+ 571, 1142, 2284, 4568, 1567, 3134, 6268, 5463, 3841, 7682,
16681+ 6571, 5881, 2141, 4282, 1243, 2486, 4972, 887, 1774, 3548,
16682+ 7096, 4831, 17, 34, 68, 136, 272, 544, 1088, 2176, 4352, 1967,
16683+ 3934, 7868, 6359, 5121, 3501, 7002, 4891, 921, 1842, 3684,
16684+ 7368, 7231, 7633, 7693, 6581, 5829, 2085, 4170, 1339, 2678,
16685+ 5356, 3191, 6382, 5235, 3401, 6802, 4235, 1209, 2418, 4836,
16686+ 103, 206, 412, 824, 1648, 3296, 6592, 5679, 2545, 5090, 619,
16687+ 1238, 2476, 4952, 799, 1598, 3196, 6392, 5215, 3345, 6690,
16688+ 4587, 1657, 3314, 6628, 5735, 2401, 4802, 43, 86, 172, 344,
16689+ 688, 1376, 2752, 5504, 3759, 7518, 7955, 7049, 4797, 213, 426,
16690+ 852, 1704, 3408, 6816, 4335, 1137, 2274, 4548, 1575, 3150,
16691+ 6300, 5271, 3201, 6402, 6059, 2809, 5618, 3659, 7318, 7299,
16692+ 7337, 7421, 7253, 7429, 8101, 6885, 4197, 1381, 2762, 5524,
16693+ 3719, 7438, 8115, 6857, 4157, 1493, 2986, 5972, 2823, 5646,
16694+ 2483, 4966, 867, 1734, 3468, 6936, 5023, 657, 1314, 2628,
16695+ 5256, 3263, 6526, 5971, 2825, 5650, 2443, 4886, 899, 1798,
16696+ 3596, 7192, 7583, 7825, 6285, 5301, 3269, 6538, 5819, 2265,
16697+ 4530, 1739, 3478, 6956, 5111, 577, 1154, 2308, 4616, 447, 894,
16698+ 1788, 3576, 7152, 4687, 305, 610, 1220, 2440, 4880, 911, 1822,
16699+ 3644, 7288, 7519, 7953, 7053, 4789, 197, 394, 788, 1576, 3152,
16700+ 6304, 5359, 3185, 6370, 5227, 3449, 6898, 4171, 1337, 2674,
16701+ 5348, 3175, 6350, 5171, 3529, 7058, 4747, 185, 370, 740, 1480,
16702+ 2960, 5920, 3055, 6110, 2579, 5158, 3555, 7110, 4643, 489,
16703+ 978, 1956, 3912, 7824, 6287, 5297, 3277, 6554, 5787, 2201,
16704+ 4402, 1995, 3990, 7980, 7159, 4673, 301, 602, 1204, 2408,
16705+ 4816, 15, 30, 60, 120, 240, 480, 960, 1920, 3840, 7680, 6575,
16706+ 5873, 2125, 4250, 1179, 2358, 4716, 375, 750, 1500, 3000,
16707+ 6000, 2895, 5790, 2195, 4390, 2019, 4038, 8076, 6839, 4289,
16708+ 1069, 2138, 4276, 1223, 2446, 4892, 919, 1838, 3676, 7352,
16709+ 7391, 7185, 7565, 7861, 6341, 5157, 3557, 7114, 4667, 473,
16710+ 946, 1892, 3784, 7568, 7823, 6321, 5325, 3125, 6250, 5499,
16711+ 3929, 7858, 6347, 5177, 3549, 7098, 4827, 25, 50, 100, 200,
16712+ 400, 800, 1600, 3200, 6400, 6063, 2801, 5602, 3691, 7382,
16713+ 7171, 7593, 7933, 6229, 5381, 4005, 8010, 6971, 5081, 541,
16714+ 1082, 2164, 4328, 1151, 2302, 4604, 1623, 3246, 6492, 5911,
16715+ 2945, 5890, 2987, 5974, 2819, 5638, 2467, 4934, 803, 1606,
16716+ 3212, 6424, 6047, 2705, 5410, 4075, 8150, 6659, 4521, 1789,
16717+ 3578, 7156, 4679, 289, 578, 1156, 2312, 4624, 399, 798, 1596,
16718+ 3192, 6384, 5199, 3377, 6754, 4459, 1913, 3826, 7652, 7783,
16719+ 6497, 5997, 2933, 5866, 2171, 4342, 1091, 2182, 4364, 1975,
16720+ 3950, 7900, 6167, 5505, 3757, 7514, 7963, 7065, 4765, 149,
16721+ 298, 596, 1192, 2384, 4768, 239, 478, 956, 1912, 3824, 7648,
16722+ 7791, 6513, 5965, 2869, 5738, 2427, 4854, 67, 134, 268, 536,
16723+ 1072, 2144, 4288, 1071, 2142, 4284, 1239, 2478, 4956, 791,
16724+ 1582, 3164, 6328, 5343, 3089, 6178, 5611, 3705, 7410, 7243,
16725+ 7481, 8157, 6677, 4485, 1701, 3402, 6804, 4231, 1185, 2370,
16726+ 4740, 167, 334, 668, 1336, 2672, 5344, 3183, 6366, 5139, 3465,
16727+ 6930, 5003, 697, 1394, 2788, 5576, 3647, 7294, 7507, 7945,
16728+ 7101, 4821, 5, 10, 20, 40, 80, 160, 320, 640, 1280, 2560,
16729+ 5120, 3503, 7006, 4883, 905, 1810, 3620, 7240, 7487, 8145,
16730+ 6669, 4533, 1733, 3466, 6932, 4999, 673, 1346, 2692, 5384,
16731+ 4031, 8062, 6995, 4873, 957, 1914, 3828, 7656, 7807, 6481,
16732+ 5901, 2997, 5994, 2939, 5878, 2115, 4230, 1187, 2374, 4748,
16733+ 183, 366, 732, 1464, 2928, 5856, 2159, 4318, 1043, 2086, 4172,
16734+ 1335, 2670, 5340, 3095, 6190, 5619, 3657, 7314, 7307, 7353,
16735+ 7389, 7189, 7557, 7845, 6373, 5221, 3429, 6858, 4155, 1497,
16736+ 2994, 5988, 2919, 5838, 2099, 4198, 1379, 2758, 5516, 3767,
16737+ 7534, 8051, 6985, 4925, 981, 1962, 3924, 7848, 6399, 5201,
16738+ 3341, 6682, 4507, 1689, 3378, 6756, 4455, 1889, 3778, 7556,
16739+ 7847, 6369, 5229, 3445, 6890, 4219, 1369, 2738, 5476, 3943,
16740+ 7886, 6195, 5577, 3645, 7290, 7515, 7961, 7069, 4757, 133,
16741+ 266, 532, 1064, 2128, 4256, 1263, 2526, 5052, 727, 1454, 2908,
16742+ 5816, 2271, 4542, 1747, 3494, 6988, 4919, 961, 1922, 3844,
16743+ 7688, 6591, 5841, 2061, 4122, 1435, 2870, 5740, 2423, 4846,
16744+ 115, 230, 460, 920, 1840, 3680, 7360, 7215, 7665, 7757, 6453,
16745+ 6085, 2597, 5194, 3387, 6774, 4419, 1833, 3666, 7332, 7399,
16746+ 7265, 7533, 8053, 6981, 4901, 997, 1994, 3988, 7976, 7167,
16747+ 4689, 269, 538, 1076, 2152, 4304, 1039, 2078, 4156, 1495,
16748+ 2990, 5980, 2839, 5678, 2547, 5094, 611, 1222, 2444, 4888,
16749+ 927, 1854, 3708, 7416, 7263, 7441, 8077, 6837, 4293, 1061,
16750+ 2122, 4244, 1159, 2318, 4636, 407, 814, 1628, 3256, 6512,
16751+ 5967, 2865, 5730, 2411, 4822, 3, 6, 12, 24, 48, 96, 192, 384,
16752+ 768, 1536, 3072, 6144, 5551, 3825, 7650, 7787, 6521, 5981,
16753+ 2837, 5674, 2555, 5110, 579, 1158, 2316, 4632, 415, 830, 1660,
16754+ 3320, 6640, 5711, 2353, 4706, 363, 726, 1452, 2904, 5808,
16755+ 2255, 4510, 1683, 3366, 6732, 4407, 1985, 3970, 7940, 7079,
16756+ 4833, 109, 218, 436, 872, 1744, 3488, 6976, 4911, 1009, 2018,
16757+ 4036, 8072, 6847, 4305, 1037, 2074, 4148, 1479, 2958, 5916,
16758+ 2967, 5934, 3059, 6118, 2659, 5318, 3107, 6214, 5411, 4073,
16759+ 8146, 6667, 4537, 1757, 3514, 7028, 4935, 801, 1602, 3204,
16760+ 6408, 6079, 2769, 5538, 3819, 7638, 7683, 6569, 5885, 2133,
16761+ 4266, 1275, 2550, 5100, 631, 1262, 2524, 5048, 735, 1470,
16762+ 2940, 5880, 2143, 4286, 1235, 2470, 4940, 823, 1646, 3292,
16763+ 6584, 5855, 2065, 4130, 1515, 3030, 6060, 2807, 5614, 3699,
16764+ 7398, 7267, 7529, 8061, 6997, 4869, 933, 1866, 3732, 7464,
16765+ 8191, 6737, 4365, 1973, 3946, 7892, 6151, 5537, 3821, 7642,
16766+ 7707, 6553, 5789, 2197, 4394, 2043, 4086, 8172, 6775, 4417,
16767+ 1837, 3674, 7348, 7367, 7201, 7661, 7797, 6469, 5925, 3045,
16768+ 6090, 2619, 5238, 3395, 6790, 4259, 1257, 2514, 5028, 743,
16769+ 1486, 2972, 5944, 3039, 6078, 2771, 5542, 3811, 7622, 7715,
16770+ 6633, 5757, 2389, 4778, 251, 502, 1004, 2008, 4016, 8032,
16771+ 7023, 4977, 845, 1690, 3380, 6760, 4479, 1873, 3746, 7492,
16772+ 7975, 7137, 4717, 373, 746, 1492, 2984, 5968, 2831, 5662,
16773+ 2451, 4902, 995, 1990, 3980, 7960, 7071, 4753, 141, 282, 564,
16774+ 1128, 2256, 4512, 1775, 3550, 7100, 4823, 0
16775+};
16776+
16777+static int err_loc_ply[100][100];
16778+
16779+static int
16780+fix_section(unsigned long offset, void *data, int *syndromes_in)
16781+{
16782+ int i, j, elp_sum;
16783+ int syndromes[9];
16784+ int Matrix_a[11];
16785+ int Matrix_b[11];
16786+ int Matrix_c[12];
16787+ int Element[7];
16788+ int alpha;
16789+ int temp_index;
16790+ int data_location, rev_location;
16791+ int result_byte, result_bit;
16792+ int err_location[20];
16793+ int err_count;
16794+ int d_flg;
16795+ int block_length, data_length;
16796+
16797+ /* correct 4 bits in 512 bytes */
16798+ data_length = 4096;
16799+ block_length = 8191;
16800+
16801+ /*
16802+ If there are no errors, just return.
16803+ */
16804+
16805+ j = 0;
16806+
16807+ for (i = 0; i < 8; ++i) {
16808+ if (0 != syndromes_in[i]) {
16809+ j = 1;
16810+ break;
16811+ }
16812+ }
16813+
16814+ if (0 == j)
16815+ return 0;
16816+
16817+ /*
16818+ Decode.
16819+ */
16820+
16821+ memcpy((void *)syndromes, (void *)syndromes_in, sizeof(int) * 9);
16822+ d_flg = 0;
16823+
16824+ // initialise table entries
16825+ for (i = 0; i < 8; i++)
16826+ syndromes[i] = i_to_a[syndromes[i]];
16827+
16828+ Matrix_c[0] = 0;
16829+ Matrix_c[1] = syndromes[0];
16830+ err_loc_ply[0][0] = 1;
16831+ err_loc_ply[1][0] = 1;
16832+ for (i = 1; i < 8; i++) {
16833+ err_loc_ply[0][i] = 0;
16834+ err_loc_ply[1][i] = 0;
16835+ }
16836+ Matrix_a[0] = 0;
16837+ Matrix_a[1] = 0;
16838+ Matrix_b[0] = -1;
16839+ Matrix_b[1] = 0;
16840+ alpha = -1;
16841+
16842+ do {
16843+ // skip even loops
16844+ alpha += 2;
16845+ if (Matrix_c[alpha] != -1) {
16846+ temp_index = alpha - 2;
16847+ if (temp_index<0) temp_index=0;
16848+ while ((Matrix_c[temp_index] == -1) && (temp_index > 0))
16849+ temp_index=temp_index-2;
16850+ if (temp_index < 0) temp_index = 0;
16851+
16852+ if (temp_index > 0) {
16853+ j = temp_index;
16854+ do {
16855+ j=j-2;
16856+ if (j < 0) j = 0;
16857+ if ((Matrix_c[j] != -1) && (Matrix_b[temp_index] < Matrix_b[j]))
16858+ temp_index = j;
16859+ } while (j > 0);
16860+ }
16861+
16862+ if (Matrix_a[alpha] > Matrix_a[temp_index] + alpha - temp_index)
16863+ Matrix_a[alpha + 2] = Matrix_a[alpha];
16864+ else
16865+ Matrix_a[alpha + 2] = Matrix_a[temp_index] + alpha - temp_index;
16866+
16867+ for (i = 0; i < 8; ++i) {
16868+ err_loc_ply[alpha + 2][i] = 0;
16869+ }
16870+
16871+ for (i = 0; i <= Matrix_a[temp_index]; i++) {
16872+ if (err_loc_ply[temp_index][i] != 0)
16873+ err_loc_ply[alpha + 2][i + alpha - temp_index] =
16874+ a_to_i[(Matrix_c[alpha] + block_length -
16875+ Matrix_c[temp_index] +
16876+ i_to_a[err_loc_ply[temp_index][i]]) %
16877+ block_length];
16878+ }
16879+
16880+ for (i = 0; i <= Matrix_a[alpha]; i++) {
16881+ err_loc_ply[alpha + 2][i] ^= err_loc_ply[alpha][i];
16882+ }
16883+ } else {
16884+ Matrix_a[alpha + 2] = Matrix_a[alpha];
16885+
16886+ for (i = 0; i <= Matrix_a[alpha]; i++) {
16887+ err_loc_ply[alpha + 2][i] = err_loc_ply[alpha][i];
16888+ }
16889+ }
16890+
16891+ Matrix_b[alpha + 2] = alpha+1 - Matrix_a[alpha + 2];
16892+
16893+ // Form (alpha+2)th discrepancy.
16894+ if (alpha < 8) {
16895+ if (syndromes[alpha + 1] != -1) {
16896+ Matrix_c[alpha + 2] = a_to_i[syndromes[alpha + 1]];
16897+ } else {
16898+ Matrix_c[alpha + 2] = 0;
16899+ }
16900+
16901+ for (i = 1; i <= Matrix_a[alpha + 2]; i++) {
16902+ if ((syndromes[alpha + 1 - i] != -1) && (err_loc_ply[alpha + 2][i] != 0))
16903+ Matrix_c[alpha + 2] ^= a_to_i[(syndromes[alpha + 1 - i] + i_to_a[err_loc_ply[alpha + 2][i]]) % block_length];
16904+ }
16905+ Matrix_c[alpha + 2] = i_to_a[Matrix_c[alpha + 2]];
16906+ }
16907+ } while ((alpha < 7) && (Matrix_a[alpha + 2] <= 4));
16908+
16909+ alpha=alpha+2;
16910+ Matrix_a[7] = Matrix_a[alpha];
16911+ if (Matrix_a[7] <= 4) {
16912+
16913+ for (i = 1; i <= Matrix_a[7]; i++) {
16914+ Element[i] = i_to_a[err_loc_ply[alpha][i]];
16915+ }
16916+
16917+ err_count = 0 ;
16918+ for (i = 1; i <= block_length; i++) {
16919+ elp_sum = 1 ;
16920+ for (j = 1; j <= Matrix_a[7]; j++)
16921+ if (Element[j] != -1) {
16922+ Element[j] = (Element[j] + j) % block_length ;
16923+ elp_sum ^= a_to_i[Element[j]] ;
16924+ }
16925+
16926+ if (!elp_sum) {
16927+ err_location[err_count] = block_length - i ;
16928+ err_count++ ;
16929+ }
16930+ }
16931+
16932+ if (err_count == Matrix_a[7])
16933+ d_flg = 1 ;
16934+ }
16935+
16936+ if (d_flg == 0) {
16937+ return -1;
16938+ }
16939+ else {
16940+ for (i=0; i<err_count; i++)
16941+ {
16942+ if (err_location[i] >= 52)
16943+ data_location = err_location[i] - 52;
16944+ else
16945+ data_location = err_location[i] + data_length;
16946+
16947+ if (data_location <= 4095)
16948+ {
16949+ rev_location = 4095 - data_location;
16950+ result_bit = rev_location%8;
16951+ result_byte = (rev_location - result_bit)/8;
16952+
16953+ printk(KERN_NOTICE
16954+ "Corrected ECC Error: "
16955+ "offset 0x%lx byte 0x%x bit %d\n",
16956+ offset, result_byte, result_bit);
16957+
16958+ result_byte =
16959+ (result_byte & 0xfffffffc) |
16960+ ((result_byte & 0x3) ^ 0x3);
16961+ *((unsigned char *)(data +
16962+ result_byte)) ^=
16963+ (1 << result_bit);
16964+ } else {
16965+ rev_location = 4147 - data_location;
16966+ result_bit = rev_location%8;
16967+ result_byte = (rev_location - result_bit)/8;
16968+ printk(KERN_ERR
16969+ "BCH byte = %d, bit = %d\n",
16970+ result_byte, result_bit);
16971+ }
16972+ }
16973+
16974+ if (0 != err_count)
16975+ return 1;
16976+ else
16977+ return 0;
16978+ }
16979+}
16980+
16981+/*
16982+ ------------------------------------------------------------------------------
16983+ report_ecc_errors_ep501g1
16984+*/
16985+
16986+static int
16987+report_ecc_errors_ep501g1(struct mtd_info *mtd, struct nand_chip *chip,
16988+ uint8_t *buffer, int page)
16989+{
16990+ unsigned long bch_status;
16991+ int rc = 0;
16992+ int i;
16993+ int is_blank = 1;
16994+ uint8_t *data = buffer;
16995+ int section;
16996+ int syndrome;
16997+ unsigned long syndromes[8][8];
16998+
16999+ /* If there are no errors, return. */
17000+ bch_status = READL(chip->IO_ADDR_R + EP501G1_NAND_BCH_STATUS);
17001+
17002+ if (0 == bch_status)
17003+ goto report_ecc_errors_ep501g1_end;
17004+
17005+ switch (mtd->writesize) {
17006+ case 512:
17007+ bch_status &= 0x1;
17008+ break;
17009+ case 2048:
17010+ bch_status &= 0xf;
17011+ break;
17012+ case 4096:
17013+ bch_status &= 0xff;
17014+ break;
17015+ default:
17016+ printk(KERN_ERR "Unexpected Page Size!\n");
17017+ rc = -1;
17018+ goto report_ecc_errors_ep501g1_end;
17019+ break;
17020+ }
17021+
17022+ /* Ignore fully erased blocks. */
17023+ if (NULL != data) {
17024+ for (i = 0; i < mtd->writesize; ++i) {
17025+ if (0xff != *data++) {
17026+ is_blank = 0;
17027+ break;
17028+ }
17029+ }
17030+ }
17031+
17032+ if (0 != is_blank)
17033+ goto report_ecc_errors_ep501g1_end;
17034+
17035+ /* Read the syndrome registers and split them into syndromes. */
17036+ for (section = 0; section < 8; ++section) {
17037+ unsigned long address;
17038+ unsigned long value;
17039+
17040+ address = EP501G1_NAND_SYN_R12_S0 + (section * 0x10);
17041+
17042+ for (syndrome = 0; syndrome < 8; syndrome += 2) {
17043+ value = READL(chip->IO_ADDR_R + address +
17044+ (syndrome * 2));
17045+ syndromes[section][syndrome] =
17046+ (value & 0x1fff);
17047+ syndromes[section][syndrome + 1] =
17048+ ((value & 0x1fff0000) >> 16);
17049+ }
17050+ }
17051+
17052+ /* Debug output (BCH status register and syndromes). */
17053+#if 0
17054+ printk("BCH Status Register: 0x%02lx\n", bch_status);
17055+
17056+ for (section = 0; section < 8; ++section) {
17057+ printk("Syndromes, Section %d: ", section);
17058+
17059+ for (syndrome = 0; syndrome < 8; ++syndrome) {
17060+ printk("0x%04lx ", syndromes[section][syndrome]);
17061+ }
17062+
17063+ printk("\n");
17064+ }
17065+#endif
17066+
17067+ for (i = 0; i < 4; ++i) {
17068+ if ((1 << i) == (bch_status & (1 << i))) {
17069+ rc = fix_section(((page * mtd->writesize) + (512 * i)),
17070+ (void *)(buffer + (512 * i)),
17071+ (int *)&syndromes[i]);
17072+
17073+ if (-1 == rc)
17074+ printk(KERN_ERR
17075+ "Uncorrectable ECC Error: Page %d\n",
17076+ page);
17077+ }
17078+ }
17079+
17080+ report_ecc_errors_ep501g1_end:
17081+
17082+ return rc;
17083+}
17084+
17085+/*
17086+ ------------------------------------------------------------------------------
17087+ report_ecc_errors_ep501g3
17088+*/
17089+
17090+static int
17091+report_ecc_errors_ep501g3(struct mtd_info *mtd, struct nand_chip *chip,
17092+ uint8_t *buffer, int page)
17093+{
17094+ unsigned long bch_status;
17095+ int rc = 0;
17096+ unsigned long value;
17097+ int i;
17098+ int is_blank = 1;
17099+ uint8_t *data = buffer;
17100+ int section;
17101+ int syndrome;
17102+ unsigned long syndromes[8][8];
17103+ int num_sections;
17104+
17105+ num_sections = (mtd->writesize / 512);
17106+
17107+ /* Verify 4-bit mode in the EP501G3 case. */
17108+ value = (READL(chip->IO_ADDR_R + EP501_NAND_CONFIG_REG) & 0x1800) >> 11;
17109+
17110+ if (1 != value) {
17111+ printk("Only 4-Bit ECC is supported.\n");
17112+ rc = -1;
17113+ goto report_ecc_errors_ep501g3_end;
17114+ }
17115+
17116+ /* If there are no errors, return. */
17117+ bch_status = READL(chip->IO_ADDR_R + EP501G1_NAND_BCH_STATUS);
17118+
17119+ if (0 == bch_status)
17120+ goto report_ecc_errors_ep501g3_end;
17121+
17122+ switch (mtd->writesize) {
17123+ case 512:
17124+ bch_status &= 0x1;
17125+ break;
17126+ case 2048:
17127+ bch_status &= 0xf;
17128+ break;
17129+ case 4096:
17130+ bch_status &= 0xff;
17131+ break;
17132+ default:
17133+ printk(KERN_ERR "Unexpected Page Size!\n");
17134+ rc = -1;
17135+ goto report_ecc_errors_ep501g3_end;
17136+ break;
17137+ }
17138+
17139+ /* Ignore fully erased blocks. */
17140+ if (NULL != data) {
17141+ for (i = 0; i < mtd->writesize; ++i) {
17142+ if (0xff != *data++) {
17143+ is_blank = 0;
17144+ break;
17145+ }
17146+ }
17147+ }
17148+
17149+ if (0 != is_blank)
17150+ goto report_ecc_errors_ep501g3_end;
17151+
17152+ /* Read the syndrome registers and split them into syndromes. */
17153+ for (section = 0; section < 8; ++section) {
17154+ unsigned long address;
17155+ unsigned long value;
17156+
17157+ address = EP501G1_NAND_SYN_R12_S0 + (section * 0x10);
17158+
17159+ for (syndrome = 0; syndrome < ((mtd->writesize / 512) * 2);
17160+ syndrome += 2, address += 4) {
17161+ value = READL(chip->IO_ADDR_R + address);
17162+ syndromes[section][syndrome] =
17163+ (value & 0x1fff);
17164+ syndromes[section][syndrome + 1] =
17165+ ((value & 0x1fff0000) >> 16);
17166+ }
17167+ }
17168+
17169+ /* Debug output (BCH status register and syndromes). */
17170+#if 0
17171+ printk("BCH Status Register: 0x%02lx\n", bch_status);
17172+
17173+ for (section = 0; section < 8; ++section) {
17174+ printk("Syndromes, Section %d: ", section);
17175+
17176+ for (syndrome = 0; syndrome < 8; ++syndrome) {
17177+ printk("0x%04lx ", syndromes[section][syndrome]);
17178+ }
17179+
17180+ printk("\n");
17181+ }
17182+#endif
17183+
17184+ for (i = 0; i < 4; ++i) {
17185+ if ((1 << i) == (bch_status & (1 << i))) {
17186+ rc = fix_section(((page * mtd->writesize) + (512 * i)),
17187+ (void *)(buffer + (512 * i)),
17188+ (int *)&syndromes[i]);
17189+
17190+ if (-1 == rc)
17191+ printk(KERN_ERR
17192+ "Uncorrectable ECC Error: Page %d\n",
17193+ page);
17194+ }
17195+ }
17196+
17197+ report_ecc_errors_ep501g3_end:
17198+
17199+ return rc;
17200+}
17201+
17202+/*
17203+ ------------------------------------------------------------------------------
17204+ report_ecc_errors
17205+*/
17206+
17207+static int
17208+report_ecc_errors(struct mtd_info *mtd, struct nand_chip *chip,
17209+ uint8_t *buffer, int page)
17210+{
17211+ int rc = 0;
17212+
17213+ switch (lsi_nand_type) {
17214+ case LSI_NAND_EP501:
17215+ rc = report_ecc_errors_ep501(mtd, chip, buffer, page);
17216+ break;
17217+ case LSI_NAND_EP501G1:
17218+ rc = report_ecc_errors_ep501g1(mtd, chip, buffer, page);
17219+ break;
17220+ case LSI_NAND_EP501G3:
17221+ rc = report_ecc_errors_ep501g3(mtd, chip, buffer, page);
17222+ break;
17223+ default:
17224+ rc = -1;
17225+ break;
17226+ }
17227+
17228+ return rc;
17229+}
17230+
17231+
17232+/**
17233+ * nand_read_page_hwecc - hardware ecc based page read function
17234+ * @mtd: mtd info structure
17235+ * @chip: nand chip info structure
17236+ * @buf: buffer to store read data
17237+ *
17238+ * Not for syndrome calculating ecc controllers which need a special oob layout
17239+ */
17240+
17241+static int
17242+lsi_nand_read_page_hwecc(struct mtd_info *mtd, struct nand_chip *chip,
17243+ uint8_t *buf, int page)
17244+{
17245+ int rc;
17246+ /*int page = 0;*/
17247+
17248+ /* Read the current page number and save it. */
17249+ /*page = READL(chip->IO_ADDR_R + NAND_INDEX_REG) >> 12;*/
17250+
17251+ /* read the page */
17252+ chip->read_buf(mtd, buf, mtd->writesize);
17253+
17254+ /* read oob data */
17255+ chip->read_buf(mtd, chip->oob_poi, mtd->oobsize);
17256+
17257+ /* start ECC calculations */
17258+ chip->ecc.calculate(mtd, NULL, NULL);
17259+
17260+ /* Read the ECC Status and see if there were any errors */
17261+ rc = report_ecc_errors(mtd, chip, buf, page);
17262+
17263+ /* cmd to controller to turn off CE */
17264+ chip->cmd_ctrl(mtd, nand_cmd_ce_off, 0);
17265+ return rc;
17266+}
17267+
17268+/**
17269+ * lsi_nand_write_page_hwecc - hardware ecc based page write function
17270+ * @mtd: mtd info structure
17271+ * @chip: nand chip info structure
17272+ * @buf: data buffer
17273+ */
17274+static void
17275+lsi_nand_write_page_hwecc(struct mtd_info *mtd, struct nand_chip *chip,
17276+ const uint8_t *buf)
17277+{
17278+ /* write the page data */
17279+ chip->write_buf(mtd, buf, mtd->writesize);
17280+
17281+ /*
17282+ * Write the oob data. Last 12 bytes are used by HW ECC.
17283+ * Do not touch them.
17284+ */
17285+ chip->write_buf(mtd, chip->oob_poi, mtd->oobsize - chip->ecc.bytes);
17286+ return;
17287+}
17288+
17289+/**
17290+ * lsi_nand_write_page - [REPLACEABLE] write one page
17291+ * @mtd: MTD device structure
17292+ * @chip: NAND chip descriptor
17293+ * @buf: the data to write
17294+ * @page: page number to write
17295+ * @cached: cached programming
17296+ * @raw: use _raw version of write_page
17297+ */
17298+
17299+static int
17300+lsi_nand_write_page(struct mtd_info *mtd, struct nand_chip *chip,
17301+ const uint8_t *buf, int page, int cached, int raw)
17302+{
17303+ int status;
17304+
17305+ chip->cmdfunc(mtd, NAND_CMD_SEQIN, 0x00, page);
17306+
17307+ if (unlikely(raw))
17308+ chip->ecc.write_page_raw(mtd, chip, buf);
17309+ else
17310+ chip->ecc.write_page(mtd, chip, buf);
17311+
17312+ /* calculate ECC */
17313+ status = chip->ecc.calculate(mtd, NULL, NULL);
17314+
17315+ /* cmd to controller to turn off CE */
17316+ chip->cmd_ctrl(mtd, nand_cmd_ce_off, 0);
17317+
17318+ /*
17319+ * See if operation failed and additional status checks are
17320+ * available
17321+ */
17322+ if (status & NAND_STATUS_FAIL) {
17323+ printk(KERN_ERR "ERROR: Page write failed for page 0x%x\n",
17324+ page);
17325+
17326+ if (chip->errstat)
17327+ status = chip->errstat(mtd, chip, FL_WRITING, status,
17328+ page);
17329+
17330+ return -EIO;
17331+ }
17332+
17333+#ifdef CONFIG_MTD_NAND_VERIFY_WRITE
17334+ /* Send command to read back the data */
17335+ chip->cmdfunc(mtd, NAND_CMD_READ0, 0, page);
17336+
17337+ if (chip->verify_buf(mtd, buf, mtd->writesize)) {
17338+ return -EIO;
17339+ }
17340+#endif
17341+
17342+ return 0;
17343+}
17344+
17345+
17346+/**
17347+ * lsi_nand_read_oob_std - [REPLACABLE] the most common OOB data read function
17348+ * @mtd: mtd info structure
17349+ * @chip: nand chip info structure
17350+ * @page: page number to read
17351+ * @sndcmd: flag whether to issue read command or not
17352+ */
17353+
17354+static int
17355+lsi_nand_read_oob(struct mtd_info *mtd, struct nand_chip *chip,
17356+ int page, int sndcmd)
17357+{
17358+ int rc;
17359+
17360+ /* send command to read oob */
17361+ chip->cmdfunc(mtd, NAND_CMD_READOOB, 0, page);
17362+
17363+ /* read oob data */
17364+ chip->read_buf(mtd, chip->oob_poi, mtd->oobsize);
17365+
17366+ /* start ECC calculations */
17367+ chip->ecc.calculate(mtd, NULL, NULL);
17368+
17369+ /* Read the ECC Status and see if there were any errors */
17370+ rc = report_ecc_errors(mtd, chip, NULL, page);
17371+
17372+ /* cmd to controller to turn off CE */
17373+ chip->cmd_ctrl(mtd, nand_cmd_ce_off, 0);
17374+
17375+ return sndcmd;
17376+}
17377+
17378+/**
17379+ * lsi_nand_write_oob_std - [REPLACABLE] the most common OOB data write
17380+ * function
17381+ * @mtd: mtd info structure
17382+ * @chip: nand chip info structure
17383+ * @page: page number to write
17384+ */
17385+
17386+static int
17387+lsi_nand_write_oob(struct mtd_info *mtd, struct nand_chip *chip, int page)
17388+{
17389+ /* start OOB write */
17390+ chip->cmdfunc(mtd, NAND_CMD_SEQIN, mtd->writesize, page);
17391+
17392+ /*
17393+ * Write the oob data. Last 12 bytes are used by HW ECC.
17394+ * Do not touch them.
17395+ */
17396+ chip->write_buf(mtd, chip->oob_poi, mtd->oobsize - chip->ecc.bytes);
17397+
17398+ /* calculate ECC */
17399+ chip->ecc.calculate(mtd, NULL, NULL);
17400+
17401+ /* cmd to controller to turn off CE */
17402+ chip->cmd_ctrl(mtd, nand_cmd_ce_off, 0);
17403+
17404+ return (chip->dev_ready(mtd) & NAND_STATUS_FAIL) ? -EIO : 0;
17405+}
17406+
17407+/*
17408+ ======================================================================
17409+ ======================================================================
17410+ Public
17411+ ======================================================================
17412+ ======================================================================
17413+*/
17414+
17415+/*
17416+ ------------------------------------------------------------------------------
17417+ lsi_nand_set_config
17418+*/
17419+
17420+int
17421+lsi_nand_set_config(struct mtd_info *mtd, struct nand_chip *chip)
17422+{
17423+ unsigned long config = 0;
17424+ unsigned long mbits;
17425+
17426+ mbits = ((chip->chipsize >> 20) * 8);
17427+
17428+ if (LSI_NAND_EP501 == lsi_nand_type) {
17429+ /* The EP501 only supports 512 and 2k page sizes. */
17430+ if (512 != mtd->writesize &&
17431+ 2048 != mtd->writesize)
17432+ return -1;
17433+
17434+ while (64 < mbits) {
17435+ ++config; /* 0b000=64Mbit, 0b001=128Mbit, etc. */
17436+ mbits >>= 1;
17437+ }
17438+
17439+ if (512 < mtd->writesize)
17440+ config |= 0x100; /* large block */
17441+
17442+ config |= 0x200; /* not write protected */
17443+ chip->ecc.layout = &lsi_2k_1bit_ecclayout;
17444+ chip->ecc.size = mtd->writesize;
17445+ chip->ecc.bytes = chip->ecc.layout->eccbytes;
17446+ } else if (LSI_NAND_EP501G1 == lsi_nand_type) {
17447+ /* The EP501G1 only supports 512, 2k, and 4k page sizes, */
17448+ if (512 != mtd->writesize &&
17449+ 2048 != mtd->writesize &&
17450+ 4096 != mtd->writesize)
17451+ return -1;
17452+
17453+ /* and device sizes as follows. */
17454+ if (512 == mtd->writesize) {
17455+ switch (mbits) {
17456+ case 64: break;
17457+ case 128: config |= 1; break;
17458+ case 256: config |= 2; break;
17459+ case 512: config |= 3; break;
17460+ case 1024: config |= 4; break;
17461+ case 2048: config |= 5; break;
17462+ case 4096: config |= 6; break;
17463+ case 8192: config |= 7; break;
17464+ default:
17465+ return -1;
17466+ break;
17467+ }
17468+ } else {
17469+ switch (mbits) {
17470+ case 512: config |= 3; break;
17471+ case 1024: config |= 4; break;
17472+ case 2048: config |= 5; break;
17473+ case 4096: config |= 6; break;
17474+ case 8192: config |= 7; break;
17475+ case 16384: break;
17476+ case 32768: config |= 1; break;
17477+ case 65536: config |= 2; break;
17478+ default:
17479+ return -1;
17480+ break;
17481+ }
17482+ }
17483+
17484+ switch (mtd->writesize) {
17485+ case 512:
17486+ break;
17487+ case 2048:
17488+ config |= 0x1 << 8;
17489+ chip->ecc.layout = &lsi_2k_4bit_ecclayout;
17490+ break;
17491+ case 4096:
17492+ config |= 0x2 << 8;
17493+ chip->ecc.layout = &lsi_4k_4bit_ecclayout;
17494+ break;
17495+ default:
17496+ return -1;
17497+ break;
17498+ }
17499+
17500+ config |= 1 << 10; /* not write protected */
17501+
17502+ config |= 1 << 11; /* 4 bit ECC */
17503+
17504+ if (512 < mtd->writesize)
17505+ config |= 1 << 12; /* 3 cycle row address */
17506+
17507+ chip->ecc.size = mtd->writesize;
17508+
17509+ if (mtd->oobsize == 224) {
17510+ chip->ecc.bytes = 224 - chip->ecc.layout->eccbytes;
17511+ } else {
17512+ chip->ecc.bytes = chip->ecc.layout->eccbytes;
17513+ }
17514+ } else if (LSI_NAND_EP501G3 == lsi_nand_type) {
17515+ /* The EP501G3 only supports 2k, 4k, and 8k page sizes, */
17516+ if (2048 != mtd->writesize &&
17517+ 4096 != mtd->writesize &&
17518+ 8192 != mtd->writesize)
17519+ return -1;
17520+
17521+ /* and device sizes as follows. */
17522+ switch (mbits) {
17523+ case 512: config |= 3; break;
17524+ case 1024: config |= 4; break;
17525+ case 2048: config |= 5; break;
17526+ case 4096: config |= 6; break;
17527+ case 8192: config |= 7; break;
17528+ case 16384: break;
17529+ case 32768: config |= 1; break;
17530+ case 65536: config |= 2; break;
17531+ default:
17532+ printk("Invalid Device Size: 0x%lx\n", mbits);
17533+ return -1;
17534+ break;
17535+ }
17536+
17537+ switch (mtd->writesize) {
17538+ case 2048:
17539+ config |= 0x1 << 8;
17540+ chip->ecc.layout = &lsi_2k_4bit_ecclayout;
17541+ break;
17542+ case 4096:
17543+ config |= 0x2 << 8;
17544+ chip->ecc.layout = &lsi_4k_4bit_ecclayout;
17545+ break;
17546+ case 8192:
17547+ config |= 0x3 << 8;
17548+ chip->ecc.layout = &lsi_8k_4bit_ecclayout;
17549+ break;
17550+ default:
17551+ return -1;
17552+ break;
17553+ }
17554+
17555+ config |= 1 << 10; /* not write protected */
17556+ config |= 1 << 13; /* 3 cycle row address */
17557+
17558+ /*
17559+ 2K/4bit - 32 bytes (8192)
17560+ 2K/8bit - 64 bytes (16384)
17561+ 2K/12bit - 80 bytes (24576)
17562+ ...
17563+ 8K/12bit - 320 bytes (98304)
17564+ */
17565+
17566+ if (mtd->oobsize < chip->ecc.layout->eccbytes) {
17567+ printk(KERN_ERR
17568+ "ECC requires %d bytes, only %d are available.\n",
17569+ chip->ecc.layout->eccbytes, mtd->oobsize);
17570+ return -1;
17571+ }
17572+
17573+ config |= 1 << 11; /* 4 bit ECC */
17574+ mtd->oobavail = mtd->oobsize - chip->ecc.layout->eccbytes;
17575+ mtd->oobavail -= (mtd->oobavail % 4);
17576+ config |= (chip->ecc.layout->eccbytes / 4) << 16;
17577+ chip->ecc.size = mtd->writesize;
17578+ chip->ecc.bytes = chip->ecc.layout->eccbytes;
17579+ } else {
17580+ return -1;
17581+ }
17582+
17583+ printk("%s:%d - write/erase/oob=0x%x/0x%x/0x%x config=0x%x\n",
17584+ __FILE__, __LINE__,
17585+ mtd->writesize, mtd->erasesize, mtd->oobsize, config); /* ZZZ */
17586+ WRITEL(config, chip->IO_ADDR_W + EP501_NAND_CONFIG_REG);
17587+
17588+ return 0;
17589+}
17590+
17591+/*
17592+ ----------------------------------------------------------------------
17593+ lsi_nand_init
17594+*/
17595+
17596+#define NAND_BASE 0x002000440000ULL
17597+#define NAND_SIZE 0x20000
17598+#define GPREG_BASE 0x002000400000ULL
17599+#define GPREG_SIZE 0x1000
17600+
17601+static int __init
17602+lsi_nand_init(void)
17603+{
17604+ unsigned long nand_base;
17605+ struct device_node *np = NULL;
17606+ int ret;
17607+
17608+ np = of_find_node_by_type(np, "nand");
17609+
17610+ while (np && !of_device_is_compatible(np, "acp-nand"))
17611+ np = of_find_node_by_type(np, "nand");
17612+
17613+ if (np) {
17614+ const u32 *reg;
17615+ int reglen;
17616+ u64 nand_address;
17617+ unsigned long nand_length;
17618+ u64 gpreg_address;
17619+ unsigned long gpreg_length;
17620+ int *enabled;
17621+
17622+ enabled = of_get_property(np, "enabled", NULL);
17623+
17624+ if (0 == *enabled) {
17625+ printk("ACP NAND Controller Isn't Enabled.\n");
17626+ return -1;
17627+ }
17628+
17629+ reg = of_get_property(np, "reg", &reglen);
17630+
17631+ if (reg && (16 == reglen)) {
17632+ nand_address = of_translate_address(np, reg);
17633+ nand_length = reg[1];
17634+ reg += 2;
17635+ gpreg_address = of_translate_address(np, reg);
17636+ gpreg_length = reg[1];
17637+ printk("nand_address=0x%08llx nand_length=0x%lx\n"
17638+ "gpreg_address=0x%08llx gpreg_length=0x%lx\n",
17639+ nand_address, nand_length,
17640+ gpreg_address, gpreg_length);
17641+ nand_base = (unsigned long)
17642+ ioremap(nand_address, nand_length);
17643+ gpreg_base = (unsigned long)
17644+ ioremap(gpreg_address, gpreg_length);
17645+ } else {
17646+ return -1;
17647+ }
17648+ } else {
17649+ printk("ACP NAND: Using Static Addresses.\n");
17650+ nand_base = ioremap(0x002000440000ULL, 0x20000);
17651+ gpreg_base = ioremap(0x00200040c000ULL, 0x1000);
17652+ }
17653+
17654+ /*
17655+ Determine the version of the controller.
17656+
17657+ As there is not version register, see if bits 5:3 of the
17658+ configuration register are writable. There are in the EP501
17659+ case and aren't in the EP501G1 case.
17660+ */
17661+
17662+ {
17663+ unsigned long cr;
17664+ unsigned long cr_save;
17665+
17666+ cr = cr_save = READL((void *)(nand_base + NAND_CONFIG_REG));
17667+ cr = 0x2038;
17668+ WRITEL(cr, (void *)(nand_base + EP501_NAND_CONFIG_REG));
17669+ cr = READL((void *)nand_base + EP501_NAND_CONFIG_REG);
17670+ WRITEL(cr_save, (void *)(nand_base + EP501_NAND_CONFIG_REG));
17671+
17672+ if (0 == (cr & 0x2038)) {
17673+ lsi_nand_type = LSI_NAND_EP501G1;
17674+ } else if (0x38 == (cr & 0x2038)) {
17675+ lsi_nand_type = LSI_NAND_EP501;
17676+ } else if (0x2000 == (cr & 0x2038)) {
17677+ lsi_nand_type = LSI_NAND_EP501G3;
17678+ } else {
17679+ lsi_nand_type = LSI_NAND_NONE;
17680+ }
17681+ }
17682+
17683+ switch (lsi_nand_type) {
17684+ case LSI_NAND_EP501:
17685+ printk("EP501 NAND Controller.\n");
17686+ nand_cmd_ce_off = NAND_CMD_CE_OFF_501;
17687+ break;
17688+ case LSI_NAND_EP501G1:
17689+ printk("EP501G1 NAND Controller.\n");
17690+ nand_cmd_ce_off = NAND_CMD_CE_OFF_501G1;
17691+ break;
17692+ case LSI_NAND_EP501G3:
17693+ printk("EP501G3 NAND Controller.\n");
17694+ nand_cmd_ce_off = NAND_CMD_CE_OFF_501G3;
17695+ break;
17696+ default:
17697+ printk("Unknown NAND Controller!\n");
17698+ return -1;
17699+ break;
17700+ }
17701+
17702+ /* Initialize structures */
17703+ memset(&lsi_nand_mtd, 0, sizeof(struct mtd_info));
17704+ memset(&lsi_nand_chip, 0, sizeof(struct nand_chip));
17705+
17706+ /* Link the private data with the MTD structure */
17707+ lsi_nand_mtd.priv = &lsi_nand_chip;
17708+ lsi_nand_mtd.owner = THIS_MODULE;
17709+ lsi_nand_mtd.name = "acp-nand";
17710+
17711+ /* init chip callbacks */
17712+ lsi_nand_chip.IO_ADDR_R = (void *) nand_base;
17713+ lsi_nand_chip.IO_ADDR_W = (void *) nand_base;
17714+ lsi_nand_chip.write_buf = lsi_nand_write_buf;
17715+ lsi_nand_chip.read_buf = lsi_nand_read_buf;
17716+ lsi_nand_chip.verify_buf = lsi_nand_verify_buf;
17717+ lsi_nand_chip.write_page = lsi_nand_write_page;
17718+ lsi_nand_chip.cmd_ctrl = lsi_nand_hwcontrol;
17719+ lsi_nand_chip.dev_ready = lsi_nand_device_ready;
17720+ lsi_nand_chip.cmdfunc = lsi_nand_command;
17721+ lsi_nand_chip.waitfunc = lsi_nand_wait;
17722+ lsi_nand_chip.chip_delay = 10;
17723+ lsi_nand_chip.options = NAND_USE_FLASH_BBT;
17724+
17725+ /* initialize ECC */
17726+ lsi_nand_chip.ecc.mode = NAND_ECC_HW;
17727+ lsi_nand_chip.ecc.steps = 1;
17728+ lsi_nand_chip.ecc.total = 12;
17729+ lsi_nand_chip.ecc.hwctl = lsi_nand_ecc_hwctl;
17730+ lsi_nand_chip.ecc.calculate = lsi_nand_ecc_calculate;
17731+ lsi_nand_chip.ecc.correct = lsi_nand_ecc_correct;
17732+ lsi_nand_chip.ecc.read_page = lsi_nand_read_page_hwecc;
17733+ lsi_nand_chip.ecc.write_page = lsi_nand_write_page_hwecc;
17734+ lsi_nand_chip.ecc.read_page_raw = lsi_nand_read_page_hwecc;
17735+ lsi_nand_chip.ecc.write_page_raw = lsi_nand_write_page_hwecc;
17736+ lsi_nand_chip.ecc.read_oob = lsi_nand_read_oob;
17737+ lsi_nand_chip.ecc.write_oob = lsi_nand_write_oob;
17738+
17739+ printk(KERN_ERR "Enabling NAND ECC...\n");
17740+ /* clear any existing ECC status */
17741+ WRITEL(0x0, lsi_nand_chip.IO_ADDR_W + NAND_INTR_STATUS_REG);
17742+ /* enable ECC */
17743+ WRITEL(0x0, lsi_nand_chip.IO_ADDR_W + NAND_INTR_EN_REG);
17744+
17745+ /*
17746+ ======================================================================
17747+ Timing Control
17748+
17749+ This may need to be changed, based on the devices used. Each field is
17750+ described below.
17751+ */
17752+
17753+ /*
17754+ TCR0 - NAND Timing Control Register 0
17755+ */
17756+
17757+ {
17758+ nand_timing_control_register_0_t tcr0;
17759+
17760+ /* TH [31:24] - CLE, CE & ALE hold Time */
17761+ tcr0.bits.th = 0x08;
17762+
17763+ /* TRP [23:16] - Read Pulse Width */
17764+ tcr0.bits.trp = 0x0c;
17765+
17766+ /* TWP [15:8] - Write Pulse Width */
17767+ tcr0.bits.twp = 0x0c;
17768+
17769+ /* TS [7:0] - Setup Time for CLE, CE & ALE */
17770+ tcr0.bits.ts = 0x05;
17771+
17772+ WRITEL(tcr0.raw,
17773+ (lsi_nand_chip.IO_ADDR_W + NAND_TIMING1_REG));
17774+ }
17775+
17776+ /*
17777+ TCR1 - NAND Timing Control Register 1
17778+ */
17779+
17780+ {
17781+ nand_timing_control_register_1_t tcr1;
17782+
17783+ /* TWB [31:24] - WE Rising Edge to RY/BY Falling Edge */
17784+ tcr1.bits.twb = 0x1e;
17785+
17786+ /* TRR [23:16] - RY/BY Rising Edge To Read Falling Edge */
17787+ tcr1.bits.trr = 0x07;
17788+
17789+ /* TRH [15:8] - Read Pulse High Time */
17790+ tcr1.bits.trh = 0x03;
17791+
17792+ /* TWH [7:0] - Write Pulse High Time */
17793+ tcr1.bits.twh = 0x03;
17794+
17795+ WRITEL(tcr1.raw,
17796+ (lsi_nand_chip.IO_ADDR_W + NAND_TIMING2_REG));
17797+ }
17798+
17799+ /*
17800+ TCR2 - NAND Timing Control Register 2 (EP501G3 Only)
17801+ */
17802+
17803+ {
17804+ nand_timing_control_register_2_t tcr2;
17805+
17806+ tcr2.bits.tccs = 0x10;
17807+ tcr2.bits.twhr = 0x10;
17808+ tcr2.bits.trhw = 0x14;
17809+ WRITEL(tcr2.raw,
17810+ (lsi_nand_chip.IO_ADDR_W + EP501G3_NAND_TIMING2_REG));
17811+ }
17812+
17813+ printk(KERN_ERR "Searching for NAND flash...\n");
17814+ /* Scan to find existence of the device */
17815+ if (nand_scan(&lsi_nand_mtd, 1)) {
17816+ printk(KERN_ERR "nand_scan failure...\n");
17817+ return -ENXIO;
17818+ }
17819+
17820+ ret = parse_mtd_partitions(&lsi_nand_mtd, probes,
17821+ &partition_info, 0);
17822+ if (ret > 0)
17823+ mtd_device_register(&lsi_nand_mtd, partition_info, ret);
17824+ else
17825+ mtd_device_register(&lsi_nand_mtd, NULL, 0);
17826+
17827+ /* Return happy */
17828+ return 0;
17829+}
17830+
17831+module_init(lsi_nand_init);
17832+
17833+/*
17834+ ----------------------------------------------------------------------
17835+ lsi_nand_exit
17836+*/
17837+
17838+static void __exit
17839+lsi_nand_exit(void)
17840+{
17841+ /* Release resources, unregister device */
17842+ nand_release(&lsi_nand_mtd);
17843+}
17844+
17845+module_exit(lsi_nand_exit);
17846+
17847+MODULE_LICENSE("GPL");
17848+MODULE_AUTHOR("Jay Jayatheerthan <jay.jayatheerthan@lsi.com>");
17849+MODULE_DESCRIPTION("MTD map driver for LSI's ACP board");
17850diff --git a/drivers/lsi/acp/ncr.c b/drivers/lsi/acp/ncr.c
17851new file mode 100644
17852index 0000000..595e3f4
17853--- /dev/null
17854+++ b/drivers/lsi/acp/ncr.c
17855@@ -0,0 +1,280 @@
17856+/*
17857+ * Copyright (C) 2009 LSI Corporation
17858+ *
17859+ * See file CREDITS for list of people who contributed to this
17860+ * project.
17861+ *
17862+ * This program is free software; you can redistribute it and/or
17863+ * modify it under the terms of the GNU General Public License as
17864+ * published by the Free Software Foundation; either version 2 of
17865+ * the License, or (at your option) any later version.
17866+ *
17867+ * This program is distributed in the hope that it will be useful,
17868+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
17869+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
17870+ * GNU General Public License for more details.
17871+ *
17872+ * You should have received a copy of the GNU General Public License
17873+ * along with this program; if not, write to the Free Software
17874+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
17875+ * MA 02111-1307 USA
17876+ */
17877+
17878+#include <asm/io.h>
17879+
17880+#include "ncr.h"
17881+
17882+#define NCA 0xf0120000
17883+
17884+typedef union {
17885+ unsigned long raw;
17886+ struct {
17887+ unsigned long start_done:1;
17888+ unsigned long unused:6;
17889+ unsigned long local_bit:1;
17890+ unsigned long status:2;
17891+ unsigned long byte_swap_enable:1;
17892+ unsigned long cfg_cmpl_int_enable:1;
17893+ unsigned long cmd_type:4;
17894+ unsigned long dbs:16;
17895+ } __attribute__ ((packed)) bits;
17896+} __attribute__ ((packed)) command_data_register_0_t;
17897+
17898+typedef union {
17899+ unsigned long raw;
17900+ struct {
17901+ unsigned long target_address:32;
17902+ } __attribute__ ((packed)) bits;
17903+} __attribute__ ((packed)) command_data_register_1_t;
17904+
17905+typedef union {
17906+ unsigned long raw;
17907+ struct {
17908+ unsigned long unused:16;
17909+ unsigned long target_node_id:8;
17910+ unsigned long target_id_address_upper:8;
17911+ } __attribute__ ((packed)) bits;
17912+} __attribute__ ((packed)) command_data_register_2_t;
17913+
17914+/*
17915+ ----------------------------------------------------------------------
17916+ ncr_register_read
17917+*/
17918+
17919+static __inline__ unsigned long
17920+ncr_register_read(unsigned *address)
17921+{
17922+ unsigned long value;
17923+
17924+ value = in_be32((unsigned long) address);
17925+
17926+ return value;
17927+}
17928+
17929+/*
17930+ ----------------------------------------------------------------------
17931+ ncr_register_write
17932+*/
17933+
17934+static __inline__ void
17935+ncr_register_write(const unsigned value, unsigned *address)
17936+{
17937+ out_be32(address, value);
17938+}
17939+
17940+/*
17941+ ======================================================================
17942+ ======================================================================
17943+ Public Interface
17944+ ======================================================================
17945+ ======================================================================
17946+*/
17947+
17948+/*
17949+ ----------------------------------------------------------------------
17950+ ncr_read
17951+*/
17952+
17953+int
17954+ncr_read(unsigned long region, unsigned long address, int number,
17955+ void *buffer)
17956+{
17957+ command_data_register_0_t cdr0;
17958+ command_data_register_1_t cdr1;
17959+ command_data_register_2_t cdr2;
17960+
17961+ /*
17962+ Set up the read command.
17963+ */
17964+
17965+ cdr2.raw = 0;
17966+ cdr2.bits.target_node_id = NCP_NODE_ID(region);
17967+ cdr2.bits.target_id_address_upper = NCP_TARGET_ID(region);
17968+ ncr_register_write(cdr2.raw, (unsigned *) (NCA + 0xf8));
17969+
17970+ cdr1.raw = 0;
17971+ cdr1.bits.target_address = (address >> 2);
17972+ ncr_register_write(cdr1.raw, (unsigned *) (NCA + 0xf4));
17973+
17974+ cdr0.raw = 0;
17975+ cdr0.bits.start_done = 1;
17976+
17977+ if (0xff == cdr2.bits.target_id_address_upper)
17978+ cdr0.bits.local_bit = 1;
17979+
17980+ cdr0.bits.cmd_type = 4;
17981+ /* TODO: Verify number... */
17982+ cdr0.bits.dbs = (number - 1);
17983+ ncr_register_write(cdr0.raw, (unsigned *) (NCA + 0xf0));
17984+ mb();
17985+
17986+ /*
17987+ Wait for completion.
17988+ */
17989+
17990+ /* TODO: Handle failure cases. */
17991+#if 0
17992+ while (0x80000000 ==
17993+ (ncr_register_read((unsigned *) (NCA + 0xf0)) & 0x80000000))
17994+ ;
17995+#else
17996+ {
17997+ volatile unsigned long value;
17998+
17999+ do {
18000+ value = ncr_register_read((unsigned *) (NCA + 0xf0));
18001+ } while (0x80000000 == (value & 0x80000000));
18002+ }
18003+#endif
18004+
18005+ /*
18006+ Copy data words to the buffer.
18007+ */
18008+
18009+ address = (NCA + 0x1000);
18010+ while (4 <= number) {
18011+ *((unsigned long *) buffer) =
18012+ ncr_register_read((unsigned *) address);
18013+ address += 4;
18014+ number -= 4;
18015+ }
18016+
18017+ if (0 < number) {
18018+ unsigned long temp =
18019+ ncr_register_read((unsigned *) address);
18020+ memcpy((void *) buffer, &temp, number);
18021+ }
18022+
18023+ return 0;
18024+}
18025+
18026+/*
18027+ ----------------------------------------------------------------------
18028+ ncr_write
18029+*/
18030+
18031+int
18032+ncr_write(unsigned long region, unsigned long address, int number,
18033+ void *buffer)
18034+{
18035+ command_data_register_0_t cdr0;
18036+ command_data_register_1_t cdr1;
18037+ command_data_register_2_t cdr2;
18038+ unsigned long data_word_base;
18039+ int dbs = (number - 1);
18040+
18041+ /*
18042+ Set up the write.
18043+ */
18044+
18045+ cdr2.raw = 0;
18046+ cdr2.bits.target_node_id = NCP_NODE_ID(region);
18047+ cdr2.bits.target_id_address_upper = NCP_TARGET_ID(region);
18048+ ncr_register_write(cdr2.raw, (unsigned *) (NCA + 0xf8));
18049+
18050+ cdr1.raw = 0;
18051+ cdr1.bits.target_address = (address >> 2);
18052+ ncr_register_write(cdr1.raw, (unsigned *) (NCA + 0xf4));
18053+
18054+ /*
18055+ Copy from buffer to the data words.
18056+ */
18057+
18058+ data_word_base = (NCA + 0x1000);
18059+
18060+ while (4 <= number) {
18061+ ncr_register_write(*((unsigned long *) buffer),
18062+ (unsigned *) data_word_base);
18063+ data_word_base += 4;
18064+ buffer += 4;
18065+ number -= 4;
18066+ }
18067+
18068+ if (0 < number) {
18069+ unsigned long temp = 0;
18070+
18071+ memcpy((void *) &temp, (void *) buffer, number);
18072+ ncr_register_write(temp, (unsigned *) data_word_base);
18073+ data_word_base += number;
18074+ buffer += number;
18075+ number = 0;
18076+ }
18077+
18078+ cdr0.raw = 0;
18079+ cdr0.bits.start_done = 1;
18080+
18081+ if (0xff == cdr2.bits.target_id_address_upper) {
18082+ cdr0.bits.local_bit = 1;
18083+ }
18084+
18085+ cdr0.bits.cmd_type = 5;
18086+ /* TODO: Verify number... */
18087+ cdr0.bits.dbs = dbs;
18088+ ncr_register_write(cdr0.raw, (unsigned *) (NCA + 0xf0));
18089+ mb();
18090+
18091+ /*
18092+ Wait for completion.
18093+ */
18094+
18095+ /* TODO: Handle failure cases. */
18096+ while (0x80000000 ==
18097+ (ncr_register_read((unsigned *) (NCA + 0xf0)) & 0x80000000))
18098+ ;
18099+
18100+ return 0;
18101+}
18102+
18103+/*
18104+ ----------------------------------------------------------------------
18105+ ncr_init
18106+*/
18107+
18108+int
18109+ncr_init( void )
18110+{
18111+ /* We need this to be a module so that the functions can be exported
18112+ * as module symbols.
18113+ */
18114+ return 0;
18115+}
18116+
18117+module_init( ncr_init );
18118+
18119+/*
18120+ ----------------------------------------------------------------------
18121+ ncr_exit
18122+*/
18123+
18124+void __exit
18125+ncr_exit( void )
18126+{
18127+}
18128+
18129+module_exit( ncr_exit );
18130+
18131+MODULE_LICENSE("GPL");
18132+MODULE_DESCRIPTION("Register Ring access for LSI's ACP board");
18133+
18134+EXPORT_SYMBOL(ncr_read);
18135+EXPORT_SYMBOL(ncr_write);
18136diff --git a/drivers/lsi/acp/ncr.h b/drivers/lsi/acp/ncr.h
18137new file mode 100644
18138index 0000000..f102df5
18139--- /dev/null
18140+++ b/drivers/lsi/acp/ncr.h
18141@@ -0,0 +1,40 @@
18142+/*
18143+ * drivers/lsi/common/version.h
18144+ *
18145+ * Copyright (C) 2010 LSI
18146+ *
18147+ * This program is free software; you can redistribute it and/or modify
18148+ * it under the terms of the GNU General Public License as published by
18149+ * the Free Software Foundation; either version 2 of the License, or
18150+ * (at your option) any later version.
18151+ *
18152+ * This program is distributed in the hope that it will be useful,
18153+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
18154+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
18155+ * GNU General Public License for more details.
18156+ *
18157+ * You should have received a copy of the GNU General Public License
18158+ * along with this program; if not, write to the Free Software
18159+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
18160+ */
18161+
18162+#ifndef __DRIVERS_LSI_ACP_NCR_H
18163+#define __DRIVERS_LSI_ACP_NCR_H
18164+
18165+#ifndef NCP_REGION_ID
18166+#define NCP_REGION_ID(node, target) \
18167+(unsigned long) ((((node) & 0xffff) << 16) | ((target) & 0xffff))
18168+#endif
18169+
18170+#ifndef NCP_NODE_ID
18171+#define NCP_NODE_ID(region) (((region) >> 16) & 0xffff)
18172+#endif
18173+
18174+#ifndef NCP_TARGET_ID
18175+#define NCP_TARGET_ID(region) ((region) & 0xffff)
18176+#endif
18177+
18178+int ncr_read(unsigned long, unsigned long, int, void *);
18179+int ncr_write(unsigned long, unsigned long, int, void *);
18180+
18181+#endif /* __DRIVERS_LSI_ACP_NCR_H */
18182diff --git a/drivers/lsi/acp/net.c b/drivers/lsi/acp/net.c
18183new file mode 100644
18184index 0000000..c96a4dd
18185--- /dev/null
18186+++ b/drivers/lsi/acp/net.c
18187@@ -0,0 +1,4534 @@
18188+/*
18189+ * drivers/lsi/acp/net.c
18190+ *
18191+ * Copyright (C) 2009 LSI
18192+ *
18193+ * This program is free software; you can redistribute it and/or modify
18194+ * it under the terms of the GNU General Public License as published by
18195+ * the Free Software Foundation; either version 2 of the License, or
18196+ * (at your option) any later version.
18197+ *
18198+ * This program is distributed in the hope that it will be useful,
18199+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
18200+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
18201+ * GNU General Public License for more details.
18202+ *
18203+ * You should have received a copy of the GNU General Public License
18204+ * along with this program; if not, write to the Free Software
18205+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
18206+ */
18207+
18208+#include <linux/module.h>
18209+#include <linux/kernel.h>
18210+#include <linux/version.h>
18211+#include <linux/string.h>
18212+#include <linux/interrupt.h>
18213+#include <linux/errno.h>
18214+#include <linux/in.h>
18215+#include <linux/slab.h>
18216+#include <linux/ioport.h>
18217+#include <linux/spinlock.h>
18218+#include <linux/delay.h>
18219+#include <linux/bitops.h>
18220+#include <linux/proc_fs.h>
18221+#include <linux/netdevice.h>
18222+#include <linux/etherdevice.h>
18223+#include <linux/ethtool.h>
18224+#include <linux/skbuff.h>
18225+#include <linux/init.h>
18226+#include <linux/irq.h>
18227+#include <linux/of.h>
18228+#include <linux/dma-mapping.h>
18229+
18230+#include <asm/uaccess.h>
18231+#include <asm/io.h>
18232+#include <asm/dma.h>
18233+
18234+#include "../common/version.h"
18235+
18236+extern int acp_mdio_read(unsigned long, unsigned long, unsigned short *);
18237+extern int acp_mdio_write(unsigned long, unsigned long, unsigned short);
18238+
18239+/* Base Addresses of the RX, TX, and DMA Registers. */
18240+static unsigned long rx_base;
18241+static unsigned long tx_base;
18242+static unsigned long dma_base;
18243+
18244+/*
18245+ ===============================================================================
18246+ Debug counts (readable from the external host).
18247+ ===============================================================================
18248+*/
18249+
18250+#undef LSINET_COUNTS
18251+#define LSINET_COUNTS
18252+
18253+#ifdef LSINET_COUNTS
18254+
18255+unsigned long lsinet_counts [ ] = {
18256+ 0, 0, 0, 0, /* ISR */
18257+ 0, 0, 0, 0, 0, 0, /* HST */
18258+ 0, 0, 0, 0, 0, 0, 0, /* RX */
18259+ 0, 0, 0, 0 /* POL */
18260+};
18261+
18262+EXPORT_SYMBOL( lsinet_counts );
18263+
18264+#define LSINET_COUNTS_INC( index ) { ++ lsinet_counts [ ( index ) ]; }
18265+
18266+#else /* LSINET_DEBUG_COUNTS */
18267+
18268+#define LSINET_COUNTS_INC( index )
18269+
18270+#endif /* LSINET_DEBUG_COUNTS */
18271+
18272+#define LSINET_COUNTS_ISR_START 0
18273+#define LSINET_COUNTS_ISR_TX 1
18274+#define LSINET_COUNTS_ISR_RX 2
18275+#define LSINET_COUNTS_ISR_DONE 3
18276+#define LSINET_COUNTS_HST_START 4
18277+#define LSINET_COUNTS_HST_RCLM 5
18278+#define LSINET_COUNTS_HST_SNDG 6
18279+#define LSINET_COUNTS_HST_SNT 7
18280+#define LSINET_COUNTS_HST_OOD 8
18281+#define LSINET_COUNTS_HST_DONE 9
18282+#define LSINET_COUNTS_RX_START 10
18283+#define LSINET_COUNTS_RX_PKT 11
18284+#define LSINET_COUNTS_RX_ERR 12
18285+#define LSINET_COUNTS_RX_GOOD 13
18286+#define LSINET_COUNTS_RX_SENT 14
18287+#define LSINET_COUNTS_RX_DRPD 15
18288+#define LSINET_COUNTS_RX_DONE 16
18289+#define LSINET_COUNTS_POL_START 17
18290+#define LSINET_COUNTS_POL_PKT 18
18291+#define LSINET_COUNTS_POL_RNBL 19
18292+#define LSINET_COUNTS_POL_DONE 20
18293+
18294+/*
18295+ ======================================================================
18296+ ======================================================================
18297+ ======================================================================
18298+ Profile/Trace/Debug/Warn/Error Macros
18299+ ======================================================================
18300+ ======================================================================
18301+ ======================================================================
18302+*/
18303+
18304+/* -- Profile ------------------------------------------------------- */
18305+
18306+/*#define __APPNIC_C_PROFILE__*/
18307+#ifdef __APPNIC_C_PROFILE__
18308+#include <asm/arch/timers.h>
18309+unsigned long time_in_rx_max_ = 0;
18310+unsigned long time_in_rx_min_ = 0xffffffff;
18311+unsigned long long total_rx_time_ = 0;
18312+unsigned long max_rx_packets_handled_ = 0;
18313+unsigned long total_rx_packets_handled_ = 0;
18314+unsigned long total_rx_interrupts_ = 0;
18315+unsigned long rx_packet_size_max_ = 0;
18316+unsigned long rx_packet_size_min_ = 0xffffffff;
18317+unsigned long total_rx_bytes_ = 0;
18318+unsigned long time_in_tx_max_ = 0;
18319+unsigned long time_in_tx_min_ = 0xffffffff;
18320+unsigned long long total_tx_time_ = 0;
18321+unsigned long total_tx_packets_ = 1;
18322+unsigned long jiffies_changed_ = 0;
18323+unsigned long total_polls_ = 0;
18324+
18325+unsigned long recv_t1_min_ = 0xffffffff;
18326+unsigned long recv_t2_min_ = 0xffffffff;
18327+unsigned long recv_t3_min_ = 0xffffffff;
18328+unsigned long recv_t1_max_ = 0;
18329+unsigned long recv_t2_max_ = 0;
18330+unsigned long recv_t3_max_ = 0;
18331+unsigned long long recv_t1_tot_ = 0;
18332+unsigned long long recv_t2_tot_ = 0;
18333+unsigned long long recv_t3_tot_ = 0;
18334+unsigned long total_rx_packets_sent_up_ = 1;
18335+
18336+
18337+#define app3xx_profile_time_calc(_beg_t_, _end_t_, _min_t_, _max_t_, _tot_t_) \
18338+ do { \
18339+ unsigned long _this_t_; \
18340+ if( _end_t_ > _beg_t_ ) { \
18341+ _this_t_ = _end_t_ - _beg_t_; \
18342+ } else { \
18343+ _this_t_ = _end_t_ + ( 0xffffffff - _beg_t_ ) + 1; \
18344+ } \
18345+ _tot_t_ += _this_t_; \
18346+ if( _this_t_ > _max_t_ ) { _max_t_ = _this_t_; } \
18347+ if( _this_t_ < _min_t_ ) { _min_t_ = _this_t_; } \
18348+ } while (0) ;
18349+
18350+#define profile_time_fmt(t,d) ((1000*t)/d)
18351+#define profile_avg_fmt(t,c,d) ((1000*(t/c))/d)
18352+#endif /* __APPNIC_C_PROFILE__ */
18353+
18354+/* -- TRACE --------------------------------------------------------- */
18355+
18356+#undef TRACE
18357+/*#define TRACE*/
18358+#define TRACE_PRINTK
18359+#ifdef TRACE
18360+#ifdef TRACE_PRINTK
18361+#define TRACE_BEGINNING( ) \
18362+printk( "nic:%d:%s:Beginning\n", smp_processor_id( ), __FUNCTION__ )
18363+#define TRACE_ENDING( ) \
18364+printk( "nic:%d:%s:Ending\n", smp_processor_id( ), __FUNCTION__ )
18365+#else
18366+#define TRACE_BEGINNING( ) TRACER_POST( "Beginning" );
18367+#define TRACE_ENDING( ) TRACER_POST( "Ending" );
18368+#endif
18369+#else
18370+#define TRACE_BEGINNING( format, args... )
18371+#define TRACE_ENDING( format, args... )
18372+#endif
18373+
18374+/* -- DEBUG --------------------------------------------------------- */
18375+
18376+#undef DEBUG
18377+/*#define DEBUG*/
18378+#if defined( DEBUG )
18379+#define DEBUG_PRINT( format, args... ) do { \
18380+printk( "appnic:%d - DEBUG - ", __LINE__ ); \
18381+printk( format, ##args ); \
18382+} while( 0 );
18383+#else
18384+#define DEBUG_PRINT( format, args... )
18385+#endif
18386+
18387+#undef PHY_DEBUG
18388+/*#define PHY_DEBUG*/
18389+#if defined( PHY_DEBUG )
18390+#define PHY_DEBUG_PRINT( format, args... ) do { \
18391+printk( "net:%d - PHY_DEBUG - ", __LINE__ ); \
18392+printk( format, ##args ); \
18393+} while( 0 );
18394+#else
18395+#define PHY_DEBUG_PRINT( format, args... )
18396+#endif
18397+
18398+/* -- WARN ----------------------------------------------------------- */
18399+
18400+#undef WARN
18401+#define WARN
18402+#if defined( WARN )
18403+#define WARN_PRINT( format, args... ) do { \
18404+printk( "appnic:%d - WARN - ", __LINE__ ); \
18405+printk( format, ##args ); \
18406+} while( 0 );
18407+#else
18408+#define WARN_PRINT( format, args... )
18409+#endif
18410+
18411+/* -- ERROR --------------------------------------------------------- */
18412+
18413+#define ERROR_PRINT( format, args... ) do { \
18414+printk( "%s:%s:%d - ERROR - ", __FILE__, __FUNCTION__, __LINE__ ); \
18415+printk( format, ##args ); \
18416+} while( 0 );
18417+
18418+/*
18419+ ======================================================================
18420+ ======================================================================
18421+ Optimizations
18422+ ======================================================================
18423+ ======================================================================
18424+*/
18425+
18426+#define DISABLE_TX_INTERRUPTS
18427+/*#define PRELOAD_RX_BUFFERS*/
18428+
18429+#undef DMA_CACHABLE
18430+/*#define DMA_CACHABLE*/
18431+
18432+/*
18433+ ===============================================================================
18434+ NAPI Support (new and newer)...
18435+ ===============================================================================
18436+*/
18437+
18438+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,4,20)
18439+
18440+#define LSINET_NAPI
18441+#define LSINET_NAPI_WEIGHT 64
18442+
18443+#endif
18444+
18445+/*
18446+ ======================================================================
18447+ ======================================================================
18448+ ======================================================================
18449+ Access and Access Logging
18450+ ======================================================================
18451+ ======================================================================
18452+ ======================================================================
18453+*/
18454+
18455+/*#define LOG_MAC_ACCESS*/
18456+/*#define LOG_PHY_ACCESS*/
18457+
18458+/*
18459+ ======================================================================
18460+ ======================================================================
18461+ ======================================================================
18462+ PHY
18463+ ======================================================================
18464+ ======================================================================
18465+ ======================================================================
18466+*/
18467+
18468+#undef PHYLESS
18469+/*#define PHYLESS*/
18470+
18471+#ifndef PHYLESS
18472+
18473+/* -- control -- */
18474+
18475+#define PHY_CONTROL 0x00
18476+
18477+typedef union {
18478+ unsigned short raw;
18479+
18480+ struct {
18481+#if 1
18482+ unsigned short soft_reset : 1;
18483+ unsigned short loop_back : 1;
18484+ unsigned short force100 : 1; /* speedBit0 */
18485+ unsigned short autoneg_enable : 1;
18486+ unsigned short power_down : 1;
18487+ unsigned short isolate : 1;
18488+ unsigned short restart_autoneg : 1;
18489+ unsigned short full_duplex : 1; /* duplex */
18490+ unsigned short collision_test : 1;
18491+ unsigned short unused : 7;
18492+#else /* __BIG_ENDIAN */
18493+ unsigned short : 7;
18494+ unsigned short collision_test : 1;
18495+ unsigned short full_duplex : 1; /* duplex */
18496+ unsigned short restart_autoneg : 1;
18497+ unsigned short isolate : 1;
18498+ unsigned short power_down : 1;
18499+ unsigned short autoneg_enable : 1;
18500+ unsigned short force100 : 1; /* speedBit0 */
18501+ unsigned short loop_back : 1;
18502+ unsigned short soft_reset : 1;
18503+#endif /* __BIG_ENDIAN */
18504+ } __attribute__ ( ( packed ) ) bits;
18505+} __attribute__ ( ( packed ) ) phy_control_t;
18506+
18507+/* -- status -- */
18508+
18509+#define PHY_STATUS 0x01
18510+
18511+typedef union {
18512+ unsigned short raw;
18513+
18514+ struct {
18515+#if 1
18516+ unsigned short t4_capable : 1;
18517+ unsigned short tx_fdx_capable : 1;
18518+ unsigned short tx_capable : 1;
18519+ unsigned short bt_fdx_capable : 1;
18520+ unsigned short tenbt_capable : 1;
18521+ unsigned short unused : 4;
18522+ unsigned short mf_pream_suppress : 1;
18523+ unsigned short autoneg_comp : 1; /* autoNegDone */
18524+ unsigned short remote_fault : 1; /* remoutFault */
18525+ unsigned short autoneg_capable : 1;
18526+ unsigned short link_status : 1; /* linkStatus */
18527+ unsigned short jabber_detect : 1;
18528+ unsigned short extd_reg_capable : 1;
18529+#else
18530+ unsigned short extd_reg_capable : 1;
18531+ unsigned short jabber_detect : 1;
18532+ unsigned short link_status : 1; /* linkStatus */
18533+ unsigned short autoneg_capable : 1;
18534+ unsigned short remote_fault : 1; /* remoutFault */
18535+ unsigned short autoneg_comp : 1; /* autoNegDone */
18536+ unsigned short mf_pream_suppress : 1;
18537+ unsigned short : 4;
18538+ unsigned short tenbt_capable : 1;
18539+ unsigned short bt_fdx_capable : 1;
18540+ unsigned short tx_capable : 1;
18541+ unsigned short tx_fdx_capable : 1;
18542+ unsigned short t4_capable : 1;
18543+#endif /* __BIG_ENDIAN */
18544+ } __attribute__ ( ( packed ) ) bits;
18545+} __attribute__ ( ( packed ) ) phy_status_t;
18546+
18547+/* -- id_high -- */
18548+
18549+#define PHY_ID_HIGH 0x02
18550+
18551+typedef union {
18552+ unsigned short raw;
18553+
18554+ struct {
18555+ unsigned short id : 16;
18556+ } __attribute__ ( ( packed ) ) bits;
18557+} __attribute__ ( ( packed ) ) phy_id_high_t;
18558+
18559+/* -- id_low -- */
18560+
18561+#define PHY_ID_LOW 0x03
18562+
18563+typedef union {
18564+ unsigned short raw;
18565+
18566+ struct {
18567+#if 1
18568+ unsigned short id : 6;
18569+ unsigned short model : 6;
18570+ unsigned short revision : 4;
18571+#else /* __BIG_ENDIAN */
18572+ unsigned short revision : 4;
18573+ unsigned short model : 6;
18574+ unsigned short id : 6;
18575+#endif /* __BIG_ENDIAN */
18576+ } __attribute__ ( ( packed ) ) bits;
18577+} __attribute__ ( ( packed ) ) phy_id_low_t;
18578+
18579+/* -- autoneg_advertise -- */
18580+
18581+#define PHY_AUTONEG_ADVERTISE 0x04
18582+
18583+/* -- link_partner_ability -- */
18584+
18585+#define PHY_LINK_PARTNER_ABILITY 0x05
18586+
18587+/* -- -- */
18588+
18589+#define MICREL_PHY_AUXILIARY_CONTROL_STATUS 0x1f
18590+
18591+typedef union {
18592+ unsigned short raw;
18593+
18594+ struct {
18595+ unsigned short : 3;
18596+ unsigned short energy : 1;
18597+ unsigned short force_link : 1;
18598+ unsigned short power_saving : 1;
18599+ unsigned short interrupt_level : 1;
18600+ unsigned short jabber_enable : 1;
18601+ unsigned short autoneg_indication : 1;
18602+ unsigned short enable_pause : 1;
18603+ unsigned short isolate : 1;
18604+ unsigned short op_mode_indication : 3;
18605+ unsigned short : 2;
18606+ } bits;
18607+} micrel_phy_auxiliary_control_status_t;
18608+
18609+/*
18610+ Auto-negotiation Advertisement Values.
18611+*/
18612+
18613+#define PHY_AUTONEG_ADVERTISE_100FULL 0x101
18614+#define PHY_AUTONEG_ADVERTISE_100 0x081
18615+#define PHY_AUTONEG_ADVERTISE_10FULL 0x041
18616+#define PHY_AUTONEG_ADVERTISE_10 0x021
18617+
18618+#define PHY_ADDRESS_ 0x1e
18619+static int phy_address_ = PHY_ADDRESS_;
18620+
18621+#define UNKNOWN_PHY_ 0x0
18622+#define BCM5221_PHY_ 0x1
18623+#define MICREL_PHY_ 0x2
18624+
18625+static int phy_type_ = UNKNOWN_PHY_;
18626+
18627+static int phy_read_( int, int, unsigned short * );
18628+static int phy_write_( int, int, unsigned short );
18629+static int phy_link_( int );
18630+static int phy_speed_( int );
18631+static int phy_duplex_( int );
18632+static int phy_scan_( void );
18633+static int phy_reset_( int );
18634+static int phy_renegotiate_( int );
18635+static int phy_enable_( int );
18636+
18637+#endif /* PHYLESS */
18638+
18639+/*
18640+ ======================================================================
18641+ ======================================================================
18642+ ======================================================================
18643+
18644+ NIC Interface
18645+
18646+ ======================================================================
18647+ ======================================================================
18648+ ======================================================================
18649+*/
18650+
18651+static int enable_( struct net_device * );
18652+
18653+/*
18654+ ======================================================================
18655+ ======================================================================
18656+ ======================================================================
18657+
18658+ Device Data Structures
18659+
18660+ ======================================================================
18661+ ======================================================================
18662+ ======================================================================
18663+*/
18664+
18665+typedef struct {
18666+
18667+#ifdef CONFIG_ACP
18668+
18669+ /* Word 0 */
18670+ unsigned long : 24;
18671+ /* big endian to little endian */
18672+ unsigned long byte_swapping_on : 1;
18673+ unsigned long error : 1;
18674+ unsigned long interrupt_on_completion : 1;
18675+ unsigned long end_of_packet : 1;
18676+ unsigned long start_of_packet : 1;
18677+ unsigned long write : 1;
18678+ /* 00=Fill|01=Block|10=Scatter */
18679+ unsigned long transfer_type : 2;
18680+
18681+ /* Word 1 */
18682+ unsigned long pdu_length : 16;
18683+ unsigned long data_transfer_length : 16;
18684+
18685+ /* Word 2 */
18686+ unsigned long target_memory_address;
18687+
18688+ /* Word 3 */
18689+ unsigned long host_data_memory_pointer;
18690+
18691+#else
18692+
18693+ /* Word 0 */
18694+ /* 00=Fill|01=Block|10=Scatter */
18695+ unsigned long transfer_type : 2;
18696+ unsigned long write : 1;
18697+ unsigned long start_of_packet : 1;
18698+ unsigned long end_of_packet : 1;
18699+ unsigned long interrupt_on_completion : 1;
18700+ unsigned long error : 1;
18701+ /* big endian to little endian */
18702+ unsigned long byte_swapping_on : 1;
18703+ unsigned long : 24;
18704+
18705+ /* Word 1 */
18706+ unsigned long data_transfer_length : 16;
18707+ unsigned long pdu_length : 16;
18708+
18709+ /* Word 2 */
18710+ unsigned long target_memory_address;
18711+
18712+ /* Word 3 */
18713+ unsigned long host_data_memory_pointer;
18714+
18715+#endif
18716+
18717+} __attribute__ ( ( packed ) ) appnic_dma_descriptor_t;
18718+
18719+typedef union {
18720+
18721+ unsigned long raw;
18722+
18723+ struct {
18724+#ifdef CONFIG_ACP
18725+ unsigned long : 11;
18726+ unsigned long generation_bit : 1;
18727+ unsigned long offset : 20;
18728+#else
18729+ unsigned long offset : 20;
18730+ unsigned long generation_bit : 1;
18731+ unsigned long : 11;
18732+#endif
18733+ } __attribute__ ( ( packed ) ) bits;
18734+
18735+} __attribute__ ( ( packed ) ) appnic_queue_pointer_t;
18736+
18737+/*
18738+ ===============================================================================
18739+ The Device Struction
18740+ ===============================================================================
18741+*/
18742+
18743+typedef struct {
18744+
18745+ /* net_device */
18746+ struct net_device * device;
18747+
18748+ /* Addresses, Interrupt, and PHY stuff. */
18749+ unsigned long rx_base;
18750+ unsigned long tx_base;
18751+ unsigned long dma_base;
18752+ unsigned long interrupt;
18753+ unsigned long mdio_clock;
18754+ unsigned long phy_address;
18755+ unsigned long ad_value;
18756+ unsigned char mac_addr[6];
18757+
18758+#ifdef LSINET_NAPI
18759+ /* napi */
18760+ struct napi_struct napi;
18761+#endif /* LSINET_ENABLE_NAPI */
18762+
18763+ /* statistics */
18764+ struct net_device_stats stats;
18765+
18766+ /*
18767+ DMA-able memory.
18768+ */
18769+
18770+ /* */
18771+ int dma_alloc_size;
18772+ void * dma_alloc;
18773+ dma_addr_t dma_alloc_dma;
18774+ int dma_alloc_offset;
18775+
18776+ /* tail pointers */
18777+ volatile appnic_queue_pointer_t * rx_tail;
18778+ dma_addr_t rx_tail_dma;
18779+ volatile appnic_queue_pointer_t * tx_tail;
18780+ dma_addr_t tx_tail_dma;
18781+
18782+ /* descriptors */
18783+ appnic_dma_descriptor_t * rx_desc;
18784+ dma_addr_t rx_desc_dma;
18785+ unsigned rx_num_desc;
18786+ appnic_dma_descriptor_t * tx_desc;
18787+ dma_addr_t tx_desc_dma;
18788+ unsigned tx_num_desc;
18789+
18790+ /* buffers */
18791+ unsigned rx_buf_sz;
18792+ unsigned rx_buf_per_desc;
18793+ void * rx_buf;
18794+ dma_addr_t rx_buf_dma;
18795+ unsigned tx_buf_sz;
18796+ unsigned tx_buf_per_desc;
18797+ void * tx_buf;
18798+ dma_addr_t tx_buf_dma;
18799+
18800+ /*
18801+ The local pointers
18802+ */
18803+
18804+ appnic_queue_pointer_t rx_tail_copy;
18805+ appnic_queue_pointer_t rx_head;
18806+
18807+ appnic_queue_pointer_t tx_tail_copy;
18808+ appnic_queue_pointer_t tx_head;
18809+
18810+ /*
18811+ Polling Mode?
18812+ */
18813+
18814+ int polling;
18815+
18816+ /*
18817+ Spin Lock
18818+ */
18819+
18820+ spinlock_t lock;
18821+ spinlock_t extra_lock;
18822+
18823+ /*
18824+ * TEMP: semaphores for locking Tx/Rx operations
18825+ */
18826+
18827+ struct semaphore tx_sem;
18828+ struct semaphore rx_sem;
18829+ struct semaphore poll_sem;
18830+
18831+} appnic_device_t;
18832+
18833+#define DESCRIPTOR_GRANULARITY 64
18834+#define BUFFER_ALIGNMENT 64
18835+
18836+#define ALIGN64B( address ) \
18837+( ( ( ( unsigned long ) ( address ) + ( 64UL - 1UL ) ) & ~ ( 64UL - 1UL ) ) )
18838+
18839+#define ALIGN64B_OFFSET( address ) \
18840+( ALIGN64B( address ) - ( unsigned long ) ( address ) )
18841+
18842+#define APPNIC_NAME "appnic"
18843+
18844+/*
18845+ Overview
18846+ --------
18847+
18848+ Register offset decoding is as follows:
18849+
18850+ Bit(s) Description
18851+
18852+ 16:15 define the Channel. There is only one; therefore, 00.
18853+ 14:12 define the MAC within the channel. Only one so 000.
18854+ 11:10 define the register "space" as follows:
18855+ 00 = fast ethernet MAC
18856+ 10 = global
18857+ 11 = interrupt
18858+ 9: 2 register
18859+ 1: 0 always 00, 32 bit registers only.
18860+
18861+ Receive registers start at the base address. Transmit registers start
18862+ at 0x20000 above the base address. DMA start at a completely different
18863+ base address (in this case 0x8000000 above the base).
18864+
18865+*/
18866+
18867+/*
18868+ ======================================================================
18869+ ======================================================================
18870+ ======================================================================
18871+
18872+ Registers.
18873+
18874+ ======================================================================
18875+ ======================================================================
18876+ ======================================================================
18877+*/
18878+
18879+/* SMII Status ------------------------------------------------------ */
18880+
18881+#define APPNIC_RX_SMII_STATUS ( rx_base + 0x10 )
18882+#define APPNIC_RX_SMII_STATUS_SPEED 0x01
18883+#define APPNIC_RX_SMII_STATUS_DUPLEX 0x02
18884+#define APPNIC_RX_SMII_STATUS_LINK 0x04
18885+#define APPNIC_RX_SMII_STATUS_JABBER 0x08
18886+#define APPNIC_RX_SMII_STATUS_FCD 0x10 /* False Carrier Detect */
18887+
18888+#define SMII_SPEED_100( smii_status_ ) \
18889+( 0 != ( smii_status_ & APPNIC_RX_SMII_STATUS_SPEED ) )
18890+#define SMII_DUPLEX( smii_status_ ) \
18891+( 0 != ( smii_status_ & APPNIC_RX_SMII_STATUS_DUPLEX ) )
18892+#define SMII_LINK( smii_status_ ) \
18893+( 0 != ( smii_status_ & APPNIC_RX_SMII_STATUS_LINK ) )
18894+#define SMII_JABBER( smii_status_ ) \
18895+( 0 != ( smii_status_ & APPNIC_RX_SMII_STATUS_JABBER ) )
18896+
18897+/* Receive Configuration -------------------------------------------- */
18898+
18899+#define APPNIC_RX_CONF ( rx_base + 0x004c )
18900+#define APPNIC_RX_CONF_ENABLE 0x0001
18901+/* Pass Any Packet */
18902+#define APPNIC_RX_CONF_PAP 0x0002
18903+#define APPNIC_RX_CONF_JUMBO9K 0x0008
18904+#define APPNIC_RX_CONF_STRIPCRC 0x0010
18905+/* Accept All MAC Types */
18906+#define APPNIC_RX_CONF_AMT 0x0020
18907+/* Accept Flow Control */
18908+#define APPNIC_RX_CONF_AFC 0x0040
18909+/* Enable VLAN */
18910+#define APPNIC_RX_CONF_VLAN 0x0200
18911+/* RX MAC Speed, 1=100MBS */
18912+#define APPNIC_RX_CONF_SPEED 0x0800
18913+/* 1=Duplex Mode */
18914+#define APPNIC_RX_CONF_DUPLEX 0x1000
18915+/* 1=Enable */
18916+#define APPNIC_RX_CONF_LINK 0x2000
18917+/* Determines the action taken when the FE MAC
18918+ receives an FC packet in FD mode.*/
18919+#define APPNIC_RX_CONF_RXFCE 0x4000
18920+/* Controls the insertion of FC packets
18921+ by the MAC transmitter. */
18922+#define APPNIC_RX_CONF_TXFCE 0x8000
18923+
18924+/* Receive Stat Overflow -------------------------------------------- */
18925+
18926+#define APPNIC_RX_STAT_OVERFLOW ( rx_base + 0x278 )
18927+
18928+/* Receive Stat Undersize ------------------------------------------- */
18929+
18930+#define APPNIC_RX_STAT_UNDERSIZE ( rx_base + 0x280 )
18931+
18932+/* Receive Stat Oversize -------------------------------------------- */
18933+
18934+#define APPNIC_RX_STAT_OVERSIZE ( rx_base + 0x2b8 )
18935+
18936+/* Receive Stat Multicast ------------------------------------------- */
18937+
18938+#define APPNIC_RX_STAT_MULTICAST ( rx_base + 0x2d0 )
18939+
18940+/* Receive Stat Packet OK ------------------------------------------- */
18941+
18942+#define APPNIC_RX_STAT_PACKET_OK ( rx_base + 0x2c0 )
18943+
18944+/* Receive Stat CRC Error ------------------------------------------- */
18945+
18946+#define APPNIC_RX_STAT_CRC_ERROR ( rx_base + 0x2c8 )
18947+
18948+/* Receive Stat Align Error ----------------------------------------- */
18949+
18950+#define APPNIC_RX_STAT_ALIGN_ERROR ( rx_base + 0x2e8 )
18951+
18952+/* Receive Ethernet Mode -------------------------------------------- */
18953+
18954+#define APPNIC_RX_MODE ( rx_base + 0x0800 )
18955+#define APPNIC_RX_MODE_ETHERNET_MODE_ENABLE 0x00001
18956+
18957+/* Receive Soft Reset ----------------------------------------------- */
18958+
18959+#define APPNIC_RX_SOFT_RESET ( rx_base + 0x0808 )
18960+#define APPNIC_RX_SOFT_RESET_MAC_0 0x00001
18961+
18962+/* Receive Internal Interrupt Control ------------------------------- */
18963+
18964+#define APPNIC_RX_INTERNAL_INTERRUPT_CONTROL ( rx_base + 0xc00 )
18965+#define APPNIC_RX_INTERNAL_INTERRUPT_CONTROL_MAC_0 0x1
18966+
18967+/* Receive External Interrupt Control ------------------------------- */
18968+
18969+#define APPNIC_RX_EXTERNAL_INTERRUPT_CONTROL ( rx_base + 0xc04 )
18970+#define APPNIC_RX_EXTERNAL_INTERRUPT_CONTROL_MAC_0_HIGH_LOW 0x10
18971+#define APPNIC_RX_EXTERNAL_INTERRUPT_CONTROL_MAC_0 0x1
18972+
18973+/* Receive Interrupt Status ----------------------------------------- */
18974+
18975+#define APPNIC_RX_INTERRUPT_STATUS ( rx_base + 0xc20 )
18976+#define APPNIC_RX_INTERRUPT_EXTERNAL_STATUS_MAC_0 0x10
18977+#define APPNIC_RX_INTERRUPT_INTERNAL_STATUS_MAC_0 0x1
18978+
18979+/* Transmit Watermark ----------------------------------------------- */
18980+
18981+#define APPNIC_TX_WATERMARK (tx_base + 0x18 )
18982+#define APPNIC_TX_WATERMARK_TXCONFIG_DTPA_ASSERT 0x8000
18983+#define APPNIC_TX_WATERMARK_TXCONFIG_DTPA_DISABLE 0x4000
18984+#define APPNIC_TX_WATERMARK_TXCONFIG_DTPA_WATER_MARK_HIGH 0x3f00
18985+#define APPNIC_TX_WATERMARK_TXCONFIG_DTPA_WATER_MARK_LOW 0x3f
18986+
18987+/* Swap Source Address Registers ------------------------------------ */
18988+
18989+#define APPNIC_SWAP_SOURCE_ADDRESS_2 ( tx_base + 0x20 )
18990+#define APPNIC_SWAP_SOURCE_ADDRESS_1 ( tx_base + 0x24 )
18991+#define APPNIC_SWAP_SOURCE_ADDRESS_0 ( tx_base + 0x28 )
18992+
18993+/* Transmit Extended Configuration ---------------------------------- */
18994+
18995+#define APPNIC_TX_EXTENDED_CONF ( tx_base + 0x30 )
18996+#define APPNIC_TX_EXTENDED_CONF_TRANSMIT_COLLISION_WATERMARK_LEVEL 0xf000
18997+#define APPNIC_TX_EXTENDED_CONF_EXCESSIVE_DEFFERED_PACKET_DROP 0x200
18998+#define APPNIC_TX_EXTENDED_CONF_JUMBO9K 0x100
18999+#define APPNIC_TX_EXTENDED_CONF_LATE_COLLISION_WINDOW_COUNT 0xff
19000+
19001+/* Transmit Half Duplex Configuration ------------------------------- */
19002+
19003+#define APPNIC_TX_HALF_DUPLEX_CONF ( tx_base + 0x34 )
19004+#define APPNIC_TX_HALF_DUPLEX_CONF_RANDOM_SEED_VALUE 0xff
19005+
19006+/* Transmit Configuration ------------------------------------------- */
19007+
19008+#define APPNIC_TX_CONF ( tx_base + 0x0050 )
19009+#define APPNIC_TX_CONF_ENABLE_SWAP_SA 0x8000
19010+#define APPNIC_TX_CONF_LINK 0x2000
19011+#define APPNIC_TX_CONF_DUPLEX 0x1000
19012+#define APPNIC_TX_CONF_SPEED 0x0800
19013+#define APPNIC_TX_CONF_XBK_RST_RX_NTX 0x0600
19014+#define APPNIC_TX_CONF_IFG 0x01f0
19015+#define APPNIC_TX_CONF_APP_CRC_ENABLE 0x0004
19016+#define APPNIC_TX_CONF_PAD_ENABLE 0x0002
19017+#define APPNIC_TX_CONF_ENABLE 0x0001
19018+
19019+#define TX_CONF_SET_IFG( tx_configuration_, ifg_ ) do { \
19020+( tx_configuration_ ) &= ~ APPNIC_TX_CONF_IFG; \
19021+( tx_configuration_ ) |= ( ( ifg_ & 0x1f ) << 4 ); \
19022+} while( 0 );
19023+
19024+/* Transmit Time Value Configuration -------------------------------- */
19025+
19026+#define APPNIC_TX_TIME_VALUE_CONF ( tx_base + 0x5c )
19027+#define APPNIC_TX_TIME_VALUE_CONF_PAUSE_VALUE 0xffff
19028+
19029+/* Transmit Stat Underrun ------------------------------------------- */
19030+
19031+#define APPNIC_TX_STAT_UNDERRUN ( tx_base + 0x300 )
19032+
19033+/* Transmit Stat Packet OK ------------------------------------------ */
19034+
19035+#define APPNIC_TX_STAT_PACKET_OK ( tx_base + 0x318 )
19036+
19037+/* Transmit Stat Undersize ------------------------------------------ */
19038+
19039+#define APPNIC_TX_STAT_UNDERSIZE ( tx_base + 0x350 )
19040+
19041+/* Transmit Status Late Collision ----------------------------------- */
19042+
19043+#define APPNIC_TX_STATUS_LATE_COLLISION ( tx_base + 0x368 )
19044+
19045+/* Transmit Status Excessive Collision ------------------------------ */
19046+
19047+#define APPNIC_TX_STATUS_EXCESSIVE_COLLISION ( tx_base + 0x370 )
19048+
19049+/* Transmit Stat Collision Above Watermark -------------------------- */
19050+
19051+#define APPNIC_TX_STAT_COLLISION_ABOVE_WATERMARK ( tx_base + 0x380 )
19052+
19053+/* Transmit Mode ---------------------------------------------------- */
19054+
19055+#define APPNIC_TX_MODE ( tx_base + 0x800 )
19056+#define APPNIC_TX_MODE_ETHERNET_MODE_ENABLE 0x1
19057+
19058+/* Transmit Soft Reset ---------------------------------------------- */
19059+
19060+#define APPNIC_TX_SOFT_RESET ( tx_base + 0x808 )
19061+#define APPNIC_TX_SOFT_RESET_MAC_0 0x1
19062+
19063+/* Transmit Interrupt Control --------------------------------------- */
19064+
19065+#define APPNIC_TX_INTERRUPT_CONTROL ( tx_base + 0xc00 )
19066+#define APPNIC_TX_INTERRUPT_CONTROL_MAC_0 0x1
19067+
19068+/* Transmit Interrupt Status ---------------------------------------- */
19069+
19070+#define APPNIC_TX_INTERRUPT_STATUS ( tx_base + 0xc20 )
19071+#define APPNIC_TX_INTERRUPT_STATUS_MAC_0 0x1
19072+
19073+/* */
19074+
19075+#define APPNIC_DMA_PCI_CONTROL ( dma_base + 0x00 )
19076+
19077+/* */
19078+
19079+#define APPNIC_DMA_CONTROL ( dma_base + 0x08 )
19080+
19081+/* DMA Interrupt Status --------------------------------------------- */
19082+
19083+#define APPNIC_DMA_INTERRUPT_STATUS ( dma_base + 0x18 )
19084+#define APPNIC_DMA_INTERRUPT_STATUS_RX 0x2
19085+#define APPNIC_DMA_INTERRUPT_STATUS_TX 0x1
19086+
19087+#define RX_INTERRUPT( dma_interrupt_status_ ) \
19088+( 0 != ( dma_interrupt_status_ & APPNIC_DMA_INTERRUPT_STATUS_RX ) )
19089+#define TX_INTERRUPT( dma_interrupt_status_ ) \
19090+( 0 != ( dma_interrupt_status_ & APPNIC_DMA_INTERRUPT_STATUS_TX ) )
19091+
19092+/* DMA Interrupt Enable --------------------------------------------- */
19093+
19094+#define APPNIC_DMA_INTERRUPT_ENABLE ( dma_base + 0x1c )
19095+#define APPNIC_DMA_INTERRUPT_ENABLE_RECEIVE 0x2
19096+#define APPNIC_DMA_INTERRUPT_ENABLE_TRANSMIT 0x1
19097+
19098+/* DMA Receive Queue Base Address ----------------------------------- */
19099+
19100+#define APPNIC_DMA_RX_QUEUE_BASE_ADDRESS ( dma_base + 0x30 )
19101+
19102+/* DMA Receive Queue Size ------------------------------------------- */
19103+
19104+#define APPNIC_DMA_RX_QUEUE_SIZE ( dma_base + 0x34 )
19105+
19106+/* DMA Transmit Queue Base Address ---------------------------------- */
19107+
19108+#define APPNIC_DMA_TX_QUEUE_BASE_ADDRESS ( dma_base + 0x38 )
19109+
19110+/* DMA Transmit Queue Size ------------------------------------------ */
19111+
19112+#define APPNIC_DMA_TX_QUEUE_SIZE ( dma_base + 0x3c )
19113+
19114+/* DMA Recevie Tail Pointer Address --------------------------------- */
19115+
19116+#define APPNIC_DMA_RX_TAIL_POINTER_ADDRESS ( dma_base + 0x48 )
19117+
19118+/* DMA Transmit Tail Pointer Address -------------------------------- */
19119+
19120+#define APPNIC_DMA_TX_TAIL_POINTER_ADDRESS ( dma_base + 0x4c )
19121+
19122+/* DMA Receive Head Pointer ----------------------------------------- */
19123+
19124+#define APPNIC_DMA_RX_HEAD_POINTER ( dma_base + 0x50 )
19125+#define APPNIC_DMA_RX_HEAD_POINTER_GB 0x100000
19126+#define APPNIC_DMA_RX_HEAD_POINTER_POINTER 0x0fffff
19127+
19128+/* DMA Receive Tail Pointer Local Copy ------------------------------ */
19129+
19130+#define APPNIC_DMA_RX_TAIL_POINTER_LOCAL_COPY ( dma_base + 0x54 )
19131+#define APPNIC_DMA_RX_TAIL_POINTER_LOCAL_COPY_GB 0x100000
19132+#define APPNIC_DMA_RX_TAIL_POINTER_LOCAL_COPY_POINTER 0x0fffff
19133+
19134+/* DMA Transmit Head Pointer ---------------------------------------- */
19135+
19136+#define APPNIC_DMA_TX_HEAD_POINTER ( dma_base + 0x58 )
19137+#define APPNIC_DMA_TX_HEAD_POINTER_GB 0x100000
19138+#define APPNIC_DMA_TX_HEAD_POINTER_POINTER 0x0fffff
19139+
19140+/* DMA Transmit Tail Pointer Local Copy ----------------------------- */
19141+
19142+#define APPNIC_DMA_TX_TAIL_POINTER_LOCAL_COPY ( dma_base + 0x5c )
19143+#define APPNIC_DMA_TX_TAIL_POINTER_LOCAL_COPY_GB 0x100000
19144+#define APPNIC_DMA_TX_TAIL_POINTER_LOCAL_COPY_POINTER 0x0fffff
19145+
19146+/*
19147+ ======================================================================
19148+ ======================================================================
19149+ ======================================================================
19150+
19151+ Access
19152+
19153+ N.B. On the APP, DMA transfers from the NIC MUST USE THE MEMORY
19154+ ALIAS AT 0x60000000!
19155+
19156+ ======================================================================
19157+ ======================================================================
19158+ ======================================================================
19159+*/
19160+
19161+#ifdef CONFIG_ACP
19162+
19163+#define readio( address ) in_le32( ( u32 * ) ( address ) )
19164+
19165+#define writeio( value, address ) out_le32( ( u32 * ) ( address ), ( value ) );
19166+
19167+static inline void
19168+readdescriptor( unsigned long address, appnic_dma_descriptor_t * descriptor )
19169+{
19170+ unsigned long * from = ( unsigned long * ) address;
19171+ unsigned long * to = ( unsigned long * ) descriptor;
19172+ * to ++ = swab32( * from ++ );
19173+ * to ++ = swab32( * from ++ );
19174+ * to ++ = swab32( * from ++ );
19175+ * to ++ = swab32( * from ++ );
19176+ return;
19177+}
19178+
19179+static inline void
19180+writedescriptor( unsigned long address,
19181+ const appnic_dma_descriptor_t * descriptor )
19182+{
19183+ unsigned long * to = ( unsigned long * ) address;
19184+ unsigned long * from = ( unsigned long * ) descriptor;
19185+ * to ++ = swab32( * from ++ );
19186+ * to ++ = swab32( * from ++ );
19187+ * to ++ = swab32( * from ++ );
19188+ * to ++ = swab32( * from ++ );
19189+ return;
19190+}
19191+
19192+static inline appnic_queue_pointer_t
19193+swab_queue_pointer( const appnic_queue_pointer_t * old_queue )
19194+{
19195+ appnic_queue_pointer_t new_queue;
19196+ new_queue.raw = swab32( old_queue->raw );
19197+ return new_queue;
19198+}
19199+
19200+#define SWAB_QUEUE_POINTER( pointer ) \
19201+swab_queue_pointer( ( const appnic_queue_pointer_t * ) ( pointer ) )
19202+
19203+#else
19204+
19205+#define readio( address ) readl( ( address ) )
19206+
19207+#define writeio( value, address ) writel( ( value ), ( address ) )
19208+
19209+static inline void
19210+readdescriptor( unsigned long address, appnic_dma_descriptor_t * descriptor )
19211+{
19212+ memcpy( descriptor, ( void * ) address, sizeof( appnic_dma_descriptor_t ) );
19213+ return;
19214+}
19215+
19216+static inline void
19217+writedescriptor( unsigned long address,
19218+ const appnic_dma_descriptor_t * descriptor )
19219+{
19220+ memcpy( ( void * ) address, descriptor, sizeof( appnic_dma_descriptor_t ) );
19221+ return;
19222+}
19223+
19224+static inline unsigned long
19225+swab_queue_pointer( unsigned long old_queue )
19226+{
19227+ return old_queue;
19228+}
19229+
19230+#endif
19231+
19232+#ifdef LOG_MAC_ACCESS
19233+
19234+static unsigned long read_mac_( unsigned int address ) {
19235+
19236+ unsigned long value_ = readio( address );
19237+
19238+ switch( address & 0xfffff000 ) {
19239+
19240+ case rx_base:
19241+ printk( "-MAC- RX + 0x%04x => 0x%08lx\n", ( address & 0x1fff ), value_ );
19242+ break;
19243+
19244+ case tx_base:
19245+ printk( "-MAC- TX + 0x%04x => 0x%08lx\n", ( address & 0x1fff ), value_ );
19246+ break;
19247+
19248+ case dma_base:
19249+ printk( "-MAC- DMA + 0x%04x => 0x%08lx\n", ( address & 0x1fff ), value_ );
19250+ break;
19251+
19252+ default:
19253+ ERROR_PRINT( "ARGHHHHH!!!\n" );
19254+ break;
19255+
19256+ }
19257+
19258+ return value_;
19259+
19260+}
19261+
19262+static void write_mac_( unsigned long value, unsigned int address ) {
19263+
19264+ switch( address & 0xfffff000 ) {
19265+
19266+ case rx_base:
19267+ printk( "-MAC- RX + 0x%04x <= 0x%08lx\n", ( address & 0x1fff ), value );
19268+ break;
19269+
19270+ case tx_base:
19271+ printk( "-MAC- TX + 0x%04x <= 0x%08lx\n", ( address & 0x1fff ), value );
19272+ break;
19273+
19274+ case dma_base:
19275+ printk( "-MAC- DMA + 0x%04x <= 0x%08lx\n", ( address & 0x1fff ), value );
19276+ break;
19277+
19278+ default:
19279+ ERROR_PRINT( "ARGHHHHH!!!\n" );
19280+ break;
19281+
19282+ }
19283+
19284+ writeio( value, address );
19285+ return;
19286+
19287+}
19288+
19289+#else /* ! LOG_MAC_ACCESS */
19290+
19291+#define read_mac_( address ) readio( ( address ) )
19292+#define write_mac_( value, address ) writeio( ( value ), ( address ) )
19293+
19294+#endif
19295+
19296+#ifndef PHYLESS
19297+#ifdef LOG_PHY_ACCESS
19298+
19299+static unsigned long read_phy_( unsigned int address ) {
19300+
19301+ unsigned long value_ = readl( address );
19302+ printk( "-PHY- HOST + 0x%04x => 0x%08lx\n", ( address & 0xff ), value_ );
19303+ return value_;
19304+
19305+}
19306+
19307+static void write_phy_( unsigned long value, unsigned int address ) {
19308+
19309+ printk( "-PHY- HOST + 0x%04x <= 0x%08lx\n", ( address & 0xff ), value );
19310+ writel( value, address );
19311+ return;
19312+
19313+}
19314+
19315+#else /* ! LOG_PHY_ACCESS */
19316+
19317+#define read_phy_( address ) readl( ( address ) )
19318+#define write_phy_( value, address ) writel( value, address )
19319+
19320+#endif
19321+#endif /* PHYLESS */
19322+
19323+/*
19324+ ======================================================================
19325+ ======================================================================
19326+ ======================================================================
19327+
19328+ Module Information
19329+
19330+ ======================================================================
19331+ ======================================================================
19332+ ======================================================================
19333+*/
19334+
19335+MODULE_AUTHOR( "John Jacques" );
19336+MODULE_DESCRIPTION( "Agere APP3xx ethernet driver" );
19337+MODULE_LICENSE( "GPL" );
19338+
19339+/*
19340+ ----- Note On Buffer Space -----
19341+
19342+ Minimum number of descriptors is 64 for the receiver and 64 for the
19343+ transmitter; therefore, 2048 bytes (16 bytes each).
19344+ This driver uses the following parameters,
19345+ all of which may be set on the command line if this drivers is used
19346+ as a module.
19347+
19348+ - rx_num_desc : Number of receive descriptors. This must be a multiple of
19349+ 64.
19350+ - tx_num_desc : Number of transmit descriptors. This must be a multiple of
19351+ 64.
19352+
19353+ The scheme used will be as follows:
19354+
19355+ - num_[rt]x_desc will be adjusted to be a multiple of 64 (if necessary).
19356+ - An skb (with the data area 64 byte aligned) will be allocated for each rx
19357+ descriptor.
19358+*/
19359+
19360+/*
19361+ Receiver
19362+*/
19363+
19364+int rx_num_desc = ( CONFIG_LSI_NET_NUM_RX_DESC * DESCRIPTOR_GRANULARITY );
19365+module_param( rx_num_desc, int, 0 );
19366+MODULE_PARM_DESC( rx_num_desc, "appnic : Number of receive descriptors" );
19367+
19368+int rx_buf_sz = CONFIG_LSI_NET_RX_BUF_SZ;
19369+module_param( rx_buf_sz, int, 0 );
19370+MODULE_PARM_DESC( rx_buf_sz, "appnic : Receive buffer size" );
19371+
19372+/*
19373+ Transmitter
19374+*/
19375+
19376+int tx_num_desc = ( CONFIG_LSI_NET_NUM_TX_DESC * DESCRIPTOR_GRANULARITY );
19377+module_param( tx_num_desc, int, 0 );
19378+MODULE_PARM_DESC( tx_num_desc, "appnic : Number of receive descriptors" );
19379+
19380+int tx_buf_sz = CONFIG_LSI_NET_TX_BUF_SZ;
19381+module_param( tx_buf_sz, int, 0 );
19382+MODULE_PARM_DESC( tx_buf_sz, "Appnic : Receive buffer size" );
19383+
19384+/*
19385+ Timeout, if a transmit takes longer than this
19386+ value in jiffies it has timed out.
19387+*/
19388+
19389+#define DEFAULT_TX_TIMEOUT 10
19390+
19391+int tx_timeout = DEFAULT_TX_TIMEOUT;
19392+module_param( tx_timeout, int, 0 );
19393+MODULE_PARM_DESC( tx_timeout, "appnic : Transmit timeout (in jiffies)" );
19394+
19395+/*
19396+ Only 1 device is possible...
19397+*/
19398+
19399+struct net_device *this_net_device;
19400+
19401+static unsigned long dropped_by_stack_ = 0;
19402+static unsigned long out_of_tx_descriptors_ = 0;
19403+static unsigned long transmit_interrupts_ = 0;
19404+#ifdef LSINET_NAPI
19405+static unsigned long receive_interrupts_ = 0;
19406+#endif
19407+
19408+#define APPNIC_TIMER_PERIOD 5
19409+#ifndef PHYLESS
19410+static void appnic_timer_handler_( unsigned long );
19411+static struct timer_list appnic_timer_;
19412+#endif /* PHYLESS */
19413+
19414+/*
19415+ ======================================================================
19416+ ======================================================================
19417+ ======================================================================
19418+
19419+ Locking...
19420+
19421+ ======================================================================
19422+ ======================================================================
19423+ ======================================================================
19424+*/
19425+
19426+#ifdef CONFIG_SMP
19427+/*
19428+ * On SMP we have the following problem:
19429+ *
19430+ * A = smc_hard_start_xmit()
19431+ * B = smc_interrupt()
19432+ *
19433+ * A and B can never be executed simultaneously. However, at least on UP,
19434+ * it is possible (and even desirable) for C to interrupt execution of
19435+ * A or B in order to have better RX reliability and avoid overruns.
19436+ * C, just like A and B, must have exclusive access to the chip and
19437+ * each of them must lock against any other concurrent access.
19438+ * Unfortunately this is not possible to have C suspend execution of A or
19439+ * B taking place on another CPU. On UP this is no an issue since A and B
19440+ * are run from softirq context and C from hard IRQ context, and there is
19441+ * no other CPU where concurrent access can happen.
19442+ * If ever there is a way to force at least B and C to always be executed
19443+ * on the same CPU then we could use read/write locks to protect against
19444+ * any other concurrent access and C would always interrupt B. But life
19445+ * isn't that easy in a SMP world...
19446+ */
19447+
19448+#define appnic_special_trylock(lock) \
19449+ ({ \
19450+ int __ret; \
19451+ local_irq_disable(); \
19452+ __ret = spin_trylock(lock); \
19453+ if (!__ret) \
19454+ local_irq_enable(); \
19455+ __ret; \
19456+ })
19457+#define appnic_special_lock(lock) spin_lock_irq(lock)
19458+#define appnic_special_unlock(lock) spin_unlock_irq(lock)
19459+#else
19460+#define appnic_special_trylock(lock) (1)
19461+#define appnic_special_lock(lock) do { } while (0)
19462+#define appnic_special_unlock(lock) do { } while (0)
19463+#endif
19464+
19465+/*
19466+ ======================================================================
19467+ ======================================================================
19468+ ======================================================================
19469+
19470+ Utility Functions
19471+
19472+ ======================================================================
19473+ ======================================================================
19474+ ======================================================================
19475+*/
19476+
19477+/*
19478+ ----------------------------------------------------------------------
19479+ clear_statistics_
19480+*/
19481+
19482+static void clear_statistics_( appnic_device_t * device ) {
19483+
19484+ int waste_;
19485+
19486+ /*
19487+ Clear memory.
19488+ */
19489+
19490+ memset( ( void * ) & ( device->stats ), 0,
19491+ sizeof( struct net_device_stats ) );
19492+
19493+ /*
19494+ Clear counters.
19495+ */
19496+
19497+ waste_ = read_mac_( APPNIC_RX_STAT_PACKET_OK ); /* rx_packets */
19498+ waste_ = read_mac_( APPNIC_TX_STAT_PACKET_OK ); /* tx_packets */
19499+ /* rx_bytes kept by driver. */
19500+ /* tx_bytes kept by driver. */
19501+ /* rx_errors will be the sum of the rx errors available. */
19502+ /* tx_errors will be the sum of the tx errors available. */
19503+ /* rx_dropped (unable to allocate skb) will be maintained by the driver */
19504+ /* tx_dropped (unable to allocate skb) will be maintained by the driver */
19505+ /* multicast */
19506+ waste_ = read_mac_( APPNIC_RX_STAT_MULTICAST );
19507+ /* collisions will be the sum of the three following. */
19508+ waste_ = read_mac_( APPNIC_TX_STATUS_LATE_COLLISION );
19509+ waste_ = read_mac_( APPNIC_TX_STATUS_EXCESSIVE_COLLISION );
19510+ waste_ = read_mac_( APPNIC_TX_STAT_COLLISION_ABOVE_WATERMARK );
19511+ /* rx_length_errors will be the sum of the two following. */
19512+ waste_ = read_mac_( APPNIC_RX_STAT_UNDERSIZE );
19513+ waste_ = read_mac_( APPNIC_RX_STAT_OVERSIZE );
19514+ /* rx_over_errors (out of descriptors?) maintained by the driver. */
19515+ /* rx_crc_errors */
19516+ waste_ = read_mac_( APPNIC_RX_STAT_CRC_ERROR );
19517+ /* rx_frame_errors */
19518+ waste_ = read_mac_( APPNIC_RX_STAT_ALIGN_ERROR );
19519+ /* rx_fifo_errors */
19520+ waste_ = read_mac_( APPNIC_RX_STAT_OVERFLOW );
19521+ /* rx_missed will not be maintained. */
19522+ /* tx_aborted_errors will be maintained by the driver. */
19523+ /* tx_carrier_errors will not be maintained. */
19524+ /* tx_fifo_errors */
19525+ waste_ = read_mac_( APPNIC_TX_STAT_UNDERRUN );
19526+ /* tx_heartbeat_errors */
19527+ /* tx_window_errors */
19528+
19529+ /* rx_compressed will not be maintained. */
19530+ /* tx_compressed will not be maintained. */
19531+
19532+ /*
19533+ That's all.
19534+ */
19535+
19536+ return;
19537+
19538+}
19539+
19540+/*
19541+ ----------------------------------------------------------------------
19542+ get_hw_statistics_
19543+
19544+ -- NOTES --
19545+
19546+ 1) The hardware clears the statistics registers after a read.
19547+*/
19548+
19549+static void get_hw_statistics_( appnic_device_t * device ) {
19550+
19551+ /* tx_packets */
19552+ device->stats.tx_packets += read_mac_( APPNIC_TX_STAT_PACKET_OK );
19553+ /* multicast */
19554+ device->stats.multicast += read_mac_( APPNIC_RX_STAT_MULTICAST );
19555+ /* collision */
19556+ device->stats.collisions += read_mac_( APPNIC_TX_STATUS_LATE_COLLISION );
19557+ device->stats.collisions +=
19558+ read_mac_( APPNIC_TX_STATUS_EXCESSIVE_COLLISION );
19559+ device->stats.collisions +=
19560+ read_mac_( APPNIC_TX_STAT_COLLISION_ABOVE_WATERMARK );
19561+ /* rx_length_errors */
19562+ device->stats.rx_length_errors += read_mac_( APPNIC_RX_STAT_UNDERSIZE );
19563+ device->stats.rx_length_errors += read_mac_( APPNIC_RX_STAT_OVERSIZE );
19564+ /* tx_fifo_errors */
19565+ device->stats.tx_fifo_errors += read_mac_( APPNIC_TX_STAT_UNDERRUN );
19566+
19567+ /*
19568+ Lock this section out so the statistics maintained by the driver
19569+ don't get clobbered.
19570+ */
19571+
19572+ {
19573+
19574+ unsigned long flags_;
19575+
19576+ spin_lock_irqsave( & device->lock, flags_ );
19577+
19578+ device->stats.rx_errors +=
19579+ ( device->stats.rx_length_errors +
19580+ device->stats.rx_crc_errors +
19581+ device->stats.rx_frame_errors +
19582+ device->stats.rx_fifo_errors +
19583+ device->stats.rx_dropped +
19584+ device->stats.rx_over_errors );
19585+ device->stats.rx_dropped = 0;
19586+ device->stats.rx_over_errors = 0;
19587+
19588+ device->stats.tx_errors +=
19589+ ( device->stats.tx_fifo_errors +
19590+ device->stats.tx_aborted_errors );
19591+ device->stats.tx_aborted_errors = 0;
19592+
19593+ spin_unlock_irqrestore( & device->lock, flags_ );
19594+
19595+ }
19596+
19597+ /*
19598+ That's all.
19599+ */
19600+
19601+ return;
19602+
19603+}
19604+
19605+/*
19606+ ----------------------------------------------------------------------
19607+ queue_initialized_
19608+
19609+ Returns the number of descriptors that are ready to receive packets
19610+ or are waiting to transmit packets. (from tail to head).
19611+*/
19612+
19613+static int queue_initialized_( appnic_queue_pointer_t head,
19614+ appnic_queue_pointer_t tail,
19615+ int size ) {
19616+ int initialized;
19617+
19618+ /* Calculate the number of descriptors currently initialized. */
19619+
19620+ if( head.bits.generation_bit == tail.bits.generation_bit ) {
19621+
19622+ /* same generation */
19623+ initialized = ( head.bits.offset - tail.bits.offset );
19624+
19625+ } else {
19626+
19627+ /* different generation */
19628+ initialized = head.bits.offset +
19629+ ( size * sizeof( appnic_dma_descriptor_t ) - tail.bits.offset );
19630+
19631+ }
19632+
19633+ /* number of descriptors is offset / sizeof( a descriptor ) */
19634+ initialized /= sizeof( appnic_dma_descriptor_t );
19635+
19636+ return initialized;
19637+}
19638+
19639+/*
19640+ ----------------------------------------------------------------------
19641+ queue_uninitialzed_
19642+
19643+ Returns the number of unused/uninitialized descriptors. (from head to tail).
19644+*/
19645+
19646+static int queue_uninitialized_( appnic_queue_pointer_t head,
19647+ appnic_queue_pointer_t tail,
19648+ int size ) {
19649+
19650+ int allocated_;
19651+
19652+ /* calculate the number of descriptors currently unused/uninitialized */
19653+
19654+ if( head.bits.generation_bit == tail.bits.generation_bit ) {
19655+
19656+ /* same generation. */
19657+ allocated_ =
19658+ ( ( size * sizeof( appnic_dma_descriptor_t ) ) - head.bits.offset ) +
19659+ tail.bits.offset;
19660+
19661+ } else {
19662+
19663+ /* different generation. */
19664+ allocated_ = tail.bits.offset - head.bits.offset;
19665+
19666+ }
19667+
19668+ /* number of descriptors is offset / sizeof( a descriptor ). */
19669+ allocated_ /= sizeof( appnic_dma_descriptor_t );
19670+
19671+ /* that's all */
19672+ return allocated_;
19673+
19674+}
19675+
19676+/*
19677+ ----------------------------------------------------------------------
19678+ queue_increment_
19679+*/
19680+
19681+static void queue_increment_( appnic_queue_pointer_t * queue,
19682+ int number_of_descriptors ) {
19683+
19684+ queue->bits.offset += sizeof( appnic_dma_descriptor_t );
19685+
19686+ if( ( number_of_descriptors * sizeof( appnic_dma_descriptor_t ) ) ==
19687+ queue->bits.offset ) {
19688+
19689+ queue->bits.offset = 0;
19690+ queue->bits.generation_bit = ( 0 == queue->bits.generation_bit ) ? 1 : 0;
19691+
19692+ }
19693+
19694+ return;
19695+
19696+}
19697+
19698+/*
19699+ ----------------------------------------------------------------------
19700+ queue_decrement_
19701+*/
19702+
19703+static void queue_decrement_( appnic_queue_pointer_t * queue,
19704+ int number_of_descriptors ) {
19705+
19706+ if( 0 == queue->bits.offset ) {
19707+
19708+ queue->bits.offset =
19709+ ( ( number_of_descriptors - 1 ) * sizeof( appnic_dma_descriptor_t ) );
19710+ queue->bits.generation_bit = ( 0 == queue->bits.generation_bit ) ? 1 : 0;
19711+
19712+ } else {
19713+
19714+ queue->bits.offset -= sizeof( appnic_dma_descriptor_t );
19715+
19716+ }
19717+
19718+ return;
19719+
19720+}
19721+
19722+/*
19723+ ----------------------------------------------------------------------
19724+ dump_packet_
19725+*/
19726+
19727+#if 0
19728+static void dump_packet_( const char * title, const void * data, int length ) {
19729+
19730+ int data_index_ = 0;
19731+
19732+ printk( "\n--appnic--dump_packet_( %s, 0x%p, %d)\n", title, data, length );
19733+
19734+ while( data_index_ < ( length / 2 ) ) {
19735+
19736+ int output_index_;
19737+ unsigned short * data_ =
19738+ & ( ( ( unsigned short * ) data ) [ data_index_ ] );
19739+
19740+ for( output_index_ = 0;
19741+ ( output_index_ < 8 ) &&
19742+ ( ( output_index_ + data_index_ ) < length );
19743+ ++ output_index_, ++ data_index_ ) {
19744+
19745+ printk( "%04x ",
19746+ htons( ( ( unsigned short * ) data_ ) [ output_index_ ] ) );
19747+
19748+ }
19749+
19750+ printk( "\n" );
19751+
19752+ }
19753+
19754+}
19755+#endif
19756+
19757+/*
19758+ ----------------------------------------------------------------------
19759+ dump_descriptor_
19760+*/
19761+
19762+#if 0
19763+static void dump_descriptor_( const char * title,
19764+ appnic_dma_descriptor_t * descriptor ) {
19765+
19766+ printk( "--appnic--dump_descriptor_( %s, 0x%p)\n", title, descriptor );
19767+ printk( " byte_swapping_on=%d\n" \
19768+ " interrupt_on_completion=%d\n" \
19769+ " end_of_packet=%d\n" \
19770+ " start_of_packet=%d\n" \
19771+ " write=%d\n" \
19772+ " transfer_type=0x%x\n" \
19773+ " pdu_length=0x%x\n" \
19774+ " data_transfer_length=0x%x\n" \
19775+ " target_memory_address=0x%x\n" \
19776+ "host_data_memory_pointer=0x%x\n",
19777+ ( unsigned int ) ( descriptor->byte_swapping_on ),
19778+ ( unsigned int ) ( descriptor->interrupt_on_completion ),
19779+ ( unsigned int ) ( descriptor->end_of_packet ),
19780+ ( unsigned int ) ( descriptor->start_of_packet ),
19781+ ( unsigned int ) ( descriptor->write ),
19782+ ( unsigned int ) ( descriptor->transfer_type ),
19783+ ( unsigned int ) ( descriptor->pdu_length ),
19784+ ( unsigned int ) ( descriptor->data_transfer_length ),
19785+ ( unsigned int ) ( descriptor->target_memory_address ),
19786+ ( unsigned int ) ( descriptor->host_data_memory_pointer ) );
19787+
19788+}
19789+#endif
19790+
19791+/*
19792+ ----------------------------------------------------------------------
19793+ appnic_timer_handler_
19794+*/
19795+
19796+#ifndef PHYLESS
19797+
19798+static void appnic_timer_handler_( unsigned long __opaque ) {
19799+
19800+ struct net_device * device_ = ( struct net_device * ) __opaque;
19801+
19802+ PHY_DEBUG_PRINT( "Handling Timer Expiration.\n" );
19803+ enable_( device_ );
19804+ appnic_timer_.expires = jiffies + ( APPNIC_TIMER_PERIOD * HZ );
19805+ add_timer( & appnic_timer_ );
19806+
19807+}
19808+
19809+#endif
19810+
19811+/*
19812+ ----------------------------------------------------------------------
19813+ enable_
19814+
19815+ -- NOTES --
19816+
19817+ 1) Does not change the default values in the extended and
19818+ half-duplex configuration registers.
19819+*/
19820+
19821+static int enable_( struct net_device * device ) {
19822+
19823+#ifndef PHYLESS
19824+
19825+ int return_code_ = 1;
19826+ int carrier_state_ = 0;
19827+ unsigned long rx_configuration_;
19828+ unsigned long tx_configuration_ = 0;
19829+ phy_status_t phy_status_;
19830+
19831+ rx_configuration_ =
19832+ ( APPNIC_RX_CONF_STRIPCRC |
19833+ APPNIC_RX_CONF_RXFCE |
19834+ APPNIC_RX_CONF_TXFCE );
19835+ tx_configuration_ =
19836+ ( APPNIC_TX_CONF_ENABLE_SWAP_SA |
19837+ APPNIC_TX_CONF_APP_CRC_ENABLE |
19838+ APPNIC_TX_CONF_PAD_ENABLE );
19839+ TX_CONF_SET_IFG( tx_configuration_, 0xf );
19840+
19841+ DEBUG_PRINT( "Enabling the interface.\n" );
19842+
19843+ /*
19844+ Setup the receive and transmit configuration registers (using smii
19845+ status to set speed/duplex and check the link status).
19846+ */
19847+
19848+ if( ( 0 == phy_read_( phy_address_, PHY_STATUS, & phy_status_.raw ) ) &&
19849+ ( 0 == phy_read_( phy_address_, PHY_STATUS, & phy_status_.raw ) ) ) {
19850+
19851+ PHY_DEBUG_PRINT( "phy_status_.raw=0x%x\n", phy_status_.raw );
19852+
19853+ if( 1 == phy_status_.bits.autoneg_comp ) {
19854+
19855+ if( 1 == phy_status_.bits.link_status ) {
19856+
19857+ if( 1 == phy_speed_( phy_address_ ) ) {
19858+
19859+ rx_configuration_ |= APPNIC_RX_CONF_SPEED;
19860+ tx_configuration_ |= APPNIC_TX_CONF_SPEED;
19861+
19862+ }
19863+
19864+ if( 1 == phy_duplex_( phy_address_ ) ) {
19865+
19866+ rx_configuration_ |= APPNIC_RX_CONF_DUPLEX;
19867+ tx_configuration_ |= APPNIC_TX_CONF_DUPLEX;
19868+
19869+ }
19870+
19871+ rx_configuration_ |=
19872+ ( APPNIC_RX_CONF_ENABLE | APPNIC_RX_CONF_LINK );
19873+ tx_configuration_ |=
19874+ ( APPNIC_TX_CONF_LINK | APPNIC_TX_CONF_ENABLE );
19875+ return_code_ = 0;
19876+ carrier_state_ = 1;
19877+
19878+ } else {
19879+
19880+ netif_carrier_off( device );
19881+
19882+ }
19883+
19884+ } else {
19885+
19886+ netif_carrier_off( device );
19887+
19888+ }
19889+
19890+ } else {
19891+
19892+ ERROR_PRINT( "phy_read_( ) failed!\n" );
19893+
19894+ }
19895+
19896+#else /* PHYLESS */
19897+
19898+ int return_code_ = 1;
19899+ int carrier_state_ = 0;
19900+ unsigned long rx_configuration_;
19901+ unsigned long tx_configuration_ = 0;
19902+
19903+ rx_configuration_ = APPNIC_RX_CONF_STRIPCRC;
19904+ tx_configuration_ =
19905+ ( APPNIC_TX_CONF_ENABLE_SWAP_SA |
19906+ APPNIC_TX_CONF_APP_CRC_ENABLE |
19907+ APPNIC_TX_CONF_PAD_ENABLE );
19908+ TX_CONF_SET_IFG( tx_configuration_, 0xf );
19909+
19910+ /*
19911+ 100/Full
19912+ */
19913+#if 0
19914+ rx_configuration_ |=
19915+ ( APPNIC_RX_CONF_ENABLE | APPNIC_RX_CONF_LINK |
19916+ APPNIC_RX_CONF_DUPLEX | APPNIC_RX_CONF_SPEED );
19917+ tx_configuration_ |=
19918+ ( APPNIC_TX_CONF_ENABLE | APPNIC_TX_CONF_LINK |
19919+ APPNIC_TX_CONF_DUPLEX | APPNIC_TX_CONF_SPEED );
19920+#endif
19921+
19922+ /*
19923+ 100/Half
19924+ */
19925+#if 1
19926+ rx_configuration_ |=
19927+ ( APPNIC_RX_CONF_ENABLE | APPNIC_RX_CONF_LINK |
19928+ APPNIC_RX_CONF_SPEED );
19929+ tx_configuration_ |=
19930+ ( APPNIC_TX_CONF_ENABLE | APPNIC_TX_CONF_LINK |
19931+ APPNIC_TX_CONF_SPEED );
19932+#endif
19933+
19934+ /*
19935+ 10/Full
19936+ */
19937+#if 0
19938+ rx_configuration_ |=
19939+ ( APPNIC_RX_CONF_ENABLE | APPNIC_RX_CONF_LINK |
19940+ APPNIC_RX_CONF_DUPLEX );
19941+ tx_configuration_ |=
19942+ ( APPNIC_TX_CONF_ENABLE | APPNIC_TX_CONF_LINK |
19943+ APPNIC_TX_CONF_DUPLEX );
19944+#endif
19945+
19946+ /*
19947+ 10/Half
19948+ */
19949+#if 0
19950+ rx_configuration_ |=
19951+ ( APPNIC_RX_CONF_ENABLE | APPNIC_RX_CONF_LINK );
19952+ tx_configuration_ |=
19953+ ( APPNIC_TX_CONF_ENABLE | APPNIC_TX_CONF_LINK );
19954+#endif
19955+
19956+ return_code_ = 0;
19957+ carrier_state_ = 1;
19958+
19959+#endif /* PHYLESS */
19960+
19961+ if( rx_configuration_ != read_mac_( APPNIC_RX_CONF ) ) {
19962+
19963+ write_mac_( rx_configuration_, APPNIC_RX_CONF );
19964+
19965+ }
19966+
19967+ if( tx_configuration_ != read_mac_( APPNIC_TX_CONF ) ) {
19968+
19969+ write_mac_( tx_configuration_, APPNIC_TX_CONF );
19970+
19971+ }
19972+
19973+ if( 0 != carrier_state_ ) {
19974+
19975+ netif_carrier_on( device );
19976+
19977+ } else {
19978+
19979+ netif_carrier_off( device );
19980+
19981+ }
19982+
19983+ return return_code_;
19984+
19985+}
19986+
19987+/*
19988+ ----------------------------------------------------------------------
19989+ disable_
19990+*/
19991+
19992+static void disable_( void ) {
19993+
19994+ unsigned long tx_configuration_;
19995+ unsigned long rx_configuration_;
19996+
19997+ DEBUG_PRINT( "Disabling the interface.\n" );
19998+
19999+ rx_configuration_ = read_mac_( APPNIC_RX_CONF );
20000+ rx_configuration_ &= ~ APPNIC_RX_CONF_ENABLE;
20001+ write_mac_( rx_configuration_, APPNIC_RX_CONF );
20002+
20003+ tx_configuration_ = read_mac_( APPNIC_TX_CONF );
20004+ tx_configuration_ &= ~ APPNIC_TX_CONF_ENABLE;
20005+ write_mac_( tx_configuration_, APPNIC_TX_CONF );
20006+
20007+ /* that's all. */
20008+ return;
20009+
20010+}
20011+
20012+void disable_nic_( void ) {
20013+
20014+ disable_( );
20015+
20016+}
20017+
20018+/*
20019+ ======================================================================
20020+ ======================================================================
20021+ ======================================================================
20022+ PHY interface (BCM5221)
20023+ ======================================================================
20024+ ======================================================================
20025+ ======================================================================
20026+*/
20027+
20028+#ifndef PHYLESS
20029+
20030+/*
20031+ ----------------------------------------------------------------------
20032+ phy_read_
20033+
20034+ Returns -1 if unsuccessful, the (short) value otherwise.
20035+*/
20036+
20037+static int
20038+phy_read_( int phy, int reg, unsigned short * value )
20039+{
20040+ return acp_mdio_read(phy, reg, value);
20041+}
20042+
20043+/*
20044+ ----------------------------------------------------------------------
20045+ phy_write_
20046+*/
20047+
20048+static int
20049+phy_write_( int phy, int reg, unsigned short value )
20050+{
20051+ return acp_mdio_write(phy, reg, value);
20052+}
20053+
20054+/*
20055+ ----------------------------------------------------------------------
20056+ phy_link_
20057+
20058+ Returns the link status (1=link up, 0=link down) or an error (-1).
20059+*/
20060+
20061+static int
20062+phy_link_( int phy )
20063+{
20064+ phy_status_t status;
20065+
20066+ phy_read_( phy, PHY_STATUS, & status.raw );
20067+ phy_read_( phy, PHY_STATUS, & status.raw );
20068+
20069+ return status.bits.link_status;
20070+}
20071+
20072+/*
20073+ ----------------------------------------------------------------------
20074+ phy_speed_
20075+
20076+ Returns the speed (1=100, 0=10) or an error (-1).
20077+*/
20078+
20079+static int
20080+phy_speed_( int phy )
20081+{
20082+ micrel_phy_auxiliary_control_status_t aux;
20083+
20084+ phy_read_( phy, MICREL_PHY_AUXILIARY_CONTROL_STATUS, & aux.raw );
20085+ switch( ( aux.bits.op_mode_indication & 3 ) ) {
20086+ case 2: return 1; break;
20087+ case 1: return 0; break;
20088+ default: break;
20089+ }
20090+
20091+ return -1;
20092+}
20093+
20094+/*
20095+ ----------------------------------------------------------------------
20096+ phy_duplex_
20097+
20098+ Returns duplex status (1=full duplex, 0=half duplex) or an error (-1).
20099+*/
20100+
20101+static int
20102+phy_duplex_( int phy )
20103+{
20104+ micrel_phy_auxiliary_control_status_t aux;
20105+
20106+ phy_read_( phy, MICREL_PHY_AUXILIARY_CONTROL_STATUS, & aux.raw );
20107+
20108+ return ( ( aux.bits.op_mode_indication >> 2 ) & 0x1 );
20109+}
20110+
20111+/*
20112+ ----------------------------------------------------------------------
20113+ phy_reset_
20114+*/
20115+
20116+static int
20117+phy_reset_( int phy )
20118+{
20119+ phy_control_t control;
20120+ int retries = 10;
20121+
20122+ phy_read_( phy, PHY_CONTROL, & control.raw );
20123+ control.bits.soft_reset = 1;
20124+ phy_write_( phy, PHY_CONTROL, control.raw );
20125+
20126+ do {
20127+ phy_read_( phy, PHY_CONTROL, & control.raw );
20128+ -- retries;
20129+ } while( ( 0 < retries ) && ( 0 != control.bits.soft_reset ) );
20130+
20131+ if( 0 != control.bits.soft_reset ) {
20132+ printk( "phy_reset( %d ) failed.\n", phy );
20133+ return -1;
20134+ }
20135+
20136+ return 0;
20137+}
20138+
20139+/*
20140+ ----------------------------------------------------------------------
20141+ phy_renegotiate_
20142+*/
20143+
20144+static int
20145+phy_renegotiate_( int phy )
20146+{
20147+ phy_control_t control;
20148+ phy_status_t status;
20149+ int autoneg_retries = 4;
20150+ int autoneg_complete_retries = 8;
20151+
20152+ printk( "Initiating Auto Negotiation" );
20153+ phy_write_( phy, PHY_AUTONEG_ADVERTISE, 0x61 );
20154+
20155+ do {
20156+ phy_read_( phy, PHY_CONTROL, & control.raw );
20157+ control.bits.restart_autoneg = 1;
20158+ phy_write_( phy, PHY_CONTROL, control.raw );
20159+
20160+ do {
20161+ udelay( 500000 );
20162+ phy_read_( phy, PHY_STATUS, & status.raw );
20163+ } while( ( 0 < -- autoneg_complete_retries ) &&
20164+ ( 0 == status.bits.autoneg_comp ) );
20165+
20166+ if( 0 != status.bits.autoneg_comp ) {
20167+ break;
20168+ }
20169+
20170+ printk( "." );
20171+ } while( 0 < -- autoneg_retries );
20172+
20173+ printk( "\n" );
20174+
20175+ if( 0 == status.bits.autoneg_comp ) {
20176+ printk( "Auto Negotiation Failed\n" );
20177+ return -1;
20178+ }
20179+
20180+ printk( "Auto Negotiation Succeeded\n" );
20181+ return 0;
20182+}
20183+
20184+/*
20185+ ----------------------------------------------------------------------
20186+ phy_enable_
20187+*/
20188+
20189+extern int ubootenv_get( const char *, char * );
20190+
20191+static int phy_enable_( int phy ) {
20192+
20193+#ifdef CONFIG_ACP
20194+ phy_address_ = 0x1e;
20195+ phy_renegotiate_( phy_address_ );
20196+#else
20197+ /*
20198+ Set up the MDIO clock.
20199+ */
20200+
20201+ {
20202+
20203+ char mdio_clock_speed_string_ [ 256 ];
20204+ unsigned long mdio_clock_speed_;
20205+ unsigned long mdio_divisor_;
20206+
20207+ if( 0 != ubootenv_get( "mdio_clock", mdio_clock_speed_string_ ) ) {
20208+
20209+ mdio_clock_speed_ = 1250000;
20210+
20211+ } else {
20212+
20213+ mdio_clock_speed_ = simple_strtoul( mdio_clock_speed_string_, NULL, 0 );
20214+
20215+ }
20216+
20217+#ifdef CONFIG_ARCH_APP3K
20218+ mdio_divisor_ =
20219+ ( ( get_core_speed( ) / 2 ) / mdio_clock_speed_ );
20220+#else
20221+ mdio_divisor_ = ( get_core_speed( ) / mdio_clock_speed_ );
20222+#endif
20223+
20224+ printk( "Setting the MDIO clock to %lu Hz (divisor=%lu)\n",
20225+ mdio_clock_speed_, mdio_divisor_ );
20226+ writel( mdio_divisor_, MDIO_CLK_ );
20227+
20228+ }
20229+
20230+ /*
20231+ Get the PHY address.
20232+ */
20233+
20234+ {
20235+
20236+ char phy_address_string_ [ 256 ];
20237+
20238+ if( 0 != ubootenv_get( "phy_address", phy_address_string_ ) ) {
20239+
20240+ phy_address_ = phy_scan_( );
20241+
20242+ } else {
20243+
20244+ phy_address_ = simple_strtoul( phy_address_string_, NULL, 0 );
20245+
20246+ }
20247+
20248+ if( 31 < phy_address_ || 0 > phy_address_ ) {
20249+
20250+ ERROR_PRINT( "Unable to get valid PHY address!\n" );
20251+ return -EBUSY;
20252+
20253+ }
20254+
20255+ }
20256+
20257+ /*
20258+ Get PHY type.
20259+ */
20260+
20261+ {
20262+
20263+ phy_id_high_t phy_id_high_;
20264+ phy_id_low_t phy_id_low_;
20265+
20266+ if( 0 != phy_read_( phy_address_, PHY_ID_HIGH_, & phy_id_high_.raw ) ) {
20267+
20268+ TRACE_ENDING( );
20269+ return -1;
20270+
20271+ }
20272+
20273+ if( 0 != phy_read_( phy_address_, PHY_ID_LOW_, & phy_id_low_.raw ) ) {
20274+
20275+ TRACE_ENDING( );
20276+ return -1;
20277+
20278+ }
20279+
20280+ if( ( PHY_ID_HIGH_ID == phy_id_high_.bits.id ) &&
20281+ ( BC_PHY_ID_LOW_ID_ == phy_id_low_.bits.id ) &&
20282+ ( BC_PHY_ID_LOW_MODEL_ == phy_id_low_.bits.model ) ) {
20283+
20284+ phy_type_ = BCM5221_PHY_;
20285+ printk( "Broadcomm 5221 PHY at 0x%x\n", phy_address_ );
20286+
20287+ } else if( ( M_PHY_ID_HIGH_ID_ == phy_id_high_.bits.id ) &&
20288+ ( M_PHY_ID_LOW_ID_ == phy_id_low_.bits.id ) ) {
20289+
20290+ phy_type_ = MICREL_PHY_;
20291+ printk( "Micrel PHY at 0x%x, Model 0x%x\n",
20292+ phy_address_, phy_id_low_.bits.model );
20293+
20294+ } else {
20295+
20296+ phy_type_ = UNKNOWN_PHY_;
20297+ printk( "Unknown PHY at 0x%x. 0x%x 0x%x 0x%x\n",
20298+ phy_address_, phy_id_high_.bits.id, phy_id_low_.bits.id,
20299+ phy_id_low_.bits.model );
20300+
20301+ }
20302+
20303+ }
20304+
20305+ if( -1 != phy_address_ ) {
20306+
20307+ int link_status_retries_ = 10;
20308+ phy_status_t phy_status_;
20309+ char ad_value_string_ [ 40 ];
20310+ unsigned short ad_value_;
20311+
20312+ DEBUG_PRINT( "Initializing PHY at 0x%x\n", phy_address_ );
20313+
20314+ if( 0 != phy_reset_( phy_address_ ) ) {
20315+
20316+ return -1;
20317+
20318+ }
20319+
20320+ /*
20321+ 0x1e1 - 10/100 half/full
20322+ 0xe1 - 100 half, 10 half/full
20323+ 0x61 - 10 half/full
20324+ 0x41 - 10 half
20325+ */
20326+
20327+ if( 0 != ubootenv_get( "ad_value", ad_value_string_ ) ) {
20328+
20329+ if( ( is_asic ) &&
20330+ ( 0 == ( APP3XX_REVISION_REGISTER & 0x1f ) ) ) {
20331+
20332+ /* 10M does not work on ASIC v1.0 */
20333+ ad_value_ = 0x0181;
20334+
20335+ } else {
20336+
20337+ /* For FGPA loads and any ASIC after v1.0, default to 10 full/half */
20338+ ad_value_ = 0x061;
20339+
20340+ }
20341+
20342+ WARN_PRINT( "ad_value not set, using 0x%x\n", ad_value_ );
20343+
20344+ } else {
20345+
20346+ ad_value_ = simple_strtoul( ad_value_string_, NULL, 0 );
20347+
20348+ }
20349+
20350+ if( 0 != phy_write_( phy_address_, PHY_AUTONEG_ADVERTISE_,
20351+ ad_value_ ) ) {
20352+
20353+ TRACE_ENDING( );
20354+ return -1;
20355+
20356+ }
20357+
20358+ if( 0 != phy_renegotiate_( phy_address_ ) ) {
20359+
20360+ WARN_PRINT( "PHY: Auto Negotiation Failed.\n" );
20361+
20362+ }
20363+
20364+ do {
20365+
20366+ if( 0 != phy_read_( phy_address_, PHY_STATUS, & phy_status_.raw ) ) {
20367+
20368+ return -1;
20369+
20370+ }
20371+
20372+ mdelay( 10 );
20373+ -- link_status_retries_;
20374+
20375+ } while( ( 0 == phy_status_.bits.link_status ) &&
20376+ ( 0 < link_status_retries_ ) );
20377+
20378+ if( 0 == phy_status_.bits.link_status ) {
20379+
20380+ WARN_PRINT( "PHY: link down\n" );
20381+
20382+ } else {
20383+
20384+ printk( "PHY: link=%s speed=%d Mbs duplex=%s\n",
20385+ ( 1 == phy_link_( phy_address_ ) ) ? "up" : "down",
20386+ ( 1 == phy_speed_( phy_address_ ) ) ? 100 : 10,
20387+ ( 1 == phy_duplex_( phy_address_ ) ) ? "full" : "half" );
20388+
20389+ }
20390+
20391+ }
20392+
20393+#endif
20394+
20395+ /*
20396+ That's all
20397+ */
20398+
20399+ return 0;
20400+
20401+}
20402+
20403+#endif /* PHYLESS */
20404+
20405+/*
20406+ ======================================================================
20407+ ======================================================================
20408+ ======================================================================
20409+
20410+ Linux Network Driver Interface
20411+
20412+ ======================================================================
20413+ ======================================================================
20414+ ======================================================================
20415+*/
20416+
20417+/*
20418+ ----------------------------------------------------------------------
20419+ handle_transmit_interrupt_
20420+*/
20421+
20422+static void handle_transmit_interrupt_( struct net_device * device ) {
20423+
20424+ appnic_device_t * dev_ = netdev_priv( device );
20425+
20426+ TRACE_BEGINNING( );
20427+ DEBUG_PRINT( "tail=0x%lx tail_copy=0x%lx head=0x%lx\n",
20428+ dev_->tx_tail->raw, dev_->tx_tail_copy.raw,
20429+ dev_->tx_head.raw );
20430+
20431+ /*
20432+ The hardware's tail pointer should be one descriptor (or more)
20433+ ahead of software's copy.
20434+ */
20435+
20436+ while( 0 < queue_initialized_( SWAB_QUEUE_POINTER( dev_->tx_tail ),
20437+ dev_->tx_tail_copy, dev_->tx_num_desc ) ) {
20438+ queue_increment_( & dev_->tx_tail_copy, dev_->tx_num_desc );
20439+ }
20440+
20441+ DEBUG_PRINT( "tail=0x%lx tail_copy=0x%lx head=0x%lx\n",
20442+ dev_->tx_tail->raw, dev_->tx_tail_copy.raw,
20443+ dev_->tx_head.raw );
20444+ TRACE_ENDING( );
20445+
20446+ return;
20447+
20448+}
20449+
20450+static DEFINE_MUTEX( rpm );
20451+
20452+/*
20453+ ----------------------------------------------------------------------
20454+ lsinet_rx_packet
20455+*/
20456+
20457+static void
20458+lsinet_rx_packet( struct net_device * device )
20459+{
20460+ appnic_device_t * adapter = netdev_priv( device );
20461+ appnic_dma_descriptor_t descriptor;
20462+ struct sk_buff * sk_buff_;
20463+
20464+#ifdef __APPNIC_C_PROFILE__
20465+ unsigned long ts0_ = 0;
20466+ unsigned long ts1_ = 0;
20467+ unsigned long ts2_ = 0;
20468+ unsigned long ts3_ = 0;
20469+ int sent_up = 0;
20470+ ts0_ = ( 0xffffffff - readl( ( TIMER7_BASE + TIMER_n_VALUE ) ) );
20471+#endif /* __APPNIC_C_PROFILE__ */
20472+
20473+ /* TEMP HACK:
20474+ * should use down_interruptible
20475+ */
20476+ spin_lock( & adapter->extra_lock );
20477+ TRACE_BEGINNING( );
20478+ DEBUG_PRINT( "head=0x%lx tail=0x%lx tail_copy=0x%lx\n",
20479+ adapter->rx_head.raw, adapter->rx_tail->raw,
20480+ adapter->rx_tail_copy.raw );
20481+ readdescriptor( ( ( unsigned long ) adapter->rx_desc +
20482+ adapter->rx_tail_copy.bits.offset ), & descriptor );
20483+
20484+ if( ( struct sk_buff * ) 0 != ( sk_buff_ = dev_alloc_skb( 1600 ) ) ) {
20485+ unsigned bytes_copied_ = 0;
20486+ unsigned error_ = 0;
20487+ int return_code_;
20488+ unsigned long ok_, overflow_, crc_, align_;
20489+
20490+#ifdef __APPNIC_C_PROFILE__
20491+ ts1_ = ( 0xffffffff - readl( ( TIMER7_BASE + TIMER_n_VALUE ) ) );
20492+#endif /* __APPNIC_C_PROFILE__ */
20493+
20494+ ok_ = read_mac_( APPNIC_RX_STAT_PACKET_OK );
20495+ overflow_ = read_mac_( APPNIC_RX_STAT_OVERFLOW );
20496+ crc_ = read_mac_( APPNIC_RX_STAT_CRC_ERROR );
20497+ align_ = read_mac_( APPNIC_RX_STAT_ALIGN_ERROR );
20498+
20499+ /*
20500+ Copy the received packet into the skb.
20501+ */
20502+
20503+ while( 0 < queue_initialized_( SWAB_QUEUE_POINTER( adapter->rx_tail ),
20504+ adapter->rx_tail_copy, adapter->rx_num_desc ) ) {
20505+ /*TRACER_POST( "tail_copy=0x%x", adapter->rx_tail_copy.raw );*/
20506+#ifdef PRELOAD_RX_BUFFERS
20507+ {
20508+ unsigned char * buffer_;
20509+ buffer_ = skb_put( sk_buff_, descriptor.pdu_length );
20510+ memcmp( buffer_, buffer_, descriptor.pdu_length );
20511+ memcpy( ( void * ) buffer_,
20512+ ( void * ) ( descriptor.host_data_memory_pointer +
20513+ adapter->dma_alloc_offset ),
20514+ descriptor.pdu_length );
20515+ }
20516+#else /* PRELOAD_RX_BUFFERS */
20517+ memcpy( ( void * ) skb_put( sk_buff_, descriptor.pdu_length ),
20518+ ( void * ) ( descriptor.host_data_memory_pointer +
20519+ adapter->dma_alloc_offset ),
20520+ descriptor.pdu_length );
20521+#endif /* PRELOAD_RX_BUFFERS */
20522+ bytes_copied_ += descriptor.pdu_length;
20523+ descriptor.data_transfer_length = adapter->rx_buf_per_desc;
20524+ writedescriptor( ( ( unsigned long ) adapter->rx_desc +
20525+ adapter->rx_tail_copy.bits.offset ), & descriptor );
20526+ if( 0 != descriptor.error ) { error_ = 1; }
20527+ queue_increment_( & adapter->rx_tail_copy, adapter->rx_num_desc );
20528+ if( 0 != descriptor.end_of_packet ) { break; }
20529+ readdescriptor( ( ( unsigned long ) adapter->rx_desc +
20530+ adapter->rx_tail_copy.bits.offset ), & descriptor );
20531+ }
20532+
20533+ if( 0 == descriptor.end_of_packet ) {
20534+
20535+ ERROR_PRINT( "No end of packet! %lu/%lu/%lu/%lu\n",
20536+ ok_, overflow_, crc_, align_ );
20537+ BUG( );
20538+ dev_kfree_skb( sk_buff_ );
20539+
20540+ } else {
20541+
20542+ if( 0 == error_ ) {
20543+
20544+ struct ethhdr * ethhdr_ = ( struct ethhdr * ) sk_buff_->data;
20545+ unsigned char broadcast_ [ ] = { 0xff, 0xff, 0xff, 0xff, 0xff, 0xff };
20546+ unsigned char multicast_ [ ] = { 0x01, 0x00 };
20547+
20548+ LSINET_COUNTS_INC( LSINET_COUNTS_RX_GOOD );
20549+
20550+ if( ( 0 == memcmp( ( const void * ) & ( ethhdr_->h_dest [ 0 ] ),
20551+ ( const void * ) & ( device->dev_addr [ 0 ] ),
20552+ sizeof( ethhdr_->h_dest ) ) ) ||
20553+ ( 0 == memcmp( ( const void * ) & ( ethhdr_->h_dest [ 0 ] ),
20554+ ( const void * ) & ( broadcast_ [ 0 ] ),
20555+ sizeof( ethhdr_->h_dest ) ) ) ||
20556+ ( 0 == memcmp( ( const void * ) & (ethhdr_->h_dest [ 0 ] ),
20557+ ( const void * ) & ( multicast_ [ 0 ] ),
20558+ sizeof( multicast_ ) ) ) ) {
20559+
20560+#ifdef __APPNIC_C_PROFILE__
20561+ if( bytes_copied_ > rx_packet_size_max_ ) {
20562+ rx_packet_size_max_ = bytes_copied_;
20563+ } else if( bytes_copied_ < rx_packet_size_min_ ) {
20564+ rx_packet_size_min_ = bytes_copied_;
20565+ }
20566+ total_rx_bytes_ += bytes_copied_;
20567+
20568+ total_rx_packets_sent_up_++;
20569+ sent_up = 1;
20570+
20571+ ts2_ = ( 0xffffffff - readl( ( TIMER7_BASE + TIMER_n_VALUE ) ) );
20572+#endif /* __APPNIC_C_PROFILE__ */
20573+
20574+ adapter->stats.rx_bytes += bytes_copied_;
20575+ ++ adapter->stats.rx_packets;
20576+ sk_buff_->dev = device;
20577+ sk_buff_->protocol = eth_type_trans( sk_buff_, device );
20578+#ifdef LSINET_NAPI
20579+ LSINET_COUNTS_INC( LSINET_COUNTS_RX_SENT );
20580+ return_code_ = netif_receive_skb( sk_buff_ );
20581+#else
20582+ LSINET_COUNTS_INC( LSINET_COUNTS_RX_SENT );
20583+ return_code_ = netif_rx( sk_buff_ );
20584+#endif
20585+
20586+ if( NET_RX_DROP == return_code_ ) {
20587+
20588+ ++ dropped_by_stack_;
20589+ LSINET_COUNTS_INC( LSINET_COUNTS_RX_DRPD );
20590+#if 0
20591+ ERROR_PRINT( "Packet dropped by stack: 0x%x!\n", return_code_ );
20592+ {
20593+ unsigned long * packet = ( unsigned long * ) sk_buff_->data;
20594+ int data_index_ = 0;
20595+ static int bug = 10;
20596+
20597+ printk( "\n---------- Dropped Packet\n" );
20598+ printk( "Head:0x%lx Tail:0x%lx Tail Copy:0x%x\n",
20599+ adapter->rx_head.raw, adapter->rx_tail->raw,
20600+ read_mac_( APPNIC_DMA_RX_TAIL_POINTER_LOCAL_COPY ) );
20601+ printk( "Address:0x%lx Length:0x%x\n",
20602+ ( unsigned long ) packet, bytes_copied_ );
20603+
20604+ while( data_index_ < ( bytes_copied_ / 2 ) ) {
20605+
20606+ int output_index_;
20607+ unsigned short * data_ =
20608+ & ( ( ( unsigned short * ) packet ) [ data_index_ ] );
20609+
20610+ for( output_index_ = 0;
20611+ ( output_index_ < 8 ) && ( data_index_ < bytes_copied_ );
20612+ ++ output_index_, ++ data_index_ ) {
20613+
20614+ printk( "%04x ", htons( data_ [ output_index_ ] ) );
20615+
20616+ }
20617+
20618+ printk( "\n" );
20619+
20620+ }
20621+
20622+ if( 0 == -- bug ) BUG( );
20623+
20624+ }
20625+#endif
20626+ }
20627+
20628+ } else {
20629+
20630+ dev_kfree_skb( sk_buff_ );
20631+
20632+ }
20633+
20634+ } else {
20635+
20636+ LSINET_COUNTS_INC( LSINET_COUNTS_RX_ERR );
20637+
20638+ dev_kfree_skb( sk_buff_ );
20639+
20640+ if( 0 != overflow_ ) {
20641+
20642+ ++ adapter->stats.rx_fifo_errors;
20643+
20644+ } else if( 0 != crc_ ) {
20645+
20646+ ++ adapter->stats.rx_crc_errors;
20647+
20648+ } else if( 0 != align_ ) {
20649+
20650+ ++ adapter->stats.rx_frame_errors;
20651+
20652+ }
20653+
20654+ }
20655+
20656+ }
20657+
20658+ } else {
20659+
20660+ ERROR_PRINT( "dev_alloc_skb( ) failed! Dropping packet.\n" );
20661+
20662+ }
20663+
20664+ DEBUG_PRINT( "head=0x%lx tail=0x%lx tail_copy=0x%lx\n",
20665+ adapter->rx_head.raw, adapter->rx_tail->raw,
20666+ adapter->rx_tail_copy.raw );
20667+ TRACE_ENDING( );
20668+
20669+#ifdef __APPNIC_C_PROFILE__
20670+
20671+ app3xx_profile_time_calc(ts0_, ts1_,
20672+ recv_t1_min_, recv_t1_max_, recv_t1_tot_);
20673+ /*
20674+ * only calculate stats for packets that were sent up to the stack
20675+ */
20676+ if (sent_up) {
20677+ ts3_ = ( 0xffffffff - readl( ( TIMER7_BASE + TIMER_n_VALUE ) ) );
20678+
20679+ app3xx_profile_time_calc(ts1_, ts2_,
20680+ recv_t2_min_, recv_t2_max_, recv_t2_tot_);
20681+ app3xx_profile_time_calc(ts2_, ts3_,
20682+ recv_t3_min_, recv_t3_max_, recv_t3_tot_);
20683+ }
20684+
20685+#endif /* __APPNIC_C_PROFILE__ */
20686+
20687+ /* TEMP */
20688+ spin_unlock( & adapter->extra_lock );
20689+ /* that's all */
20690+ return;
20691+
20692+}
20693+
20694+/*
20695+ ===============================================================================
20696+ lsinet_rx_packets
20697+*/
20698+
20699+static int
20700+lsinet_rx_packets( struct net_device * device, int max )
20701+{
20702+ appnic_device_t * adapter = netdev_priv( device );
20703+ appnic_queue_pointer_t queue;
20704+ int updated_head_pointer = 0;
20705+ int packets = 0;
20706+
20707+ queue.raw = adapter->rx_tail_copy.raw;
20708+
20709+ /* Receive Packets */
20710+
20711+ while( 0 < queue_initialized_( SWAB_QUEUE_POINTER( adapter->rx_tail ),
20712+ queue, adapter->rx_num_desc ) ) {
20713+ appnic_dma_descriptor_t descriptor;
20714+
20715+ readdescriptor( ( ( unsigned long ) adapter->rx_desc +
20716+ queue.bits.offset ),
20717+ & descriptor );
20718+
20719+ if( 0 != descriptor.end_of_packet ) {
20720+#ifdef __APPNIC_C_PROFILE__
20721+ ++ packets_handled_;
20722+#endif /* __APPNIC_C_PROFILE__ */
20723+ LSINET_COUNTS_INC( LSINET_COUNTS_RX_PKT );
20724+ lsinet_rx_packet( device );
20725+ ++ packets;
20726+ queue.raw = adapter->rx_tail_copy.raw;
20727+
20728+ if( -1 != max ) {
20729+ if( packets == max ) {
20730+ break;
20731+ }
20732+ }
20733+ } else {
20734+ queue_increment_( & queue, adapter->rx_num_desc );
20735+ }
20736+ }
20737+
20738+ /* Update the Head Pointer */
20739+
20740+ while( 1 < queue_uninitialized_( adapter->rx_head, adapter->rx_tail_copy,
20741+ adapter->rx_num_desc ) ) {
20742+
20743+ appnic_dma_descriptor_t descriptor;
20744+
20745+ readdescriptor( ( ( unsigned long ) adapter->rx_desc +
20746+ adapter->rx_head.bits.offset ), & descriptor );
20747+ descriptor.data_transfer_length = adapter->rx_buf_per_desc;
20748+ descriptor.write = 1;
20749+ descriptor.pdu_length = 0;
20750+ descriptor.start_of_packet = 0;
20751+ descriptor.end_of_packet = 0;
20752+ descriptor.interrupt_on_completion = 1;
20753+ writedescriptor( ( ( unsigned long ) adapter->rx_desc +
20754+ adapter->rx_head.bits.offset ),
20755+ & descriptor );
20756+ queue_increment_( & adapter->rx_head, adapter->rx_num_desc );
20757+ updated_head_pointer = 1;
20758+ }
20759+
20760+ if( 0 != updated_head_pointer ) {
20761+ write_mac_( adapter->rx_head.raw, APPNIC_DMA_RX_HEAD_POINTER );
20762+ }
20763+
20764+ return packets;
20765+}
20766+
20767+#ifdef LSINET_NAPI
20768+
20769+/*
20770+ ===============================================================================
20771+ lsinet_poll
20772+*/
20773+
20774+static int
20775+lsinet_poll( struct napi_struct * napi, int budget )
20776+{
20777+ appnic_device_t * adapter = container_of( napi, appnic_device_t, napi );
20778+ struct net_device * device = adapter->device;
20779+ appnic_queue_pointer_t queue_;
20780+
20781+ int cur_budget = budget;
20782+ int done;
20783+ unsigned long dma_interrupt_status_;
20784+#ifdef __APPNIC_C_PROFILE__
20785+ unsigned long packets_handled_ = 0;
20786+ unsigned long beginning_;
20787+ unsigned long end_;
20788+
20789+ beginning_ = ( 0xffffffff - readl( ( TIMER7_BASE + TIMER_n_VALUE ) ) );
20790+#endif /* __APPNIC_C_PROFILE__ */
20791+
20792+ LSINET_COUNTS_INC( LSINET_COUNTS_POL_START );
20793+ /* TEMP DEBUG: should be interruptible */
20794+ /*down( & adapter->poll_sem);*/
20795+
20796+ TRACE_BEGINNING( );
20797+ DEBUG_PRINT( "head=0x%x tail=0x%x tail_copy=0x%x\n",
20798+ adapter->rx_head.raw, adapter->rx_tail->raw,
20799+ adapter->rx_tail_copy.raw );
20800+ queue_.raw = adapter->rx_tail_copy.raw;
20801+
20802+#if 0
20803+ if (cur_budget > device->quota) {
20804+ cur_budget = device->quota;
20805+ }
20806+#endif
20807+
20808+ done = 1;
20809+
20810+ do {
20811+
20812+ /* Acknowledge the RX interrupt. */
20813+ write_mac_( ~APPNIC_DMA_INTERRUPT_ENABLE_RECEIVE ,
20814+ APPNIC_DMA_INTERRUPT_STATUS );
20815+
20816+ if( 0 == ( cur_budget -= lsinet_rx_packets( device, cur_budget ) ) ) {
20817+ break;
20818+ }
20819+
20820+ dma_interrupt_status_ = read_mac_( APPNIC_DMA_INTERRUPT_STATUS );
20821+
20822+ } while ( (RX_INTERRUPT (dma_interrupt_status_)) && cur_budget );
20823+
20824+
20825+#if 0
20826+ device->quota -= packets_handled_;
20827+#endif
20828+
20829+ if (done) {
20830+ LSINET_COUNTS_INC( LSINET_COUNTS_POL_RNBL );
20831+ napi_complete( napi );
20832+ /* re-enable receive interrupts */
20833+ write_mac_( ( APPNIC_DMA_INTERRUPT_ENABLE_RECEIVE |
20834+ APPNIC_DMA_INTERRUPT_ENABLE_TRANSMIT ),
20835+ APPNIC_DMA_INTERRUPT_ENABLE );
20836+ }
20837+
20838+ DEBUG_PRINT( "head=0x%x tail=0x%x tail_copy=0x%x\n",
20839+ adapter->rx_head.raw, adapter->rx_tail->raw,
20840+ adapter->rx_tail_copy.raw );
20841+ TRACE_ENDING( );
20842+
20843+#ifdef __APPNIC_C_PROFILE__
20844+ end_ = ( 0xffffffff - readl( ( TIMER7_BASE + TIMER_n_VALUE ) ) );
20845+ app3xx_profile_time_calc(beginning_, end_,
20846+ time_in_rx_min_, time_in_rx_max_, total_rx_time_);
20847+
20848+
20849+ total_rx_packets_handled_ += packets_handled_;
20850+ if( packets_handled_ > max_rx_packets_handled_ ) {
20851+ max_rx_packets_handled_ = packets_handled_;
20852+ }
20853+ ++ total_polls_;
20854+#endif /* __APPNIC_C_PROFILE__ */
20855+
20856+ /* TEMP */
20857+ /*up( & adapter->poll_sem);*/
20858+ LSINET_COUNTS_INC( LSINET_COUNTS_POL_DONE );
20859+ return (done ? 0 : 1);
20860+
20861+}
20862+
20863+#else /* Not using NAPI, define the Rx interrupt handler instead */
20864+
20865+/*
20866+ ----------------------------------------------------------------------
20867+ handle_receive_interrupt_
20868+*/
20869+
20870+static void handle_receive_interrupt_( struct net_device * device ) {
20871+
20872+ appnic_device_t * dev_ = netdev_priv( device );
20873+ appnic_queue_pointer_t queue_;
20874+
20875+#ifdef __APPNIC_C_PROFILE__
20876+ unsigned long beginning_;
20877+ unsigned long end_;
20878+ unsigned long packets_handled_ = 0;
20879+
20880+ beginning_ = ( 0xffffffff - readl( ( TIMER7_BASE + TIMER_n_VALUE ) ) );
20881+#endif /* __APPNIC_C_PROFILE__ */
20882+
20883+ LSINET_COUNTS_INC( LSINET_COUNTS_RX_START );
20884+ TRACE_BEGINNING( );
20885+ DEBUG_PRINT( "head=0x%lx tail=0x%lx tail_copy=0x%lx\n",
20886+ dev_->rx_head.raw, dev_->rx_tail->raw,
20887+ dev_->rx_tail_copy.raw );
20888+ queue_.raw = dev_->rx_tail_copy.raw;
20889+ lsinet_rx_packets( device, -1 );
20890+ DEBUG_PRINT( "head=0x%lx tail=0x%lx tail_copy=0x%lx\n",
20891+ dev_->rx_head.raw, dev_->rx_tail->raw,
20892+ dev_->rx_tail_copy.raw );
20893+ TRACE_ENDING( );
20894+ LSINET_COUNTS_INC( LSINET_COUNTS_RX_DONE );
20895+#ifdef __APPNIC_C_PROFILE__
20896+ end_ = ( 0xffffffff - readl( ( TIMER7_BASE + TIMER_n_VALUE ) ) );
20897+ app3xx_profile_time_calc(beginning_, end_,
20898+ time_in_rx_min_, time_in_rx_max_, total_rx_time_);
20899+
20900+
20901+ total_rx_packets_handled_ += packets_handled_;
20902+ if( packets_handled_ > max_rx_packets_handled_ ) {
20903+ max_rx_packets_handled_ = packets_handled_;
20904+ }
20905+ ++ total_rx_interrupts_;
20906+#endif /* __APPNIC_C_PROFILE__ */
20907+
20908+ return;
20909+
20910+}
20911+#endif /* else not NAPI */
20912+
20913+/*
20914+ ----------------------------------------------------------------------
20915+ appnic_isr_
20916+*/
20917+
20918+static irqreturn_t appnic_isr_( int irq, void * device_id ) {
20919+
20920+ struct net_device * device_ = ( struct net_device * ) device_id;
20921+ appnic_device_t * dev_ = netdev_priv( device_ );
20922+ unsigned long dma_interrupt_status_;
20923+ unsigned long flags;
20924+
20925+#ifdef __APPNIC_C_PROFILE__
20926+ unsigned beginning_jiffies_ = jiffies;
20927+#endif /* __APPNIC_C_PROFILE__ */
20928+
20929+ TRACE_BEGINNING( );
20930+ LSINET_COUNTS_INC( LSINET_COUNTS_ISR_START );
20931+
20932+ /* acquire the lock */
20933+ spin_lock_irqsave( & dev_->lock, flags );
20934+
20935+#if ! defined( PHYLESS ) && ! defined( CONFIG_ACP )
20936+ if( INT_MAC_RX == irq ) {
20937+
20938+ PHY_DEBUG_PRINT( "Handling PHY interrupt.\n" );
20939+
20940+ if( BCM5221_PHY_ == phy_type_ ) {
20941+
20942+ bc_phy_interrupt_t bc_phy_interrupt_;
20943+
20944+ ( void ) phy_read_( phy_address_,
20945+ BC_PHY_INTERRUPT_, & bc_phy_interrupt_.raw );
20946+ bc_phy_interrupt_.raw = 0;
20947+ bc_phy_interrupt_.bits.enable = 1;
20948+ ( void ) phy_write_( phy_address_,
20949+ BC_PHY_INTERRUPT_, bc_phy_interrupt_.raw );
20950+
20951+ } else if( MICREL_PHY_ == phy_type_ ) {
20952+
20953+ m_phy_interrupt_t m_phy_interrupt_;
20954+
20955+ ( void ) phy_read_( phy_address_,
20956+ M_PHY_INTERRUPT_, & m_phy_interrupt_.raw );
20957+ ( void ) phy_write_( phy_address_,
20958+ M_PHY_INTERRUPT_, m_phy_interrupt_.raw );
20959+
20960+ }
20961+
20962+ write_mac_( 0, APPNIC_RX_INTERRUPT_STATUS );
20963+ enable_( device_ );
20964+
20965+ } else {
20966+#endif /* PHYLESS */
20967+ /* get the status */
20968+ dma_interrupt_status_ = read_mac_( APPNIC_DMA_INTERRUPT_STATUS );
20969+#ifdef LSINET_NAPI
20970+ /* NAPI - don't ack RX interrupt */
20971+ write_mac_( APPNIC_DMA_INTERRUPT_ENABLE_RECEIVE, APPNIC_DMA_INTERRUPT_STATUS );
20972+#else
20973+ write_mac_( 0, APPNIC_DMA_INTERRUPT_STATUS );
20974+#endif
20975+
20976+ /*TRACER_POST( "dma_interrupt_status_=0x%x", dma_interrupt_status_ );*/
20977+
20978+ /* handle interrupts */
20979+
20980+ if( TX_INTERRUPT( dma_interrupt_status_ ) ) {
20981+ LSINET_COUNTS_INC( LSINET_COUNTS_ISR_TX );
20982+ /* transmition complete */
20983+ ++ transmit_interrupts_;
20984+ handle_transmit_interrupt_( device_ );
20985+ }
20986+
20987+ if( RX_INTERRUPT( dma_interrupt_status_ ) ) {
20988+ LSINET_COUNTS_INC( LSINET_COUNTS_ISR_RX );
20989+#ifdef LSINET_NAPI
20990+ ++ receive_interrupts_;
20991+ if (napi_schedule_prep(&dev_->napi)) {
20992+ /* disable RX interrupts and tell the system we've got work */
20993+ write_mac_( APPNIC_DMA_INTERRUPT_ENABLE_TRANSMIT ,
20994+ APPNIC_DMA_INTERRUPT_ENABLE );
20995+ __napi_schedule(&dev_->napi);
20996+ } else {
20997+ ERROR_PRINT( "NAPI bug! interrupt while in poll\n");
20998+ write_mac_( APPNIC_DMA_INTERRUPT_ENABLE_TRANSMIT ,
20999+ APPNIC_DMA_INTERRUPT_ENABLE );
21000+ }
21001+#else
21002+ /* receive complete */
21003+ handle_receive_interrupt_( device_ );
21004+#endif
21005+ }
21006+#if ! defined( PHYLESS ) && ! defined( CONFIG_ACP )
21007+ }
21008+#endif /* PHYLESS */
21009+
21010+ /* release the lock */
21011+ spin_unlock_irqrestore( & dev_->lock, flags );
21012+
21013+ LSINET_COUNTS_INC( LSINET_COUNTS_ISR_DONE );
21014+ TRACE_ENDING( );
21015+
21016+#ifdef __APPNIC_C_PROFILE__
21017+ if( jiffies != beginning_jiffies_ ) {
21018+ ++ jiffies_changed_;
21019+ }
21020+#endif /* __APPNIC_C_PROFILE__ */
21021+
21022+ return IRQ_HANDLED;
21023+
21024+}
21025+
21026+/*
21027+ ----------------------------------------------------------------------
21028+ appnic_open
21029+
21030+ Opens the interface. The interface is opened whenever ifconfig
21031+ activates it. The open method should register any system resource
21032+ it needs (I/O ports, IRQ, DMA, etc.) turn on the hardware, and
21033+ increment the module usage count.
21034+*/
21035+
21036+int appnic_open( struct net_device * device ) {
21037+
21038+ int return_code_ = 0;
21039+#if defined( CONFIG_ARCH_APP3 )
21040+ unsigned long gpio_mux_ = readl( APP3XX_HB_CONF_BASE + 0x18 );
21041+#elif defined( CONFIG_ARCH_APP3K )
21042+ /*unsigned long gpio_mux_ = readl( APP_AEI_BASE + 0x18 );*/
21043+#endif
21044+
21045+ /* enable the receiver and transmitter */
21046+ if( 0 != enable_( device ) ) {
21047+
21048+ ERROR_PRINT( "Unable to enable the interface.\n" );
21049+ disable_( );
21050+ return -EBUSY;
21051+
21052+ }
21053+
21054+#ifdef LSINET_NAPI
21055+ {
21056+ appnic_device_t * adapter = netdev_priv( device );
21057+ napi_enable( & adapter->napi );
21058+ }
21059+#endif /* LSINET_NAPI */
21060+
21061+ /* install the interrupt handlers */
21062+ if( 0 != ( return_code_ = request_irq( device->irq, appnic_isr_, IRQF_DISABLED,
21063+ APPNIC_NAME, device ) ) ) {
21064+
21065+ ERROR_PRINT( "request_irq( ) failed, returned 0x%x/%d\n",
21066+ return_code_, return_code_ );
21067+ return return_code_;
21068+
21069+ }
21070+
21071+ /* enable interrupts */
21072+ write_mac_( ( APPNIC_DMA_INTERRUPT_ENABLE_RECEIVE |
21073+ APPNIC_DMA_INTERRUPT_ENABLE_TRANSMIT ),
21074+ APPNIC_DMA_INTERRUPT_ENABLE );
21075+
21076+ {
21077+
21078+#ifndef PHYLESS
21079+ char phy_string_ [ 256 ];
21080+ int use_interrupts_ = 1;
21081+ appnic_device_t * dev_ = netdev_priv( device );
21082+#endif
21083+
21084+#ifdef CONFIG_ARCH_APP3
21085+
21086+ PHY_DEBUG_PRINT( "phy_type_=0x%x gpio_mux_=0x%x\n", phy_type_, gpio_mux_ );
21087+
21088+ if( ( BCM5221_PHY_ != phy_type_ ) ||
21089+ ( 0x04000000 != ( gpio_mux_ & 0x04000000 ) ) ) {
21090+
21091+ use_interrupts_ = 0;
21092+
21093+ }
21094+
21095+#endif
21096+
21097+#ifndef PHYLESS
21098+
21099+#ifndef CONFIG_ACP
21100+
21101+ if( ( 0 != ubootenv_get( "phy_mode", phy_string_ ) ) ||
21102+ ( 0 == strncmp( phy_string_, "poll", strlen( "poll" ) ) ) ) {
21103+
21104+ use_interrupts_ = 0;
21105+
21106+ }
21107+
21108+ PHY_DEBUG_PRINT( "use_interrupts_=%d\n", use_interrupts_ );
21109+
21110+ if( 1 == use_interrupts_ ) {
21111+
21112+ if( BCM5221_PHY_ == phy_type_ ) {
21113+
21114+ bc_phy_interrupt_t bc_phy_interrupt_;
21115+
21116+ bc_phy_interrupt_.raw = 0;
21117+ bc_phy_interrupt_.bits.enable = 1;
21118+
21119+ if( 0 != phy_write_( phy_address_, BC_PHY_INTERRUPT_,
21120+ bc_phy_interrupt_.raw ) ) {
21121+
21122+ return -EBUSY;
21123+
21124+ }
21125+
21126+ if( 0 != phy_read_( phy_address_, BC_PHY_INTERRUPT_,
21127+ & bc_phy_interrupt_.raw ) ) {
21128+
21129+ return -EBUSY;
21130+
21131+ }
21132+
21133+ } else if( MICREL_PHY_ == phy_type_ ) {
21134+
21135+ m_phy_interrupt_t m_phy_interrupt_;
21136+
21137+ m_phy_interrupt_.raw = 0;
21138+ m_phy_interrupt_.bits.enable_link_up = 1;
21139+
21140+ if( 0 != phy_write_( phy_address_, M_PHY_INTERRUPT_,
21141+ m_phy_interrupt_.raw ) ) {
21142+
21143+ return -EBUSY;
21144+
21145+ }
21146+
21147+ }
21148+
21149+ if( 0 != ( return_code_ =
21150+ request_irq( INT_MAC_RX, appnic_isr_, 0,
21151+ APPNIC_NAME "(phy)", device ) ) ) {
21152+
21153+ ERROR_PRINT( "request_irq( ) failed, returned 0x%x/%d\n",
21154+ return_code_, return_code_ );
21155+ return return_code_;
21156+
21157+ }
21158+
21159+ write_mac_( ( APPNIC_RX_EXTERNAL_INTERRUPT_CONTROL_MAC_0 ),
21160+ APPNIC_RX_EXTERNAL_INTERRUPT_CONTROL );
21161+ dev_->polling = 0;
21162+
21163+ } else {
21164+
21165+#endif
21166+
21167+#ifndef CONFIG_ACP
21168+ WARN_PRINT( "PHY is in polling mode.\n" );
21169+#endif
21170+ init_timer( & appnic_timer_ );
21171+ appnic_timer_.expires = jiffies + ( APPNIC_TIMER_PERIOD * HZ );
21172+ appnic_timer_.data = ( unsigned long ) device;
21173+ appnic_timer_.function = appnic_timer_handler_;
21174+ add_timer( & appnic_timer_ );
21175+ dev_->polling = 1;
21176+
21177+#ifndef CONFIG_ACP
21178+
21179+ }
21180+
21181+#endif
21182+
21183+#endif /* PHYLESS */
21184+
21185+ }
21186+
21187+ /* let the OS know we are ready to send packets */
21188+ netif_start_queue( device );
21189+
21190+ /* that's all */
21191+ return 0;
21192+
21193+}
21194+
21195+/*
21196+ ----------------------------------------------------------------------
21197+ appnic_stop
21198+
21199+ Stops the interface. The interface is stopped when it is broughht
21200+ down; operations performed at open time should be reversed.
21201+*/
21202+
21203+int appnic_stop( struct net_device * device ) {
21204+
21205+ int return_code_ = 0;
21206+
21207+ DEBUG_PRINT( "Stopping the interface.\n" );
21208+
21209+ /*
21210+ Indicate to the OS that no more packets should be sent.
21211+ */
21212+
21213+ netif_stop_queue( device );
21214+
21215+ /*
21216+ Stop the receiver and transmitter.
21217+ */
21218+
21219+ disable_( );
21220+
21221+ /* Disable NAPI. */
21222+#ifdef LSINET_NAPI
21223+ {
21224+ appnic_device_t * adapter = netdev_priv( device );
21225+ napi_disable( & adapter->napi );
21226+ }
21227+#endif
21228+
21229+ /*
21230+ Free the interrupts.
21231+ */
21232+
21233+ free_irq( device->irq, device );
21234+
21235+#ifndef PHYLESS
21236+
21237+ {
21238+#ifndef CONFIG_ACP
21239+ appnic_device_t * dev_ = netdev_priv( device );
21240+ if( 0 != dev_->polling ) { del_timer( & appnic_timer_ ); }
21241+ else { free_irq( INT_MAC_RX, device ); }
21242+#else
21243+ del_timer( & appnic_timer_ );
21244+#endif
21245+ }
21246+
21247+#endif /* PHYLESS */
21248+
21249+ /*
21250+ That's all.
21251+ */
21252+
21253+ return return_code_;
21254+
21255+}
21256+
21257+/*
21258+ ----------------------------------------------------------------------
21259+ appnic_hard_start_xmit
21260+
21261+ The method initiates the transmission of a packet. The full packet
21262+ (protocol headers and all) is contained in a socket buffer (sk_buff)
21263+ structure.
21264+
21265+ ----- NOTES -----
21266+
21267+ 1) This will not get called again by the kernel until it returns.
21268+*/
21269+
21270+int
21271+appnic_hard_start_xmit( struct sk_buff * skb,
21272+ struct net_device * device )
21273+{
21274+ appnic_device_t * adapter = netdev_priv( device );
21275+ int length_;
21276+ int buf_per_desc_;
21277+
21278+#ifdef __APPNIC_C_PROFILE__
21279+ unsigned long beginning_;
21280+ unsigned long end_;
21281+ unsigned long this_time_;
21282+
21283+ beginning_ = ( 0xffffffff - readl( ( TIMER7_BASE + TIMER_n_VALUE ) ) );
21284+ ++ total_tx_packets_;
21285+#endif /* __APPNIC_C_PROFILE__ */
21286+
21287+ LSINET_COUNTS_INC( LSINET_COUNTS_HST_START );
21288+ appnic_special_lock( & adapter->lock );
21289+ length_ = skb->len < ETH_ZLEN ? ETH_ZLEN : skb->len;
21290+ buf_per_desc_ = adapter->tx_buf_sz / adapter->tx_num_desc;
21291+
21292+ /*
21293+ If enough transmit descriptors are available, copy and transmit.
21294+ */
21295+
21296+ DEBUG_PRINT( "length_=%d buf_per_desc_=%d tx_tail=0x%x\n",
21297+ length_, buf_per_desc_, swab32( adapter->tx_tail->raw ) );
21298+
21299+#if 0
21300+ if( ( ( length_ / buf_per_desc_ ) + 1 ) >=
21301+ queue_uninitialized_( adapter->tx_head, SWAB_QUEUE_POINTER( adapter->tx_tail ),
21302+ adapter->tx_num_desc ) ) {
21303+ LSINET_COUNTS_INC( LSINET_COUNTS_HST_RCLM );
21304+ handle_transmit_interrupt_( device );
21305+ }
21306+#else
21307+ /*ZZZ*/
21308+ while( ( ( length_ / buf_per_desc_ ) + 1 ) >=
21309+ queue_uninitialized_( adapter->tx_head,
21310+ SWAB_QUEUE_POINTER( adapter->tx_tail ),
21311+ adapter->tx_num_desc ) ) {
21312+ udelay( 1000 );
21313+ LSINET_COUNTS_INC( LSINET_COUNTS_HST_RCLM );
21314+ handle_transmit_interrupt_( device );
21315+ }
21316+#endif
21317+
21318+ if( ( ( length_ / buf_per_desc_ ) + 1 ) <
21319+ queue_uninitialized_( adapter->tx_head, SWAB_QUEUE_POINTER( adapter->tx_tail ),
21320+ adapter->tx_num_desc ) ) {
21321+ int bytes_copied_ = 0;
21322+ appnic_dma_descriptor_t descriptor;
21323+
21324+ LSINET_COUNTS_INC( LSINET_COUNTS_HST_SNDG );
21325+ readdescriptor( ( ( unsigned long ) adapter->tx_desc +
21326+ adapter->tx_head.bits.offset ), & descriptor );
21327+ descriptor.start_of_packet = 1;
21328+
21329+ while( bytes_copied_ < length_ ) {
21330+ descriptor.write = 1;
21331+ descriptor.pdu_length = length_;
21332+
21333+ if( ( length_ - bytes_copied_ ) > buf_per_desc_ ) {
21334+ memcpy( ( void * ) ( descriptor.host_data_memory_pointer +
21335+ adapter->dma_alloc_offset ),
21336+ ( void * ) ( ( unsigned long ) skb->data + bytes_copied_ ),
21337+ buf_per_desc_ );
21338+ descriptor.data_transfer_length = buf_per_desc_;
21339+ descriptor.end_of_packet = 0;
21340+ descriptor.interrupt_on_completion = 0;
21341+ bytes_copied_ += buf_per_desc_;
21342+ } else {
21343+ memcpy( ( void * ) ( descriptor.host_data_memory_pointer +
21344+ adapter->dma_alloc_offset ),
21345+ ( void * ) ( ( unsigned long ) skb->data + bytes_copied_ ),
21346+ ( length_ - bytes_copied_ ) );
21347+ descriptor.data_transfer_length = ( length_ - bytes_copied_ );
21348+ descriptor.end_of_packet = 1;
21349+#ifdef DISABLE_TX_INTERRUPTS
21350+ descriptor.interrupt_on_completion = 0;
21351+#else /* DISABLE_TX_INTERRUPTS */
21352+ descriptor.interrupt_on_completion = 1;
21353+#endif /* DISABLE_TX_INTERRUPTS */
21354+ bytes_copied_ = length_;
21355+ }
21356+
21357+ adapter->stats.tx_bytes += bytes_copied_;
21358+ writedescriptor( ( ( unsigned long ) adapter->tx_desc +
21359+ adapter->tx_head.bits.offset ), & descriptor );
21360+ queue_increment_( & adapter->tx_head, adapter->tx_num_desc );
21361+ readdescriptor( ( ( unsigned long ) adapter->tx_desc +
21362+ adapter->tx_head.bits.offset ), & descriptor );
21363+ descriptor.start_of_packet = 0;
21364+ }
21365+
21366+ write_mac_( adapter->tx_head.raw, APPNIC_DMA_TX_HEAD_POINTER );
21367+ device->trans_start = jiffies;
21368+ LSINET_COUNTS_INC( LSINET_COUNTS_HST_SNT );
21369+ } else {
21370+ ++ out_of_tx_descriptors_;
21371+ LSINET_COUNTS_INC( LSINET_COUNTS_HST_OOD );
21372+ ERROR_PRINT( "No transmit descriptors available!\n" );
21373+ }
21374+
21375+ /* free the socket buffer */
21376+ dev_kfree_skb( skb );
21377+ appnic_special_unlock( & adapter->lock );
21378+
21379+#ifdef __APPNIC_C_PROFILE__
21380+ end_ = ( 0xffffffff - readl( ( TIMER7_BASE + TIMER_n_VALUE ) ) );
21381+ if( end_ > beginning_ ) {
21382+ this_time_ = end_ - beginning_;
21383+ } else {
21384+ this_time_ = end_ + ( 0xffffffff - beginning_ ) + 1;
21385+ }
21386+ total_tx_time_ += this_time_;
21387+ if( this_time_ > time_in_tx_max_ ) { time_in_tx_max_ = this_time_; }
21388+ if( this_time_ < time_in_tx_min_ ) { time_in_tx_min_ = this_time_; }
21389+#endif /* __APPNIC_C_PROFILE__ */
21390+
21391+ LSINET_COUNTS_INC( LSINET_COUNTS_HST_DONE );
21392+ return 0;
21393+
21394+}
21395+
21396+/*
21397+ ----------------------------------------------------------------------
21398+ appnic_tx_timeout
21399+
21400+ This method is called when a packet transmission fails to complete
21401+ within a resonable period, on the assumption that an interrupt has
21402+ been missed or the interface has locked up. It should handle the
21403+ problem and resume packet transmission.
21404+*/
21405+
21406+void appnic_tx_timeout( struct net_device * device ) {
21407+
21408+ appnic_device_t * adapter = netdev_priv( device );
21409+
21410+ WARN_PRINT( "Transmission timed out!\n" );
21411+
21412+ if( 0 == queue_initialized_( SWAB_QUEUE_POINTER( adapter->tx_tail ),
21413+ adapter->tx_tail_copy, adapter->tx_num_desc ) ) {
21414+ /*
21415+ If tx_tail is still the same as tx_tail_copy
21416+ then restart the transmission.
21417+ */
21418+
21419+ write_mac_( adapter->tx_head.raw, APPNIC_DMA_TX_HEAD_POINTER );
21420+ } else {
21421+ /* If tx_tail has moved on, just increment tx_tail_copy. */
21422+ appnic_dma_descriptor_t descriptor;
21423+
21424+ readdescriptor( ( ( unsigned long ) adapter->tx_desc +
21425+ adapter->tx_tail_copy.bits.offset ), & descriptor );
21426+ adapter->stats.tx_bytes += descriptor.pdu_length;
21427+ kfree( ( void * ) descriptor.host_data_memory_pointer );
21428+ queue_increment_( & adapter->tx_tail_copy, adapter->tx_num_desc );
21429+ }
21430+
21431+ return;
21432+
21433+}
21434+
21435+/*
21436+ ----------------------------------------------------------------------
21437+ appnic_net_device_stats
21438+
21439+ Whenever an application needs to get statistics for the interface,
21440+ this method is called. This happens, for example, when ifconfig or
21441+ nstat -i is run.
21442+*/
21443+
21444+struct net_device_stats *
21445+appnic_get_stats( struct net_device * device )
21446+{
21447+
21448+ appnic_device_t * device_ = netdev_priv( device );
21449+
21450+ /*
21451+ Update the statistics structure.
21452+ */
21453+
21454+ get_hw_statistics_( device_ );
21455+
21456+ /*
21457+ That's all.
21458+ */
21459+
21460+ return & device_->stats;
21461+
21462+}
21463+
21464+/*
21465+ ----------------------------------------------------------------------
21466+ appnic_do_ioctl
21467+*/
21468+
21469+#if 0
21470+
21471+static int
21472+appnic_do_ioctl( struct net_device * device, struct ifreq * request,
21473+ int command )
21474+{
21475+
21476+ int return_code_ = 0;
21477+#ifndef PHYLESS
21478+ u16 * data_ = ( u16 * ) & ( request->ifr_data );
21479+#endif
21480+
21481+ switch( command ) {
21482+ /* Get the speed. */
21483+ case 0x8946:
21484+ break;
21485+#ifndef PHYLESS
21486+ /* Get the PHY (defined in 2.5.x kernels) */
21487+ case 0x89f0:
21488+ data_ [ 0 ] = phy_address_;
21489+ break;
21490+ /* Read PHY (defined in 2.5.x kernels) */
21491+ case 0x89f1:
21492+ if( 0 != phy_read_( data_ [ 0 ], data_ [ 1 ],
21493+ & ( data_ [ 3 ] ) ) ) {
21494+ return_code_ = -EIO;
21495+ }
21496+ break;
21497+ /* Write PHY (defined in 2.5.x kernels) */
21498+ case 0x89f2:
21499+ if( 0 != phy_write_( data_ [ 0 ], data_ [ 1 ], data_ [ 2 ] ) ) {
21500+ return_code_ = -EIO;
21501+ }
21502+ break;
21503+#endif
21504+ default:
21505+ ERROR_PRINT( "Unknown Command: 0x%x\n", command );
21506+ break;
21507+ }
21508+
21509+ return return_code_;
21510+
21511+}
21512+
21513+#endif
21514+
21515+/*
21516+ ----------------------------------------------------------------------
21517+ appnic_set_mac_address
21518+*/
21519+
21520+static int
21521+appnic_set_mac_address(struct net_device *device, void *data) {
21522+ struct sockaddr *address_ = data;
21523+ unsigned long swap_source_address_;
21524+
21525+ if (netif_running(device))
21526+ return -EBUSY;
21527+
21528+ DEBUG_PRINT("Setting MAC to %02x:%02x:%02x:%02x:%02x:%02x\n",
21529+ address_->sa_data [0], address_->sa_data [1],
21530+ address_->sa_data [2], address_->sa_data [3],
21531+ address_->sa_data [4], address_->sa_data [5]);
21532+ memcpy(device->dev_addr, address_->sa_data, 6);
21533+ memcpy(device->perm_addr, address_->sa_data, 6);
21534+
21535+ swap_source_address_ =
21536+ ((address_->sa_data[4]) << 8) | address_->sa_data[5];
21537+ write_mac_(swap_source_address_, APPNIC_SWAP_SOURCE_ADDRESS_2);
21538+ swap_source_address_ =
21539+ ((address_->sa_data[2]) << 8) | address_->sa_data[3];
21540+ write_mac_(swap_source_address_, APPNIC_SWAP_SOURCE_ADDRESS_1);
21541+ swap_source_address_ =
21542+ ((address_->sa_data[0]) << 8) | address_->sa_data[1];
21543+ write_mac_(swap_source_address_, APPNIC_SWAP_SOURCE_ADDRESS_0);
21544+ memcpy(device->dev_addr, address_->sa_data, device->addr_len);
21545+
21546+ return 0;
21547+}
21548+
21549+/*
21550+ ======================================================================
21551+ ======================================================================
21552+ ======================================================================
21553+
21554+ ETHTOOL Operations
21555+
21556+ ======================================================================
21557+ ======================================================================
21558+ ======================================================================
21559+*/
21560+
21561+/*
21562+ ----------------------------------------------------------------------
21563+ appnic_get_settings
21564+*/
21565+
21566+static int
21567+appnic_get_settings( struct net_device * device, struct ethtool_cmd * command )
21568+{
21569+ appnic_device_t * appnic_device_ = netdev_priv( device );
21570+
21571+ memset( command, 0, sizeof( struct ethtool_cmd ) );
21572+
21573+ /* What the hardware supports. */
21574+ command->supported =
21575+ ( SUPPORTED_10baseT_Half |
21576+ SUPPORTED_10baseT_Full |
21577+ SUPPORTED_100baseT_Half |
21578+ SUPPORTED_100baseT_Full );
21579+
21580+ /* Acquire the device lock. */
21581+ appnic_special_lock( & appnic_device_->lock );
21582+
21583+#ifndef PHYLESS
21584+
21585+ /* What is currently advertised. */
21586+
21587+ {
21588+
21589+ unsigned short ad_value_;
21590+
21591+ if( 0 != phy_read_( phy_address_, PHY_AUTONEG_ADVERTISE, & ad_value_ ) ) {
21592+
21593+ ERROR_PRINT( "PHY read failed!" );
21594+ appnic_special_unlock( & appnic_device_->lock );
21595+ return -EIO;
21596+
21597+ }
21598+
21599+ switch( ad_value_ ) {
21600+
21601+ case 0x1e1:
21602+ command->advertising =
21603+ ( ADVERTISED_100baseT_Full | ADVERTISED_100baseT_Half |
21604+ ADVERTISED_10baseT_Full | ADVERTISED_10baseT_Half );
21605+ break;
21606+
21607+ case 0xe1:
21608+ command->advertising =
21609+ ( ADVERTISED_100baseT_Half |
21610+ ADVERTISED_10baseT_Full | ADVERTISED_10baseT_Half );
21611+ break;
21612+
21613+ case 0x61:
21614+ command->advertising =
21615+ ( ADVERTISED_10baseT_Full | ADVERTISED_10baseT_Half );
21616+ break;
21617+
21618+ case 0x41:
21619+ command->advertising =
21620+ ( ADVERTISED_10baseT_Half );
21621+ break;
21622+
21623+ default:
21624+ break;
21625+
21626+ }
21627+
21628+ }
21629+
21630+ /* The current speed. */
21631+
21632+ {
21633+
21634+ int speed_;
21635+
21636+ if( -1 == ( speed_ = phy_speed_( phy_address_ ) ) ) {
21637+
21638+ ERROR_PRINT( "PHY read failed!" );
21639+ appnic_special_unlock( & appnic_device_->lock );
21640+ return -EIO;
21641+
21642+ }
21643+
21644+ if( 1 == speed_ ) {
21645+
21646+ command->speed = SPEED_100;
21647+
21648+ } else {
21649+
21650+ command->speed = SPEED_10;
21651+
21652+ }
21653+
21654+ }
21655+
21656+ /* Is the current link duplex? */
21657+
21658+ {
21659+
21660+ int duplex_;
21661+
21662+ if( -1 == ( duplex_ = phy_duplex_( phy_address_ ) ) ) {
21663+
21664+ ERROR_PRINT( "PHY read failed!" );
21665+ appnic_special_unlock( & appnic_device_->lock );
21666+ return -EIO;
21667+
21668+ }
21669+
21670+ if( 1 == duplex_ ) {
21671+
21672+ command->duplex = DUPLEX_FULL;
21673+
21674+ } else {
21675+
21676+ command->duplex = DUPLEX_HALF;
21677+
21678+ }
21679+
21680+ }
21681+
21682+#endif /* PHYLESS */
21683+
21684+ /* Is autoneg enabled? */
21685+ command->autoneg = AUTONEG_ENABLE;
21686+
21687+ /* Unlock and return success. */
21688+ appnic_special_unlock( & appnic_device_->lock );
21689+
21690+ return 0;
21691+
21692+}
21693+
21694+/*
21695+ Fill in the struture...
21696+*/
21697+
21698+static const struct ethtool_ops appnic_ethtool_ops = {
21699+ .get_settings = appnic_get_settings
21700+};
21701+
21702+
21703+/*
21704+ ======================================================================
21705+ ======================================================================
21706+ ======================================================================
21707+
21708+ Linux Module Interface.
21709+
21710+ ======================================================================
21711+ ======================================================================
21712+ ======================================================================
21713+*/
21714+
21715+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 29)
21716+static const struct net_device_ops appnic_netdev_ops = {
21717+ .ndo_open = appnic_open,
21718+ .ndo_stop = appnic_stop,
21719+ .ndo_get_stats = appnic_get_stats,
21720+ .ndo_set_mac_address = appnic_set_mac_address,
21721+ .ndo_start_xmit = appnic_hard_start_xmit,
21722+};
21723+#endif /* LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 29) */
21724+
21725+/*
21726+ ----------------------------------------------------------------------
21727+ appnic_init
21728+*/
21729+
21730+int
21731+appnic_init( struct net_device * device )
21732+{
21733+
21734+ appnic_device_t * adapter = netdev_priv( device );
21735+
21736+ TRACE_BEGINNING( );
21737+
21738+ /*
21739+ Reset the MAC
21740+ */
21741+
21742+ write_mac_( 0x80000000, APPNIC_DMA_PCI_CONTROL );
21743+
21744+ /*
21745+ -- WORKAROUND -- WORKAROUND -- WORKAROUND -- WORKAROUND -- WORKAROUND --
21746+ This is the software work around for defect 15129. Use 64 byte
21747+ buffers for receive descriptors for all dma.
21748+ -- WORKAROUND -- WORKAROUND -- WORKAROUND -- WORKAROUND -- WORKAROUND --
21749+ */
21750+#ifndef CONFIG_ACP
21751+ if( 1 >= ( APP3XX_REVISION_REGISTER & 0x1f ) ) {
21752+
21753+ printk( "++ Using work around for defect 15129\n" );
21754+ rx_num_desc = ( 8 * DESCRIPTOR_GRANULARITY );
21755+ rx_buf_sz = 32768;
21756+
21757+ }
21758+#endif
21759+
21760+ /*
21761+ Allocate memory and initialize the descriptors
21762+ */
21763+
21764+ {
21765+
21766+ void * dma_offset_;
21767+
21768+ /*
21769+ fixup num_[rt]x_desc
21770+ */
21771+
21772+ if( 0 != ( rx_num_desc % DESCRIPTOR_GRANULARITY ) ) {
21773+
21774+ WARN_PRINT( "rx_num_desc was not a multiple of %d.\n",
21775+ DESCRIPTOR_GRANULARITY );
21776+ rx_num_desc +=
21777+ DESCRIPTOR_GRANULARITY - ( rx_num_desc % DESCRIPTOR_GRANULARITY );
21778+
21779+ }
21780+
21781+ adapter->rx_num_desc = rx_num_desc;
21782+
21783+ if( 0 != ( tx_num_desc % DESCRIPTOR_GRANULARITY ) ) {
21784+
21785+ WARN_PRINT( "tx_num_desc was not a multiple of %d.\n",
21786+ DESCRIPTOR_GRANULARITY );
21787+ tx_num_desc +=
21788+ DESCRIPTOR_GRANULARITY - ( tx_num_desc % DESCRIPTOR_GRANULARITY );
21789+
21790+ }
21791+
21792+ adapter->tx_num_desc = tx_num_desc;
21793+
21794+ DEBUG_PRINT( "rx_num_desc=%d tx_num_desc=%d\n", rx_num_desc, tx_num_desc );
21795+
21796+ /*
21797+ Fix up [rt]x_buf_sz. Must be some multiple of 64 bytes per descriptor.
21798+ */
21799+
21800+ if( 0 != ( rx_buf_sz % ( BUFFER_ALIGNMENT *
21801+ rx_num_desc ) ) ) {
21802+
21803+ WARN_PRINT( "rx_buf_sz was not a multiple of %d.\n",
21804+ ( BUFFER_ALIGNMENT * rx_num_desc ) );
21805+ rx_buf_sz +=
21806+ ( BUFFER_ALIGNMENT * rx_num_desc ) -
21807+ ( rx_buf_sz % ( BUFFER_ALIGNMENT *
21808+ rx_num_desc ) );
21809+
21810+ }
21811+
21812+ adapter->rx_buf_sz = rx_buf_sz;
21813+
21814+ if( 0 != ( tx_buf_sz % ( BUFFER_ALIGNMENT *
21815+ tx_num_desc ) ) ) {
21816+
21817+ WARN_PRINT( "tx_buf_sz was not a multiple of %d.\n",
21818+ ( BUFFER_ALIGNMENT * tx_num_desc ) );
21819+ tx_buf_sz +=
21820+ ( BUFFER_ALIGNMENT * tx_num_desc ) -
21821+ ( tx_buf_sz % ( BUFFER_ALIGNMENT *
21822+ tx_num_desc ) );
21823+
21824+ }
21825+
21826+ adapter->tx_buf_sz = tx_buf_sz;
21827+
21828+ DEBUG_PRINT( "rx_buf_sz=%d tx_buf_sz=%d\n",
21829+ rx_buf_sz, tx_buf_sz );
21830+
21831+ /*
21832+ Allocate dma-able memory
21833+ */
21834+
21835+ adapter->dma_alloc_size =
21836+ /* The tail pointers (rx and tx) */
21837+ ( sizeof( appnic_queue_pointer_t ) * 2 ) +
21838+ /* The RX descriptor ring (and padding to allow
21839+ 64 byte alignment) */
21840+ ( sizeof( appnic_dma_descriptor_t ) *
21841+ adapter->rx_num_desc ) +
21842+ ( DESCRIPTOR_GRANULARITY ) +
21843+ /* The TX descriptor ring (and padding...) */
21844+ ( sizeof( appnic_dma_descriptor_t ) *
21845+ adapter->tx_num_desc ) +
21846+ ( DESCRIPTOR_GRANULARITY ) +
21847+ /* The RX buffer (and padding...) */
21848+ ( adapter->rx_buf_sz ) + ( BUFFER_ALIGNMENT ) +
21849+ /* The TX buffer (and padding...) */
21850+ ( adapter->tx_buf_sz ) + ( BUFFER_ALIGNMENT );
21851+
21852+#ifdef DMA_CACHABLE
21853+
21854+ if( ( void * ) 0 ==
21855+ ( adapter->dma_alloc = ( void * )
21856+ kmalloc( adapter->dma_alloc_size, GFP_KERNEL ) ) ) {
21857+
21858+ ERROR_PRINT( "Could not allocate %d bytes of "
21859+ "DMA-able memory!\n",
21860+ adapter->dma_alloc_size );
21861+ kfree( adapter );
21862+ TRACE_ENDING( );
21863+ return -ENOMEM;
21864+
21865+ }
21866+
21867+ adapter->dma_alloc_dma = virt_to_phys( adapter->dma_alloc );
21868+
21869+#else
21870+
21871+ /* This needs to be set to something sane for dma_alloc_coherent() */
21872+ device->dev.archdata.dma_ops = &dma_direct_ops;
21873+
21874+ if( ( void * ) 0 ==
21875+ ( adapter->dma_alloc = ( void * )
21876+ dma_direct_alloc_coherent( &device->dev, adapter->dma_alloc_size,
21877+ & adapter->dma_alloc_dma,
21878+ GFP_KERNEL ) ) ) {
21879+
21880+ ERROR_PRINT( "Could not allocate %d bytes of "
21881+ "DMA-able memory!\n",
21882+ adapter->dma_alloc_size );
21883+ kfree( adapter );
21884+ TRACE_ENDING( );
21885+ return -ENOMEM;
21886+
21887+ }
21888+
21889+#endif
21890+
21891+ adapter->dma_alloc_offset =
21892+ ( int ) adapter->dma_alloc - ( int ) adapter->dma_alloc_dma;
21893+ dma_offset_ = adapter->dma_alloc;
21894+ DEBUG_PRINT( "Allocated %d bytes at 0x%08lx(0x%08lx), "
21895+ "offset=0x%x.\n",
21896+ adapter->dma_alloc_size,
21897+ ( unsigned long ) adapter->dma_alloc,
21898+ ( unsigned long ) adapter->dma_alloc_dma,
21899+ adapter->dma_alloc_offset );
21900+ printk( "Allocated %d bytes at 0x%08lx(0x%08lx), "
21901+ "offset=0x%x.\n",
21902+ adapter->dma_alloc_size,
21903+ ( unsigned long ) adapter->dma_alloc,
21904+ ( unsigned long ) adapter->dma_alloc_dma,
21905+ adapter->dma_alloc_offset );
21906+
21907+ /*
21908+ Initialize the tail pointers
21909+ */
21910+
21911+ adapter->rx_tail = ( appnic_queue_pointer_t * ) dma_offset_;
21912+ adapter->rx_tail_dma =
21913+ ( int ) adapter->rx_tail - ( int ) adapter->dma_alloc_offset;
21914+ dma_offset_ += sizeof( appnic_queue_pointer_t );
21915+ memset( ( void * ) adapter->rx_tail, 0,
21916+ sizeof( appnic_queue_pointer_t ) );
21917+ DEBUG_PRINT( "rx_tail=0x%08lx\n",
21918+ ( unsigned long ) adapter->rx_tail );
21919+
21920+ adapter->tx_tail = ( appnic_queue_pointer_t * ) dma_offset_;
21921+ adapter->tx_tail_dma =
21922+ ( int ) adapter->tx_tail - ( int ) adapter->dma_alloc_offset;
21923+ dma_offset_ += sizeof( appnic_queue_pointer_t );
21924+ memset( ( void * ) adapter->tx_tail, 0,
21925+ sizeof( appnic_queue_pointer_t ) );
21926+ DEBUG_PRINT( "tx_tail=0x%08lx\n",
21927+ ( unsigned long ) adapter->tx_tail );
21928+
21929+ /*
21930+ Initialize the descriptor pointers
21931+ */
21932+
21933+ DEBUG_PRINT( "rx_tail=0x%08lx\n",
21934+ ( unsigned long ) adapter->rx_tail );
21935+ adapter->rx_desc = ( appnic_dma_descriptor_t * )
21936+ ALIGN64B( dma_offset_ );
21937+ DEBUG_PRINT( "rx_desc=0x%08lx\n",
21938+ ( unsigned long ) adapter->rx_desc );
21939+ adapter->rx_desc_dma =
21940+ ( int ) adapter->rx_desc - ( int ) adapter->dma_alloc_offset;
21941+ dma_offset_ += ( sizeof( appnic_dma_descriptor_t ) *
21942+ adapter->rx_num_desc ) +
21943+ ( DESCRIPTOR_GRANULARITY );
21944+ memset( ( void * ) adapter->rx_desc, 0,
21945+ ( sizeof( appnic_dma_descriptor_t ) *
21946+ adapter->rx_num_desc ) );
21947+
21948+ DEBUG_PRINT( "rx_tail=0x%08lx\n",
21949+ ( unsigned long ) adapter->rx_tail );
21950+ adapter->tx_desc = ( appnic_dma_descriptor_t * )
21951+ ALIGN64B( dma_offset_ );
21952+ DEBUG_PRINT( "tx_desc=0x%08lx\n",
21953+ ( unsigned long ) adapter->tx_desc );
21954+ adapter->tx_desc_dma =
21955+ ( int ) adapter->tx_desc - ( int ) adapter->dma_alloc_offset;
21956+ dma_offset_ += ( sizeof( appnic_dma_descriptor_t ) *
21957+ adapter->tx_num_desc ) +
21958+ ( DESCRIPTOR_GRANULARITY );
21959+ memset( ( void * ) adapter->tx_desc, 0,
21960+ ( sizeof( appnic_dma_descriptor_t ) *
21961+ adapter->tx_num_desc ) );
21962+
21963+ /*
21964+ Initialize the buffer pointers
21965+ */
21966+
21967+ DEBUG_PRINT( "rx_tail=0x%08lx\n",
21968+ ( unsigned long ) adapter->rx_tail );
21969+ DEBUG_PRINT( "Initializing the RX buffer pointers, dma_offset=0x%lx/0x%lx\n",
21970+ ( unsigned long ) dma_offset_,
21971+ ( unsigned long ) ALIGN64B( dma_offset_ ) );
21972+ adapter->rx_buf = ( void * ) ALIGN64B( dma_offset_ );
21973+ adapter->rx_buf_dma =
21974+ ( int ) adapter->rx_buf - ( int ) adapter->dma_alloc_offset;
21975+ adapter->rx_buf_per_desc = adapter->rx_buf_sz / adapter->rx_num_desc;
21976+
21977+ dma_offset_ += ( adapter->rx_buf_sz ) + ( BUFFER_ALIGNMENT );
21978+
21979+ DEBUG_PRINT( "rx_tail=0x%08lx\n",
21980+ ( unsigned long ) adapter->rx_tail );
21981+ DEBUG_PRINT( "Initializing the TX buffer pointers, dma_offset=0x%lx/0x%lx\n",
21982+ ( unsigned long ) dma_offset_,
21983+ ( unsigned long ) ALIGN64B( dma_offset_ ) );
21984+ adapter->tx_buf = ( void * ) ALIGN64B( dma_offset_ );
21985+ adapter->tx_buf_dma =
21986+ ( int ) adapter->tx_buf - ( int ) adapter->dma_alloc_offset;
21987+ adapter->tx_buf_per_desc = adapter->tx_buf_sz / adapter->tx_num_desc;
21988+ dma_offset_ += ( adapter->tx_buf_sz ) + ( BUFFER_ALIGNMENT );
21989+
21990+ /*
21991+ Initialize the descriptors
21992+ */
21993+
21994+ DEBUG_PRINT( "rx_tail=0x%08lx\n",
21995+ ( unsigned long ) adapter->rx_tail );
21996+ {
21997+
21998+ int index_;
21999+ unsigned long buf_ =
22000+ ( unsigned long ) adapter->rx_buf_dma;
22001+ appnic_dma_descriptor_t descriptor;
22002+
22003+ DEBUG_PRINT( "Initializing the RX descriptors at 0x%lx\n", buf_ );
22004+
22005+ for( index_ = 0; index_ < adapter->rx_num_desc; ++ index_ ) {
22006+ memset( ( void * ) & descriptor, 0, sizeof( appnic_dma_descriptor_t ) );
22007+ descriptor.write = 1;
22008+ descriptor.interrupt_on_completion = 1;
22009+ descriptor.host_data_memory_pointer = buf_;
22010+ descriptor.data_transfer_length = adapter->rx_buf_per_desc;
22011+ writedescriptor( ( ( unsigned long ) adapter->rx_desc +
22012+ ( index_ * sizeof( appnic_dma_descriptor_t ) ) ),
22013+ & descriptor );
22014+ buf_ += adapter->rx_buf_per_desc;
22015+ }
22016+
22017+ buf_ = ( unsigned long ) adapter->tx_buf_dma;
22018+ DEBUG_PRINT( "Initializing the RX descriptors at 0x%lx\n", buf_ );
22019+
22020+ for( index_ = 0;
22021+ index_ < adapter->tx_num_desc; ++ index_ ) {
22022+ memset( ( void * ) & descriptor, 0, sizeof( appnic_dma_descriptor_t ) );
22023+ descriptor.write = 1;
22024+ descriptor.interrupt_on_completion = 1;
22025+ descriptor.host_data_memory_pointer = buf_;
22026+ writedescriptor( ( ( unsigned long ) adapter->tx_desc +
22027+ ( index_ * sizeof( appnic_dma_descriptor_t ) ) ),
22028+ & descriptor );
22029+ buf_ += adapter->tx_buf_per_desc;
22030+ }
22031+ }
22032+
22033+ DEBUG_PRINT( "rx_tail=0x%08lx\n",
22034+ ( unsigned long ) adapter->rx_tail );
22035+ DEBUG_PRINT( "Initializing spin locks and semaphores.\n" );
22036+
22037+ /*
22038+ Initialize the spin lock.
22039+ */
22040+
22041+ spin_lock_init( & adapter->lock );
22042+ spin_lock_init( & adapter->extra_lock );
22043+
22044+ /*
22045+ * TEMP: Initialize the semaphores
22046+ */
22047+ mutex_init( & adapter->rx_sem);
22048+ mutex_init( & adapter->tx_sem);
22049+ mutex_init( & adapter->poll_sem);
22050+
22051+ }
22052+
22053+ /*
22054+ Take MAC out of reset
22055+ */
22056+
22057+ DEBUG_PRINT( "rx_tail=0x%08lx\n",
22058+ ( unsigned long ) adapter->rx_tail );
22059+ DEBUG_PRINT( "Enabling the MAC" );
22060+ write_mac_( 0x0, APPNIC_RX_SOFT_RESET );
22061+ write_mac_( 0x1, APPNIC_RX_MODE );
22062+ write_mac_( 0x0, APPNIC_TX_SOFT_RESET );
22063+ write_mac_( 0x1, APPNIC_TX_MODE );
22064+ if( is_asic( ) ) {
22065+ write_mac_( 0x300a, APPNIC_TX_WATERMARK );
22066+ } else {
22067+ write_mac_( 0xc00096, APPNIC_TX_WATERMARK );
22068+ }
22069+ write_mac_( 0x1, APPNIC_TX_HALF_DUPLEX_CONF );
22070+ write_mac_( 0xffff, APPNIC_TX_TIME_VALUE_CONF );
22071+ write_mac_( 0x1, APPNIC_TX_INTERRUPT_CONTROL );
22072+ write_mac_( 0x5275, APPNIC_TX_EXTENDED_CONF );
22073+ write_mac_( 0x1, APPNIC_RX_INTERNAL_INTERRUPT_CONTROL );
22074+ write_mac_( 0x1, APPNIC_RX_EXTERNAL_INTERRUPT_CONTROL );
22075+ write_mac_( 0x40010000, APPNIC_DMA_PCI_CONTROL );
22076+ write_mac_( 0x30000, APPNIC_DMA_CONTROL );
22077+ writeio( 0x280044, dma_base + 0x60 );
22078+ writeio( 0xc0, dma_base + 0x64 );
22079+
22080+ /*
22081+ Set the MAC address.
22082+ */
22083+
22084+ {
22085+ struct sockaddr address;
22086+
22087+ memcpy(&(address.sa_data[0]), device->dev_addr, 6);
22088+ appnic_set_mac_address(device, &address);
22089+ }
22090+
22091+ /*
22092+ Initialize the queue pointers.
22093+ */
22094+
22095+ DEBUG_PRINT( "rx_tail=0x%08lx\n",
22096+ ( unsigned long ) adapter->rx_tail );
22097+ {
22098+
22099+ /*
22100+ Receiver
22101+ */
22102+
22103+ memset( ( void * ) & adapter->rx_tail_copy,
22104+ 0, sizeof( appnic_queue_pointer_t ) );
22105+ memset( ( void * ) & adapter->rx_head,
22106+ 0, sizeof( appnic_queue_pointer_t ) );
22107+
22108+ write_mac_( adapter->rx_desc_dma,
22109+ APPNIC_DMA_RX_QUEUE_BASE_ADDRESS );
22110+ write_mac_( ( adapter->rx_num_desc *
22111+ sizeof( appnic_dma_descriptor_t ) ) / 1024,
22112+ APPNIC_DMA_RX_QUEUE_SIZE );
22113+ /* indicate that all of the receive descriptors are ready */
22114+ adapter->rx_head.bits.offset =
22115+ ( adapter->rx_num_desc - 1 ) *
22116+ sizeof( appnic_dma_descriptor_t );
22117+ write_mac_( adapter->rx_tail_dma,
22118+ APPNIC_DMA_RX_TAIL_POINTER_ADDRESS );
22119+
22120+ /*
22121+ N.B.
22122+
22123+ The boot loader may have used the NIC. If so, the
22124+ tail pointer must be read and the head pointer (and
22125+ local copy of the tail) based on it.
22126+ */
22127+
22128+ DEBUG_PRINT( "Initializing the RX tail: adapter=0x%lx\n",
22129+ ( unsigned long ) adapter );
22130+ DEBUG_PRINT( "Initializing the RX tail: adapter->rx_tail=0x%lx\n",
22131+ ( unsigned long ) adapter->rx_tail );
22132+ DEBUG_PRINT( "Initializing the RX tail: adapter->rx_tail->raw=0x%lx\n",
22133+ ( unsigned long ) adapter->rx_tail->raw );
22134+ adapter->rx_tail->raw =
22135+ read_mac_( APPNIC_DMA_RX_TAIL_POINTER_LOCAL_COPY );
22136+ adapter->rx_tail_copy.raw = adapter->rx_tail->raw;
22137+ adapter->rx_head.raw = adapter->rx_tail->raw;
22138+ queue_decrement_( & adapter->rx_head, adapter->rx_num_desc );
22139+ adapter->rx_head.bits.generation_bit =
22140+ ( 0 == adapter->rx_head.bits.generation_bit ) ? 1 : 0;
22141+ write_mac_( adapter->rx_head.raw, APPNIC_DMA_RX_HEAD_POINTER );
22142+
22143+ /*
22144+ Transmitter
22145+ */
22146+
22147+ memset( ( void * ) & adapter->tx_tail_copy,
22148+ 0, sizeof( appnic_queue_pointer_t ) );
22149+ memset( ( void * ) & adapter->tx_head,
22150+ 0, sizeof( appnic_queue_pointer_t ) );
22151+
22152+ write_mac_( adapter->tx_desc_dma,
22153+ APPNIC_DMA_TX_QUEUE_BASE_ADDRESS );
22154+ write_mac_( ( adapter->tx_num_desc *
22155+ sizeof( appnic_dma_descriptor_t ) ) / 1024,
22156+ APPNIC_DMA_TX_QUEUE_SIZE );
22157+ DEBUG_PRINT( "Writing 0x%lx to APPNIC_DMA_TX_TAIL_POINTER_ADDRESS\n",
22158+ ( unsigned long ) adapter->tx_tail_dma );
22159+ write_mac_( adapter->tx_tail_dma,
22160+ APPNIC_DMA_TX_TAIL_POINTER_ADDRESS );
22161+
22162+ /*
22163+ N.B.
22164+
22165+ The boot loader may have used the NIC. If so, the
22166+ tail pointer must be read and the head pointer (and
22167+ local copy of the tail) based on it.
22168+ */
22169+
22170+ DEBUG_PRINT( "Initializing the TX tail pointer at 0x%lx/0x%lx.\n",
22171+ ( unsigned long ) adapter->tx_tail,
22172+ ( unsigned long ) adapter->tx_tail->raw );
22173+ adapter->tx_tail->raw =
22174+ read_mac_( APPNIC_DMA_TX_TAIL_POINTER_LOCAL_COPY );
22175+ adapter->tx_tail_copy.raw = adapter->tx_tail->raw;
22176+ adapter->tx_head.raw = adapter->tx_tail->raw;
22177+ write_mac_( adapter->tx_head.raw, APPNIC_DMA_TX_HEAD_POINTER );
22178+
22179+ }
22180+
22181+ /* clear statistics */
22182+
22183+ {
22184+
22185+ appnic_device_t * device_ = netdev_priv( device );
22186+ clear_statistics_( device_ );
22187+
22188+ }
22189+
22190+ /* initialize the PHY */
22191+
22192+#ifndef PHYLESS
22193+
22194+ if( 0 != phy_enable_( phy_address_ ) ) {
22195+
22196+ WARN_PRINT( "Failed to initialize the PHY!\n" );
22197+
22198+ }
22199+
22200+#endif /* PHYLESS */
22201+
22202+ /* fill in the net_device structure */
22203+
22204+ DEBUG_PRINT( "Filling in the device structure.\n" );
22205+ ether_setup( device );
22206+
22207+#ifdef CONFIG_ACP
22208+ if( NO_IRQ ==
22209+ ( device->irq = irq_create_mapping( NULL, adapter->interrupt ) ) ) {
22210+ ERROR_PRINT( "irq_create_mapping( ) failed\n" );
22211+ return -EBUSY;
22212+ }
22213+
22214+ if( 0 != irq_set_irq_type( device->irq, IRQ_TYPE_LEVEL_HIGH ) ) {
22215+ ERROR_PRINT( "set_irq_type( ) failed\n" );
22216+ return -EBUSY;
22217+ }
22218+#else
22219+ device->irq = INT_MAC_DMA;
22220+#endif
22221+#if LINUX_VERSION_CODE < KERNEL_VERSION(2, 6, 29)
22222+ device->open = appnic_open;
22223+ device->stop = appnic_stop;
22224+ device->hard_start_xmit = appnic_hard_start_xmit;
22225+ device->tx_timeout = appnic_tx_timeout;
22226+ device->get_stats = appnic_get_stats;
22227+ device->do_ioctl = appnic_do_ioctl;
22228+ device->watchdog_timeo = tx_timeout;
22229+ device->set_mac_address = appnic_set_mac_address;
22230+#else
22231+ device->netdev_ops = & appnic_netdev_ops;
22232+#endif /* LINUX_VERSION_CODE < KERNEL_VERSION(2, 6, 29) */
22233+ SET_ETHTOOL_OPS( device, & appnic_ethtool_ops );
22234+#ifdef LSINET_NAPI
22235+ memset( ( void * ) & adapter->napi, 0, sizeof( struct napi_struct ) );
22236+ netif_napi_add( device, & adapter->napi, lsinet_poll, LSINET_NAPI_WEIGHT );
22237+ adapter->device = device;
22238+ printk( "%s:%d - lsinet_poll=0x%lx\n",
22239+ __FILE__, __LINE__, ( unsigned long ) lsinet_poll );
22240+#endif
22241+
22242+ /* that's all */
22243+ TRACE_ENDING( );
22244+ return 0;
22245+
22246+}
22247+
22248+/*
22249+ ----------------------------------------------------------------------
22250+ appnic_read_proc_
22251+*/
22252+
22253+static int
22254+appnic_read_proc_( char * page, char * * start, off_t offset,
22255+ int count, int * eof, void * data )
22256+{
22257+
22258+ int length_;
22259+
22260+#ifdef __APPNIC_C_PROFILE__
22261+
22262+ struct net_device *net_device_ = this_net_device;
22263+ appnic_device_t * appnic_device_ =
22264+ ( appnic_device_t * ) net_device_->priv;
22265+ unsigned long divisor_;
22266+ unsigned long tx_tpa_real_;
22267+ unsigned long tx_tpa_virt_;
22268+
22269+ divisor_ = get_core_speed( ) / 1000000;
22270+
22271+#if 1
22272+
22273+ if( appnic_device_->tx_tail_dma !=
22274+ read_mac_( APPNIC_DMA_TX_TAIL_POINTER_ADDRESS ) ) {
22275+
22276+ ERROR_PRINT( "Real Address Doesn't Match Configuration! " \
22277+ "0x%x 0x%x\n",
22278+ appnic_device_->tx_tail_dma,
22279+ read_mac_( APPNIC_DMA_TX_TAIL_POINTER_ADDRESS ) );
22280+
22281+ }
22282+
22283+ tx_tpa_real_ = appnic_device_->tx_tail_dma;
22284+ tx_tpa_virt_ = appnic_device_->tx_tail->raw;
22285+
22286+ length_ = sprintf( page,
22287+ " GKM TEMP DEBUG Build 5\n" \
22288+ " RX: head=0x%lx tail=0x%lx tail_copy=0x%lx\n" \
22289+ " TX: head=0x%lx tail=0x%lx tail_copy=0x%lx\n" \
22290+ "DMA: IE=0x%x IS=0x%x\n" \
22291+ "VIC: status=0x%x raw=0x%x enable=0x%x\n" \
22292+ " TX: tpa_config=0x%x tpa_real_=0x%lx " \
22293+ "*tpa_virt_=0x%x\n",
22294+ appnic_device_->rx_head.raw,
22295+ appnic_device_->rx_tail->raw,
22296+ appnic_device_->rx_tail_copy.raw,
22297+ appnic_device_->tx_head.raw,
22298+ appnic_device_->tx_tail->raw,
22299+ appnic_device_->tx_tail_copy.raw,
22300+ read_mac_( APPNIC_DMA_INTERRUPT_ENABLE ),
22301+ read_mac_( APPNIC_DMA_INTERRUPT_STATUS ),
22302+ readl( ( APP3XX_VIC_BASE + VICIRQSTATUS ) ),
22303+ readl( ( APP3XX_VIC_BASE + VICRAWINTR ) ),
22304+ readl( ( APP3XX_VIC_BASE + VICINTENABLE ) ),
22305+ read_mac_( APPNIC_DMA_TX_TAIL_POINTER_ADDRESS ),
22306+ tx_tpa_real_,
22307+ * ( ( unsigned int * ) tx_tpa_virt_ ) );
22308+
22309+
22310+#else
22311+
22312+ length_ = sprintf( page,
22313+
22314+#ifdef LSINET_NAPI
22315+
22316+ "-- appnic.c\n" \
22317+ "-- rx_num_desc = %d\n" \
22318+ "-- rx_buf_sz = %d\n" \
22319+ "-- rx_buf_per_desc = %d\n" \
22320+ "-- tx_num_desc = %d\n" \
22321+ "-- tx_buf_sz = %d\n" \
22322+ "-- tx_buf_per_desc = %d\n" \
22323+ "-- dropped_by_stack_ = %lu\n" \
22324+ "-- transmit_interrupts_ = %lu\n" \
22325+ "-- receive_interrupts_ = %lu\n" \
22326+ "-- total_polls_ = %lu\n" \
22327+ "-- jiffies_changed_ = %lu\n" \
22328+ "-- out_of_tx_descriptors_ = %lu\n" \
22329+ "-- divisor_ = %lu\n" \
22330+ "-- RX(ns): min=%lu max=%lu avg/pkt=%llu "
22331+ "avg/poll=%llu\n" \
22332+ "-- Max RX Packets Handled/poll: %lu\n" \
22333+ "-- RX Size: min=%lu max=%lu total=%lu "
22334+ "average=%lu\n" \
22335+ "-- TX(ns): min=%lu max=%lu avg/pkt=%llu\n" \
22336+ "-- total_tx_packets_: %lu\n" \
22337+ "-- recv t1: min=%lu max=%lu, avg=%llu\n" \
22338+ "-- recv t2: min=%lu max=%lu, avg=%llu\n" \
22339+ "-- recv t3: min=%lu max=%lu, avg=%llu\n",
22340+
22341+#else
22342+
22343+ "-- appnic.c\n" \
22344+ "-- rx_num_desc = %d\n" \
22345+ "-- rx_buf_sz = %d\n" \
22346+ "-- rx_buf_per_desc = %d\n" \
22347+ "-- tx_num_desc = %d\n" \
22348+ "-- tx_buf_sz = %d\n" \
22349+ "-- tx_buf_per_desc = %d\n" \
22350+ "-- dropped_by_stack_ = %lu\n" \
22351+ "-- transmit_interrupts_ = %lu\n" \
22352+ "-- total_rx_interrupts_ = %lu\n" \
22353+ "-- jiffies_changed_ = %lu\n" \
22354+ "-- out_of_tx_descriptors_ = %lu\n" \
22355+ "-- divisor_ = %lu\n" \
22356+ "-- RX(ns): min=%lu max=%lu avg/pkt=%llu "
22357+ "avg/irq=%llu\n" \
22358+ "-- Max RX Packets Handled/Interrupt: %lu\n" \
22359+ "-- RX Size: min=%lu max=%lu total=%lu "
22360+ "average=%lu\n" \
22361+ "-- TX(ns): min=%lu max=%lu avg/pkt=%llu\n" \
22362+ "-- total_tx_packets_: %lu\n" \
22363+ "-- recv t1: min=%lu max=%lu, avg=%llu\n" \
22364+ "-- recv t2: min=%lu max=%lu, avg=%llu\n" \
22365+ "-- recv t3: min=%lu max=%lu, avg=%llu\n",
22366+
22367+#endif
22368+
22369+ appnic_device_->rx_num_desc,
22370+ appnic_device_->rx_buf_sz,
22371+ appnic_device_->rx_buf_per_desc,
22372+ appnic_device_->tx_num_desc,
22373+ appnic_device_->tx_buf_sz,
22374+ appnic_device_->tx_buf_per_desc,
22375+ dropped_by_stack_,
22376+ transmit_interrupts_,
22377+
22378+#ifdef LSINET_NAPI
22379+
22380+ receive_interrupts_,
22381+ total_polls_,
22382+
22383+#else
22384+
22385+ total_rx_interrupts_,
22386+
22387+#endif
22388+
22389+ jiffies_changed_,
22390+ out_of_tx_descriptors_,
22391+ divisor_,
22392+ profile_time_fmt(time_in_rx_min_,divisor_),
22393+ profile_time_fmt(time_in_rx_max_,divisor_),
22394+ total_rx_packets_handled_ ?
22395+ (profile_avg_fmt(total_rx_time_,
22396+ total_rx_packets_handled_,
22397+ divisor_)) : 0,
22398+
22399+#ifdef LSINET_NAPI
22400+
22401+ total_polls_ ?
22402+ (profile_avg_fmt(total_rx_time_,
22403+ total_polls_,
22404+ divisor_)) : 0,
22405+
22406+#else
22407+
22408+ total_rx_interrupts_ ?
22409+ (profile_avg_fmt(total_rx_time_,
22410+ total_rx_interrupts_,
22411+ divisor_)) : 0,
22412+
22413+#endif
22414+
22415+ max_rx_packets_handled_,
22416+ rx_packet_size_min_, rx_packet_size_max_,
22417+ total_rx_bytes_,
22418+ total_rx_packets_handled_ ?
22419+ ( total_rx_bytes_ / total_rx_packets_handled_ ) :
22420+ 0,
22421+ profile_time_fmt(time_in_tx_min_,divisor_),
22422+ profile_time_fmt(time_in_tx_max_,divisor_),
22423+ total_tx_packets_ ?
22424+ (profile_avg_fmt(total_tx_time_,
22425+ total_tx_packets_,
22426+ divisor_)) : 0,
22427+ total_tx_packets_,
22428+ profile_time_fmt(recv_t1_min_,divisor_),
22429+ profile_time_fmt(recv_t1_max_,divisor_),
22430+ total_rx_packets_handled_ ?
22431+ ( total_rx_packets_sent_up_ ?
22432+ (profile_avg_fmt(recv_t1_tot_,
22433+ total_rx_packets_handled_,
22434+ divisor_)) : 0 ) : 0,
22435+ profile_time_fmt(recv_t2_min_,divisor_),
22436+ profile_time_fmt(recv_t2_max_,divisor_),
22437+ total_rx_packets_sent_up_ ?
22438+ (profile_avg_fmt(recv_t2_tot_,
22439+ total_rx_packets_sent_up_,
22440+ divisor_)) : 0,
22441+ profile_time_fmt(recv_t3_min_,divisor_),
22442+ profile_time_fmt(recv_t3_max_,divisor_),
22443+ total_rx_packets_sent_up_ ?
22444+ (profile_avg_fmt(recv_t3_tot_,
22445+ total_rx_packets_sent_up_,
22446+ divisor_)) : 0);
22447+
22448+#endif
22449+
22450+ time_in_rx_max_ = 0;
22451+ time_in_rx_min_ = 0xffffffff;
22452+ rx_packet_size_max_ = 0;
22453+ rx_packet_size_min_ = 0xffffffff;
22454+ total_rx_bytes_ = 0;
22455+ total_rx_packets_handled_ = 1;
22456+ total_rx_time_ = 0;
22457+ max_rx_packets_handled_ = 0;
22458+ total_rx_interrupts_ = 0;
22459+
22460+#ifdef LSINET_NAPI
22461+
22462+ receive_interrupts_ = 0;
22463+ total_polls_ = 0;
22464+
22465+#endif
22466+
22467+ time_in_tx_max_ = 0;
22468+ time_in_tx_min_ = 0xffffffff;
22469+ total_tx_time_ = 0;
22470+ total_tx_packets_ = 1;
22471+ jiffies_changed_ = 0;
22472+ recv_t1_min_ = 0xffffffff;
22473+ recv_t2_min_ = 0xffffffff;
22474+ recv_t3_min_ = 0xffffffff;
22475+ recv_t1_max_ = 0;
22476+ recv_t2_max_ = 0;
22477+ recv_t3_max_ = 0;
22478+ recv_t1_tot_ = 0;
22479+ recv_t2_tot_ = 0;
22480+ recv_t3_tot_ = 0;
22481+ total_rx_packets_sent_up_ = 1;
22482+
22483+#else
22484+
22485+ length_ = sprintf( page, "-- appnic.c -- Profiling is disabled\n" );
22486+
22487+#endif
22488+
22489+ /* that's all */
22490+ return length_;
22491+
22492+}
22493+
22494+/*
22495+ ----------------------------------------------------------------------
22496+ lsinet_init
22497+*/
22498+
22499+int
22500+lsinet_init(void)
22501+{
22502+ int rc = 0;
22503+ struct net_device *device;
22504+ struct device_node *np = NULL;
22505+ const u32 *field;
22506+ appnic_device_t *appnic_device;
22507+
22508+ TRACE_BEGINNING();
22509+
22510+ /* Allocate space for the device. */
22511+ if ((struct net_device *)0 ==
22512+ (device = alloc_etherdev(sizeof(appnic_device_t)))) {
22513+ ERROR_PRINT( "Couldn't allocate net device." );
22514+ rc = -ENOMEM;
22515+ goto out;
22516+ }
22517+
22518+ this_net_device = device; /* For /proc/reads. */
22519+ appnic_device = (appnic_device_t *)netdev_priv(device);
22520+
22521+ /*
22522+ Get the physical addresses, interrupt number, etc. from the
22523+ device tree. If no entry exists (older boot loader...) just
22524+ use the pre-devicetree method.
22525+ */
22526+
22527+ np = of_find_node_by_type(np, "network");
22528+
22529+ while (np && !of_device_is_compatible(np, "acp-femac"))
22530+ np = of_find_node_by_type(np, "network");
22531+
22532+ if (np) {
22533+ u64 value64;
22534+ u32 value32;
22535+ int length;
22536+
22537+ field = of_get_property(np, "enabled", NULL);
22538+
22539+ if (!field || (field && (0 == *field))) {
22540+ ERROR_PRINT("Not Enabled\n");
22541+ rc = -EINVAL;
22542+ goto out;
22543+ }
22544+
22545+ field = of_get_property(np, "reg", NULL);
22546+
22547+ if (!field) {
22548+ ERROR_PRINT("Couldn't get \"reg\" property.\n");
22549+ rc = -EINVAL;
22550+ goto out;
22551+ }
22552+
22553+ value64 = of_translate_address(np, field);
22554+ value32 = field[1];
22555+ field += 2;
22556+ rx_base = ioremap(value64, value32);
22557+ appnic_device->rx_base = rx_base;
22558+ value64 = of_translate_address(np, field);
22559+ value32 = field[1];
22560+ field += 2;
22561+ tx_base = ioremap(value64, value32);
22562+ appnic_device->tx_base = tx_base;
22563+ value64 = of_translate_address(np, field);
22564+ value32 = field[1];
22565+ field += 2;
22566+ dma_base = ioremap(value64, value32);
22567+ appnic_device->dma_base = dma_base;
22568+
22569+ field = of_get_property(np, "interrupts", NULL);
22570+
22571+ if (field)
22572+ appnic_device->interrupt = field[0];
22573+ else
22574+ goto device_tree_failed;
22575+
22576+ field = of_get_property(np, "mdio-clock", NULL);
22577+
22578+ if (!field) {
22579+ goto device_tree_failed;
22580+ } else {
22581+ appnic_device->mdio_clock = field[0];
22582+ }
22583+
22584+ field = of_get_property(np, "phy-address", NULL);
22585+
22586+ if (!field) {
22587+ goto device_tree_failed;
22588+ } else {
22589+ appnic_device->phy_address = field[0];
22590+ }
22591+
22592+ field = of_get_property(np, "ad-value", NULL);
22593+
22594+ if (!field) {
22595+ goto device_tree_failed;
22596+ } else {
22597+ appnic_device->ad_value = field[0];
22598+ }
22599+
22600+ field = of_get_property(np, "mac-address", &length);
22601+
22602+ if (!field || 6 != length) {
22603+ goto device_tree_failed;
22604+ } else {
22605+ int i;
22606+ u8 *value;
22607+
22608+ value = (u8 *)field;
22609+
22610+ for (i = 0; i < 6; ++i) {
22611+ /*printk("value[%d] = 0x%2x\n", i, value[i]);*/
22612+ appnic_device->mac_addr[i] = value[i];
22613+ }
22614+ }
22615+
22616+ memcpy(device->dev_addr, &appnic_device->mac_addr[0], 6);
22617+ memcpy(device->perm_addr, &appnic_device->mac_addr[0], 6);
22618+
22619+ goto device_tree_succeeded;
22620+
22621+ device_tree_failed:
22622+ ERROR_PRINT("Reading Device Tree Failed\n");
22623+ iounmap(rx_base);
22624+ iounmap(tx_base);
22625+ iounmap(dma_base);
22626+ rc = -EINVAL;
22627+ goto out;
22628+
22629+ } else {
22630+ unsigned char ethaddr_string[20];
22631+
22632+ if (0 != ubootenv_get("ethaddr", ethaddr_string)) {
22633+ ERROR_PRINT("Could not read ethernet address!\n");
22634+ return -EBUSY;
22635+ } else {
22636+ char *string;
22637+ int i = 0;
22638+ u8 mac_address[6];
22639+
22640+ string = ethaddr_string;
22641+
22642+ while ((0 != string) && (6 > i)) {
22643+ char *value;
22644+
22645+ value = strsep(&string, ":");
22646+ mac_address[i++] =
22647+ simple_strtoul(value, NULL, 16);
22648+ }
22649+
22650+ memcpy(device->dev_addr, mac_address, 6);
22651+ memcpy(device->perm_addr, mac_address, 6);
22652+ device->addr_len = 6;
22653+ }
22654+
22655+ printk("LSI FEMAC: Using Static Addresses and Interrupts.\n");
22656+ rx_base = ioremap(0x002000480000ULL, 0x1000);
22657+ appnic_device->rx_base = ioremap(0x002000480000ULL, 0x1000);
22658+ tx_base = ioremap(0x002000481000ULL, 0x1000);
22659+ appnic_device->tx_base = ioremap(0x002000481000ULL, 0x1000);
22660+ dma_base = ioremap(0x002000482000ULL, 0x1000);
22661+ appnic_device->dma_base = ioremap(0x002000482000ULL, 0x1000);
22662+ appnic_device->interrupt = 33;
22663+ }
22664+
22665+ device_tree_succeeded:
22666+
22667+#ifdef __APPNIC_C_PROFILE__
22668+ writel( 0xffffffff, ( TIMER7_BASE + TIMER_n_LOAD ) );
22669+ writel( 0xffffffff, ( TIMER7_BASE + TIMER_n_VALUE ) );
22670+ writel( ( TIMER_n_CONTROL_ENABLE |
22671+ TIMER_n_CONTROL_MODE |
22672+ TIMER_n_CONTROL_SIZE ),
22673+ ( TIMER7_BASE + TIMER_n_CONTROL ) );
22674+#endif /* __APPNIC_C_PROFILE__ */
22675+
22676+ /* Initialize the device. */
22677+
22678+ if( 0 != ( rc = appnic_init( device ) ) ) {
22679+ ERROR_PRINT( "appnic_init( ) failed: %d\n", rc );
22680+ rc = -ENODEV;
22681+ goto out;
22682+ }
22683+
22684+ strcpy(this_net_device->name, "eth%d");
22685+
22686+ /* Register the device. */
22687+
22688+ if (0 != (rc = register_netdev(this_net_device))) {
22689+ ERROR_PRINT("register_netdev() failed: %d\n", rc);
22690+ rc = -ENODEV;
22691+ goto out;
22692+ }
22693+
22694+ /* Create the /proc entry. */
22695+ create_proc_read_entry( "driver/appnic", 0, NULL,
22696+ appnic_read_proc_, NULL );
22697+
22698+ out:
22699+ TRACE_ENDING( );
22700+ return rc;
22701+}
22702+
22703+module_init(lsinet_init);
22704+
22705+/*
22706+ ----------------------------------------------------------------------
22707+ lsinet_exit
22708+*/
22709+
22710+void __exit
22711+lsinet_exit(void)
22712+{
22713+ TRACE_BEGINNING();
22714+ remove_proc_entry("driver/appnic", NULL);
22715+ unregister_netdev(this_net_device);
22716+ TRACE_ENDING();
22717+
22718+ return;
22719+}
22720+
22721+module_exit(lsinet_exit);
22722diff --git a/drivers/lsi/acp/pci_plx.c b/drivers/lsi/acp/pci_plx.c
22723new file mode 100644
22724index 0000000..1a5179e
22725--- /dev/null
22726+++ b/drivers/lsi/acp/pci_plx.c
22727@@ -0,0 +1,795 @@
22728+/*
22729+ * drivers/lsi/acp/pci_plx.c
22730+ *
22731+ * PCIe PLX controller Driver for LSI's ACP
22732+ *
22733+ * Copyright (C) 2009 LSI Inc.
22734+ *
22735+ * This program is free software; you can redistribute it and/or modify
22736+ * it under the terms of the GNU General Public License as published by
22737+ * the Free Software Foundation; either version 2 of the License, or
22738+ * (at your option) any later version.
22739+ *
22740+ * This program is distributed in the hope that it will be useful,
22741+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
22742+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
22743+ * GNU General Public License for more details.
22744+ *
22745+ * You should have received a copy of the GNU General Public License
22746+ * along with this program; if not, write to the Free Software
22747+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
22748+ *
22749+ */
22750+
22751+/************************************************************************/
22752+#include <linux/fs.h>
22753+#include <linux/module.h>
22754+#include <linux/init.h>
22755+#include <linux/pci.h>
22756+#include <linux/interrupt.h>
22757+#include <asm/uaccess.h>
22758+#include <linux/version.h>
22759+#include <iso646.h>
22760+
22761+
22762+/* Mode PLX API uses to access device*/
22763+typedef enum _PLX_CHIP_FAMILY
22764+{
22765+ PLX_FAMILY_NONE = 0,
22766+ PLX_FAMILY_UNKNOWN,
22767+ PLX_FAMILY_BRIDGE_P2L, // 9000 series & 8311
22768+ PLX_FAMILY_BRIDGE_PCI_P2P, // 6000 series
22769+ PLX_FAMILY_BRIDGE_PCIE_P2P, // 8111,8112,8114
22770+ PLX_FAMILY_ALTAIR, // 8525,8533,8547,8548
22771+ PLX_FAMILY_ALTAIR_XL, // 8505,8509
22772+ PLX_FAMILY_VEGA, // 8516,8524,8532
22773+ PLX_FAMILY_VEGA_LITE, // 8508,8512,8517,8518
22774+ PLX_FAMILY_DENEB, // 8612,8616,8624,8632,8647,8648
22775+ PLX_FAMILY_SIRIUS, // 8604,8606,8608,8609,8613,8614,8615,8617,8618,8619
22776+ PLX_FAMILY_CYGNUS, // 8625,8636,8649,8664,8680,8696
22777+ PLX_FAMILY_SCOUT, // 8700
22778+ PLX_FAMILY_DRACO_1, // 8408,8416,8712,8716,8724,8732,8747,8748
22779+ PLX_FAMILY_DRACO_2, // 8713,8717,8725,8733,8749
22780+ PLX_FAMILY_MIRA,
22781+ PLX_FAMILY_CAPELLA
22782+} PLX_CHIP_FAMILY;
22783+
22784+
22785+// simple version number
22786+#define _template_SOFTWARE_VERSION_NUMBER 1.0
22787+
22788+#if LINUX_VERSION_CODE < KERNEL_VERSION(2,5,0) /* not < 2.5 */
22789+# error "This kernel is too old: not supported by this file"
22790+#endif
22791+
22792+static int i_foo;
22793+
22794+MODULE_LICENSE("GPL");
22795+MODULE_AUTHOR("LSI Corp");
22796+MODULE_DESCRIPTION("PLX PCIE device driver");
22797+module_param(i_foo, int, 0444); // Module parameter, unused
22798+MODULE_PARM_DESC(i_foo, "foo frequency"); // unused
22799+
22800+// vendor and device id of the PCI device
22801+#define VENDOR_ID 0x10B5 // vendor id: buggy Kolter card: official 0x1001 but real 0x0001
22802+#define DEVICE_ID 0x8608 // device id of the Proto-3 card
22803+
22804+// for first and second i/o region (pci memory):
22805+static unsigned long ioport=0L, iolen=0L, memstart=0L, memlen=0L;
22806+static int i_template_major = 231;
22807+static int Uboot_PLX = 1;
22808+
22809+
22810+#define RtlZeroMemory(pDest, count) memset((pDest), 0, (count))
22811+#define RtlCopyMemory(pDest, pSrc, count) memcpy((pDest), (pSrc), (count))
22812+
22813+
22814+#define PLX_BUS_READ32_ENDIAN(endian, addr) \
22815+ in_##endian##32((volatile u32 __iomem *) (addr))
22816+
22817+#define PLX_BUS_READ32_LE(addr) PLX_BUS_READ32_ENDIAN(le, addr)
22818+
22819+#define PLX_BUS_READ32_BE(addr) PLX_BUS_READ32_ENDIAN(be, addr)
22820+
22821+
22822+#define PLX_BUS_WRITE32_ENDIAN(endian, addr, data) \
22823+ do { \
22824+ u32 * __a__ = (u32 *) addr; \
22825+ u32 __d__ = data; \
22826+ out_##endian##32((volatile u32 __iomem *) __a__, __d__); \
22827+ } while (0);
22828+
22829+
22830+#define PLX_BUS_WRITE32_LE(addr, data) PLX_BUS_WRITE32_ENDIAN(le, addr, data)
22831+
22832+#define PLX_BUS_WRITE32_BE(addr, data) PLX_BUS_WRITE32_ENDIAN(be, addr, data)
22833+#if 1
22834+// Macros for PLX chip register access
22835+#define PLX_8000_REG_READ(addr) PLX_BUS_READ32_LE(addr)
22836+
22837+
22838+#define PLX_8000_REG_WRITE(addr, data) PLX_BUS_WRITE32_LE(addr, data)
22839+#endif
22840+
22841+
22842+// not really necessary; for future use
22843+MODULE_DEVICE_TABLE(pci, pci_drv_ids);
22844+
22845+static struct
22846+pci_device_id pci_drv_ids[] __devinitdata =
22847+{
22848+ // { VENDOR_ID, DEVICE_ID, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0 },
22849+ { PCI_DEVICE(VENDOR_ID, DEVICE_ID), },
22850+ { 0, }
22851+};
22852+
22853+// PCI BAR Properties
22854+typedef struct _PLX_PCI_BAR_PROP
22855+{
22856+ u32 BarValue; // Actual value in BAR
22857+ u64 Physical; // BAR Physical Address
22858+ u64 Size; // Size of BAR space
22859+ int bIoSpace; // Memory or I/O space?
22860+ int bPrefetchable; // Is space pre-fetchable?
22861+ int b64bit; // Is PCI BAR 64-bit?
22862+} PLX_PCI_BAR_PROP;
22863+
22864+// PCI BAR Space information
22865+typedef struct _PLX_PCI_BAR_INFO
22866+{
22867+ u32 pVa; // BAR Kernel Virtual Address
22868+ PLX_PCI_BAR_PROP Properties; // BAR Properties
22869+ int bResourceClaimed; // Was driver able to claim region?
22870+} PLX_PCI_BAR_INFO;
22871+
22872+// PCI Device Key Identifier
22873+typedef struct _PLX_DEVICE_KEY
22874+{
22875+ u32 IsValidTag; // Magic number to determine validity
22876+ u8 bus; // Physical device location
22877+ u8 slot;
22878+ u8 function;
22879+ u16 VendorId; // Device Identifier
22880+ u16 DeviceId;
22881+ u16 SubVendorId;
22882+ u16 SubDeviceId;
22883+ u8 Revision;
22884+ u16 PlxChip; // PLX chip type
22885+ u8 PlxRevision; // PLX chip revision
22886+ u8 PlxFamily; // PLX chip family
22887+ u8 ApiIndex; // Used internally by the API
22888+ u8 DeviceNumber; // Used internally by device drivers
22889+ u8 ApiMode; // Mode API uses to access device
22890+ u8 PlxPort; // PLX port number of device
22891+ u8 NTPortType; // If NT port, stores NT port type
22892+ u8 NTPortNum; // If NT port exists, store NT port number
22893+ u32 ApiInternal[2]; // Reserved for internal PLX API use
22894+ u8 *pRegVa; // Virtual address to registers
22895+ u32 Offset_RegBase; // The NT register base offset
22896+ u32 UpstreamBarSize; // For virtual-side, size of upsteam BAR 0 space
22897+ PLX_PCI_BAR_INFO PciBar[6];
22898+} PLX_DEVICE_KEY;
22899+
22900+// Non-transparent Port types
22901+typedef enum _PLX_NT_PORT_TYPE
22902+{
22903+ PLX_NT_PORT_NONE = 0, // Not an NT port
22904+ PLX_NT_PORT_PRIMARY = 1, // NT Primary Host side port
22905+ PLX_NT_PORT_SECONDARY = 2, // NT Seconday Host side port
22906+ PLX_NT_PORT_VIRTUAL = PLX_NT_PORT_PRIMARY, // NT Virtual-side port
22907+ PLX_NT_PORT_LINK = PLX_NT_PORT_SECONDARY, // NT Link-side port
22908+ PLX_NT_PORT_UNKOWN = 0xFF // NT side is undetermined
22909+} PLX_NT_PORT_TYPE;
22910+
22911+
22912+
22913+// declarations for fops, pci_driver
22914+static int _template_open (struct inode *, struct file *);
22915+static int _template_close (struct inode *, struct file *);
22916+static ssize_t _template_read (struct file *, char *, size_t, loff_t *);
22917+static ssize_t _template_write (struct file *, __user const char *, size_t, loff_t *);
22918+static int device_init(struct pci_dev *, const struct pci_device_id *);
22919+static void device_deinit( struct pci_dev *);
22920+static void device_deinit( struct pci_dev *);
22921+static int __init pci_drv_init(void);
22922+static void __exit pci_drv_exit(void);
22923+
22924+module_init(pci_drv_init);
22925+module_exit(pci_drv_exit);
22926+
22927+static struct
22928+pci_driver pci_drv_template =
22929+{
22930+ .name= "pci_drv_template",
22931+ .id_table= pci_drv_ids,
22932+ .probe= device_init,
22933+ .remove= device_deinit,
22934+};
22935+
22936+static struct file_operations _template_fops =
22937+{
22938+ .owner = THIS_MODULE,
22939+ .read = _template_read,
22940+ .write = _template_write,
22941+ .open = _template_open,
22942+ .release = _template_close,
22943+};
22944+
22945+// example for reading a PCI config byte
22946+static unsigned char
22947+get_revision(struct pci_dev *dev)
22948+{
22949+ u8 revision;
22950+
22951+ pci_read_config_byte(dev, PCI_REVISION_ID, &revision);
22952+ return (revision);
22953+}
22954+
22955+
22956+#if 1
22957+
22958+/*******************************************************************************
22959+ *
22960+ * Function : PlxRegisterRead
22961+ *
22962+ * Description: Reads a PLX-specific control register
22963+ *
22964+ ******************************************************************************/
22965+static u32
22966+PlxRegisterRead(
22967+ struct pci_dev *dev,
22968+ PLX_DEVICE_KEY *key,
22969+ u32 offset
22970+ )
22971+{
22972+ u32 value;
22973+ u32 MaxOffset;
22974+
22975+
22976+ offset += key->Offset_RegBase;
22977+
22978+ // Set max possible offset
22979+ MaxOffset = 4 * 1024;
22980+
22981+
22982+ MaxOffset += 0x11000;
22983+
22984+
22985+ // Verify register offset
22986+ if ((offset & 0x3) || (offset >= MaxOffset))
22987+ {
22988+ printk("ERROR - Invalid register offset (%X)\n", offset);
22989+
22990+ return 0;
22991+ }
22992+
22993+ // Read value
22994+ value = in_le32(offset + key->PciBar[0].pVa);
22995+
22996+ return value;
22997+}
22998+
22999+
23000+
23001+
23002+/*******************************************************************************
23003+ *
23004+ * Function : PlxRegisterWrite
23005+ *
23006+ * Description: Writes to a PLX-specific control register
23007+ *
23008+ ******************************************************************************/
23009+static int
23010+PlxRegisterWrite(
23011+ struct pci_dev *dev,
23012+ PLX_DEVICE_KEY *key,
23013+ u32 offset,
23014+ u32 value
23015+ )
23016+{
23017+ u32 MaxOffset;
23018+
23019+
23020+ // Adjust the offset for correct port
23021+ offset += key->Offset_RegBase;
23022+
23023+ // Set max possible offset
23024+ MaxOffset = 4 * 1024;
23025+
23026+ MaxOffset += 0x11000;
23027+
23028+ // Verify register offset
23029+ if ((offset & 0x3) || (offset >= MaxOffset))
23030+ {
23031+ printk("ERROR - Invalid register offset (%X)\n", offset);
23032+ return 1;
23033+ }
23034+
23035+ printk("PlxRegisterWrite: key->PciBar[0].pVa = 0x%04x \n", key->PciBar[0].pVa );
23036+
23037+ // Write the value
23038+ out_le32(offset+ (u32)key->PciBar[0].pVa, value );
23039+
23040+ return 0;
23041+}
23042+
23043+
23044+/******************************************************************************
23045+ *
23046+ * Function : PlxNtReqIdProbe
23047+ *
23048+ * Description: Implements a procedure to determine the Requester ID for NT accesses
23049+ *
23050+ *****************************************************************************/
23051+static int PlxNtReqIdProbe(
23052+ struct pci_dev *dev,
23053+ PLX_DEVICE_KEY *key,
23054+ u16 bReadTlp,
23055+ u16 *pReqId
23056+ )
23057+{
23058+ u16 Offset_CapPcie;
23059+ u16 Offset_CapAer;
23060+ u32 RegValue;
23061+ u32 RegAerMask;
23062+ u32 RegPciCommand;
23063+ u32 RegPcieCapCsr;
23064+ u32 RegAerSeverity;
23065+ u32 WriteValue;
23066+
23067+
23068+ /*********************************************************
23069+ * This function attempts to detect the PCIe Requester ID
23070+ * of the Host CPU. The ReqID must be added to the NT
23071+ * ReqID LUT so that it accepts TLPs from that requester.
23072+ *
23073+ * On most systems, the ReqID for both reads & writes is
23074+ * the same. On many newer chipsets, the ReqID will be
23075+ * different between read & write TLPs. In general, the
23076+ * ReqID will be the Root Complex (0,0,0) and/or the
23077+ * upper-most parent root of the PLX switch, which will
23078+ * be a PCIe Root Port type device.
23079+ *
23080+ * The basic algorithm is listed below. The premise is to
23081+ * disable access to the PLX chip and issue a TLP, which
23082+ * should trigger an uncorrectable error and log the TLP.
23083+ *
23084+ * - Clear any PCIe & AER errors
23085+ * - Setup PLX device to generate AER errors (but mask PCIe msg)
23086+ * - Disable accesses to the PLX device
23087+ * - Issue a dummy memory read or write to a PLX register
23088+ * - Restore settings
23089+ * - Capture ReqID from the AER TLP header log
23090+ ********************************************************/
23091+
23092+ // Default to Req ID of 0
23093+ *pReqId = 0;
23094+
23095+ // Set default base offsets for PCIe & AER capabilities
23096+ Offset_CapPcie = 0x68;
23097+ Offset_CapAer = 0xFB4;
23098+ WriteValue = 0x12345678;
23099+
23100+ // Get PCIe Device Status/Control & disable error reporting to host ([3:0])
23101+ pci_read_config_dword( dev, (u16)(Offset_CapPcie + 0x8), &RegPcieCapCsr );
23102+ /*printk("PlxNtReqIdProbe: RegPcieCapCsr = 0x%x, value = 0x%x \n", (u16)(Offset_CapPcie + 0x8), RegPcieCapCsr ); */
23103+ RegPcieCapCsr |= (0xF << 16); // Clear any error status bits [19:16]
23104+ pci_write_config_dword( dev, (u16)(Offset_CapPcie + 0x8), RegPcieCapCsr & ~(0xF << 0) );
23105+
23106+ // Clear any AER UR errors [20]
23107+ pci_write_config_dword( dev, (u16)(Offset_CapAer + 0x4), (1 << 20) );
23108+
23109+ // Make sure AER UR error is not masked [20]
23110+ pci_read_config_dword( dev, (u16)(Offset_CapAer + 0x8), &RegAerMask );
23111+/*printk("PlxNtReqIdProbe: RegAerMask = 0x%x, value = 0x%x \n", (u16)(Offset_CapAer + 0x8), RegAerMask ); */
23112+ if (RegAerMask & (1 << 20))
23113+ pci_write_config_dword( dev, (u16)(Offset_CapAer + 0x8), RegAerMask & ~(1 << 20) );
23114+
23115+ // Set severity for UR errors ([20]). Must be Fatal for read TLPs or no AER logging
23116+ pci_read_config_dword( dev, (u16)(Offset_CapAer + 0xC), &RegAerSeverity );
23117+/*printk("PlxNtReqIdProbe: RegAerSeverity = 0x%x, value = 0x%x \n", (u16)(Offset_CapAer + 0xC), RegAerSeverity ); */
23118+ if (bReadTlp == 1)
23119+ pci_write_config_dword( dev, (u16)(Offset_CapAer + 0xC), RegAerSeverity | (1 << 20) );
23120+ else
23121+ pci_write_config_dword( dev, (u16)(Offset_CapAer + 0xC), RegAerSeverity & ~(1 << 20) );
23122+
23123+ // Disable PCI accesses [2:0] & SERR enable [8] in PCI command/status
23124+ pci_read_config_dword( dev, 0x04, &RegPciCommand );
23125+/*printk("PlxNtReqIdProbe: RegPciCommand = 0x04, value = 0x%x \n", RegPciCommand ); */
23126+ RegPciCommand |= (0x1F << 27); // Clear any PCI error status ([31:27])
23127+ pci_write_config_dword( dev, 0x04, (RegPciCommand & ~0x107) );
23128+
23129+ /*********************************************************
23130+ * Issue a TLP read or write to a PLX register
23131+ ********************************************************/
23132+ if (bReadTlp==1)
23133+ PlxRegisterRead( dev, key,0);
23134+ else
23135+ PlxRegisterWrite( dev, key,0, WriteValue);
23136+
23137+ // Restore PCI command/status
23138+ pci_write_config_dword( dev, 0x04, RegPciCommand );
23139+
23140+ // Verify an AER UR error was flagged
23141+ pci_read_config_dword( dev, (u16)(Offset_CapAer + 0x4), &RegValue );
23142+/*printk("PlxNtReqIdProbe: RegValue = 0x%x, value = 0x%x \n", (u16)(Offset_CapAer + 0x4), RegValue); */
23143+ if ((RegValue & (1 << 20)) == 0)
23144+ {
23145+ printk("ERROR - ReqID probe failed, unable to capture error TLP\n");
23146+ return 1;
23147+ }
23148+
23149+ // Check if AER header is valid from First Error Pointer ([4:0])
23150+ pci_read_config_dword( dev, (u16)(Offset_CapAer + 0x18), &RegValue );
23151+/*printk("PlxNtReqIdProbe: RegValue = 0x%x, value = 0x%x \n", (u16)(Offset_CapAer + 0x18), RegValue); */
23152+ if ((RegValue & 0x1F) != 20)
23153+ {
23154+ printk(
23155+ "WARNING - Error Pointer reports bit %d not UR (20). Log may be invalid\n",
23156+ (RegValue & 0x1F));
23157+ }
23158+
23159+ // Get the AER logged TLP DWord 1, which contains Req ID
23160+ pci_read_config_dword( dev, (u16)(Offset_CapAer + 0x20), &RegValue );
23161+/*printk("PlxNtReqIdProbe: RegValue = 0x%x, value = 0x%x \n", (u16)(Offset_CapAer + 0x20), RegValue); */
23162+
23163+ // Clear UR status
23164+ pci_write_config_dword( dev, (u16)(Offset_CapAer + 0x4), (1 << 20) );
23165+
23166+ // Get Requester ID (DW1[31:16])
23167+ *pReqId = (u16)(RegValue >> 16);
23168+
23169+ printk(
23170+ "Probed %s ReqID = %04X [b:%02X s:%02X f:%X]\n",
23171+ (bReadTlp) ? "Read" : "Write", *pReqId,
23172+ (*pReqId >> 8), (*pReqId >> 3) & 0x1F, (*pReqId & 0x7)
23173+ );
23174+
23175+ return 0;
23176+}
23177+#endif
23178+
23179+static
23180+irqreturn_t pci_isr( int irq, void *dev_id, struct pt_regs *regs )
23181+{
23182+ // nothing todo for the irq yet
23183+ return (IRQ_HANDLED);
23184+}
23185+
23186+
23187+// Initialising of the module with output about the irq, I/O region and memory region.
23188+static
23189+int device_init(struct pci_dev *dev, const struct pci_device_id *id)
23190+{
23191+ int i_result;/*, i;*/
23192+ u32 bar_w0;
23193+ unsigned *ncp_rsvd_ram = 0;
23194+ u8 revision;
23195+ PLX_DEVICE_KEY *plx_key;
23196+ u16 ReqId_Read;
23197+ u16 ReqId_Write;
23198+
23199+ if(Uboot_PLX == 0)
23200+ return -ENODEV;
23201+
23202+ // Allocate memory for the device object
23203+ plx_key =
23204+ kmalloc(
23205+ sizeof(PLX_DEVICE_KEY),
23206+ GFP_KERNEL
23207+ );
23208+
23209+ if (plx_key == NULL)
23210+ {
23211+ printk("ERROR - memory allocation for device object failed\n");
23212+ return (-ENOMEM);
23213+ }
23214+
23215+ // Initialize device object
23216+ RtlZeroMemory(
23217+ plx_key,
23218+ sizeof(PLX_DEVICE_KEY)
23219+ );
23220+
23221+ // Scan the system for supported devices
23222+ // Enable the device
23223+ if (pci_enable_device( dev ) == 0)
23224+ {
23225+ printk(("Enabled PCI device\n"));
23226+ }
23227+ else
23228+ {
23229+ printk("WARNING - PCI device enable failed\n");
23230+ }
23231+
23232+ // Enable bus mastering
23233+ pci_set_master( dev );
23234+
23235+
23236+ plx_key->bus = dev->bus->number;
23237+ plx_key->slot = PCI_SLOT(dev->devfn);
23238+ plx_key->function = PCI_FUNC(dev->devfn);
23239+ plx_key->DeviceId = dev->device;
23240+ plx_key->VendorId = dev->vendor;
23241+ plx_key->SubVendorId = dev->subsystem_vendor;
23242+ plx_key->SubDeviceId = dev->subsystem_device;
23243+ plx_key->PlxFamily = PLX_FAMILY_SIRIUS;
23244+ plx_key->PlxChip = plx_key->DeviceId;
23245+ plx_key->pRegVa = NULL;
23246+
23247+ plx_key->Offset_RegBase = 0x10000;
23248+ // Adjust offset for NT Link port
23249+ plx_key->NTPortType = PLX_NT_PORT_LINK;
23250+ plx_key->Offset_RegBase += 0x1000;
23251+
23252+
23253+ // Update Revision ID
23254+ pci_read_config_byte(dev, PCI_REVISION_ID, &revision);
23255+
23256+ plx_key->Revision = (u8)(revision & 0xFF);
23257+
23258+ printk(
23259+ "Device %04X_%04X = %04X rev %02X\n",
23260+ plx_key->DeviceId, plx_key->VendorId,
23261+ plx_key->PlxChip, plx_key->PlxRevision
23262+ );
23263+ pci_read_config_dword(dev, 0x10, &bar_w0);
23264+
23265+ bar_w0 &= ~(0xf);
23266+
23267+/* printk("pci_template: BAR 0 = 0x%08x\n", bar_w0);*/
23268+
23269+ if (0 == (ncp_rsvd_ram = ioremap(bar_w0, 0x20000)))
23270+ {
23271+ printk("ioremap the bar0 failed!\n");
23272+ }
23273+ else
23274+ {
23275+ printk("ioremap the bar0 address 0x%08x to kernel VA =0x%p \n", bar_w0, ncp_rsvd_ram);
23276+ }
23277+
23278+ plx_key->PciBar[0].pVa = (u32)ncp_rsvd_ram;
23279+
23280+#if 1
23281+ /*************************************************************
23282+ * Determine Requester ID & add LUT entry
23283+ ************************************************************/
23284+ printk("Probe for write ReqID : ");
23285+
23286+ if (PlxNtReqIdProbe(
23287+ dev,
23288+ plx_key,
23289+ 0, // Probe for writes
23290+ &ReqId_Write
23291+ ) == 0)
23292+ {
23293+ printk("ERROR: Unable to probe ReqID\n");
23294+ }
23295+ else
23296+ {
23297+ printk(
23298+ "Ok (ReqID=%04X [b:%02X s:%02X f:%01X])\n",
23299+ ReqId_Write,
23300+ (ReqId_Write >> 8) & 0xFF,
23301+ (ReqId_Write >> 3) & 0x1F,
23302+ (ReqId_Write >> 0) & 0x03
23303+ );
23304+ }
23305+
23306+ printk("Probe for read ReqID : ");
23307+
23308+ if (PlxNtReqIdProbe(
23309+ dev,
23310+ plx_key,
23311+ 1, // Probe for reads
23312+ &ReqId_Read
23313+ ) == 0)
23314+ {
23315+ printk("ERROR: Unable to probe ReqID\n");
23316+ }
23317+ else
23318+ {
23319+ printk(
23320+ "Ok (ReqID=%04X [b:%02X s:%02X f:%01X])\n",
23321+ ReqId_Read,
23322+ (ReqId_Read >> 8) & 0xFF,
23323+ (ReqId_Read >> 3) & 0x1F,
23324+ (ReqId_Read >> 0) & 0x03
23325+ );
23326+
23327+
23328+ if (ReqId_Read == ReqId_Write)
23329+ {
23330+ printk("-- Read Req ID matches write, skip LUT add --\n");
23331+ }
23332+
23333+ }
23334+#endif
23335+
23336+#if 0
23337+ if (0 == (ncp_rsvd_ram = ioremap(0x2000000, 0x800000)))
23338+ {
23339+ printk("ioremap the DMA buffer failed!\n");
23340+ }
23341+ else
23342+ {
23343+ printk("ioremap the DMA buffer address 0xf800000 to kernel VA =0x%p \n",ncp_rsvd_ram);
23344+ }
23345+
23346+ for ( i = 0; i < 8; i++)
23347+ {
23348+ u8 achar = 0xaa;
23349+ memcpy( (u8 *)ncp_rsvd_ram, &achar, 1);
23350+ ncp_rsvd_ram++;
23351+ }
23352+#endif
23353+
23354+ i_result = get_revision (dev); // example usage to avoid the "defined but not used" message
23355+ // change the device name default (<pci bus number>.<pci slot number>. ...) to the module name
23356+ printk(KERN_ERR "pci_template: Old dev->dev.kobj.name: \"%s\"\n", dev->dev.kobj.name);
23357+ /*strncpy(dev->dev.kobj.name,"pci_drv_template",KOBJ_NAME_LEN);*/
23358+
23359+#if 0
23360+ // check irq number (don't request irq 0) before requesting
23361+ if ( (dev->irq) and (request_irq(dev->irq,pci_isr,SA_INTERRUPT|SA_SHIRQ,"pci_drv_template",dev)) )
23362+ {
23363+ printk(KERN_ERR "pci_template: IRQ %d not free.\n", dev->irq );
23364+ return -EIO;
23365+ }
23366+ if (dev->irq)
23367+ printk(KERN_ERR "pci_template: IRQ %d.\n", dev->irq);
23368+ else
23369+ printk(KERN_ERR "pci_template: No irq required/requested.\n");
23370+#endif
23371+ // get the first i/o region
23372+ ioport = pci_resource_start( dev, 0 );
23373+ iolen = pci_resource_len( dev, 0 );
23374+ // chech iolen before requesting the I/O region
23375+ if (iolen and ( NULL == request_region( ioport, iolen, dev->dev.kobj.name ) ) )
23376+ {
23377+ printk(KERN_ERR "I/O address conflict for device \"%s\", ioport=%lu=0x%x, iolen=%lu=0x%x\n",
23378+ dev->dev.kobj.name, ioport, (unsigned int)ioport, iolen, (unsigned int)iolen);
23379+ goto cleanup_irq;
23380+ }
23381+ if (iolen)
23382+ printk(KERN_CRIT "pci_template: request_region( ioport=%lu=0x%x, iolen=%lu=0x%x, dev->dev.kobj.name=%s) successfull.\n",
23383+ ioport, (unsigned int)ioport, iolen, (unsigned int)iolen, dev->dev.kobj.name);
23384+ else
23385+ printk(KERN_CRIT "pci_template: request_region( ioport=%lu=0x%x, iolen=%lu=0x%x, dev->dev.kobj.name=%s) not necessary.\n",
23386+ ioport, (unsigned int)ioport, iolen, (unsigned int)iolen, dev->dev.kobj.name);
23387+ memstart = pci_resource_start( dev, 1 );
23388+ memlen = pci_resource_len( dev, 1 );
23389+ printk(KERN_CRIT "pci_template: memstart=%lu=0x%x, memlen=%lu=0x%x\n", memstart, (unsigned int)memstart, memlen, (unsigned int)memlen);
23390+ // check memlen before requesting the memory region
23391+ if (memlen and ( NULL == request_mem_region( memstart, memlen, dev->dev.kobj.name ) ))
23392+ {
23393+ printk(KERN_ERR "Memory address conflict for device \"%s\", request_mem_region( memstart=%lu=0x%x, memlen=%lu=0x%x, dev->dev.kobj.name=%s) failed.\n",
23394+ dev->dev.kobj.name, memstart, (unsigned int)memstart, memlen, (unsigned int)memlen, dev->dev.kobj.name);
23395+ goto cleanup_ports;
23396+ }
23397+ if (memlen)
23398+ printk(KERN_ERR "pci_template: request_mem_region( memstart=%lu=0x%x, memlen=%lu=0x%x, dev->dev.kobj.name=%s) successfull.\n",
23399+ memstart, (unsigned int)memstart, memlen, (unsigned int)memlen, dev->dev.kobj.name);
23400+ else
23401+ printk(KERN_ERR "pci_template: request_mem_region( memstart=%lu=0x%x, memlen=%lu=0x%x, dev->dev.kobj.name=%s) not necessary.\n",
23402+ memstart, (unsigned int)memstart, memlen, (unsigned int)memlen, dev->dev.kobj.name);
23403+
23404+ kfree(plx_key) ;
23405+ return (0);
23406+ cleanup_ports:
23407+ if (iolen)
23408+ release_region( ioport, iolen );
23409+ cleanup_irq:
23410+ if (dev->irq)
23411+ free_irq( dev->irq, dev );
23412+ kfree(plx_key) ;
23413+ return (-EIO);
23414+}
23415+
23416+
23417+static void
23418+device_deinit( struct pci_dev *pdev )
23419+{
23420+ // device driver part
23421+ unregister_chrdev (i_template_major, "pci_chrdev_template");
23422+ if (pdev->irq)
23423+ free_irq( pdev->irq, pdev );
23424+ if( iolen )
23425+ release_region( ioport, iolen );
23426+ if( memlen )
23427+ release_mem_region( memstart, memlen );
23428+ return;
23429+}
23430+
23431+
23432+// device driver init
23433+static
23434+int __init pci_drv_init(void)
23435+{
23436+ int i_result=0;
23437+ struct device_node *np = NULL;
23438+ int *plx;
23439+
23440+ np = of_find_node_by_type(np, "pci");
23441+
23442+ while (np && !of_device_is_compatible(np, "lsi,plb-pciex"))
23443+ np = of_find_node_by_type(np, "pci");
23444+
23445+ if (!np)
23446+ return -ENODEV;
23447+
23448+ plx = of_get_property(np, "plx", NULL);
23449+
23450+ if (!plx || (plx && (0 == *plx)))
23451+ return -ENODEV;
23452+
23453+ printk (KERN_CRIT "pci_chrdev_template: initialising\n");
23454+ if ((i_result = register_chrdev (i_template_major, "pci_chrdev_template", &_template_fops)) < 0)
23455+ {
23456+ // dynamic major number allocation
23457+ i_result = register_chrdev (0, "pci_chrdev_template", &_template_fops);
23458+ i_template_major = i_result;
23459+ if (i_result < 0)
23460+ {
23461+ printk (KERN_CRIT "pci_chrdev_template: Cannot register device.\n");
23462+ return (i_result);
23463+ }
23464+ }
23465+
23466+ if( 0 == pci_register_driver(&pci_drv_template) )
23467+ return 0;
23468+ unregister_chrdev( i_template_major,"pci_chrdev_template");
23469+ return (-EIO);
23470+}
23471+
23472+
23473+static
23474+void __exit pci_drv_exit(void)
23475+{
23476+ pci_unregister_driver( &pci_drv_template );
23477+ unregister_chrdev(i_template_major,"pci_chrdev_template");
23478+ return;
23479+}
23480+
23481+
23482+static int
23483+_template_open (struct inode *inode, struct file *filp)
23484+{
23485+#if (LINUX_VERSION_CODE < KERNEL_VERSION(2,5,0))
23486+ MOD_INC_USE_COUNT;
23487+#endif
23488+ return (0);
23489+}
23490+
23491+
23492+static int
23493+_template_close (struct inode *inode, struct file *filp)
23494+{
23495+#if (LINUX_VERSION_CODE < KERNEL_VERSION(2,5,0))
23496+ MOD_DEC_USE_COUNT;
23497+#endif
23498+ return (0);
23499+}
23500+
23501+
23502+static ssize_t
23503+_template_read (struct file * filp, char *buff, size_t count, loff_t * ppos)
23504+{
23505+ u16 u16_template_dummy = inw(ioport); // read a word from the card
23506+ // write to user space
23507+ unsigned long ul = copy_to_user (buff, &u16_template_dummy, sizeof(u16_template_dummy));
23508+
23509+ return ( ((unsigned long)sizeof(u16_template_dummy)) - ul);
23510+}
23511+
23512+
23513+static ssize_t
23514+_template_write (struct file * filp, __user const char *buff, size_t count, loff_t * ppos)
23515+{
23516+ u16 u16_template_dummy = 0;
23517+ // read from user space
23518+ unsigned long ul = copy_from_user (&u16_template_dummy, buff, sizeof(u16_template_dummy));
23519+
23520+ outw(u16_template_dummy, ioport); // write the word to the port
23521+ return ( ((unsigned long)sizeof(u16_template_dummy)) - ul);
23522+}
23523diff --git a/drivers/lsi/acp/serial.c b/drivers/lsi/acp/serial.c
23524new file mode 100644
23525index 0000000..a3da27e
23526--- /dev/null
23527+++ b/drivers/lsi/acp/serial.c
23528@@ -0,0 +1,1342 @@
23529+/*
23530+ * drivers/lsi/acp/serial.c
23531+ *
23532+ * Driver for AMBA serial ports on LSI's PPC based ACP.
23533+ *
23534+ * Based on drivers/char/serial.c, by Linus Torvalds, Theodore Ts'o.
23535+ *
23536+ * Copyright 1999 ARM Limited
23537+ * Copyright (C) 2000 Deep Blue Solutions Ltd.
23538+ * Copyright 2009 LSI
23539+ *
23540+ * This program is free software; you can redistribute it and/or modify
23541+ * it under the terms of the GNU General Public License as published by
23542+ * the Free Software Foundation; either version 2 of the License, or
23543+ * (at your option) any later version.
23544+ *
23545+ * This program is distributed in the hope that it will be useful,
23546+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
23547+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
23548+ * GNU General Public License for more details.
23549+ *
23550+ * You should have received a copy of the GNU General Public License
23551+ * along with this program; if not, write to the Free Software
23552+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
23553+ *
23554+ * This is a generic driver for ARM AMBA-type serial ports. They
23555+ * have a lot of 16550-like features, but are not register compatible.
23556+ * Note that although they do have CTS, DCD and DSR inputs, they do
23557+ * not have an RI input, nor do they have DTR or RTS outputs. If
23558+ * required, these have to be supplied via some other means (eg, GPIO)
23559+ * and hooked into this driver.
23560+ */
23561+
23562+#if defined(CONFIG_SERIAL_ACP_CONSOLE) && defined(CONFIG_MAGIC_SYSRQ)
23563+#define SUPPORT_SYSRQ
23564+#endif
23565+
23566+#include <linux/module.h>
23567+#include <linux/ioport.h>
23568+#include <linux/init.h>
23569+#include <linux/console.h>
23570+#include <linux/sysrq.h>
23571+#include <linux/device.h>
23572+#include <linux/tty.h>
23573+#include <linux/tty_flip.h>
23574+#include <linux/serial_core.h>
23575+#include <linux/serial.h>
23576+#include <linux/slab.h>
23577+#include <linux/amba/bus.h>
23578+#include <linux/amba/serial.h>
23579+#include <linux/irq.h>
23580+#include <linux/of.h>
23581+#include <asm/io.h>
23582+
23583+#include "../common/version.h"
23584+
23585+extern int acp_clock_get(int, unsigned long *);
23586+
23587+#define SZ_4K (4*1024)
23588+#define UART_NR 2
23589+#define SERIAL_AMBA_MAJOR 204
23590+#define SERIAL_AMBA_MINOR 64
23591+#define SERIAL_AMBA_NR UART_NR
23592+#define AMBA_ISR_PASS_LIMIT 256
23593+#define UART_DR_ERROR \
23594+(UART011_DR_OE|UART011_DR_BE|UART011_DR_PE|UART011_DR_FE)
23595+#define UART_DUMMY_DR_RX (1 << 16)
23596+
23597+#undef DEBUG_EXPORT_SYMBOLS
23598+#define DEBUG_EXPORT_SYMBOLS
23599+#ifdef DEBUG_EXPORT_SYMBOLS
23600+#define STATIC
23601+#else
23602+#define STATIC static
23603+#endif
23604+
23605+#define MAX_BAUD_RATE 115200
23606+
23607+/*
23608+ ======================================================================
23609+ ======================================================================
23610+ A modified uart_port structure.
23611+ ======================================================================
23612+ ======================================================================
23613+*/
23614+
23615+struct uart_acp_port {
23616+ struct uart_port port;
23617+ irq_hw_number_t hwirq;
23618+ unsigned int interrupt_mask;
23619+ unsigned int old_status;
23620+ void *timer_base;
23621+ unsigned long divisor;
23622+ unsigned char ibrd;
23623+ unsigned char fbrd;
23624+};
23625+
23626+/*
23627+ ======================================================================
23628+ ======================================================================
23629+ Both UARTs share the same clock input, the output of the 2nd timer,
23630+ or timer 1, from the APB Dual Input Timers (there are two of these,
23631+ thus 4 timers).
23632+ ======================================================================
23633+ ======================================================================
23634+*/
23635+
23636+#define TIMER_LOAD 0x00
23637+#define TIMER_VALUE 0x04
23638+#define TIMER_CONTROL 0x08
23639+#define TIMER_CONTROL_ENABLE 0x80
23640+#define TIMER_CONTROL_MODE 0x40
23641+#define TIMER_CONTROL_INTERRUPT_ENABLE 0x20
23642+#define TIMER_CONTROL_OUTPUT_MODE 0x10
23643+#define TIMER_CONTROL_PRESCALER 0x0c
23644+#define TIMER_CONTROL_SIZE 0x02
23645+#define TIMER_CONTROL_ONE_SHOT 0x01
23646+#define TIMER_INTCLR 0x0C
23647+#define TIMER_RIS 0x10
23648+#define TIMER_MIS 0x14
23649+#define TIMER_BGLOAD 0x18
23650+
23651+/*
23652+ ----------------------------------------------------------------------
23653+ get_clock_stuff
23654+*/
23655+
23656+STATIC int
23657+get_clock_stuff(struct uart_port *port, int baud_rate)
23658+{
23659+ struct uart_acp_port *uap = (struct uart_acp_port *) port;
23660+ unsigned long per_clock;
23661+ unsigned long divisor;
23662+ unsigned long ibrd;
23663+ unsigned long fbrd;
23664+
23665+ /* Get the speed of the peripheral clock. */
23666+ acp_clock_get(1, &per_clock);
23667+ per_clock *= 1000;
23668+
23669+ /*
23670+ Since the IBDR (integer part of the baud rate
23671+ divisor) is a 16 bit quatity, find the minimum load
23672+ value that will let the IBDR/FBDR result in the
23673+ desired baud rate.
23674+ */
23675+
23676+ divisor = 1;
23677+
23678+ do {
23679+ ibrd = (per_clock / ++divisor) / (16 * baud_rate);
23680+ } while (0xff < ibrd);
23681+
23682+ /*
23683+ The following forumla is from the ARM document (ARM DDI 0183E).
23684+
23685+ Baud Rate Divisor = (Uart Clock / (16 * Baud Rate))
23686+
23687+ Baud Rate Divisor is then split into integral and fractional
23688+ parts. The IBRD value is simply the itegral part. The FBRD is
23689+ calculated as follows.
23690+
23691+ FBRD = fractional part of the Baud Rate Divisor * 64 + 0.5
23692+
23693+ The fractional part of the Baud Rate Divisor can be represented as
23694+ follows.
23695+
23696+ (Uart Clock % (16 * baud_rate)) / (16 * baud_rate)
23697+
23698+ As long as the division isn't done till the end. So, the above *
23699+ 64 + 0.5 is the FBRD. Also note that x/y + 1/2 = (2x+y)/2y. This
23700+ leads to
23701+
23702+ ((Uart Clock % (16 * baud_rate)) * 64 * 2 + (16 * baud_rate))
23703+ ---------------------------------------------------------------------
23704+ 2 * (16 * baud_rate)
23705+ */
23706+
23707+ port->uartclk = (per_clock / divisor);
23708+
23709+ fbrd = port->uartclk % (16 * baud_rate);
23710+ fbrd *= 128;
23711+ fbrd += (16 * baud_rate);
23712+ fbrd /= (2 * (16 * baud_rate));
23713+
23714+ uap->divisor = (divisor - 1);
23715+ uap->ibrd = (unsigned char) ibrd;
23716+ uap->fbrd = (unsigned char) fbrd;
23717+
23718+#if 0
23719+ printk("\n\n == == DEBUG == ==\n\n");
23720+ printk("\n\n\n\nuap->ibrd=%d ibrd=%d uap->fbrd=%d fbrd=%d "
23721+ "port->uartclk=%d per_clock=%d uap->divisor=%d divisor=%d "
23722+ "timer_load=%d cbr=%d\n\n\n\n",
23723+ uap->ibrd, ibrd, uap->fbrd, fbrd, port->uartclk, per_clock,
23724+ uap->divisor, divisor, in_le32(uap->timer_base + TIMER_LOAD),
23725+ (per_clock / divisor) * 4 / (64 * ibrd * fbrd));
23726+ printk("\n\n == == == == == ==\n\n");
23727+#endif
23728+
23729+ if (uap->divisor != in_le32(uap->timer_base + TIMER_LOAD)) {
23730+ while (0 ==
23731+ (in_le32((const volatile unsigned *)
23732+ (uap->port.membase + UART01x_FR)) &
23733+ UART011_FR_TXFE))
23734+ ;
23735+
23736+ while (0 !=
23737+ (in_le32((const volatile unsigned *)
23738+ (uap->port.membase + UART01x_FR)) &
23739+ UART01x_FR_BUSY))
23740+ ;
23741+
23742+ out_le32((uap->timer_base + TIMER_CONTROL), 0);
23743+ out_le32((uap->timer_base + TIMER_LOAD), uap->divisor);
23744+ out_le32((uap->timer_base + TIMER_CONTROL),
23745+ (TIMER_CONTROL_ENABLE |
23746+ TIMER_CONTROL_MODE));
23747+ }
23748+
23749+ return 0;
23750+}
23751+
23752+/*
23753+ ======================================================================
23754+ ======================================================================
23755+ Serial operations.
23756+ ======================================================================
23757+ ======================================================================
23758+*/
23759+
23760+/*
23761+ ------------------------------------------------------------------------------
23762+ acp_serial_wac
23763+
23764+ This was added to allow an easy debugging breakpoint.
23765+*/
23766+
23767+STATIC void
23768+acp_serial_wac(u32 *address, int character, u32 line)
23769+{
23770+ out_le32(address, character);
23771+
23772+ return;
23773+}
23774+
23775+/*
23776+ ------------------------------------------------------------------------------
23777+ acp_serial_tx_empty
23778+*/
23779+
23780+STATIC unsigned int
23781+acp_serial_tx_empty(struct uart_port *port)
23782+{
23783+ struct uart_acp_port * uap = (struct uart_acp_port *) port;
23784+ unsigned int status =
23785+ in_le32((u32 *) (uap->port.membase + UART01x_FR));
23786+ return status &
23787+ (UART01x_FR_BUSY | UART01x_FR_TXFF) ? 0 : TIOCSER_TEMT;
23788+}
23789+
23790+/*
23791+ ----------------------------------------------------------------------
23792+ acp_serial_stop_tx
23793+*/
23794+
23795+STATIC void
23796+acp_serial_stop_tx(struct uart_port *port)
23797+{
23798+ struct uart_acp_port *uap = (struct uart_acp_port *)port;
23799+
23800+ uap->interrupt_mask &= ~UART011_TXIM;
23801+ out_le32((u32 *)(uap->port.membase + UART011_IMSC),
23802+ uap->interrupt_mask);
23803+}
23804+
23805+/*
23806+ ----------------------------------------------------------------------
23807+ acp_serial_start_tx
23808+*/
23809+
23810+STATIC void
23811+acp_serial_start_tx(struct uart_port *port)
23812+{
23813+ struct uart_acp_port *uap = (struct uart_acp_port *)port;
23814+
23815+ uap->interrupt_mask |= UART011_TXIM;
23816+ out_le32((u32 *)(uap->port.membase + UART011_IMSC),
23817+ uap->interrupt_mask);
23818+}
23819+
23820+void acp_serial_stop_rx(struct uart_port *port)
23821+{
23822+ struct uart_acp_port *uap = (struct uart_acp_port *)port;
23823+
23824+ uap->interrupt_mask &= ~(UART011_RXIM|UART011_RTIM|UART011_FEIM|
23825+ UART011_PEIM|UART011_BEIM|UART011_OEIM);
23826+ out_le32((u32 *)(uap->port.membase + UART011_IMSC),
23827+ uap->interrupt_mask);
23828+}
23829+
23830+void acp_serial_enable_ms(struct uart_port *port)
23831+{
23832+ struct uart_acp_port *uap = (struct uart_acp_port *)port;
23833+
23834+ uap->interrupt_mask |=
23835+ UART011_RIMIM|UART011_CTSMIM|UART011_DCDMIM|UART011_DSRMIM;
23836+ out_le32((u32 *)(uap->port.membase + UART011_IMSC),
23837+ uap->interrupt_mask);
23838+}
23839+
23840+/*
23841+ ----------------------------------------------------------------------
23842+ acp_serial_rx_chars
23843+*/
23844+
23845+STATIC void
23846+acp_serial_rx_chars(struct uart_acp_port *uap)
23847+{
23848+ struct tty_struct *tty = uap->port.state->port.tty;
23849+ unsigned int status, ch, flag, max_count = 256;
23850+
23851+ /*status = readw(uap->port.membase + UART01x_FR);*/
23852+ status = in_le32((u32 *)(uap->port.membase + UART01x_FR));
23853+ while ((status & UART01x_FR_RXFE) == 0 && max_count--) {
23854+ ch = in_le32((u32 *)(uap->port.membase + UART01x_DR)) |
23855+ UART_DUMMY_DR_RX;
23856+ flag = TTY_NORMAL;
23857+ uap->port.icount.rx++;
23858+
23859+ /*
23860+ * Note that the error handling code is
23861+ * out of the main execution path
23862+ */
23863+ if (unlikely(ch & UART_DR_ERROR)) {
23864+ if (ch & UART011_DR_BE) {
23865+ ch &= ~(UART011_DR_FE | UART011_DR_PE);
23866+ uap->port.icount.brk++;
23867+ if (uart_handle_break(&uap->port))
23868+ goto ignore_char;
23869+ } else if (ch & UART011_DR_PE)
23870+ uap->port.icount.parity++;
23871+ else if (ch & UART011_DR_FE)
23872+ uap->port.icount.frame++;
23873+ if (ch & UART011_DR_OE)
23874+ uap->port.icount.overrun++;
23875+
23876+ ch &= uap->port.read_status_mask;
23877+
23878+ if (ch & UART011_DR_BE)
23879+ flag = TTY_BREAK;
23880+ else if (ch & UART011_DR_PE)
23881+ flag = TTY_PARITY;
23882+ else if (ch & UART011_DR_FE)
23883+ flag = TTY_FRAME;
23884+ }
23885+
23886+ if (uart_handle_sysrq_char(&uap->port, ch & 255))
23887+ goto ignore_char;
23888+
23889+ uart_insert_char(&uap->port, ch, UART011_DR_OE, ch, flag);
23890+
23891+ ignore_char:
23892+ status = in_le32((u32 *)(uap->port.membase + UART01x_FR));
23893+ }
23894+ spin_unlock(&uap->port.lock);
23895+ tty_flip_buffer_push(tty);
23896+ spin_lock(&uap->port.lock);
23897+}
23898+
23899+/*
23900+ ----------------------------------------------------------------------
23901+ acp_serial_tx_chars
23902+*/
23903+
23904+STATIC void
23905+acp_serial_tx_chars(struct uart_acp_port *uap)
23906+{
23907+ struct circ_buf *xmit = &uap->port.state->xmit;
23908+ int count;
23909+
23910+ if (uap->port.x_char) {
23911+ /*writew(uap->port.x_char, uap->port.membase + UART01x_DR);*/
23912+#if 0
23913+ out_le32((u32 *)(uap->port.membase + UART01x_DR),
23914+ uap->port.x_char);
23915+#endif
23916+ acp_serial_wac((u32 *)(uap->port.membase + UART01x_DR),
23917+ uap->port.x_char, __LINE__);
23918+ uap->port.icount.tx++;
23919+ uap->port.x_char = 0;
23920+ return;
23921+ }
23922+ if (uart_circ_empty(xmit) || uart_tx_stopped(&uap->port)) {
23923+ acp_serial_stop_tx(&uap->port);
23924+ return;
23925+ }
23926+
23927+ count = uap->port.fifosize >> 1;
23928+ do {
23929+#if 0
23930+ out_le32((u32 *)(uap->port.membase + UART01x_DR),
23931+ xmit->buf[xmit->tail]);
23932+#endif
23933+ acp_serial_wac((u32 *) (uap->port.membase + UART01x_DR),
23934+ xmit->buf[xmit->tail], __LINE__);
23935+ xmit->tail = (xmit->tail + 1) & (UART_XMIT_SIZE - 1);
23936+ uap->port.icount.tx++;
23937+ if (uart_circ_empty(xmit))
23938+ break;
23939+ } while (--count > 0);
23940+
23941+ if (uart_circ_chars_pending(xmit) < WAKEUP_CHARS)
23942+ uart_write_wakeup(&uap->port);
23943+
23944+ if (uart_circ_empty(xmit))
23945+ acp_serial_stop_tx(&uap->port);
23946+}
23947+
23948+void acp_serial_modem_status(struct uart_acp_port *uap)
23949+{
23950+ unsigned int status, delta;
23951+
23952+ status = in_le32((u32 *)(uap->port.membase + UART01x_FR)) &
23953+ UART01x_FR_MODEM_ANY;
23954+
23955+ delta = status ^ uap->old_status;
23956+ uap->old_status = status;
23957+
23958+ if (!delta)
23959+ return;
23960+
23961+ if (delta & UART01x_FR_DCD)
23962+ uart_handle_dcd_change(&uap->port, status & UART01x_FR_DCD);
23963+
23964+ if (delta & UART01x_FR_DSR)
23965+ uap->port.icount.dsr++;
23966+
23967+ if (delta & UART01x_FR_CTS)
23968+ uart_handle_cts_change(&uap->port, status & UART01x_FR_CTS);
23969+
23970+ wake_up_interruptible(&uap->port.state->port.delta_msr_wait);
23971+}
23972+
23973+/*
23974+ ------------------------------------------------------------------------------
23975+ acp_serial_isr
23976+*/
23977+
23978+STATIC irqreturn_t
23979+acp_serial_isr(int irq, void *dev_id)
23980+{
23981+ struct uart_acp_port *uap = dev_id;
23982+ unsigned int status, pass_counter = AMBA_ISR_PASS_LIMIT;
23983+ int handled = 0;
23984+
23985+ spin_lock(&uap->port.lock);
23986+
23987+ /*status = readw(uap->port.membase + UART011_MIS);*/
23988+ status = in_le32((u32 *)(uap->port.membase + UART011_MIS));
23989+ if (status) {
23990+ do {
23991+#if 0
23992+ writew(status & ~(UART011_TXIS|UART011_RTIS|
23993+ UART011_RXIS),
23994+ uap->port.membase + UART011_ICR);
23995+#else
23996+ out_le32((u32 *)(uap->port.membase + UART011_ICR),
23997+ (status &
23998+ ~(UART011_TXIS|UART011_RTIS|UART011_RXIS)));
23999+#endif
24000+
24001+ if (status & (UART011_RTIS|UART011_RXIS))
24002+ acp_serial_rx_chars(uap);
24003+ if (status & (UART011_DSRMIS|UART011_DCDMIS|
24004+ UART011_CTSMIS|UART011_RIMIS))
24005+ acp_serial_modem_status(uap);
24006+ if (status & UART011_TXIS)
24007+ acp_serial_tx_chars(uap);
24008+
24009+ if (pass_counter-- == 0)
24010+ break;
24011+
24012+ /*status = readw(uap->port.membase + UART011_MIS);*/
24013+ status =
24014+ in_le32((u32 *)(uap->port.membase + UART011_MIS));
24015+ } while (status != 0);
24016+ handled = 1;
24017+ }
24018+
24019+ spin_unlock(&uap->port.lock);
24020+
24021+ return IRQ_RETVAL(handled);
24022+}
24023+
24024+unsigned int acp_serial_get_mctrl(struct uart_port *port)
24025+{
24026+ struct uart_acp_port *uap = (struct uart_acp_port *)port;
24027+ unsigned int result = 0;
24028+ /*unsigned int status = readw(uap->port.membase + UART01x_FR);*/
24029+ unsigned int status = in_le32((u32 *)(uap->port.membase + UART01x_FR));
24030+
24031+#define TIOCMBIT(uartbit, tiocmbit) do { \
24032+ if (status & (uartbit)) \
24033+ result |= (tiocmbit); \
24034+} while (0);
24035+ TIOCMBIT(UART01x_FR_DCD, TIOCM_CAR);
24036+ TIOCMBIT(UART01x_FR_DSR, TIOCM_DSR);
24037+ TIOCMBIT(UART01x_FR_CTS, TIOCM_CTS);
24038+ TIOCMBIT(UART011_FR_RI, TIOCM_RNG);
24039+#undef TIOCMBIT
24040+ return result;
24041+}
24042+
24043+void acp_serial_set_mctrl(struct uart_port *port, unsigned int mctrl)
24044+{
24045+ struct uart_acp_port *uap = (struct uart_acp_port *)port;
24046+ unsigned int cr;
24047+
24048+ /*cr = readw(uap->port.membase + UART011_CR);*/
24049+ cr = in_le32((u32 *)(uap->port.membase + UART011_CR));
24050+
24051+#define TIOCMBIT(tiocmbit, uartbit) do { \
24052+ if (mctrl & tiocmbit) \
24053+ cr |= uartbit; \
24054+ else \
24055+ cr &= ~uartbit; \
24056+} while (0);
24057+
24058+ TIOCMBIT(TIOCM_RTS, UART011_CR_RTS);
24059+ TIOCMBIT(TIOCM_DTR, UART011_CR_DTR);
24060+ TIOCMBIT(TIOCM_OUT1, UART011_CR_OUT1);
24061+ TIOCMBIT(TIOCM_OUT2, UART011_CR_OUT2);
24062+ TIOCMBIT(TIOCM_LOOP, UART011_CR_LBE);
24063+
24064+#undef TIOCMBIT
24065+
24066+ /*writew(cr, uap->port.membase + UART011_CR);*/
24067+ out_le32((u32 *)(uap->port.membase + UART011_CR), cr);
24068+}
24069+
24070+void acp_serial_break_ctl(struct uart_port *port, int break_state)
24071+{
24072+ struct uart_acp_port *uap = (struct uart_acp_port *)port;
24073+ unsigned long flags;
24074+ unsigned int lcr_h;
24075+
24076+ spin_lock_irqsave(&uap->port.lock, flags);
24077+ /*lcr_h = readw(uap->port.membase + UART011_LCRH);*/
24078+ lcr_h = in_le32((u32 *)(uap->port.membase + UART011_LCRH));
24079+ if (break_state == -1)
24080+ lcr_h |= UART01x_LCRH_BRK;
24081+ else
24082+ lcr_h &= ~UART01x_LCRH_BRK;
24083+ /*writew(lcr_h, uap->port.membase + UART011_LCRH);*/
24084+ out_le32((u32 *)(uap->port.membase + UART011_LCRH), lcr_h);
24085+ spin_unlock_irqrestore(&uap->port.lock, flags);
24086+}
24087+
24088+#ifdef CONFIG_CONSOLE_POLL
24089+
24090+/*
24091+ ----------------------------------------------------------------------
24092+ acp_serial_poll_get_char
24093+*/
24094+
24095+STATIC int
24096+acp_serial_poll_get_char(struct uart_port *port)
24097+{
24098+ struct uart_acp_port * uap = (struct uart_acp_port *) port;
24099+ unsigned int status;
24100+
24101+ do {
24102+ status = in_le32((u32 *)
24103+ (uap->port.membase + UART01x_FR));
24104+ } while (status & UART01x_FR_RXFE);
24105+
24106+ return in_le32((u32 *) (uap->port.membase + UART01x_DR));
24107+}
24108+
24109+/*
24110+ ----------------------------------------------------------------------
24111+ acp_serial_poll_put_char
24112+*/
24113+
24114+STATIC void
24115+acp_serial_poll_put_char(struct uart_port *port, unsigned char ch)
24116+{
24117+ struct uart_acp_port *uap = (struct uart_acp_port *)port;
24118+
24119+ while (in_le32((u32 *) (uap->port.membase + UART01x_FR)) &
24120+ UART01x_FR_TXFF) {
24121+ barrier();
24122+ }
24123+
24124+ acp_serial_wac((u32 *)(uap->port.membase + UART01x_DR), ch,
24125+ __LINE__);
24126+
24127+ return;
24128+}
24129+
24130+#endif /* CONFIG_CONSOLE_POLL */
24131+
24132+/*
24133+ ----------------------------------------------------------------------
24134+ acp_serial_startup
24135+*/
24136+
24137+STATIC int
24138+acp_serial_startup(struct uart_port *port)
24139+{
24140+ struct uart_acp_port *uap = (struct uart_acp_port *)port;
24141+ unsigned int cr;
24142+ int retval = 0;
24143+
24144+#ifndef CONFIG_CONSOLE_POLL
24145+
24146+ /*
24147+ * Set up the interrupt.
24148+ */
24149+
24150+ uap->port.irq = irq_create_mapping( NULL, uap->hwirq );
24151+
24152+ if (NO_IRQ == uap->port.irq) {
24153+ printk(KERN_ERR "irq_create_mapping() failed!\n");
24154+ goto clk_dis;
24155+ }
24156+
24157+ retval = irq_set_irq_type(uap->port.irq, IRQ_TYPE_LEVEL_HIGH);
24158+
24159+ if (0 != retval) {
24160+ printk(KERN_ERR "set_irq_type(%d, 0x%x) failed!\n",
24161+ uap->port.irq, IRQ_TYPE_LEVEL_HIGH);
24162+ goto clk_dis;
24163+ }
24164+
24165+ retval = request_irq(uap->port.irq, acp_serial_isr,
24166+ IRQF_DISABLED, "uart-pl011", uap);
24167+
24168+ if (retval) {
24169+ printk(KERN_ERR "request_irq(%d) failed!\n", uap->port.irq);
24170+ goto clk_dis;
24171+ }
24172+
24173+ out_le32((u32 *)(uap->port.membase + UART011_IFLS),
24174+ UART011_IFLS_RX4_8|UART011_IFLS_TX4_8);
24175+
24176+#endif /* CONFIG_CONSOLE_POLL */
24177+
24178+ /*
24179+ * Provoke TX FIFO interrupt into asserting.
24180+ */
24181+ cr = UART01x_CR_UARTEN | UART011_CR_TXE | UART011_CR_LBE;
24182+ out_le32((u32 *)(uap->port.membase + UART011_CR), cr);
24183+ out_le32((u32 *)(uap->port.membase + UART011_FBRD), 0);
24184+ out_le32((u32 *)(uap->port.membase + UART011_IBRD), 1);
24185+ out_le32((u32 *)(uap->port.membase + UART011_LCRH), 0);
24186+ acp_serial_wac((u32 *) (uap->port.membase + UART01x_DR), 0,
24187+ __LINE__);
24188+
24189+ while (in_le32((u32 *)(uap->port.membase + UART01x_FR)) &
24190+ UART01x_FR_BUSY)
24191+ barrier();
24192+
24193+ cr = UART01x_CR_UARTEN | UART011_CR_RXE | UART011_CR_TXE;
24194+ /*writew(cr, uap->port.membase + UART011_CR);*/
24195+ out_le32((u32 *)(uap->port.membase + UART011_CR), cr);
24196+
24197+ /*
24198+ * initialise the old status of the modem signals
24199+ */
24200+#if 0
24201+ uap->old_status =
24202+ readw(uap->port.membase + UART01x_FR) & UART01x_FR_MODEM_ANY;
24203+#else
24204+ uap->old_status =
24205+ in_le32((u32 *)(uap->port.membase + UART01x_FR)) &
24206+ UART01x_FR_MODEM_ANY;
24207+#endif
24208+
24209+ /*
24210+ * Finally, enable interrupts
24211+ */
24212+ spin_lock_irq(&uap->port.lock);
24213+ uap->interrupt_mask = UART011_RXIM | UART011_RTIM;
24214+ /*writew(uap->interrupt_mask, uap->port.membase + UART011_IMSC);*/
24215+ out_le32((u32 *)(uap->port.membase + UART011_IMSC),
24216+ uap->interrupt_mask);
24217+ spin_unlock_irq(&uap->port.lock);
24218+
24219+ return 0;
24220+
24221+ clk_dis:
24222+ /*clk_disable(uap->clk);*/
24223+/* out:*/
24224+ return retval;
24225+}
24226+
24227+/*
24228+ ----------------------------------------------------------------------
24229+ acp_serial_shutdown
24230+*/
24231+
24232+STATIC void
24233+acp_serial_shutdown(struct uart_port *port)
24234+{
24235+ struct uart_acp_port *uap = (struct uart_acp_port *)port;
24236+ unsigned long val;
24237+
24238+ /*
24239+ * disable all interrupts
24240+ */
24241+ spin_lock_irq(&uap->port.lock);
24242+ uap->interrupt_mask = 0;
24243+ out_le32((u32 *)(uap->port.membase + UART011_IMSC),
24244+ uap->interrupt_mask);
24245+ out_le32((u32 *)(uap->port.membase + UART011_ICR), 0xffff);
24246+ spin_unlock_irq(&uap->port.lock);
24247+
24248+ /*
24249+ * Free the interrupt
24250+ */
24251+ free_irq(uap->port.irq, uap);
24252+
24253+ /*
24254+ * disable the port
24255+ */
24256+ out_le32((u32 *)(uap->port.membase + UART011_CR),
24257+ UART01x_CR_UARTEN | UART011_CR_TXE);
24258+
24259+ /*
24260+ * disable break condition and fifos
24261+ */
24262+ val = in_le32((u32 *)(uap->port.membase + UART011_LCRH));
24263+ val &= ~(UART01x_LCRH_BRK | UART01x_LCRH_FEN);
24264+ out_le32((u32 *)(uap->port.membase + UART011_LCRH), val);
24265+}
24266+
24267+/*
24268+ ----------------------------------------------------------------------
24269+ acp_serial_set_termios
24270+*/
24271+
24272+STATIC void
24273+acp_serial_set_termios(struct uart_port *port, struct ktermios *termios,
24274+ struct ktermios *old)
24275+{
24276+ unsigned int lcr_h, old_cr;
24277+ unsigned long flags;
24278+ int baud;
24279+ struct uart_acp_port *uap = (struct uart_acp_port *)port;
24280+
24281+ /*
24282+ * Set up the clock, and calculate the divisors.
24283+ */
24284+
24285+ /*baud = termios->c_ospeed;*/
24286+ baud = 9600;
24287+ get_clock_stuff(port, baud);
24288+
24289+ switch (termios->c_cflag & CSIZE) {
24290+ case CS5:
24291+ lcr_h = UART01x_LCRH_WLEN_5;
24292+ break;
24293+ case CS6:
24294+ lcr_h = UART01x_LCRH_WLEN_6;
24295+ break;
24296+ case CS7:
24297+ lcr_h = UART01x_LCRH_WLEN_7;
24298+ break;
24299+ default: /* CS8 */
24300+ lcr_h = UART01x_LCRH_WLEN_8;
24301+ break;
24302+ }
24303+ if (termios->c_cflag & CSTOPB)
24304+ lcr_h |= UART01x_LCRH_STP2;
24305+ if (termios->c_cflag & PARENB) {
24306+ lcr_h |= UART01x_LCRH_PEN;
24307+ if (!(termios->c_cflag & PARODD))
24308+ lcr_h |= UART01x_LCRH_EPS;
24309+ }
24310+ if (port->fifosize > 1)
24311+ lcr_h |= UART01x_LCRH_FEN;
24312+
24313+ spin_lock_irqsave(&port->lock, flags);
24314+
24315+ /*
24316+ * Update the per-port timeout.
24317+ */
24318+ uart_update_timeout(port, termios->c_cflag, baud);
24319+
24320+ port->read_status_mask = UART011_DR_OE | 255;
24321+ if (termios->c_iflag & INPCK)
24322+ port->read_status_mask |= UART011_DR_FE | UART011_DR_PE;
24323+ if (termios->c_iflag & (BRKINT | PARMRK))
24324+ port->read_status_mask |= UART011_DR_BE;
24325+
24326+ /*
24327+ * Characters to ignore
24328+ */
24329+ port->ignore_status_mask = 0;
24330+ if (termios->c_iflag & IGNPAR)
24331+ port->ignore_status_mask |= UART011_DR_FE | UART011_DR_PE;
24332+ if (termios->c_iflag & IGNBRK) {
24333+ port->ignore_status_mask |= UART011_DR_BE;
24334+ /*
24335+ * If we're ignoring parity and break indicators,
24336+ * ignore overruns too (for real raw support).
24337+ */
24338+ if (termios->c_iflag & IGNPAR)
24339+ port->ignore_status_mask |= UART011_DR_OE;
24340+ }
24341+
24342+ /*
24343+ * Ignore all characters if CREAD is not set.
24344+ */
24345+ if ((termios->c_cflag & CREAD) == 0)
24346+ port->ignore_status_mask |= UART_DUMMY_DR_RX;
24347+
24348+ if (UART_ENABLE_MS(port, termios->c_cflag))
24349+ acp_serial_enable_ms(port);
24350+
24351+ /* first, disable everything */
24352+ old_cr = in_le32((u32 *)(uap->port.membase + UART011_CR));
24353+ out_le32((u32 *)(uap->port.membase + UART011_CR), 0);
24354+
24355+ /* Set baud rate */
24356+ out_le32((u32 *)(uap->port.membase + UART011_FBRD), uap->fbrd);
24357+ out_le32((u32 *)(uap->port.membase + UART011_IBRD), uap->ibrd);
24358+
24359+ /*
24360+ * ----------v----------v----------v----------v-----
24361+ * NOTE: MUST BE WRITTEN AFTER UARTLCR_M & UARTLCR_L
24362+ * ----------^----------^----------^----------^-----
24363+ */
24364+ out_le32((u32 *)(uap->port.membase + UART011_LCRH), lcr_h);
24365+ out_le32((u32 *)(uap->port.membase + UART011_CR), old_cr);
24366+
24367+ spin_unlock_irqrestore(&port->lock, flags);
24368+}
24369+
24370+const char *acp_serial_type(struct uart_port *port)
24371+{
24372+ return port->type == PORT_AMBA ? "AMBA/PL011" : NULL;
24373+}
24374+
24375+/*
24376+ * Release the memory region(s) being used by 'port'
24377+ */
24378+void acp_serial_release_port(struct uart_port *port)
24379+{
24380+ release_mem_region(port->mapbase, SZ_4K);
24381+}
24382+
24383+/*
24384+ * Request the memory region(s) being used by 'port'
24385+ */
24386+int acp_serial_request_port(struct uart_port *port)
24387+{
24388+ return request_mem_region(port->mapbase, SZ_4K, "uart-pl011")
24389+ != NULL ? 0 : -EBUSY;
24390+}
24391+
24392+/*
24393+ * Configure/autoconfigure the port.
24394+ */
24395+void acp_serial_config_port(struct uart_port *port, int flags)
24396+{
24397+ if (flags & UART_CONFIG_TYPE) {
24398+ port->type = PORT_AMBA;
24399+ acp_serial_request_port(port);
24400+ }
24401+}
24402+
24403+/*
24404+ * verify the new serial_struct (for TIOCSSERIAL).
24405+ */
24406+int acp_serial_verify_port(struct uart_port *port, struct serial_struct *ser)
24407+{
24408+ int ret = 0;
24409+ if (ser->type != PORT_UNKNOWN && ser->type != PORT_AMBA)
24410+ ret = -EINVAL;
24411+ if (ser->irq < 0 || ser->irq >= nr_irqs)
24412+ ret = -EINVAL;
24413+ if (ser->baud_base < 9600)
24414+ ret = -EINVAL;
24415+ return ret;
24416+}
24417+
24418+static struct uart_ops amba_acp_pops = {
24419+ .tx_empty = acp_serial_tx_empty,
24420+ .set_mctrl = acp_serial_set_mctrl,
24421+ .get_mctrl = acp_serial_get_mctrl,
24422+ .stop_tx = acp_serial_stop_tx,
24423+ .start_tx = acp_serial_start_tx,
24424+ .stop_rx = acp_serial_stop_rx,
24425+ .enable_ms = acp_serial_enable_ms,
24426+ .break_ctl = acp_serial_break_ctl,
24427+ .startup = acp_serial_startup,
24428+ .shutdown = acp_serial_shutdown,
24429+ .set_termios = acp_serial_set_termios,
24430+ .type = acp_serial_type,
24431+ .release_port = acp_serial_release_port,
24432+ .request_port = acp_serial_request_port,
24433+ .config_port = acp_serial_config_port,
24434+ .verify_port = acp_serial_verify_port,
24435+#ifdef CONFIG_CONSOLE_POLL
24436+ .poll_get_char = acp_serial_poll_get_char,
24437+ .poll_put_char = acp_serial_poll_put_char,
24438+#endif
24439+};
24440+
24441+static struct uart_acp_port *acp_ports[2];
24442+
24443+#ifdef CONFIG_SERIAL_ACP_CONSOLE
24444+
24445+/*
24446+ ----------------------------------------------------------------------
24447+ acp_serial_console_putchar
24448+*/
24449+
24450+STATIC void
24451+acp_serial_console_putchar(struct uart_port *port, int ch)
24452+{
24453+ struct uart_acp_port *uap = (struct uart_acp_port *)port;
24454+
24455+ while (in_le32((u32 *)(uap->port.membase + UART01x_FR)) &
24456+ UART01x_FR_TXFF) {
24457+ barrier();
24458+ }
24459+
24460+ /*out_le32((u32 *)(uap->port.membase + UART01x_DR), ch);*/
24461+ acp_serial_wac((u32 *) (uap->port.membase + UART01x_DR), ch,
24462+ __LINE__);
24463+}
24464+
24465+void
24466+acp_console_write(struct console *co, const char *s, unsigned int count)
24467+{
24468+ struct uart_acp_port *uap = acp_ports[co->index];
24469+ unsigned int status, old_cr, new_cr;
24470+
24471+ /*clk_enable(uap->clk);*/
24472+
24473+ /*
24474+ * First save the CR then disable the interrupts
24475+ */
24476+ /*old_cr = readw(uap->port.membase + UART011_CR);*/
24477+ old_cr = in_le32((u32 *)(uap->port.membase + UART011_CR));
24478+ new_cr = old_cr & ~UART011_CR_CTSEN;
24479+ new_cr |= UART01x_CR_UARTEN | UART011_CR_TXE;
24480+ /*writew(new_cr, uap->port.membase + UART011_CR);*/
24481+ out_le32((u32 *)(uap->port.membase + UART011_CR), new_cr);
24482+
24483+ uart_console_write(&uap->port, s, count, acp_serial_console_putchar);
24484+
24485+ /*
24486+ * Finally, wait for transmitter to become empty
24487+ * and restore the TCR
24488+ */
24489+ do {
24490+ /*status = readw(uap->port.membase + UART01x_FR);*/
24491+ status =
24492+ in_le32((u32 *)(u32 *)(uap->port.membase + UART01x_FR));
24493+ } while (status & UART01x_FR_BUSY);
24494+ /*writew(old_cr, uap->port.membase + UART011_CR);*/
24495+ out_le32((u32 *)(uap->port.membase + UART011_CR), old_cr);
24496+
24497+ /*clk_disable(uap->clk);*/
24498+}
24499+
24500+void __init
24501+acp_console_get_options(struct uart_acp_port *uap, int *baud,
24502+ int *parity, int *bits)
24503+{
24504+ /*if (readw(uap->port.membase + UART011_CR) & UART01x_CR_UARTEN) {*/
24505+ if (in_le32((u32 *)(u32 *)(uap->port.membase + UART011_CR)) &
24506+ UART01x_CR_UARTEN) {
24507+ unsigned int lcr_h, ibrd, fbrd;
24508+
24509+ lcr_h = in_le32((u32 *)(u32 *)(uap->port.membase +
24510+ UART011_LCRH));
24511+
24512+ *parity = 'n';
24513+ if (lcr_h & UART01x_LCRH_PEN) {
24514+ if (lcr_h & UART01x_LCRH_EPS)
24515+ *parity = 'e';
24516+ else
24517+ *parity = 'o';
24518+ }
24519+
24520+ if ((lcr_h & 0x60) == UART01x_LCRH_WLEN_7)
24521+ *bits = 7;
24522+ else
24523+ *bits = 8;
24524+
24525+ ibrd = in_le32((u32 *)(u32 *)(uap->port.membase +
24526+ UART011_IBRD));
24527+ fbrd = in_le32((u32 *)(u32 *)(uap->port.membase +
24528+ UART011_FBRD));
24529+
24530+ *baud = uap->port.uartclk * 4 / (64 * ibrd + fbrd);
24531+ }
24532+}
24533+
24534+int __init acp_console_setup(struct console *co, char *options)
24535+{
24536+ struct uart_acp_port *uap;
24537+ int baud = 9600;
24538+ int bits = 8;
24539+ int parity = 'n';
24540+ int flow = 'n';
24541+
24542+ /*
24543+ * Check whether an invalid uart number has been specified, and
24544+ * if so, search for the first available port that does have
24545+ * console support.
24546+ */
24547+ if (co->index >= UART_NR)
24548+ co->index = 0;
24549+ uap = acp_ports[co->index];
24550+ if (!uap)
24551+ return -ENODEV;
24552+
24553+ if (options)
24554+ uart_parse_options(options, &baud, &parity, &bits, &flow);
24555+ else
24556+ acp_console_get_options(uap, &baud, &parity, &bits);
24557+
24558+ return uart_set_options(&uap->port, co, baud, parity, bits, flow);
24559+}
24560+
24561+static struct uart_driver acp_serial_driver;
24562+static struct console acp_console = {
24563+ .name = "ttyS",
24564+ .write = acp_console_write,
24565+ .device = uart_console_device,
24566+ .setup = acp_console_setup,
24567+ .flags = CON_PRINTBUFFER,
24568+ .index = -1,
24569+ .data = &acp_serial_driver,
24570+};
24571+
24572+static int __init
24573+acp_console_init(void)
24574+{
24575+ register_console(&acp_console);
24576+
24577+ return 0;
24578+}
24579+
24580+console_initcall(acp_console_init);
24581+
24582+#define ACP_CONSOLE (&acp_console)
24583+#else
24584+#define ACP_CONSOLE NULL
24585+#endif
24586+
24587+static struct uart_driver acp_serial_driver = {
24588+ .owner = THIS_MODULE,
24589+ .driver_name = "serial",
24590+ .dev_name = "ttyS",
24591+ .major = TTY_MAJOR,
24592+ .minor = 64,
24593+ .nr = UART_NR,
24594+ .cons = ACP_CONSOLE,
24595+};
24596+
24597+/*
24598+ ----------------------------------------------------------------------
24599+ acp_serial_add_ports
24600+*/
24601+
24602+STATIC int
24603+acp_serial_add_ports(struct uart_driver *driver)
24604+{
24605+ struct uart_acp_port *uap;
24606+ int i, ret;
24607+ struct device_node *np = NULL;
24608+ u64 addr = 0;
24609+ const u32 *reg, *interrupts, *clk, *speed;
24610+ int baud_rate;
24611+ int *enabled;
24612+
24613+ for (i = 0; i < ARRAY_SIZE(acp_ports); ++i) {
24614+ if (acp_ports[i] == NULL) {
24615+ break;
24616+ }
24617+ }
24618+
24619+ if (i == ARRAY_SIZE(acp_ports)) {
24620+ ret = -EBUSY;
24621+ goto out;
24622+ }
24623+
24624+ uap = kzalloc(sizeof(struct uart_acp_port), GFP_KERNEL);
24625+
24626+ if (NULL == uap) {
24627+ ret = -ENOMEM;
24628+ goto out;
24629+ }
24630+
24631+ np = of_find_node_by_type(np, "serial");
24632+
24633+ while (np && !of_device_is_compatible(np, "acp-uart0"))
24634+ np = of_find_node_by_type(np, "serial");
24635+
24636+ if (np) {
24637+ enabled = of_get_property(np, "enabled", NULL);
24638+ }
24639+
24640+ if (!enabled) {
24641+ /*
24642+ Older LSI U-Boot package (prior to 4.8.1.36).
24643+
24644+ Only use UART0. The timer registers are defined
24645+ differently in the device tree.
24646+ */
24647+ uap->timer_base = ioremap(0x002000408040ULL, 0x20);
24648+ } else {
24649+ /*
24650+ Newer LSI U-Boot package (4.8.1.36 on).
24651+
24652+ Only use a serial port if it is enabled.
24653+ */
24654+
24655+ if (!np || (0 == *enabled)) {
24656+ np = NULL;
24657+ np = of_find_node_by_type(np, "serial");
24658+
24659+ while (np && !of_device_is_compatible(np, "acp-uart1"))
24660+ np = of_find_node_by_type(np, "serial");
24661+
24662+ if (np) {
24663+ enabled = of_get_property(np, "enabled", NULL);
24664+ printk("uart1 *enabled=%d\n", *enabled);
24665+ }
24666+ }
24667+
24668+ if (np && (0 != *enabled)) {
24669+ reg = of_get_property(np, "clock-reg", NULL);
24670+
24671+ if (reg) {
24672+ addr = of_translate_address(np, reg);
24673+ if (addr == OF_BAD_ADDR)
24674+ addr = 0;
24675+ }
24676+
24677+ if (addr)
24678+ uap->timer_base = ioremap(addr, reg[1]);
24679+ else {
24680+ printk(KERN_ERR "timer io address not found\n");
24681+ ret = -ENOMEM;
24682+ }
24683+ }
24684+ }
24685+
24686+ if (np) {
24687+ reg = of_get_property(np, "reg", NULL);
24688+
24689+ if (reg) {
24690+ addr = of_translate_address(np, reg);
24691+ if (addr == OF_BAD_ADDR)
24692+ addr = 0;
24693+ }
24694+
24695+ if (addr)
24696+ uap->port.membase = ioremap(addr, reg[1]);
24697+ else {
24698+ printk(KERN_ERR "serial io address not found\n");
24699+ ret = -ENOMEM;
24700+ }
24701+
24702+ interrupts = of_get_property(np, "interrupts", NULL);
24703+
24704+ if (interrupts)
24705+ uap->hwirq = interrupts[0];
24706+ else {
24707+ printk(KERN_ERR "serial irq not found\n");
24708+ uap->hwirq = 22;
24709+ }
24710+
24711+ clk = of_get_property(np, "clock-frequency", NULL);
24712+
24713+ if (clk && *clk)
24714+ uap->port.uartclk = *clk;
24715+ else {
24716+ printk(KERN_ERR "serial clock frequency not found\n");
24717+ uap->port.uartclk = 6500000;
24718+ }
24719+
24720+ speed = of_get_property(np, "current-speed", NULL);
24721+
24722+ if (speed && *speed)
24723+ baud_rate = *speed;
24724+ else {
24725+ printk(KERN_ERR "current speed not found\n");
24726+ baud_rate = 9600;
24727+ }
24728+ } else {
24729+ ret = -ENOMEM;
24730+ }
24731+
24732+ uap->port.iotype = UPIO_MEM;
24733+ uap->port.fifosize = 16;
24734+ uap->port.ops = &amba_acp_pops;
24735+ uap->port.flags = UPF_BOOT_AUTOCONF;
24736+ uap->port.line = i;
24737+ get_clock_stuff(&uap->port, baud_rate);
24738+ acp_ports[i] = uap;
24739+ ret = uart_add_one_port(driver, &uap->port);
24740+
24741+ if (0 != ret) {
24742+ acp_ports[i] = NULL;
24743+ kfree(uap);
24744+ }
24745+
24746+ out:
24747+ return ret;
24748+}
24749+
24750+/*
24751+ ----------------------------------------------------------------------
24752+ acp_serial_delete_ports
24753+*/
24754+
24755+STATIC int
24756+acp_serial_delete_ports(struct uart_driver *driver)
24757+{
24758+ int i;
24759+
24760+ for (i = 0; i < ARRAY_SIZE(acp_ports); ++i) {
24761+ if (NULL != acp_ports[i]) {
24762+ uart_remove_one_port(driver,
24763+ &(acp_ports[i])->port);
24764+ kfree(acp_ports[i]);
24765+ acp_ports[i] = NULL;
24766+ }
24767+ }
24768+
24769+ return 0;
24770+}
24771+
24772+/*
24773+ ======================================================================
24774+ ======================================================================
24775+ For debugging, export symbols...
24776+ ======================================================================
24777+ ======================================================================
24778+*/
24779+
24780+#ifdef DEBUG_EXPORT_SYMBOLS
24781+
24782+EXPORT_SYMBOL(acp_serial_isr);
24783+EXPORT_SYMBOL(acp_serial_set_termios);
24784+EXPORT_SYMBOL(acp_serial_shutdown);
24785+EXPORT_SYMBOL(get_clock_stuff);
24786+EXPORT_SYMBOL(acp_serial_startup);
24787+EXPORT_SYMBOL(acp_serial_tx_empty);
24788+EXPORT_SYMBOL(acp_serial_tx_chars);
24789+EXPORT_SYMBOL(acp_serial_add_ports);
24790+EXPORT_SYMBOL(acp_serial_delete_ports);
24791+EXPORT_SYMBOL(acp_serial_wac);
24792+EXPORT_SYMBOL(acp_serial_start_tx);
24793+EXPORT_SYMBOL(acp_serial_stop_tx);
24794+
24795+#ifdef CONFIG_SERIAL_ACP_CONSOLE
24796+EXPORT_SYMBOL(acp_serial_console_putchar);
24797+#endif
24798+
24799+#ifdef CONFIG_CONSOLE_POLL
24800+EXPORT_SYMBOL(acp_serial_poll_put_char);
24801+EXPORT_SYMBOL(acp_serial_poll_get_char);
24802+#endif
24803+
24804+#endif
24805+
24806+/*
24807+ ======================================================================
24808+ ======================================================================
24809+ Linux module stuff.
24810+ ======================================================================
24811+ ======================================================================
24812+*/
24813+
24814+/*
24815+ ----------------------------------------------------------------------
24816+ acp_init
24817+*/
24818+
24819+int __init
24820+acp_serial_init(void)
24821+{
24822+ int ret;
24823+
24824+ printk(KERN_INFO "Serial: ACP Serial Driver\n");
24825+
24826+ /* Clear the ports array */
24827+ memset((void *) &acp_ports[0], 0,
24828+ sizeof(struct uart_acp_port *) * ARRAY_SIZE(acp_ports));
24829+
24830+ /* Register the driver */
24831+ ret = uart_register_driver(&acp_serial_driver);
24832+
24833+ if (0 != ret) {
24834+ printk(KERN_ERR
24835+ "uart_register_driver() failed with %d\n", ret);
24836+ goto out;
24837+ }
24838+
24839+ /* Add ports */
24840+ ret = acp_serial_add_ports(&acp_serial_driver);
24841+
24842+ if (0 != ret) {
24843+ printk(KERN_ERR
24844+ "acp_serial_add_ports() failed with %d\n", ret);
24845+ goto out;
24846+ }
24847+
24848+ out:
24849+ return ret;
24850+}
24851+
24852+module_init(acp_serial_init);
24853+
24854+/*
24855+ ----------------------------------------------------------------------
24856+ acp_serial_exit
24857+*/
24858+
24859+void __exit
24860+acp_serial_exit(void)
24861+{
24862+ acp_serial_delete_ports(&acp_serial_driver);
24863+ uart_unregister_driver(&acp_serial_driver);
24864+}
24865+
24866+module_exit(acp_serial_exit);
24867+
24868+MODULE_AUTHOR("LSI Corporation");
24869+MODULE_DESCRIPTION("ARM AMBA serial port on PPC476 driver");
24870+MODULE_LICENSE("GPL");
24871diff --git a/drivers/lsi/acp/test.c b/drivers/lsi/acp/test.c
24872new file mode 100644
24873index 0000000..46cdf1e
24874--- /dev/null
24875+++ b/drivers/lsi/acp/test.c
24876@@ -0,0 +1,300 @@
24877+/*
24878+ * drivers/lsi/acp/test.c
24879+ *
24880+ * Copyright (C) 2010 LSI
24881+ *
24882+ * This program is free software; you can redistribute it and/or modify
24883+ * it under the terms of the GNU General Public License as published by
24884+ * the Free Software Foundation; either version 2 of the License, or
24885+ * (at your option) any later version.
24886+ *
24887+ * This program is distributed in the hope that it will be useful,
24888+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
24889+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
24890+ * GNU General Public License for more details.
24891+ *
24892+ * You should have received a copy of the GNU General Public License
24893+ * along with this program; if not, write to the Free Software
24894+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
24895+ */
24896+
24897+#include <linux/module.h>
24898+
24899+#undef TICK_TEST
24900+/*#define TICK_TEST*/
24901+
24902+#undef ENV_TEST
24903+/*#define ENV_TEST*/
24904+
24905+#undef IO_TEST
24906+/*#define IO_TEST*/
24907+
24908+#undef LOCK_TEST
24909+/*#define LOCK_TEST*/
24910+
24911+#if defined(TICK_TEST)
24912+
24913+/*
24914+ ======================================================================
24915+ ======================================================================
24916+ Wall Time
24917+ ======================================================================
24918+ ======================================================================
24919+*/
24920+
24921+#include <asm/delay.h>
24922+
24923+int __init
24924+acp_test(void)
24925+{
24926+ int count = 120;
24927+ char *output[] = { "tick", "tock" };
24928+ int index = 0;
24929+
24930+ while (0 < count) {
24931+ printk(KERN_WARN "%s\n", output[index]);
24932+ index ^= 1;
24933+ udelay(1000 * 1000);
24934+ }
24935+
24936+}
24937+
24938+#elif defined(ENV_TEST)
24939+
24940+/*
24941+ ======================================================================
24942+ ======================================================================
24943+ U-Boot Environment
24944+ ======================================================================
24945+ ======================================================================
24946+*/
24947+
24948+#include <linux/mtd/mtd.h>
24949+
24950+int __init
24951+acp_test(void)
24952+{
24953+ struct mtd_info *mtd_env0;
24954+ struct mtd_info *mtd_env1;
24955+ loff_t offset;
24956+ void *buffer_env0;
24957+ void *buffer_env1;
24958+ int i;
24959+ int rc;
24960+
24961+ mtd_env0 = get_mtd_device_nm("env-0");
24962+
24963+ if ((struct mtd_info *) -ENODEV == mtd_env0) {
24964+ printk(KERN_WARN " --> Couldn't Get MTD Device by name!\n");
24965+ return 0;
24966+ }
24967+
24968+ mtd_env1 = get_mtd_device_nm("env-1");
24969+
24970+ if ((struct mtd_info *) -ENODEV == mtd_env1) {
24971+ printk(KERN_WARN " --> Couldn't Get MTD Device by name!\n");
24972+ return 0;
24973+ }
24974+
24975+ printk(KERN_INFO " --> Got the MTD Devices by name: 0x%x/0x%x %llu/%llu "
24976+ "%u/%u %d/%d\n",
24977+ (unsigned int) mtd_env0, (unsigned int) mtd_env1,
24978+ mtd_env0->size, mtd_env1->size,
24979+ mtd_env0->erasesize, mtd_env1->erasesize,
24980+ mtd_env0->numeraseregions, mtd_env1->numeraseregions);
24981+
24982+ for (offset = 0;
24983+ offset < mtd_env0->size;
24984+ offset += mtd_env0->erasesize) {
24985+ printk(" --> mtd_env0 --> offset:0x%08llx is_bad:%d\n",
24986+ offset, mtd_env0->block_isbad(mtd_env0, offset));
24987+ }
24988+
24989+ for (offset = 0;
24990+ offset < mtd_env1->size;
24991+ offset += mtd_env1->erasesize) {
24992+ printk(" --> mtd_env1 --> offset:0x%08llx is_bad:%d\n",
24993+ offset, mtd_env1->block_isbad(mtd_env1, offset));
24994+ }
24995+
24996+ buffer_env0 = kmalloc(0x20000, GFP_KERNEL);
24997+
24998+ if (0 == buffer_env0) {
24999+ printk(KERN_WARN "buffer allocation failed!\n");
25000+ return 0;
25001+ }
25002+
25003+ rc = mtd_env0->read(mtd_env0, 0, 0x20000, &i, buffer_env0);
25004+ printk(KERN_INFO "rc=%d i=0x%x\n", rc, i);
25005+
25006+ for (i = 0; i < 16; ++i) {
25007+ printk(KERN_INFO "0x%08x ",
25008+ ((unsigned long *) buffer_env0)[i]);
25009+ }
25010+
25011+ kfree(buffer_env0);
25012+
25013+ return 0;
25014+}
25015+
25016+#elif defined(IO_TEST)
25017+
25018+/*
25019+ ======================================================================
25020+ ======================================================================
25021+ IO test -- Map IO from various regions...
25022+ ======================================================================
25023+ ======================================================================
25024+*/
25025+
25026+#include <asm/io.h>
25027+
25028+#define ROM_PHYSICAL_ADDRESS 0x2100000000ULL
25029+#define LCM_PHYSICAL_ADDRESS 0x1000000000ULL
25030+
25031+int __init
25032+acp_test(void)
25033+{
25034+ void __iomem *virtual_address;
25035+
25036+ /* Map in ROM */
25037+
25038+ virtual_address = ioremap(ROM_PHYSICAL_ADDRESS, (16 * 1024));
25039+
25040+ if ((void __iomem *) 0 == virtual_address) {
25041+ printk(KERN_ERR "iorema() of 0x%llx failed",
25042+ ROM_PHYSICAL_ADDRESS);
25043+ } else {
25044+ unsigned long *rom = (unsigned long *) virtual_address;
25045+ printk("ROM: 0x%lx 0x%lx 0x%lx 0x%lx\n",
25046+ rom[0], rom[1], rom[2], rom[3]);
25047+ }
25048+
25049+ /* Map in LCM */
25050+
25051+ virtual_address = ioremap(LCM_PHYSICAL_ADDRESS, (16 * 1024));
25052+
25053+ if ((void __iomem *) 0 == virtual_address) {
25054+ printk(KERN_ERR "iorema() of 0x%llx failed",
25055+ LCM_PHYSICAL_ADDRESS);
25056+ } else {
25057+ unsigned long * lcm = (unsigned long *) virtual_address;
25058+ printk("LCM: 0x%lx 0x%lx 0x%lx 0x%lx\n",
25059+ lcm[0], lcm[1], lcm[2], lcm[3]);
25060+ }
25061+
25062+ return 0;
25063+}
25064+
25065+#elif defined(LOCK_TEST)
25066+
25067+#include <linux/kernel.h>
25068+#include <linux/kthread.h>
25069+#include <linux/sched.h>
25070+#include <asm/irq.h>
25071+#include <asm/io.h>
25072+#include <linux/proc_fs.h>
25073+#include <asm/dcr-native.h>
25074+
25075+#include "ncr.h"
25076+
25077+static unsigned long passes;
25078+static unsigned long plls[4];
25079+static spinlock_t pll_test_spinlock = SPIN_LOCK_UNLOCKED;
25080+
25081+static struct task_struct *pll_test_thread;
25082+
25083+static int
25084+pll_test(void *input)
25085+{
25086+ unsigned long ppcsys;
25087+ unsigned long ddr1;
25088+ unsigned long ddr0;
25089+
25090+ for (;;) {
25091+ if (kthread_should_stop())
25092+ break;
25093+
25094+ schedule();
25095+ spin_lock(&pll_test_spinlock);
25096+ ppcsys = mfdcr(0xd01);
25097+ ddr1 = ddr0 = 0;
25098+
25099+ if (0 != ncr_read(NCP_REGION_ID(0xd, 0), 0x1c, 4, &ddr1))
25100+ printk(KERN_ERR "DDR1 NCR Read Error\n");
25101+
25102+ if (0 != ncr_read(NCP_REGION_ID(0x23, 0), 0x1c, 4, &ddr0))
25103+ printk(KERN_ERR "DDR1 NCR Read Error\n");
25104+
25105+ ++passes;
25106+
25107+ if (0 == (ppcsys & 0x80000000))
25108+ ++plls[0];
25109+
25110+ if (0 == (ppcsys & 0x40000000))
25111+ ++plls[1];
25112+
25113+ if (0 == (ddr1 & 0x1))
25114+ ++plls[2];
25115+
25116+ if (0 == (ddr0 & 0x1))
25117+ ++plls[3];
25118+
25119+ spin_unlock(&pll_test_spinlock);
25120+ }
25121+
25122+ return 0;
25123+}
25124+
25125+static int pll_read_proc(char *page, char **start, off_t offset,
25126+ int count, int *eof, void *data)
25127+{
25128+ int length;
25129+
25130+ spin_lock(&pll_test_spinlock);
25131+ length = sprintf(page,
25132+ "Passes:0x%08x PLL:0x%08x SYS:0x%08x DDR1:0x%08x "
25133+ "DDR0:0x%08x\n",
25134+ passes, plls[0], plls[1], plls[2], plls[3]);
25135+ passes = 0;
25136+ plls[0] = plls[1] = plls[2] = plls[3] = 0;
25137+ spin_unlock(&pll_test_spinlock);
25138+ *eof = 1;
25139+
25140+ return length;
25141+}
25142+
25143+int __init
25144+acp_test(void)
25145+{
25146+ create_proc_read_entry("driver/lost_locks",
25147+ 0, NULL, pll_read_proc, NULL);
25148+ pll_test_thread = kthread_run(pll_test, (void *)0, "PLL Lock Test");
25149+ return 0;
25150+}
25151+
25152+#else
25153+
25154+/*
25155+ ======================================================================
25156+ ======================================================================
25157+ No Test Defined...
25158+ ======================================================================
25159+ ======================================================================
25160+*/
25161+
25162+int __init
25163+acp_test(void)
25164+{
25165+ printk("Define a Test!\n");
25166+
25167+ return 0;
25168+}
25169+
25170+#endif
25171+
25172+module_init(acp_test);
25173+
25174+MODULE_AUTHOR("LSI Corporation");
25175+MODULE_DESCRIPTION("Timing Test");
25176+MODULE_LICENSE("GPL");
25177diff --git a/drivers/lsi/acp/ubootenv.c b/drivers/lsi/acp/ubootenv.c
25178new file mode 100644
25179index 0000000..c40c35d
25180--- /dev/null
25181+++ b/drivers/lsi/acp/ubootenv.c
25182@@ -0,0 +1,557 @@
25183+/*
25184+ * drivers/lsi/acp/ubootenv.c
25185+ *
25186+ * Copyright (C) 2009 LSI
25187+ *
25188+ * This program is free software; you can redistribute it and/or modify
25189+ * it under the terms of the GNU General Public License as published by
25190+ * the Free Software Foundation; either version 2 of the License, or
25191+ * (at your option) any later version.
25192+ *
25193+ * This program is distributed in the hope that it will be useful,
25194+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
25195+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
25196+ * GNU General Public License for more details.
25197+ *
25198+ * You should have received a copy of the GNU General Public License
25199+ * along with this program; if not, write to the Free Software
25200+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 021.1.1_pre.17 USA
25201+ */
25202+
25203+#include <linux/module.h>
25204+#include <linux/kernel.h>
25205+#include <linux/string.h>
25206+#include <linux/vmalloc.h>
25207+#include <linux/mtd/mtd.h>
25208+#include <linux/crc32.h>
25209+#include <asm/io.h>
25210+
25211+/*
25212+ ======================================================================
25213+ Data types and Macros
25214+ ======================================================================
25215+*/
25216+
25217+#undef DEBUG_EXPORT_SYMBOLS
25218+/*#define DEBUG_EXPORT_SYMBOLS*/
25219+#ifdef DEBUG_EXPORT_SYMBOLS
25220+#define STATIC
25221+#else
25222+#define STATIC static
25223+#endif
25224+
25225+/*
25226+ DEBUG
25227+*/
25228+
25229+#undef DEBUG
25230+/*#define DEBUG*/
25231+#if defined( DEBUG )
25232+#define DEBUG_PRINT( format, args... ) do { \
25233+printk( "ubootenv:%s:%d - DEBUG - ", __FUNCTION__, __LINE__ ); \
25234+printk( format, ##args ); \
25235+} while( 0 );
25236+#else
25237+#define DEBUG_PRINT( format, args... ) { }
25238+#endif
25239+
25240+/*
25241+ WARN
25242+*/
25243+
25244+#undef WARN
25245+#define WARN
25246+#if defined( WARN )
25247+#define WARN_PRINT( format, args... ) do { \
25248+printk( "ubootenv:%s:%d - WARN - ", __FUNCTION__, __LINE__ ); \
25249+printk( format, ##args ); \
25250+} while( 0 );
25251+#else
25252+#define WARN_PRINT( format, args... ) { }
25253+#endif
25254+
25255+/*
25256+ ERROR
25257+*/
25258+
25259+#define ERROR_PRINT( format, args... ) do { \
25260+printk( "ubootenv:%s:%d - ERROR - ", __FUNCTION__, __LINE__ ); \
25261+printk( format, ##args ); \
25262+} while( 0 );
25263+
25264+/*
25265+ ======================================================================
25266+ Global Variables
25267+ ======================================================================
25268+*/
25269+
25270+static unsigned long uboot_env_size = (128 * 1024);
25271+static unsigned long uboot_env_cs_size = (128 * 1024);
25272+static int uboot_env_current = -1;
25273+
25274+#define ENVIRONMENT_DATA_SIZE( size ) ( size - ( 2 * sizeof( unsigned long ) ) )
25275+
25276+typedef struct environment {
25277+
25278+ unsigned long crc32;
25279+ unsigned long flags;
25280+ unsigned char data [ ];
25281+
25282+} __attribute__ ( ( packed ) ) environment_t;
25283+
25284+static environment_t * environment = ( environment_t * ) 0;
25285+
25286+static unsigned long crc32_lut [ 256 ] = {
25287+
25288+ /* 0 -- */ 0u, 1996959894u, 3993919788u, 2567524794u,
25289+ /* 4 -- */ 124634137u, 1886057615u, 3915621685u, 2657392035u,
25290+ /* 8 -- */ 249268274u, 2044508324u, 3772115230u, 2547177864u,
25291+ /* 12 -- */ 162941995u, 2125561021u, 3887607047u, 2428444049u,
25292+ /* 16 -- */ 498536548u, 1789927666u, 4089016648u, 2227061214u,
25293+ /* 20 -- */ 450548861u, 1843258603u, 4107580753u, 2211677639u,
25294+ /* 24 -- */ 325883990u, 1684777152u, 4251122042u, 2321926636u,
25295+ /* 28 -- */ 335633487u, 1661365465u, 4195302755u, 2366115317u,
25296+ /* 32 -- */ 997073096u, 1281953886u, 3579855332u, 2724688242u,
25297+ /* 36 -- */ 1006888145u, 1258607687u, 3524101629u, 2768942443u,
25298+ /* 40 -- */ 901097722u, 1119000684u, 3686517206u, 2898065728u,
25299+ /* 44 -- */ 853044451u, 1172266101u, 3705015759u, 2882616665u,
25300+ /* 48 -- */ 651767980u, 1373503546u, 3369554304u, 3218104598u,
25301+ /* 52 -- */ 565507253u, 1454621731u, 3485111705u, 3099436303u,
25302+ /* 56 -- */ 671266974u, 1594198024u, 3322730930u, 2970347812u,
25303+ /* 60 -- */ 795835527u, 1483230225u, 3244367275u, 3060149565u,
25304+ /* 64 -- */ 1994146192u, 31158534u, 2563907772u, 4023717930u,
25305+ /* 68 -- */ 1907459465u, 112637215u, 2680153253u, 3904427059u,
25306+ /* 72 -- */ 2013776290u, 251722036u, 2517215374u, 3775830040u,
25307+ /* 76 -- */ 2137656763u, 141376813u, 2439277719u, 3865271297u,
25308+ /* 80 -- */ 1802195444u, 476864866u, 2238001368u, 4066508878u,
25309+ /* 84 -- */ 1812370925u, 453092731u, 2181625025u, 4111451223u,
25310+ /* 88 -- */ 1706088902u, 314042704u, 2344532202u, 4240017532u,
25311+ /* 92 -- */ 1658658271u, 366619977u, 2362670323u, 4224994405u,
25312+ /* 96 -- */ 1303535960u, 984961486u, 2747007092u, 3569037538u,
25313+ /* 100 -- */ 1256170817u, 1037604311u, 2765210733u, 3554079995u,
25314+ /* 104 -- */ 1131014506u, 879679996u, 2909243462u, 3663771856u,
25315+ /* 108 -- */ 1141124467u, 855842277u, 2852801631u, 3708648649u,
25316+ /* 112 -- */ 1342533948u, 654459306u, 3188396048u, 3373015174u,
25317+ /* 116 -- */ 1466479909u, 544179635u, 3110523913u, 3462522015u,
25318+ /* 120 -- */ 1591671054u, 702138776u, 2966460450u, 3352799412u,
25319+ /* 124 -- */ 1504918807u, 783551873u, 3082640443u, 3233442989u,
25320+ /* 128 -- */ 3988292384u, 2596254646u, 62317068u, 1957810842u,
25321+ /* 132 -- */ 3939845945u, 2647816111u, 81470997u, 1943803523u,
25322+ /* 136 -- */ 3814918930u, 2489596804u, 225274430u, 2053790376u,
25323+ /* 140 -- */ 3826175755u, 2466906013u, 167816743u, 2097651377u,
25324+ /* 144 -- */ 4027552580u, 2265490386u, 503444072u, 1762050814u,
25325+ /* 148 -- */ 4150417245u, 2154129355u, 426522225u, 1852507879u,
25326+ /* 152 -- */ 4275313526u, 2312317920u, 282753626u, 1742555852u,
25327+ /* 156 -- */ 4189708143u, 2394877945u, 397917763u, 1622183637u,
25328+ /* 160 -- */ 3604390888u, 2714866558u, 953729732u, 1340076626u,
25329+ /* 164 -- */ 3518719985u, 2797360999u, 1068828381u, 1219638859u,
25330+ /* 168 -- */ 3624741850u, 2936675148u, 906185462u, 1090812512u,
25331+ /* 172 -- */ 3747672003u, 2825379669u, 829329135u, 1181335161u,
25332+ /* 176 -- */ 3412177804u, 3160834842u, 628085408u, 1382605366u,
25333+ /* 180 -- */ 3423369109u, 3138078467u, 570562233u, 1426400815u,
25334+ /* 184 -- */ 3317316542u, 2998733608u, 733239954u, 1555261956u,
25335+ /* 188 -- */ 3268935591u, 3050360625u, 752459403u, 1541320221u,
25336+ /* 192 -- */ 2607071920u, 3965973030u, 1969922972u, 40735498u,
25337+ /* 196 -- */ 2617837225u, 3943577151u, 1913087877u, 83908371u,
25338+ /* 200 -- */ 2512341634u, 3803740692u, 2075208622u, 213261112u,
25339+ /* 204 -- */ 2463272603u, 3855990285u, 2094854071u, 198958881u,
25340+ /* 208 -- */ 2262029012u, 4057260610u, 1759359992u, 534414190u,
25341+ /* 212 -- */ 2176718541u, 4139329115u, 1873836001u, 414664567u,
25342+ /* 216 -- */ 2282248934u, 4279200368u, 1711684554u, 285281116u,
25343+ /* 220 -- */ 2405801727u, 4167216745u, 1634467795u, 376229701u,
25344+ /* 224 -- */ 2685067896u, 3608007406u, 1308918612u, 956543938u,
25345+ /* 228 -- */ 2808555105u, 3495958263u, 1231636301u, 1047427035u,
25346+ /* 232 -- */ 2932959818u, 3654703836u, 1088359270u, 936918000u,
25347+ /* 236 -- */ 2847714899u, 3736837829u, 1202900863u, 817233897u,
25348+ /* 240 -- */ 3183342108u, 3401237130u, 1404277552u, 615818150u,
25349+ /* 244 -- */ 3134207493u, 3453421203u, 1423857449u, 601450431u,
25350+ /* 248 -- */ 3009837614u, 3294710456u, 1567103746u, 711928724u,
25351+ /* 252 -- */ 3020668471u, 3272380065u, 1510334235u, 755167117u
25352+
25353+};
25354+
25355+/*
25356+ ======================================================================
25357+ Prototypes
25358+ ======================================================================
25359+*/
25360+
25361+STATIC unsigned long ubootenv_crc32( unsigned char *, unsigned long );
25362+STATIC int ubootenv_initialize( void );
25363+STATIC void ubootenv_finalize( void );
25364+STATIC int ubootenv_update( void );
25365+STATIC int ubootenv_read( struct mtd_info *, size_t, void * );
25366+STATIC int ubootenv_write( struct mtd_info *, size_t, void * );
25367+
25368+/*
25369+ ======================================================================
25370+ ======================================================================
25371+*/
25372+
25373+/*
25374+ ----------------------------------------------------------------------
25375+ ubootenv_crc32
25376+*/
25377+
25378+STATIC unsigned long
25379+ubootenv_crc32( unsigned char * start, unsigned long size )
25380+{
25381+
25382+ unsigned long crc = ( unsigned long ) 0xffffffff, index;
25383+
25384+ DEBUG_PRINT( "start=0x%lx size=0x%lx\n", (unsigned long) start, size );
25385+
25386+ for( index = 0; index < size; index ++ ) {
25387+
25388+ unsigned long temp = ( crc ^ * ( start ++ ) ) & 0x000000ff;
25389+ crc = ( ( crc >> 8 ) & 0x00ffffff ) ^ crc32_lut [ temp ];
25390+
25391+ }
25392+
25393+ return ~ crc;
25394+
25395+}
25396+
25397+#ifdef DEBUG_EXPORT_SYMBOLS
25398+EXPORT_SYMBOL( ubootenv_crc32 );
25399+#endif /* DEBUG_EXPORT_SYMBOLS */
25400+
25401+/*
25402+ ----------------------------------------------------------------------
25403+ ubootenv_read
25404+*/
25405+
25406+STATIC int
25407+ubootenv_read(struct mtd_info *mtd, size_t size, void *buffer)
25408+{
25409+ int read = 0;
25410+ loff_t offset = 0;
25411+
25412+ DEBUG_PRINT("size=0x%x mtd->erasesize=0x%x mtd->size=0x%llx\n",
25413+ size, mtd->erasesize, mtd->size);
25414+
25415+ if( 0 != size % mtd->erasesize ) {
25416+ ERROR_PRINT( "size=%u/%llu is not a multiple of erasesize=%u\n",
25417+ size, mtd->size, mtd->erasesize );
25418+ return -1;
25419+ }
25420+
25421+ if( size > mtd->size ) {
25422+ ERROR_PRINT( "size=%llu can't contain size=%u\n",
25423+ mtd->size, size );
25424+ return -1;
25425+ }
25426+
25427+ while( ( read < size ) && ( offset < mtd->size ) ) {
25428+ int return_code;
25429+ size_t bytes_read;
25430+
25431+ DEBUG_PRINT("read=0x%x size=0x%x offset=0x%llx\n",
25432+ read, size, offset);
25433+
25434+ if( 0 != mtd->block_isbad( mtd, offset ) ) {
25435+ offset += mtd->erasesize;
25436+ continue;
25437+ }
25438+
25439+ return_code = mtd->read( mtd, offset, mtd->erasesize,
25440+ & bytes_read, ( u_char * ) buffer );
25441+
25442+ if( mtd->erasesize != bytes_read ) {
25443+ ERROR_PRINT( "Error Reading Environment!\n" );
25444+ return -1;
25445+ }
25446+
25447+ offset += mtd->erasesize;
25448+ read += mtd->erasesize;
25449+ buffer += mtd->erasesize;
25450+ }
25451+
25452+ return 0;
25453+}
25454+
25455+#ifdef DEBUG_EXPORT_SYMBOLS
25456+EXPORT_SYMBOL( ubootenv_read );
25457+#endif /* DEBUG_EXPORT_SYMBOLS */
25458+
25459+/*
25460+ ----------------------------------------------------------------------
25461+ ubootenv_write
25462+*/
25463+
25464+STATIC int
25465+ubootenv_write( struct mtd_info * mtd, size_t size, void * buffer )
25466+{
25467+ DEBUG_PRINT( "Erasing %s\n", mtd->name );
25468+ return 0;
25469+}
25470+
25471+#ifdef DEBUG_EXPORT_SYMBOLS
25472+EXPORT_SYMBOL( ubootenv_write );
25473+#endif /* DEBUG_EXPORT_SYMBOLS */
25474+
25475+/*
25476+ ----------------------------------------------------------------------
25477+ ubootenv_initialize
25478+*/
25479+
25480+STATIC int
25481+ubootenv_initialize( void )
25482+{
25483+ environment_t * env0;
25484+ environment_t * env1;
25485+ unsigned long crc32_env0;
25486+ unsigned long crc32_env1;
25487+ struct mtd_info * mtd_env0;
25488+ struct mtd_info * mtd_env1;
25489+
25490+ DEBUG_PRINT( "Getting MTD Devices.\n" );
25491+
25492+ if( ( struct mtd_info * ) -ENODEV ==
25493+ ( mtd_env0 = get_mtd_device_nm( "env-0" ) ) ) {
25494+ ERROR_PRINT( " --> Couldn't get MTD device by name!\n" );
25495+ return -1;
25496+ }
25497+
25498+ if( ( struct mtd_info * ) -ENODEV ==
25499+ ( mtd_env1 = get_mtd_device_nm( "env-1" ) ) ) {
25500+ ERROR_PRINT( " --> Couldn't get MTD device by name!\n" );
25501+ return -1;
25502+ }
25503+
25504+ /*
25505+ If the erasesize is larger than the size of the environment,
25506+ change the environment size (so reading and writing will
25507+ work as expected) but use the original environment size to
25508+ calculate the checksum.
25509+ */
25510+
25511+ if (mtd_env0->erasesize > uboot_env_size)
25512+ uboot_env_size = mtd_env0->erasesize;
25513+
25514+ DEBUG_PRINT( "Allocating Environment Buffers.\n" );
25515+
25516+ if( ( environment_t * ) 0 ==
25517+ ( env0 = ( environment_t * ) vmalloc( uboot_env_size ) ) ) {
25518+ ERROR_PRINT( "Unable to allocate %lu bytes\n", uboot_env_size );
25519+ return -1;
25520+ }
25521+
25522+ if( ( environment_t * ) 0 ==
25523+ ( env1 = ( environment_t * ) vmalloc( uboot_env_size ) ) ) {
25524+ ERROR_PRINT( "Unable to allocate %lu bytes\n", uboot_env_size );
25525+ vfree( ( void * ) env0 );
25526+ return -1;
25527+ }
25528+
25529+ DEBUG_PRINT( "Reading Environments.\n" );
25530+
25531+ if( 0 != ubootenv_read( mtd_env0, uboot_env_size, env0 ) ) {
25532+ return -1;
25533+ }
25534+
25535+ if( 0 != ubootenv_read( mtd_env1, uboot_env_size, env1 ) ) {
25536+ return -1;
25537+ }
25538+
25539+ DEBUG_PRINT( "Calculating CRC values.\n" );
25540+ crc32_env0 = ubootenv_crc32((unsigned char *)env0->data,
25541+ ENVIRONMENT_DATA_SIZE(uboot_env_cs_size));
25542+ crc32_env1 = ubootenv_crc32((unsigned char *)env1->data,
25543+ ENVIRONMENT_DATA_SIZE(uboot_env_cs_size));
25544+ DEBUG_PRINT( "crc32_env0=0x%lx env0->crc32=0x%lx\n",
25545+ crc32_env0, env0->crc32);
25546+ DEBUG_PRINT( "crc32_env2=0x%lx env1->crc32=0x%lx\n",
25547+ crc32_env1, env1->crc32);
25548+ DEBUG_PRINT( "Picking a Copy.\n" );
25549+
25550+ if( ( crc32_env0 == env0->crc32 ) &&
25551+ ( crc32_env1 != env1->crc32 ) ) {
25552+ /* Use env0 */
25553+ DEBUG_PRINT( "Using Copy 0.\n" );
25554+ uboot_env_current = 0;
25555+ vfree( ( void * ) env1 );
25556+ environment = env0;
25557+ } else if( ( crc32_env0 != env0->crc32 ) &&
25558+ ( crc32_env1 == env1->crc32 ) ) {
25559+ /* Use env1 */
25560+ DEBUG_PRINT( "Using Copy 1.\n" );
25561+ uboot_env_current = 1;
25562+ vfree( ( void * ) env0 );
25563+ environment = env1;
25564+ } else if( ( crc32_env0 != env0->crc32 ) &&
25565+ ( crc32_env1 != env1->crc32 ) ) {
25566+ /* No Environment Available */
25567+ uboot_env_current = -1;
25568+ vfree( ( void * ) env0 );
25569+ vfree( ( void * ) env1 );
25570+ ERROR_PRINT( "Bad CRCs: No Valid U-Boot Environment Found!\n" );
25571+ return -1;
25572+ } else if( env0->flags > env1->flags ) {
25573+ /* Use env0 */
25574+ DEBUG_PRINT( "Using Copy 0.\n" );
25575+ uboot_env_current = 0;
25576+ vfree( ( void * ) env1 );
25577+ environment = env0;
25578+ } else if( env0->flags < env1->flags ) {
25579+ /* Use env1 */
25580+ DEBUG_PRINT( "Using Copy 1.\n" );
25581+ uboot_env_current = 1;
25582+ vfree( ( void * ) env0 );
25583+ environment = env1;
25584+ } else if( env0->flags == env1->flags ) {
25585+ /* Use Either */
25586+ DEBUG_PRINT( "Using Copy 0.\n" );
25587+ uboot_env_current = 0;
25588+ vfree( ( void * ) env1 );
25589+ environment = env0;
25590+ } else {
25591+ /* No Environment Available */
25592+ uboot_env_current = -1;
25593+ vfree( ( void * ) env0 );
25594+ vfree( ( void * ) env1 );
25595+ ERROR_PRINT( "Bad Flags: No Valid U-Boot Environment Found!\n" );
25596+ return -1;
25597+ }
25598+
25599+ DEBUG_PRINT( "Done...\n" );
25600+ return 0;
25601+
25602+}
25603+
25604+#ifdef DEBUG_EXPORT_SYMBOLS
25605+EXPORT_SYMBOL( ubootenv_initialize );
25606+#endif /* DEBUG_EXPORT_SYMBOLS */
25607+
25608+/*
25609+ ----------------------------------------------------------------------
25610+ ubootenv_update
25611+*/
25612+
25613+STATIC int
25614+ubootenv_update( void )
25615+{
25616+ if( NULL == environment ) {
25617+ ERROR_PRINT( "No Environment Available to Write.\n" );
25618+ return -1;
25619+ }
25620+
25621+ if( -1 == uboot_env_current ) {
25622+ ERROR_PRINT( "Environment Copy Selection is Invalid.\n" );
25623+ return -1;
25624+ }
25625+
25626+ if( 0 == uboot_env_current ) {
25627+ DEBUG_PRINT( "Saving Environment in Copy 1.\n" );
25628+ } else {
25629+ DEBUG_PRINT( "Saving Environment in Copy 0.\n" );
25630+ }
25631+
25632+ return 0;
25633+}
25634+
25635+#ifdef DEBUG_EXPORT_SYMBOLS
25636+EXPORT_SYMBOL( ubootenv_update );
25637+#endif /* DEBUG_EXPORT_SYMBOLS */
25638+
25639+/*
25640+ ----------------------------------------------------------------------
25641+ ubootenv_finalize
25642+*/
25643+
25644+STATIC void
25645+ubootenv_finalize( void )
25646+{
25647+ DEBUG_PRINT( "Freeing the environment.\n" );
25648+
25649+ if( ( void * ) 0 != environment ) {
25650+ vfree( ( void * ) environment );
25651+ }
25652+
25653+ environment = ( environment_t * ) 0;
25654+}
25655+
25656+#ifdef DEBUG_EXPORT_SYMBOLS
25657+EXPORT_SYMBOL( ubootenv_finalize );
25658+#endif /* DEBUG_EXPORT_SYMBOLS */
25659+
25660+/*
25661+ ======================================================================
25662+ Public Interface
25663+ ======================================================================
25664+*/
25665+
25666+/*
25667+ ----------------------------------------------------------------------
25668+ ubootenv_get
25669+*/
25670+
25671+int
25672+ubootenv_get( const char * key, char * value )
25673+{
25674+ int return_code = -1;
25675+ char * string;
25676+
25677+ if( NULL == environment ) {
25678+ ERROR_PRINT( "Environment Isn't Available!\n" );
25679+ return -1;
25680+ }
25681+
25682+ string = environment->data;
25683+
25684+ while( 0x00 != string [ 0 ] ) {
25685+
25686+ if( 0 == strncmp( key, string, strlen( key ) ) ) {
25687+ char * value_ = strchr( string, '=' );
25688+ ++ value_;
25689+ strcpy( value, value_ );
25690+ return_code = 0;
25691+ break;
25692+ }
25693+
25694+ string += ( strlen( string ) + 1 );
25695+ }
25696+
25697+ return return_code;
25698+}
25699+
25700+/*
25701+ ======================================================================
25702+ ======================================================================
25703+ Linux Module Stuff
25704+ ======================================================================
25705+ ======================================================================
25706+*/
25707+
25708+/*
25709+ ----------------------------------------------------------------------
25710+ ubootenv_module_init
25711+*/
25712+
25713+int __init
25714+ubootenv_module_init( void )
25715+{
25716+ DEBUG_PRINT( "\n" );
25717+ return ubootenv_initialize( );
25718+}
25719+
25720+module_init( ubootenv_module_init );
25721+
25722+/*
25723+ ----------------------------------------------------------------------
25724+ ubootenv_module_exit
25725+*/
25726+
25727+void __exit
25728+ubootenv_module_exit( void )
25729+{
25730+ DEBUG_PRINT( "\n" );
25731+ ubootenv_finalize( );
25732+ return;
25733+}
25734+
25735+module_exit( ubootenv_module_exit );
25736+
25737+MODULE_LICENSE("GPL");
25738+MODULE_AUTHOR( "John Jacques <john.jacques@lsi.com>" );
25739+MODULE_DESCRIPTION("Read Access of the U-Boot Environment");
25740diff --git a/drivers/lsi/acp/version.c b/drivers/lsi/acp/version.c
25741new file mode 100644
25742index 0000000..6c193c7
25743--- /dev/null
25744+++ b/drivers/lsi/acp/version.c
25745@@ -0,0 +1,347 @@
25746+/*
25747+ * version.c
25748+ *
25749+ * Copyright (C) 2010 LSI
25750+ *
25751+ * This program is free software; you can redistribute it and/or modify
25752+ * it under the terms of the GNU General Public License as published by
25753+ * the Free Software Foundation; either version 2 of the License, or
25754+ * (at your option) any later version.
25755+ *
25756+ * This program is distributed in the hope that it will be useful,
25757+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
25758+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
25759+ * GNU General Public License for more details.
25760+ *
25761+ * You should have received a copy of the GNU General Public License
25762+ * along with this program; if not, write to the Free Software
25763+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 021_2_6.17 USA
25764+ */
25765+
25766+#include <linux/module.h>
25767+#include <linux/init.h>
25768+#include <linux/kernel.h>
25769+#include <linux/string.h>
25770+#include <linux/sched.h>
25771+#include <linux/time.h>
25772+#include <linux/proc_fs.h>
25773+#include <asm/io.h>
25774+#include <asm/bitops.h>
25775+
25776+#include "../common/debug.h"
25777+#include "../common/version.h"
25778+#include "ncr.h"
25779+
25780+#undef TLBERRORCOUNTER
25781+/*#define TLBERRORCOUNTER*/
25782+#ifdef TLBERRORCOUNTER
25783+unsigned long dtlb_misses = 0;
25784+unsigned long itlb_misses = 0;
25785+#endif
25786+
25787+extern int ubootenv_get(const char *, char *);
25788+
25789+/*
25790+ MODULE
25791+*/
25792+
25793+MODULE_LICENSE("GPL");
25794+MODULE_DESCRIPTION("Information about the Agere APP3xx");
25795+
25796+/*
25797+ */
25798+
25799+unsigned agere_app3xx_revision;
25800+EXPORT_SYMBOL(agere_app3xx_revision);
25801+
25802+/*
25803+ ----------------------------------------------------------------------
25804+ timer_test_
25805+*/
25806+
25807+#ifdef TIMER_TEST
25808+
25809+static void
25810+timer_test_(void)
25811+{
25812+ const int first_timer_ = 0;
25813+ const int last_timer_ = 7;
25814+ int timer_;
25815+ unsigned long timer_base_[] = {
25816+ TIMER0_BASE, TIMER1_BASE, TIMER2_BASE, TIMER3_BASE,
25817+ TIMER4_BASE, TIMER5_BASE, TIMER6_BASE, TIMER7_BASE
25818+ };
25819+
25820+ {
25821+ const int number_of_reads_ = 200;
25822+ unsigned long time_[number_of_reads_];
25823+ int index_;
25824+
25825+ for (index_ = 0; index_ < number_of_reads_; ++index_)
25826+ time_[index_] = ~(readl((TIMER0_BASE + TIMER_n_VALUE)));
25827+
25828+ for (index_ = 0; index_ < number_of_reads_; ++index_) {
25829+ printk(KERN_INFO "%03d : 0x%08x\n", index_, time_[index_]);
25830+
25831+ if (0 < index_) {
25832+ if (time_[index_] <= time_[(index_ - 1)]) {
25833+ printk(KERN_ERR "WHAT!\n");
25834+ }
25835+ }
25836+ }
25837+ }
25838+
25839+ for (timer_ = first_timer_; timer_ <= last_timer_; ++timer_) {
25840+ unsigned long base_ = timer_base_[timer_];
25841+
25842+ printk(KERN_INFO "load value=0x%x control=0x%x background load=0x%x\n",
25843+ readl((base_ + TIMER_n_LOAD)),
25844+ readl((base_ + TIMER_n_CONTROL)),
25845+ readl((base_ + TIMER_n_BACKGROUND_LOAD)));
25846+ }
25847+}
25848+
25849+#endif /* TIMER_TEST */
25850+
25851+#ifdef SHMEM_TEST
25852+
25853+/*
25854+ ----------------------------------------------------------------------
25855+ shmem_test
25856+*/
25857+
25858+void
25859+shmem_test(void)
25860+{
25861+ void __iomem *cached_shmem;
25862+ void __iomem *uncached_shmem;
25863+ unsigned i;
25864+ unsigned long start_time;
25865+
25866+ uncached_shmem = ioremap_nocache(APP3K_PHYS_SHMEM_BASE, PAGE_SZ);
25867+ cached_shmem = ioremap_cached(APP3K_PHYS_SHMEM_BASE + PAGE_SZ,
25868+ APP_SHMEM_SIZE - PAGE_SZ);
25869+
25870+ if ((void __iomem *) 0 == cached_shmem) {
25871+ printk(KERN_ERR "Unable to map shmem as cached IO\n");
25872+ return;
25873+ }
25874+
25875+ printk("cached_shmem=0x%08p shmem=0x%08x uncached_shmem=0x%08p\n",
25876+ cached_shmem, APP_SHMEM_BASE, uncached_shmem);
25877+
25878+#if 0
25879+ i = 0;
25880+ start_time = jiffies;
25881+ while (jiffies == start_time)
25882+ ;
25883+ start_time = jiffies;
25884+ while (jiffies == start_time) {
25885+
25886+ unsigned j;
25887+ unsigned char * dest = (unsigned char *) APP_SHMEM_BASE;
25888+
25889+ for (j = 0; j < APP_SHMEM_SIZE; ++j, ++dest) {
25890+ *dest = j;
25891+ }
25892+
25893+ ++i;
25894+ }
25895+
25896+ printk("%d iterations uncached\n", i);
25897+
25898+ i = 0;
25899+ start_time = jiffies;
25900+ while (jiffies == start_time)
25901+ ;
25902+ start_time = jiffies;
25903+ while (jiffies == start_time) {
25904+ unsigned j;
25905+ unsigned char * dest = (unsigned char *) cached_shmem;
25906+
25907+ for (j = 0; j < APP_SHMEM_SIZE; ++j, ++dest) {
25908+ *dest = j;
25909+ }
25910+
25911+ ++i;
25912+ }
25913+
25914+ printk(KERN_INFO "%d iterations cached\n", i);
25915+#endif
25916+
25917+ return;
25918+}
25919+
25920+#endif /* SHMEM_TEST */
25921+
25922+#ifdef TLBERRORCOUNTER
25923+
25924+static int
25925+tlberror_create_string(char *buffer)
25926+{
25927+ int length = 0;
25928+
25929+ length = sprintf(buffer,
25930+ "Data TLB Errors: %d\n"
25931+ "Instruction TLB Errors: %d\n",
25932+ dtlb_misses, itlb_misses);
25933+
25934+ return length;
25935+}
25936+
25937+/*
25938+ ----------------------------------------------------------------------
25939+ tlberror_read_proc
25940+*/
25941+
25942+static int
25943+tlberror_read_proc(char *page, char **start, off_t offset,
25944+ int count, int *eof, void *data)
25945+{
25946+ int length = 0;
25947+
25948+ length = tlberror_create_string(page);
25949+ *eof = 1;
25950+
25951+ return length;
25952+}
25953+
25954+#endif /* TLBERRORCOUNTER */
25955+
25956+/*
25957+ ------------------------------------------------------------------------------
25958+ is_asic
25959+*/
25960+
25961+int
25962+is_asic(void)
25963+{
25964+#ifdef CONFIG_ACPISS
25965+ return 0;
25966+#else
25967+#if 1
25968+ unsigned long nca_config;
25969+
25970+ if (0 == ncr_read(NCP_REGION_ID(0x16, 0xff), 0x10, 4, &nca_config)) {
25971+ return (0 == (nca_config & 0x80000000));
25972+ }
25973+
25974+ return -1;
25975+#else
25976+ printk("%s:%s:%d - Writing 0x%x to 0x%x (NCA=0x%x)\n",
25977+ __FILE__, __FUNCTION__, __LINE_,
25978+ value, address, NCA); /* ZZZ */
25979+ return 0;
25980+#endif
25981+#endif
25982+}
25983+
25984+/*
25985+ ----------------------------------------------------------------------
25986+ info_create_string
25987+*/
25988+
25989+static int
25990+info_create_string(char *buffer)
25991+{
25992+ int length = 0;
25993+ char uboot_version2[80];
25994+ char uboot_version3[80];
25995+
25996+#ifdef CONFIG_ACPISS
25997+ sprintf(uboot_version2, "Unknown");
25998+ sprintf(uboot_version3, "Unknown");
25999+#else
26000+ if (0 != ubootenv_get("version2", uboot_version2)) {
26001+ sprintf(uboot_version2, "Unknown");
26002+ }
26003+
26004+ if (0 != ubootenv_get("version3", uboot_version3)) {
26005+ sprintf(uboot_version3, "Unknown");
26006+ }
26007+#endif
26008+
26009+ length = sprintf(buffer,
26010+ "LSI ACP Info\n" \
26011+ "LSI Version %s\n" \
26012+ "Platform: %s\n" \
26013+ "U-Boot Version (2nd Stage) %s\n" \
26014+ "U-Boot Version (3rd Stage) %s\n",
26015+ ACP_VERSION, (is_asic() ? "ASIC" : "FPGA"),
26016+ uboot_version2, uboot_version3);
26017+
26018+ /* that's all */
26019+ return length;
26020+
26021+}
26022+
26023+/*
26024+ ----------------------------------------------------------------------
26025+ info_read_proc
26026+*/
26027+
26028+static int
26029+info_read_proc(char *page, char **start, off_t offset,
26030+ int count, int *eof, void *data)
26031+{
26032+ int length_ = 0;
26033+
26034+#ifdef SHMEM_TEST
26035+ shmem_test();
26036+#endif /* SHMEM_TEST */
26037+
26038+#ifdef TIMER_TEST
26039+ timer_test_();
26040+#endif /* TIMER_TEST */
26041+
26042+#if !defined(SHMEM_TEST) && !defined(TIMER_TEST)
26043+ length_ = info_create_string(page);
26044+#endif
26045+ *eof = 1;
26046+
26047+ return length_;
26048+}
26049+
26050+/*
26051+ ----------------------------------------------------------------------
26052+ info_module_init
26053+*/
26054+
26055+int __init
26056+info_module_init(void)
26057+{
26058+
26059+ char buffer_[256];
26060+
26061+ create_proc_read_entry("driver/version", 0, NULL, info_read_proc, NULL);
26062+ info_create_string(buffer_);
26063+ printk("%s", buffer_);
26064+
26065+#ifdef TLBERRORCOUNTER
26066+ create_proc_read_entry("driver/tlberrors",
26067+ 0, NULL, tlberror_read_proc, NULL);
26068+#endif
26069+
26070+ return 0;
26071+
26072+}
26073+
26074+module_init(info_module_init);
26075+
26076+/*
26077+ ----------------------------------------------------------------------
26078+ info_module_exit
26079+*/
26080+
26081+void __exit
26082+info_module_exit(void)
26083+{
26084+#ifdef TLBERRORCOUNTER
26085+ remove_proc_entry("driver/tlberrors", NULL);
26086+#endif
26087+ remove_proc_entry("driver/version", NULL);
26088+
26089+ return;
26090+}
26091+
26092+module_exit(info_module_exit);
26093diff --git a/drivers/lsi/acp/wrappers.c b/drivers/lsi/acp/wrappers.c
26094new file mode 100644
26095index 0000000..be9b663
26096--- /dev/null
26097+++ b/drivers/lsi/acp/wrappers.c
26098@@ -0,0 +1,257 @@
26099+/*
26100+ * drivers/lsi/acp/wrappers.c
26101+ *
26102+ * Copyright (C) 2010 LSI
26103+ *
26104+ * This program is free software; you can redistribute it and/or modify
26105+ * it under the terms of the GNU General Public License as published by
26106+ * the Free Software Foundation; either version 2 of the License, or
26107+ * (at your option) any later version.
26108+ *
26109+ * This program is distributed in the hope that it will be useful,
26110+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
26111+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
26112+ * GNU General Public License for more details.
26113+ *
26114+ * You should have received a copy of the GNU General Public License
26115+ * along with this program; if not, write to the Free Software
26116+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
26117+ */
26118+
26119+#include <linux/module.h>
26120+#include <linux/of.h>
26121+#include <linux/spinlock.h>
26122+#include <asm/irq.h>
26123+#include <asm/io.h>
26124+
26125+extern int is_asic(void);
26126+extern int acp_clock_get(int, unsigned long *);
26127+
26128+/*
26129+ ==============================================================================
26130+ ==============================================================================
26131+ MDIO Access
26132+ ==============================================================================
26133+ ==============================================================================
26134+*/
26135+
26136+#ifndef CONFIG_ACPISS
26137+
26138+#undef BZ33327_WA
26139+#define BZ33327_WA
26140+
26141+static unsigned long mdio_base;
26142+DEFINE_SPINLOCK(mdio_lock);
26143+
26144+#define MDIO_CONTROL_RD_DATA ((void *)(mdio_base + 0x0))
26145+#define MDIO_STATUS_RD_DATA ((void *)(mdio_base + 0x4))
26146+#define MDIO_CLK_OFFSET ((void *)(mdio_base + 0x8))
26147+#define MDIO_CLK_PERIOD ((void *)(mdio_base + 0xc))
26148+
26149+/*
26150+ ------------------------------------------------------------------------------
26151+ acp_mdio_read
26152+*/
26153+
26154+int
26155+acp_mdio_read(unsigned long address, unsigned long offset, unsigned short *value)
26156+{
26157+ unsigned long command = 0;
26158+ unsigned long status;
26159+ unsigned long flags;
26160+
26161+ spin_lock_irqsave(&mdio_lock, flags);
26162+#if defined(BZ33327_WA)
26163+ /* Set the mdio_busy (status) bit. */
26164+ status = in_le32(MDIO_STATUS_RD_DATA);
26165+ status |= 0x40000000;
26166+ out_le32(MDIO_STATUS_RD_DATA, status);
26167+#endif /* BZ33327_WA */
26168+
26169+ /* Write the command.*/
26170+ command |= 0x10000000; /* op_code: read */
26171+ command |= (address & 0x1f) << 16; /* port_addr (target device) */
26172+ command |= (offset & 0x1f) << 21; /* device_addr (target register) */
26173+ out_le32(MDIO_CONTROL_RD_DATA, command);
26174+
26175+#if defined(BZ33327_WA)
26176+ /* Wait for the mdio_busy (status) bit to clear. */
26177+ do {
26178+ status = in_le32(MDIO_STATUS_RD_DATA);
26179+ } while (0 != (status & 0x40000000));
26180+
26181+ /* Wait for the mdio_busy (control) bit to clear. */
26182+ do {
26183+ command = in_le32(MDIO_CONTROL_RD_DATA);
26184+ } while(0 != (command & 0x80000000));
26185+
26186+ *value = (unsigned short)(command & 0xffff);
26187+#endif /* BZ33327_WA */
26188+ spin_unlock_irqrestore(&mdio_lock, flags);
26189+
26190+ return 0;
26191+}
26192+
26193+EXPORT_SYMBOL(acp_mdio_read);
26194+
26195+/*
26196+ ------------------------------------------------------------------------------
26197+ acp_mdio_write
26198+*/
26199+
26200+int
26201+acp_mdio_write(unsigned long address, unsigned long offset, unsigned short value)
26202+{
26203+ unsigned long command = 0;
26204+ unsigned long status;
26205+ unsigned long flags;
26206+
26207+ spin_lock_irqsave(&mdio_lock, flags);
26208+
26209+ /* Wait for mdio_busy (control) to be clear. */
26210+ do {
26211+ command = in_le32(MDIO_CONTROL_RD_DATA);
26212+ } while (0 != (command & 0x80000000));
26213+
26214+#if defined(BZ33327_WA)
26215+ /* Set the mdio_busy (status) bit. */
26216+ status = in_le32(MDIO_STATUS_RD_DATA);
26217+ status |= 0x40000000;
26218+ out_le32(MDIO_STATUS_RD_DATA, status);
26219+#endif /* BZ33327_WA */
26220+
26221+ /* Write the command. */
26222+ command = 0x08000000; /* op_code: write */
26223+ command |= (address & 0x1f) << 16; /* port_addr (target device) */
26224+ command |= (offset & 0x1f) << 21; /* device_addr (target register) */
26225+ command |= (value & 0xffff); /* value */
26226+ out_le32(MDIO_CONTROL_RD_DATA, command);
26227+
26228+#if defined(BZ33327_WA)
26229+ /* Wait for the mdio_busy (status) bit to clear. */
26230+ do {
26231+ status = in_le32(MDIO_STATUS_RD_DATA);
26232+ } while (0 != (status & 0x40000000));
26233+#endif /* BZ33327_WA */
26234+
26235+ /* Wait for the mdio_busy (control) bit to clear. */
26236+ do {
26237+ command = in_le32(MDIO_CONTROL_RD_DATA);
26238+ } while (0 != (command & 0x80000000));
26239+
26240+ spin_unlock_irqrestore(&mdio_lock, flags);
26241+
26242+ return 0;
26243+}
26244+
26245+EXPORT_SYMBOL(acp_mdio_write);
26246+
26247+/*
26248+ ------------------------------------------------------------------------------
26249+ acp_mdio_initialize
26250+*/
26251+
26252+static int
26253+acp_mdio_initialize(void)
26254+{
26255+ if (is_asic()) {
26256+ out_le32(MDIO_CLK_OFFSET, 0x10);
26257+ out_le32(MDIO_CLK_PERIOD, 0x2c);
26258+ } else {
26259+ out_le32(MDIO_CLK_OFFSET, 0x05);
26260+ out_le32(MDIO_CLK_PERIOD, 0x0c);
26261+ }
26262+
26263+ return 0;
26264+}
26265+
26266+#endif /* CONFIG_ACPISS */
26267+
26268+/*
26269+ ==============================================================================
26270+ ==============================================================================
26271+ Interrupts
26272+ ==============================================================================
26273+ ==============================================================================
26274+*/
26275+
26276+/*
26277+ ------------------------------------------------------------------------------
26278+ acp_irq_create_mapping
26279+*/
26280+
26281+unsigned int
26282+acp_irq_create_mapping(struct irq_host *host, irq_hw_number_t hwirq)
26283+{
26284+ return irq_create_mapping(host, hwirq);
26285+}
26286+
26287+EXPORT_SYMBOL(acp_irq_create_mapping);
26288+
26289+/*
26290+ ------------------------------------------------------------------------------
26291+ acp_wrappers_init
26292+*/
26293+
26294+int __init
26295+acp_wrappers_init(void)
26296+{
26297+ int rc = -1;
26298+ struct device_node *np = NULL;
26299+ const u32 *field;
26300+ u64 mdio_phys_address;
26301+ u32 mdio_size;
26302+
26303+ printk(KERN_INFO "Initializing ACP Wrappers.\n");
26304+
26305+#ifndef CONFIG_ACPISS
26306+ np = of_find_node_by_type(np, "network");
26307+
26308+ while (np && !of_device_is_compatible(np, "acp-femac"))
26309+ np = of_find_node_by_type(np, "network");
26310+
26311+ if (np) {
26312+ field = of_get_property(np, "enabled", NULL);
26313+
26314+ if (!field || (field && (0 == *field))) {
26315+ printk(KERN_WARNING
26316+ "Networking is Not Enabled.\n");
26317+ goto acp_wrappers_init_done;
26318+ }
26319+
26320+ field = of_get_property(np, "mdio-reg", NULL);
26321+
26322+ if (!field) {
26323+ printk(KERN_ERR
26324+ "Couldn't get \"mdio-reg\" property.\n");
26325+ } else {
26326+ mdio_phys_address = of_translate_address(np, field);
26327+ mdio_size = field[1];
26328+ rc = 0;
26329+ }
26330+ }
26331+
26332+ if (0 != rc) {
26333+ mdio_phys_address = 0x002000409000ULL;
26334+ mdio_size = 0x1000;
26335+ printk(KERN_WARNING
26336+ "** MDIO Address Not Specified in Device Tree.\n");
26337+ }
26338+
26339+ mdio_base = ioremap(mdio_phys_address, mdio_size);
26340+ rc = acp_mdio_initialize();
26341+#endif
26342+
26343+ if (0 != rc)
26344+ printk(KERN_ERR, "MDIO Initiailzation Failed!\n");
26345+
26346+ acp_wrappers_init_done:
26347+
26348+ return 0;
26349+}
26350+
26351+module_init(acp_wrappers_init);
26352+
26353+MODULE_AUTHOR("LSI Corporation");
26354+MODULE_DESCRIPTION("Timing Test");
26355+MODULE_LICENSE("GPL");
26356diff --git a/drivers/lsi/common/debug.h b/drivers/lsi/common/debug.h
26357new file mode 100644
26358index 0000000..71581e9
26359--- /dev/null
26360+++ b/drivers/lsi/common/debug.h
26361@@ -0,0 +1,63 @@
26362+/*
26363+ * drivers/acp/common/debug.h
26364+ *
26365+ * Copyright (C) 2010 LSI
26366+ *
26367+ * This program is free software; you can redistribute it and/or modify
26368+ * it under the terms of the GNU General Public License as published by
26369+ * the Free Software Foundation; either version 2 of the License, or
26370+ * (at your option) any later version.
26371+ *
26372+ * This program is distributed in the hope that it will be useful,
26373+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
26374+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
26375+ * GNU General Public License for more details.
26376+ *
26377+ * You should have received a copy of the GNU General Public License
26378+ * along with this program; if not, write to the Free Software
26379+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
26380+ */
26381+
26382+#ifndef __DRIVERS_LSI_COMMON_DEBUG_H
26383+#define __DRIVERS_LSI_COMMON_DEBUG_H
26384+
26385+/*
26386+ DEBUG
26387+*/
26388+
26389+#if defined(DEBUG)
26390+#define DEBUG_PRINT(format, args...) do { \
26391+printk("%s:%s:%d - DEBUG - ", __FILE__, __FUNCTION__, __LINE__); \
26392+printk(format, ##args); \
26393+} while (0);
26394+#else
26395+#define DEBUG_PRINT(format, args...) { }
26396+#endif
26397+
26398+/*
26399+ WARN
26400+*/
26401+
26402+#if defined(WARN)
26403+#define WARN_PRINT(format, args...) do { \
26404+printk("%s:%s:%d - WARN - ", __FILE__, __FUNCTION__, __LINE__); \
26405+printk(format, ##args); \
26406+} while (0);
26407+#else
26408+#define WARN_PRINT(format, args...) { }
26409+#endif
26410+
26411+/*
26412+ ERROR
26413+*/
26414+
26415+#if defined(ERROR)
26416+#define ERROR_PRINT(format, args...) do { \
26417+printk("%s:%s:%d - ERROR - ", __FILE__, __FUNCTION__, __LINE__); \
26418+printk(format, ##args); \
26419+} while (0);
26420+#else
26421+#define ERROR_PRINT(format, args...) { }
26422+#endif
26423+
26424+#endif /* __DRIVERS_LSI_COMMON_DEBUG_H */
26425diff --git a/drivers/lsi/common/version.h b/drivers/lsi/common/version.h
26426new file mode 100644
26427index 0000000..a79d452
26428--- /dev/null
26429+++ b/drivers/lsi/common/version.h
26430@@ -0,0 +1,28 @@
26431+/*
26432+ * drivers/lsi/common/version.h
26433+ *
26434+ * Copyright (C) 2009 LSI
26435+ *
26436+ * This program is free software; you can redistribute it and/or modify
26437+ * it under the terms of the GNU General Public License as published by
26438+ * the Free Software Foundation; either version 2 of the License, or
26439+ * (at your option) any later version.
26440+ *
26441+ * This program is distributed in the hope that it will be useful,
26442+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
26443+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
26444+ * GNU General Public License for more details.
26445+ *
26446+ * You should have received a copy of the GNU General Public License
26447+ * along with this program; if not, write to the Free Software
26448+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
26449+ */
26450+
26451+#ifndef __DRIVERS_ACP_VERSION_H
26452+#define __DRIVERS_ACP_VERSION_H
26453+
26454+#define ACP_VERSION "3.8.1.22"
26455+
26456+int is_asic(void);
26457+
26458+#endif /* __DRIVERS_ACP_VERSION_H */
26459diff --git a/drivers/mtd/devices/phram.c b/drivers/mtd/devices/phram.c
26460index 23423bd..f5be315 100644
26461--- a/drivers/mtd/devices/phram.c
26462+++ b/drivers/mtd/devices/phram.c
26463@@ -288,6 +288,7 @@ MODULE_PARM_DESC(phram, "Memory region to map. \"phram=<name>,<start>,<length>\"
26464
26465 static int __init init_phram(void)
26466 {
26467+ printk("%s:%d - \n", __FILE__, __LINE__); /* ZZZ */
26468 return 0;
26469 }
26470
26471diff --git a/drivers/mtd/nand/nand_base.c b/drivers/mtd/nand/nand_base.c
26472index a46e9bb..77b7a5a 100644
26473--- a/drivers/mtd/nand/nand_base.c
26474+++ b/drivers/mtd/nand/nand_base.c
26475@@ -30,6 +30,7 @@
26476 * it under the terms of the GNU General Public License version 2 as
26477 * published by the Free Software Foundation.
26478 *
26479+ * These patches add ACP3400 support signed-off-by: john.jacques@lsi.com
26480 */
26481
26482 #include <linux/module.h>
26483@@ -49,6 +50,36 @@
26484 #include <linux/io.h>
26485 #include <linux/mtd/partitions.h>
26486
26487+#ifdef CONFIG_LSI_NAND
26488+#define LSI_NAND_BASE 0xf0040000
26489+#define NAND_DATA_REG 0x00000000
26490+#define NAND_CMD_REG 0x00008000
26491+#define NAND_INDEX_REG 0x00008004
26492+#define NAND_STATUS1_REG 0x00008008
26493+#define NAND_STATUS2_REG 0x0000800C
26494+#define NAND_ID0_REG 0x00008010
26495+#define NAND_ID1_REG 0x00008014
26496+#define NAND_ID2_REG 0x00008018
26497+#define NAND_ID3_REG 0x0000801C
26498+#define NAND_ID4_REG 0x00008020
26499+#define NAND_ID5_REG 0x00008024
26500+#define NAND_ID6_REG 0x00008028
26501+#define NAND_ID7_REG 0x0000802C
26502+#define NAND_INTR_EN_REG 0x00008030
26503+#define NAND_INTR_STATUS_REG 0x00008034
26504+#define NAND_INTR_REG 0x00008038
26505+#define NAND_ECC_ADDR_LOG_REG 0x0000803C
26506+#define NAND_ECC_VAL_REG 0x00008040
26507+#define NAND_ECC_INJECT_REG 0x00008044
26508+#define NAND_EXT_INDEX_REG 0x00008048
26509+#define NAND_TIMING1_REG 0x0000804C
26510+#define NAND_TIMING2_REG 0x00008050
26511+#define NAND_CONFIG_REG 0x00008054
26512+#define NAND_PECC_REG 0x00008058
26513+
26514+extern lsi_nand_set_config(struct mtd_info *, struct nand_chip *);
26515+#endif /* CONFIG_LSI_NAND */
26516+
26517 /* Define default oob placement schemes for large and small page devices */
26518 static struct nand_ecclayout nand_oob_8 = {
26519 .eccbytes = 3,
26520@@ -458,7 +489,12 @@ static int nand_check_wp(struct mtd_info *mtd)
26521
26522 /* Check the WP bit */
26523 chip->cmdfunc(mtd, NAND_CMD_STATUS, -1, -1);
26524+#ifdef CONFIG_LSI_NAND
26525+ return (readl(chip->IO_ADDR_R + NAND_STATUS1_REG) &
26526+ NAND_STATUS_WP) ? 0 : 1;
26527+#else
26528 return (chip->read_byte(mtd) & NAND_STATUS_WP) ? 0 : 1;
26529+#endif
26530 }
26531
26532 /**
26533@@ -2645,6 +2681,12 @@ erase_exit:
26534 /* Deselect and wake up anyone waiting on the device */
26535 nand_release_device(mtd);
26536
26537+#ifdef CONFIG_LSI_NAND
26538+ /* if erase failed for a block, mark it as bad block */
26539+ if (status & NAND_STATUS_FAIL)
26540+ mtd->block_markbad(mtd, page << chip->page_shift);
26541+#endif /* CONFIG_LSI_NAND */
26542+
26543 /* Do call back function */
26544 if (!ret)
26545 mtd_erase_callback(instr);
26546@@ -2921,9 +2963,13 @@ static struct nand_flash_dev *nand_get_flash_type(struct mtd_info *mtd,
26547 chip->cmdfunc(mtd, NAND_CMD_READID, 0x00, -1);
26548
26549 /* Read manufacturer and device IDs */
26550+#ifdef CONFIG_LSI_NAND
26551+ *maf_id = readb(chip->IO_ADDR_R + NAND_ID0_REG);
26552+ *dev_id = readb(chip->IO_ADDR_R + NAND_ID2_REG);
26553+#else /* CONFIG_LSI_NAND */
26554 *maf_id = chip->read_byte(mtd);
26555 *dev_id = chip->read_byte(mtd);
26556-
26557+#endif /* LSI_NAND */
26558 /* Try again to make sure, as some systems the bus-hold or other
26559 * interface concerns can cause random data which looks like a
26560 * possibly credible NAND flash to appear. If the two results do
26561@@ -2932,9 +2978,13 @@ static struct nand_flash_dev *nand_get_flash_type(struct mtd_info *mtd,
26562
26563 chip->cmdfunc(mtd, NAND_CMD_READID, 0x00, -1);
26564
26565+#ifdef CONFIG_LSI_NAND
26566+ id_data[0] = readb(chip->IO_ADDR_R + NAND_ID0_REG);
26567+ id_data[1] = readb(chip->IO_ADDR_R + NAND_ID2_REG);
26568+#else
26569 for (i = 0; i < 2; i++)
26570 id_data[i] = chip->read_byte(mtd);
26571-
26572+#endif
26573 if (id_data[0] != *maf_id || id_data[1] != *dev_id) {
26574 printk(KERN_INFO "%s: second ID read did not match "
26575 "%02x,%02x against %02x,%02x\n", __func__,
26576@@ -2961,8 +3011,15 @@ static struct nand_flash_dev *nand_get_flash_type(struct mtd_info *mtd,
26577
26578 /* Read entire ID string */
26579
26580+#ifdef CONFIG_LSI_NAND
26581+ id_data[0] = readb(chip->IO_ADDR_R + NAND_ID0_REG);
26582+ id_data[1] = readb(chip->IO_ADDR_R + NAND_ID2_REG);
26583+ id_data[2] = readb(chip->IO_ADDR_R + NAND_ID4_REG);
26584+ id_data[3] = readb(chip->IO_ADDR_R + NAND_ID6_REG);
26585+#else
26586 for (i = 0; i < 8; i++)
26587 id_data[i] = chip->read_byte(mtd);
26588+#endif
26589
26590 if (!type->name)
26591 return ERR_PTR(-ENODEV);
26592@@ -2977,11 +3034,18 @@ static struct nand_flash_dev *nand_get_flash_type(struct mtd_info *mtd,
26593 busw = chip->init_size(mtd, chip, id_data);
26594 } else if (!type->pagesize) {
26595 int extid;
26596+#ifdef CONFIG_LSI_NAND
26597+ /* dimka: move this out to chip->init_size */
26598+ /* The 3rd id byte holds MLC / multichip data */
26599+ chip->cellinfo = readb(chip->IO_ADDR_R + NAND_ID4_REG);
26600+ /* The 4th id byte is the important one */
26601+ extid = readb(chip->IO_ADDR_R + NAND_ID6_REG);
26602+#else /* CONFIG_LSI_NAND */
26603 /* The 3rd id byte holds MLC / multichip data */
26604 chip->cellinfo = id_data[2];
26605 /* The 4th id byte is the important one */
26606 extid = id_data[3];
26607-
26608+#endif
26609 /*
26610 * Field definitions are in the following datasheets:
26611 * Old style (4,5 byte ID): Samsung K9GAG08U0M (p.32)
26612@@ -3018,6 +3082,18 @@ static struct nand_flash_dev *nand_get_flash_type(struct mtd_info *mtd,
26613 (((extid >> 1) & 0x04) | (extid & 0x03));
26614 busw = 0;
26615 } else {
26616+ /* Add workaournd for Micron MT29Fxxxxxx NAND flash*/
26617+ if (id_data[0] == NAND_MFR_MICRON && id_data[1] == 0x48) {
26618+ /* Calc pagesize */
26619+ mtd->writesize = 1024 << (extid & 0x03);
26620+ extid >>= 2;
26621+ /*Calc oobsize */
26622+ mtd->oobsize = ((extid & 0x03) == 0x03) ? 218: 224;
26623+ extid >>= 3;
26624+ /* Calc blocksize. Blocksize is multiples of 256KiB */
26625+ mtd->erasesize = (256 * 1024) << (extid & 0x03);
26626+ busw = 0;
26627+ }else{
26628 /* Calc pagesize */
26629 mtd->writesize = 1024 << (extid & 0x03);
26630 extid >>= 2;
26631@@ -3030,6 +3106,7 @@ static struct nand_flash_dev *nand_get_flash_type(struct mtd_info *mtd,
26632 extid >>= 2;
26633 /* Get buswidth information */
26634 busw = (extid & 0x01) ? NAND_BUSWIDTH_16 : 0;
26635+ }
26636 }
26637 } else {
26638 /*
26639@@ -3069,6 +3146,11 @@ ident_done:
26640 */
26641 chip->options |= NAND_NO_AUTOINCR;
26642
26643+#ifdef CONFIG_LSI_NAND
26644+ /* Set the EP501/EP501G1 config register. */
26645+ lsi_nand_set_config(mtd, chip);
26646+#endif /* CONFIG_LSI_NAND */
26647+
26648 /* Try to identify manufacturer */
26649 for (maf_idx = 0; nand_manuf_ids[maf_idx].id != 0x0; maf_idx++) {
26650 if (nand_manuf_ids[maf_idx].id == *maf_id)
26651diff --git a/drivers/mtd/nand/nand_ids.c b/drivers/mtd/nand/nand_ids.c
26652index 00cf1b0..9e9b85b 100644
26653--- a/drivers/mtd/nand/nand_ids.c
26654+++ b/drivers/mtd/nand/nand_ids.c
26655@@ -114,6 +114,7 @@ struct nand_flash_dev nand_flash_ids[] = {
26656 {"NAND 2GiB 3,3V 8-bit", 0xD5, 0, 2048, 0, LP_OPTIONS},
26657 {"NAND 2GiB 1,8V 16-bit", 0xB5, 0, 2048, 0, LP_OPTIONS16},
26658 {"NAND 2GiB 3,3V 16-bit", 0xC5, 0, 2048, 0, LP_OPTIONS16},
26659+ {"NAND 2GiB 3,3V 16-bit", 0x48, 0, 2048, 0, LP_OPTIONS},
26660
26661 /* 32 Gigabit */
26662 {"NAND 4GiB 1,8V 8-bit", 0xA7, 0, 4096, 0, LP_OPTIONS},
26663diff --git a/drivers/rapidio/Kconfig b/drivers/rapidio/Kconfig
26664index 070211a..0ab0efe 100644
26665--- a/drivers/rapidio/Kconfig
26666+++ b/drivers/rapidio/Kconfig
26667@@ -20,6 +20,8 @@ config RAPIDIO_ENABLE_RX_TX_PORTS
26668 ports for Input/Output direction to allow other traffic
26669 than Maintenance transfers.
26670
26671+source "drivers/rapidio/mports/Kconfig"
26672+
26673 source "drivers/rapidio/switches/Kconfig"
26674
26675 config RAPIDIO_DEBUG
26676diff --git a/drivers/rapidio/Makefile b/drivers/rapidio/Makefile
26677index 89b8eca..2951859 100644
26678--- a/drivers/rapidio/Makefile
26679+++ b/drivers/rapidio/Makefile
26680@@ -4,5 +4,6 @@
26681 obj-y += rio.o rio-access.o rio-driver.o rio-scan.o rio-sysfs.o
26682
26683 obj-$(CONFIG_RAPIDIO) += switches/
26684+obj-$(CONFIG_RAPIDIO) += mports/
26685
26686 subdir-ccflags-$(CONFIG_RAPIDIO_DEBUG) := -DDEBUG
26687diff --git a/drivers/rapidio/mports/Kconfig b/drivers/rapidio/mports/Kconfig
26688new file mode 100644
26689index 0000000..e72b98b
26690--- /dev/null
26691+++ b/drivers/rapidio/mports/Kconfig
26692@@ -0,0 +1,23 @@
26693+#
26694+# RapidIO master port configuration
26695+#
26696+
26697+config RAPIDIO_ACP
26698+ bool "Support ACP Internal RapidIO endpoint"
26699+ depends on RAPIDIO
26700+ default "y"
26701+ ---help---
26702+ Include support for ACP RapidIO bridge as a RapidIO master port.
26703+
26704+config RAPIDIO_ACP_RX_SIZE
26705+ int "Number of inbound message entries"
26706+ depends on RAPIDIO_ACP
26707+ default "128"
26708+
26709+# FIXME: COMMENTED OUT TO KEEP TSI620 BUILD AS AN EXTERNAL MODULE ONLY
26710+# config RAPIDIO_TSI620
26711+# bool "Support Tsi620 PCI RapidIO endpoint"
26712+# depends on RAPIDIO
26713+# default "y"
26714+# ---help---
26715+# Include support for Tsi620 PCI-RapidIO bridge as a RapidIO master port.
26716diff --git a/drivers/rapidio/mports/Makefile b/drivers/rapidio/mports/Makefile
26717new file mode 100644
26718index 0000000..a12148d
26719--- /dev/null
26720+++ b/drivers/rapidio/mports/Makefile
26721@@ -0,0 +1,5 @@
26722+#
26723+# Makefile for RapidIO interconnect services
26724+#
26725+#obj-$(CONFIG_RAPIDIO_ACP) += acp/
26726+obj-$(CONFIG_RAPIDIO_TSI620) += tsi620/
26727diff --git a/drivers/rapidio/mports/tsi620/Makefile b/drivers/rapidio/mports/tsi620/Makefile
26728new file mode 100644
26729index 0000000..7db9008
26730--- /dev/null
26731+++ b/drivers/rapidio/mports/tsi620/Makefile
26732@@ -0,0 +1,6 @@
26733+#
26734+# Makefile for RapidIO master ports
26735+#
26736+
26737+# FIXME: Out of the tree build only (for now)
26738+obj-$(CONFIG_RAPIDIO_TSI620) += tsi620.o
26739diff --git a/drivers/rapidio/mports/tsi620/tsi620.c b/drivers/rapidio/mports/tsi620/tsi620.c
26740new file mode 100644
26741index 0000000..48bc4a6
26742--- /dev/null
26743+++ b/drivers/rapidio/mports/tsi620/tsi620.c
26744@@ -0,0 +1,703 @@
26745+/* Tsi620 Driver
26746+ *
26747+ * Copyright 2009, Integrated Device Technology, Inc.
26748+ *
26749+ * Autor(s):
26750+ * Randy Noah (IDT)
26751+ * Jason McKenna (Tundra Semiconductor Corp.)
26752+ *
26753+ * This driver is not a modification of the Linux kernel, however has been
26754+ * designed to work with it. For restrictions on use of the driver (as
26755+ * either source code or compiled module) including distribution rights,
26756+ * please contact IDT.
26757+ *
26758+ * This program is distributed in the hope that it will be useful, but WITHOUT
26759+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
26760+ * FITNESS FOR A PARTICULAR PURPOSE.
26761+ */
26762+
26763+#include <asm/io.h>
26764+#include <linux/errno.h>
26765+#include <linux/init.h>
26766+#include <linux/ioport.h>
26767+#include <linux/kernel.h>
26768+#include <linux/module.h>
26769+#include <linux/pci.h>
26770+#include <linux/rio.h>
26771+#include <linux/rio_drv.h>
26772+
26773+#include "tsi620.h"
26774+
26775+MODULE_AUTHOR("Randy Noah, Jason McKenna");
26776+MODULE_DESCRIPTION("Tsi620 PCI/RapidIO Bridge");
26777+MODULE_VERSION("2.0");
26778+MODULE_LICENSE("Proprietary");
26779+
26780+/*****************************************************************************
26781+ * Definitions
26782+ *****************************************************************************/
26783+
26784+/* Set this to self-adjust PCI addresses (great for insane bootloaders) */
26785+#define TSI620_FIX_MAPPING
26786+//#undef TSI620_FIX_MAPPING
26787+
26788+/* Macro used for debugging things. */
26789+//#define TSI620_DEBUG(_str_, ...) printk(KERN_INFO "(%s:%d) " _str_, __FILE__, __LINE__, ## __VA_ARGS__)
26790+#define TSI620_DEBUG(_str_, ...)
26791+
26792+/*****************************************************************************
26793+ * Prototypes
26794+ *****************************************************************************/
26795+extern void pci_update_resource(struct pci_dev *dev, struct resource *res, int resno);
26796+
26797+int tsi620_probe(struct pci_dev *dev, const struct pci_device_id *id);
26798+void tsi620_remove(struct pci_dev *dev);
26799+int tsi620_remap_device(struct pci_dev *pdev);
26800+int tsi620_setup_mport(struct pci_dev *pdev);
26801+void tsi620_init_translation(struct pci_dev* dev);
26802+void tsi620_init_p2o_bar2_luts(void);
26803+
26804+/* RIO low level routines */
26805+int tsi620_lcread (struct rio_mport *mport, int index, u32 offset, int len,
26806+ u32 *data);
26807+int tsi620_lcwrite (struct rio_mport *mport, int index, u32 offset, int len,
26808+ u32 data);
26809+int tsi620_cread (struct rio_mport *mport, int index, u16 destid,
26810+ u8 hopcount, u32 offset, int len, u32 *data);
26811+int tsi620_cwrite (struct rio_mport *mport, int index, u16 destid,
26812+ u8 hopcount, u32 offset, int len, u32 data);
26813+int tsi620_dsend (struct rio_mport *mport, int index, u16 destid, u16 data);
26814+
26815+void* tsi620_ioremap(void* rio_address, u16 destid, unsigned int length);
26816+void tsi620_unmap(void* address);
26817+
26818+/*****************************************************************************
26819+ * Structures/variables
26820+ *****************************************************************************/
26821+struct tsi620_device *tsi620;
26822+
26823+static struct pci_device_id tsi620_pci_tbl[] = {
26824+ { PCI_DEVICE(PCI_VENDOR_ID_TUNDRA, PCI_DEVICE_ID_TSI620) },
26825+ { 0, } /* terminate list */
26826+};
26827+
26828+MODULE_DEVICE_TABLE(pci, tsi620_pci_tbl);
26829+
26830+static struct pci_driver tsi620_driver = {
26831+ .name = "tsi620",
26832+ .id_table = tsi620_pci_tbl,
26833+ .probe = tsi620_probe,
26834+ .remove = tsi620_remove,
26835+};
26836+
26837+/*****************************************************************************
26838+ * Code
26839+ *****************************************************************************/
26840+
26841+/*****************************************************************************
26842+ * Read SREP register
26843+ *****************************************************************************/
26844+int tsi620_lcread (struct rio_mport *mport, int index, u32 offset, int len,
26845+ u32 *data)
26846+{
26847+ if (0 == len % 4)
26848+ while (len)
26849+ {
26850+ *data = in_le32((void*)tsi620->srep + offset);
26851+ offset += 4;
26852+ len -= 4;
26853+ }
26854+ else
26855+ {
26856+ TSI620_DEBUG("RIO local read of DWORDs only supported\n");
26857+ return -EINVAL;
26858+ }
26859+ return 0;
26860+}
26861+
26862+/*****************************************************************************
26863+ * Write SREP register
26864+ *****************************************************************************/
26865+int tsi620_lcwrite (struct rio_mport *mport, int index, u32 offset, int len,
26866+ u32 data)
26867+{
26868+ if (0 == len % 4)
26869+ while (len)
26870+ {
26871+ out_le32((void*)tsi620->srep + offset, data);
26872+ offset += 4;
26873+ len -= 4;
26874+ }
26875+ else
26876+ {
26877+ TSI620_DEBUG("RIO local write of DWORDs only supported\n");
26878+ return -EINVAL;
26879+ }
26880+ return 0;
26881+}
26882+
26883+
26884+/*****************************************************************************
26885+ * Perform a maint. read from SREP
26886+ *****************************************************************************/
26887+int tsi620_cread (struct rio_mport *mport, int index, u16 destid,
26888+ u8 hopcount, u32 offset, int len, u32 *data)
26889+{
26890+ if (hopcount)
26891+ {
26892+
26893+ out_le32((void*)(tsi620->srep + TSI620_SREP_I2R_LUT_PTY_CTL), MAINT_BAR_LUT);
26894+ out_le32((void*)(tsi620->srep + TSI620_SREP_I2R_LUT_TA_UPPER), (hopcount << 24) | 0x00f00000 | destid);
26895+
26896+ out_le32((void*)(tsi620->srep + TSI620_SREP_I2R_LUT_TA_LOWER), 0x000000a0);
26897+ out_le32((void*)(tsi620->srep + TSI620_SREP_I2R_LUT_TA_RIO_PARMS), 0x00008081);
26898+ *data = in_be32((void*) (tsi620->maint + offset));
26899+
26900+ }
26901+ else
26902+ {
26903+ *data = in_le32((void*) (tsi620->regs + offset));
26904+ }
26905+ return 0;
26906+}
26907+
26908+/*****************************************************************************
26909+ * Perform a maint. write from SREP
26910+ *****************************************************************************/
26911+int tsi620_cwrite (struct rio_mport *mport, int index, u16 destid,
26912+ u8 hopcount, u32 offset, int len, u32 data)
26913+{
26914+ if (hopcount)
26915+ {
26916+
26917+ out_le32((void*)(tsi620->srep + TSI620_SREP_I2R_LUT_PTY_CTL), MAINT_BAR_LUT);
26918+
26919+
26920+ out_le32((void*)(tsi620->srep + TSI620_SREP_I2R_LUT_TA_UPPER), (hopcount << 24) | 0x00f00000 | destid);
26921+ out_le32((void*)(tsi620->srep + TSI620_SREP_I2R_LUT_TA_LOWER), 0x000000a0);
26922+ out_le32((void*)(tsi620->srep + TSI620_SREP_I2R_LUT_TA_RIO_PARMS), 0x00008081);
26923+
26924+ out_be32((void*) (tsi620->maint + offset), data);
26925+ }
26926+ else
26927+ {
26928+ out_le32((void*) (tsi620->regs + offset), data);
26929+ }
26930+ return 0;
26931+}
26932+
26933+/*****************************************************************************
26934+ * Send a doorbell from SREP
26935+ *****************************************************************************/
26936+int tsi620_dsend (struct rio_mport *mport, int index, u16 destid, u16 data)
26937+{
26938+ TSI620_DEBUG("Doorbell\n");
26939+ return 0;
26940+}
26941+
26942+/*****************************************************************************
26943+ * Probe for and initialize device
26944+ *****************************************************************************/
26945+int tsi620_probe(struct pci_dev *pdev, const struct pci_device_id *id)
26946+{
26947+ /* Variables... */
26948+ int rc;
26949+ rc = tsi620_remap_device(pdev);
26950+
26951+ if (rc)
26952+ return rc;
26953+
26954+ /* All well and good -- now let's register this as a master port... */
26955+ rc = tsi620_setup_mport(pdev);
26956+
26957+ /* Enumerate all registered ports */
26958+ rc = rio_init_mports();
26959+ if (rc)
26960+ return rc;
26961+ return rc;
26962+}
26963+
26964+
26965+/*****************************************************************************
26966+ * Remap IO space
26967+ *****************************************************************************/
26968+int tsi620_remap_device(struct pci_dev *pdev)
26969+{
26970+ /* Location and size of Tsi620 register window (PCI space) */
26971+ unsigned long location;
26972+ unsigned long size;
26973+ int result;
26974+
26975+ tsi620 = (struct tsi620_device *) kmalloc(sizeof(struct tsi620_device), GFP_KERNEL);
26976+ memset(tsi620, 0, sizeof(struct tsi620_device));
26977+
26978+ /* Enable the device */
26979+ result = pci_enable_device(pdev);
26980+
26981+
26982+#if defined(TSI620_FIX_MAPPING)
26983+ {
26984+ /* Some boot loaders will assign 0 bytes of PCI space to BAR0 (rather
26985+ * than the required 256KB). This code will check if this is the case,
26986+ * and fix both the internal registers as well as the Linux resource
26987+ * cache. */
26988+
26989+ TSI620_DEBUG("Checking if mapping adjustment needs to be made...\n");
26990+
26991+ if (pdev->resource[2].start && !(pdev->resource[0].start))
26992+ {
26993+ // Linux detected space allocated for BAR2, but not BAR0...
26994+ u32 temp;
26995+
26996+ TSI620_DEBUG("Fixing...\n");
26997+
26998+ temp = pdev->resource[2].end - pdev->resource[2].start + 1;
26999+ temp /= 2;
27000+ TSI620_DEBUG("new size of bar2 = 0x%x\n", temp);
27001+
27002+ pdev->resource[0].start = pdev->resource[2].start;
27003+ pdev->resource[0].end = pdev->resource[0].start + (256 * 1024) - 1;
27004+ TSI620_DEBUG("bar0 from = 0x%x to 0x%x\n", pdev->resource[0].start, pdev->resource[0].end);
27005+
27006+ pdev->resource[2].start += temp;
27007+ TSI620_DEBUG("bar2 from = 0x%x to 0x%x\n", pdev->resource[2].start, pdev->resource[2].end);
27008+
27009+ temp = pdev->resource[0].start;
27010+ pci_write_config_dword(pdev, 0x10, temp);
27011+
27012+ temp = pdev->resource[2].start;
27013+ pci_write_config_dword(pdev, 0x18, temp);
27014+
27015+ temp = pci_read_config_dword(pdev, 0x4c, &temp);
27016+ TSI620_DEBUG("P2O_PAGE_SIZES 0x%x\n", temp);
27017+ if (0 == temp)
27018+ {
27019+ u32 wanted = pdev->resource[2].end - pdev->resource[2].start + 1;
27020+ u32 cur = (32 * 1024);
27021+
27022+ TSI620_DEBUG("0 value seen -- fixing\n");
27023+
27024+ temp = 0x00000500;
27025+ while (cur < wanted)
27026+ {
27027+ temp += 0x00000800;
27028+ cur <<= 1;
27029+ }
27030+ }
27031+ else
27032+ {
27033+ //reduce space by 1/2
27034+ temp -= 0x00000800;
27035+ }
27036+ TSI620_DEBUG("New value: 0x%x\n", temp);
27037+ pci_write_config_dword(pdev, 0x4c, temp);
27038+
27039+ }
27040+
27041+ TSI620_DEBUG("updating resource lists...\n");
27042+ pci_update_resource(pdev, &(pdev->resource[0]), 0);
27043+ pci_update_resource(pdev, &(pdev->resource[2]), 2);
27044+ }
27045+#endif
27046+
27047+ /* Ok, try to remap this bad boy */
27048+ location = pci_resource_start (pdev, 0);
27049+ size = pci_resource_len(pdev, 0);
27050+
27051+ tsi620->regs = (u32) ioremap(location, TSI620_CONFIG_SPACE_SIZE);
27052+
27053+ /* Now to remap some memory access space */
27054+ location = pci_resource_start (pdev, 2);
27055+ size = pci_resource_len(pdev, 2);
27056+
27057+ TSI620_DEBUG("mem location/size = 0x%lx / 0x%lx\n", location, size);
27058+ tsi620->i2rBase = location;
27059+ tsi620->memSize = size;
27060+
27061+ tsi620->base = (u32) ioremap(tsi620->i2rBase, tsi620->memSize);
27062+
27063+
27064+ if (!tsi620->regs)
27065+ {
27066+ TSI620_DEBUG("Unable to remap IO space\n");
27067+ return -ENOMEM;
27068+ }
27069+
27070+ if (!tsi620->base)
27071+ {
27072+ TSI620_DEBUG("Unable to remap memory\n");
27073+ return -ENOMEM;
27074+ }
27075+
27076+ TSI620_DEBUG("Remapped spaces: regs -- 0x%x, mem -- 0x%x\n", (u32) tsi620->regs, (u32) tsi620->base);
27077+
27078+ tsi620->srep = tsi620->regs + TSI620_SREP_OFFSET;
27079+ tsi620->pci = tsi620->regs + TSI620_PCI_OFFSET;
27080+
27081+ /* Ok, so this "mem space" exists -- let's break it up into some chunks */
27082+ tsi620_init_translation(pdev);
27083+
27084+ return 0;
27085+}
27086+
27087+/*****************************************************************************
27088+ * Map all PCI BAR2 transactions to target the SREP interface *
27089+ *****************************************************************************/
27090+void tsi620_init_p2o_bar2_luts()
27091+{
27092+ int lutIndex;
27093+ u32 p2o_page_sizes;
27094+
27095+ /* Map transactions to SREP (= port 0) with no address translation. */
27096+ p2o_page_sizes = in_le32((void*)(tsi620->pci + TSI620_PCI_P2O_PAGE_SIZES));
27097+ p2o_page_sizes |= 0x00000400;
27098+ out_le32((void*)(tsi620->pci + TSI620_PCI_P2O_PAGE_SIZES), p2o_page_sizes);
27099+
27100+ for (lutIndex = 0; lutIndex < TSI620_PCI_NUM_P2O_LUTS; lutIndex++) {
27101+ out_le32((void*)(tsi620->pci + TSI620_PCI_P2O_BAR2_LUTx(lutIndex)), 0x00000000);
27102+ out_le32((void*)(tsi620->pci + TSI620_PCI_P2O_BAR2_LUTx_UPPER(lutIndex)), 0x00000000);
27103+ }
27104+}
27105+
27106+/***************************************************************
27107+ * Returns log2 (highest order bit) of the number
27108+ ***************************************************************/
27109+int getLog2(u32 n)
27110+{
27111+ /* Note that there are faster ways to do this... but this is clean and easy to read */
27112+ int l = 0;
27113+ while (n >>= 1) l++;
27114+ return l;
27115+}
27116+
27117+/***************************************************************
27118+* Convert a size (number of bytes) to a value suitilbe to programming
27119+* into I2R_BARx_LUT_CSR
27120+***************************************************************/
27121+u32 sizeToBarSizeId(u32 barSize)
27122+{
27123+ // Note that we expect barSize to be a valid value (a power of 2)
27124+ int x = getLog2(barSize);
27125+ x -= 12;
27126+ x <<= 8;
27127+ return x;
27128+}
27129+
27130+/***************************************************************
27131+* Convert the number of LUTs into a value suitible to program into
27132+* I2R_BARx_LUT_CSR
27133+***************************************************************/
27134+u32 lutsToLutsId(int luts)
27135+{
27136+ return getLog2(luts);
27137+}
27138+
27139+/**************************************************************
27140+* Setup a given bar based on the inputted parameters
27141+***************************************************************/
27142+void tsi620_setup_srep_hw_bar(int barIndex, u32 isfAddress, u32 barSize,
27143+ int firstLut, int luts, int enabled)
27144+{
27145+ u32 temp; // The value to program in the register (as value is being built)
27146+
27147+ //Setup the LUT CSR
27148+ temp = (firstLut << 16) | sizeToBarSizeId(barSize) | lutsToLutsId(luts);
27149+ out_le32((void*)(tsi620->srep + TSI620_SREP_I2R_BARx_LUT_CSR(barIndex)), temp);
27150+
27151+ //Setup the LOWER register
27152+ out_le32((void*)(tsi620->srep + TSI620_SREP_I2R_BARx_LOWER(barIndex)),
27153+ (isfAddress & 0xfffff000) | (enabled ? 1 : 0));
27154+
27155+ //Setup the UPPER register (0)
27156+ out_le32((void*)(tsi620->srep + TSI620_SREP_I2R_BARx_UPPER(barIndex)), 0);
27157+}
27158+
27159+/**************************************************************
27160+* Setup a given LUT based on the inputted parameters
27161+***************************************************************/
27162+void tsi620_setup_srep_hw_lut(int lutIndex, u16 destId, u8 hopcount,
27163+ u32 rio_addr, u16 transaction)
27164+{
27165+ u32 lower;
27166+
27167+ lower = rio_addr & 0xffffff00;
27168+ lower |= 0x000000a0;
27169+
27170+ /* These will be filled in by tsi620_rio_config_write/read */
27171+ out_le32((void*)(tsi620->srep + TSI620_SREP_I2R_LUT_PTY_CTL), lutIndex);
27172+ out_le32((void*)(tsi620->srep + TSI620_SREP_I2R_LUT_TA_UPPER),
27173+ ((hopcount & 0xff) << 24) | 0x00d00000 | destId);
27174+ out_le32((void*)(tsi620->srep + TSI620_SREP_I2R_LUT_TA_LOWER), 0x000000a0 | (rio_addr & 0xfffff000)); //read and write priority 2
27175+ out_le32((void*)(tsi620->srep + TSI620_SREP_I2R_LUT_TA_RIO_PARMS), (u32) transaction);
27176+}
27177+
27178+
27179+/***************************************************************
27180+ * Setup a LUT to translate to the specified opration on the
27181+ * specified RIO device
27182+ ***************************************************************/
27183+void tsi620_setup_srep_region(int barIndex, int lutIndex, u32 isfAddress,
27184+ u32 size, u16 destId, u8 hopcount, u32 rio_addr,
27185+ u16 transaction, int enabled)
27186+{
27187+ struct tsi620_bar* bar = &(tsi620->bar[barIndex]);
27188+
27189+ //setup the HW registers
27190+ tsi620_setup_srep_hw_lut(lutIndex, destId, hopcount, rio_addr, transaction);
27191+ tsi620_setup_srep_hw_bar(barIndex, isfAddress, size, lutIndex, 1, enabled);
27192+
27193+ //Mark it in SW
27194+ bar->enabled = enabled;
27195+ bar->luts = 1;
27196+ bar->firstLut = lutIndex;
27197+ bar->isfAddr = isfAddress;
27198+ bar->destid = destId;
27199+ bar->hopcount = hopcount;
27200+ bar->size = size;
27201+ if (enabled)
27202+ {
27203+ bar->procAddr = (void*) (tsi620->base + (isfAddress - tsi620->i2rBase));
27204+ }
27205+ else
27206+ {
27207+ bar->procAddr = NULL;
27208+ }
27209+
27210+ TSI620_DEBUG("bar %d setup to dest 0x%x, hc 0x%x, rio_addr 0x%x at proc addr 0x%x\n", barIndex, destId, hopcount, rio_addr, (u32) bar->procAddr);
27211+}
27212+
27213+/*****************************************************************************
27214+ * Setup regions in the memory space for transactions
27215+ *****************************************************************************/
27216+void tsi620_init_translation(struct pci_dev* dev)
27217+{
27218+
27219+ /* Memory space will be divided into sections
27220+ * Top 1MB will be used for maintainence transactions
27221+ * Below that will be doorbells (eventually)
27222+ * Below that will be memory access
27223+ */
27224+
27225+ u32 top;
27226+
27227+ /* What is the PCI address of the top? */
27228+ top = tsi620->i2rBase + tsi620->memSize;
27229+
27230+ /* Let's assume that worked (I know, I know...) */
27231+ /* So, next thing we do is map all of these PCI transactions to SREP */
27232+ {
27233+ /* So that means we should put maintaince transactions where? */
27234+ tsi620->i2rMaint = top - TSI620_MAINT_SPACE_SIZE;
27235+ tsi620->maint = tsi620->base + (tsi620->i2rMaint - tsi620->i2rBase);
27236+
27237+ TSI620_DEBUG("Mem PCI addr: 0x%08x\n", tsi620->i2rBase);
27238+ TSI620_DEBUG("Maint PCI addr: 0x%08x\n\n", tsi620->i2rMaint);
27239+ TSI620_DEBUG("Proc addr: 0x%08x\n", tsi620->base);
27240+ TSI620_DEBUG("Maint proc addr: 0x%08x\n\n", tsi620->maint);
27241+ tsi620_init_p2o_bar2_luts();
27242+ }
27243+
27244+ /* Next, let's set up the maintainece window */
27245+ {
27246+ u32 barIndex;
27247+
27248+ /* Set up 7 BAR regions (except for maint region)*/
27249+ for (barIndex = 0; barIndex < 7; barIndex++)
27250+ {
27251+ tsi620_setup_srep_region(barIndex, barIndex, 0, 0x1000, 0xff,
27252+ DEFAULT_HOPCOUNT, 0, TSI620_SREP_LUT_MAINT_TRANS, 0);
27253+ }
27254+
27255+ tsi620_setup_srep_region(MAINT_BAR, MAINT_BAR_LUT, tsi620->i2rMaint,
27256+ TSI620_MAINT_SPACE_SIZE, 0xff, DEFAULT_HOPCOUNT, 0,
27257+ TSI620_SREP_LUT_MAINT_TRANS, 1);
27258+
27259+ }
27260+}
27261+
27262+/*****************************************************************************
27263+ * Setup RIO subsystem with Tsi620 as a master port
27264+ *****************************************************************************/
27265+int tsi620_setup_mport(struct pci_dev *pdev)
27266+{
27267+ int retval = 0;
27268+ struct rio_ops *ops;
27269+
27270+ struct rio_mport *mport;
27271+
27272+ ops = kmalloc(sizeof(struct rio_ops), GFP_KERNEL);
27273+ if (!ops)
27274+ {
27275+ TSI620_DEBUG("Could not allocate memory for rio_ops\n");
27276+ return -ENOMEM;
27277+ }
27278+ memset(ops, 0, sizeof(struct rio_ops));
27279+ ops->lcread = tsi620_lcread;
27280+ ops->lcwrite = tsi620_lcwrite;
27281+ ops->cread = tsi620_cread;
27282+ ops->cwrite = tsi620_cwrite;
27283+ ops->dsend = tsi620_dsend;
27284+ ops->rio_ioremap = tsi620_ioremap;
27285+ ops->rio_unmap = tsi620_unmap;
27286+
27287+ mport = kmalloc(sizeof(struct rio_mport), GFP_KERNEL);
27288+ if (!mport)
27289+ {
27290+ kfree(ops);
27291+ TSI620_DEBUG("Could not allocate memory for rio_ops\n");
27292+ return -ENOMEM;
27293+ }
27294+ mport->ops = ops;
27295+ mport->id = 0;
27296+ mport->index = 0;
27297+ mport->sys_size = 0; /* small system */
27298+ mport->phy_type = RIO_PHY_SERIAL;
27299+ mport->name[0] = 'T';
27300+ mport->name[1] = 0;
27301+ mport->priv = (void*) tsi620;
27302+ mport->host_deviceid = 1; /* TODO -- read from cmd line */
27303+
27304+ INIT_LIST_HEAD(&mport->dbells);
27305+
27306+ mport->iores.start = tsi620->base;
27307+ mport->iores.end = tsi620->base + tsi620->memSize;
27308+ mport->iores.flags = IORESOURCE_MEM;
27309+ strcpy(mport->name, "Tsi620 mport");
27310+
27311+ rio_register_mport(mport);
27312+ return retval;
27313+}
27314+
27315+/*****************************************************************************
27316+ * Find an available bar
27317+ *****************************************************************************/
27318+int findFreeRegion(u32 length, u32* pAddr)
27319+{
27320+ int bar;
27321+ int nextBar;
27322+ int barStartAddress = tsi620->i2rBase;
27323+ int maxSize = 0;
27324+
27325+ for (bar = 0; bar < TSI620_SREP_I2R_NUMBARS; bar++)
27326+ {
27327+
27328+ TSI620_DEBUG("Checking bar %d\n", bar);
27329+ if (!(tsi620->bar[bar].enabled))
27330+ {
27331+ TSI620_DEBUG("bar %d not enabled... is it big enough?\n", bar);
27332+ //Ok, so we have a free bar -- but is it big enough?
27333+ nextBar = bar+1;
27334+
27335+ while(nextBar < TSI620_SREP_I2R_NUMBARS)
27336+
27337+ //for (nextBar = (bar+1); nextBar < TSI620_SREP_I2R_NUMBARS; nextBar++);
27338+ {
27339+ if(tsi620->bar[nextBar].enabled)
27340+ {
27341+ //Ok, so we found the next bar that's in use... we can use it's address to determine max size of this bar
27342+ maxSize = tsi620->bar[nextBar].isfAddr - barStartAddress;
27343+ break;
27344+ }
27345+ else
27346+ {
27347+ nextBar++;
27348+ }
27349+ }
27350+
27351+ /* Ok, so we found the next used BAR, and we know the maximum size this bar can be */
27352+ if (maxSize >= length)
27353+ {
27354+ break;
27355+ }
27356+ else
27357+ {
27358+ }
27359+ }
27360+ else
27361+ {
27362+ //update the lowest possible start address, and look at the next BAR
27363+ barStartAddress = tsi620->bar[bar].isfAddr + tsi620->bar[bar].size;
27364+ }
27365+ }
27366+
27367+ if (TSI620_SREP_I2R_NUMBARS == bar)
27368+ {
27369+ TSI620_DEBUG("Could not find a free BAR with 0x%x of space :( -- aborting\n", length);
27370+ return -1;
27371+ }
27372+ else
27373+ {
27374+ TSI620_DEBUG("bar %d works starting at 0x%x!\n", bar, barStartAddress);
27375+ *pAddr = barStartAddress;
27376+ return bar;
27377+ }
27378+}
27379+
27380+/*****************************************************************************
27381+ * Map an area of processor space to a RIO device memory
27382+ *****************************************************************************/
27383+void* tsi620_ioremap(void* rio_address, u16 destid, unsigned int length)
27384+{
27385+ u32 isfAddr;
27386+
27387+ int bar = findFreeRegion(length, &isfAddr);
27388+
27389+ TSI620_DEBUG("Remapping to bar %d, ISF addr 0x%x\n", bar, isfAddr);
27390+
27391+ if (-1 == bar)
27392+ return NULL;
27393+
27394+ tsi620_setup_srep_region(bar, bar, isfAddr,
27395+ length, destid, 0xff, (u32) rio_address,
27396+ TSI620_SREP_LUT_NR_NW_TRANS, 1);
27397+
27398+
27399+ tsi620->bar[bar].procAddr = (void*) (tsi620->base + (isfAddr - tsi620->i2rBase));
27400+
27401+ TSI620_DEBUG("Proc addr 0x%x\n", (u32) tsi620->bar[bar].procAddr);
27402+
27403+ return tsi620->bar[bar].procAddr;
27404+}
27405+
27406+void tsi620_unmap(void* address)
27407+{
27408+ int bar;
27409+
27410+ for (bar = 0; bar < TSI620_SREP_I2R_NUMBARS; bar++)
27411+ {
27412+ if (tsi620->bar[bar].procAddr == address)
27413+ {
27414+ tsi620_setup_srep_region(bar, bar, 0,
27415+ 0x1000, 0xff, DEFAULT_HOPCOUNT, 0,
27416+ TSI620_SREP_LUT_NR_NW_TRANS, 0);
27417+ tsi620->bar[bar].procAddr = 0;
27418+ break;
27419+ }
27420+ }
27421+}
27422+
27423+/*****************************************************************************
27424+ * Unload driver
27425+ *****************************************************************************/
27426+void tsi620_remove(struct pci_dev *pdev)
27427+{
27428+ iounmap((void*) tsi620->base);
27429+ iounmap((void*) tsi620->regs);
27430+ kfree(tsi620);
27431+}
27432+
27433+static int __init tsi620_init(void)
27434+{
27435+ return pci_register_driver(&tsi620_driver);
27436+}
27437+
27438+static void __exit tsi620_exit(void)
27439+{
27440+ pci_unregister_driver(&tsi620_driver);
27441+}
27442+
27443+
27444+module_init(tsi620_init);
27445+module_exit(tsi620_exit);
27446+
27447+
27448diff --git a/drivers/rapidio/mports/tsi620/tsi620.h b/drivers/rapidio/mports/tsi620/tsi620.h
27449new file mode 100644
27450index 0000000..e32dfd3
27451--- /dev/null
27452+++ b/drivers/rapidio/mports/tsi620/tsi620.h
27453@@ -0,0 +1,123 @@
27454+/* Tsi620 Header
27455+ *
27456+ * Copyright 2009, Integrated Device Technology, Inc.
27457+ *
27458+ * The register offsets and values defined in this file represent the Tsi620
27459+ * PCI to RapidIO bridge. These offsets and values should be trated with the
27460+ * same discretion and NDA terms as the Tsi620 User Manual, available from IDT.
27461+ *
27462+ * Other aspects of this file (data structures, etc) are used by the Tsi620
27463+ * driver code. While these are not described in the Tsi620 User Manual,
27464+ * these aspects should again be considered confidental, as should the
27465+ * tsi620.c driver code.
27466+ *
27467+ * This program is distributed in the hope that it will be useful, but WITHOUT
27468+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
27469+ * FITNESS FOR A PARTICULAR PURPOSE.
27470+ */
27471+
27472+#ifndef __TSI620_H
27473+#define __TSI620_H
27474+
27475+#define DEFAULT_HOPCOUNT 0xff
27476+
27477+/* PCI vendor and device ID */
27478+#define PCI_VENDOR_ID_TUNDRA 0x10e3
27479+#define PCI_DEVICE_ID_TSI620 0x0620
27480+
27481+/* Which BAR/LUTs to use */
27482+#define TSI620_SREP_I2R_NUMBARS (8)
27483+#define TSI620_SREP_I2R_NUMLUTS (255)
27484+#define MAINT_BAR (TSI620_SREP_I2R_NUMBARS - 1)
27485+#define MAINT_BAR_LUT (TSI620_SREP_I2R_NUMLUTS - 1)
27486+#define MEM_BAR 0x0
27487+
27488+/* Memory space sizes */
27489+#define TSI620_CONFIG_SPACE_SIZE (1024 * 256) /* 256K */
27490+#define TSI620_MAINT_SPACE_SIZE (1024 * 1024 * 1) /* 1M */
27491+
27492+/* Register offsets */
27493+
27494+/* Offset to a block within the registers */
27495+#define TSI620_SREP_OFFSET 0x20000
27496+#define TSI620_PCI_OFFSET 0x22000
27497+
27498+/* Offset from a block base address to individual registers */
27499+/* SREP */
27500+#define TSI620_SREP_R2Ix_LUT_CSR(_x_) (0x500 + (_x_ * 0x10))
27501+#define TSI620_SREP_I2R_BARx_LUT_CSR(_x_) (0x600 + (_x_ * 0x10))
27502+#define TSI620_SREP_I2R_BARx_UPPER(_x_) (0x604 + (_x_ * 0x10))
27503+#define TSI620_SREP_I2R_BARx_LOWER(_x_) (0x608 + (_x_ * 0x10))
27504+#define TSI620_SREP_I2R_LUT_PTY_CTL (0x6a0)
27505+#define TSI620_SREP_I2R_LUT_TA_UPPER (0x6a4)
27506+#define TSI620_SREP_I2R_LUT_TA_LOWER (0x6ac)
27507+#define TSI620_SREP_I2R_LUT_TA_RIO_PARMS (0x6bc)
27508+
27509+#define TSI620_SREP_BAR_SIZE_4K 0x0000
27510+#define TSI620_SREP_BAR_SIZE_8K 0x0100
27511+#define TSI620_SREP_BAR_SIZE_16K 0x0200
27512+#define TSI620_SREP_BAR_SIZE_32K 0x0300
27513+#define TSI620_SREP_BAR_SIZE_64K 0x0400
27514+#define TSI620_SREP_BAR_SIZE_128K 0x0500
27515+#define TSI620_SREP_BAR_SIZE_256K 0x0600
27516+#define TSI620_SREP_BAR_SIZE_512K 0x0700
27517+#define TSI620_SREP_BAR_SIZE_1M 0x0800
27518+#define TSI620_SREP_BAR_SIZE_2M 0x0900
27519+#define TSI620_SREP_BAR_SIZE_4M 0x0a00
27520+#define TSI620_SREP_BAR_SIZE_8M 0x0b00
27521+#define TSI620_SREP_BAR_SIZE_16M 0x0c00
27522+#define TSI620_SREP_BAR_SIZE_32M 0x0d00
27523+#define TSI620_SREP_BAR_SIZE_64M 0x0e00
27524+#define TSI620_SREP_BAR_SIZE_128M 0x0f00
27525+#define TSI620_SREP_BAR_SIZE_256M 0x1000
27526+#define TSI620_SREP_BAR_SIZE_512M 0x1100
27527+#define TSI620_SREP_BAR_SIZE_1G 0x1200
27528+#define TSI620_SREP_BAR_SIZE_2G 0x1300
27529+
27530+/* Various common type of transactions in LUT */
27531+#define TSI620_SREP_LUT_MAINT_TRANS 0x8081 //Maint read, maint write
27532+#define TSI620_SREP_LUT_NR_NW_TRANS 0x2454 //NREAD, NWRITE
27533+#define TSI620_SREP_LUT_NR_NWR_TRANS 0x2555 //NREAD, NWRITE_R
27534+
27535+#define MAINT_BAR_SIZE_ID TSI620_SREP_BAR_SIZE_1M
27536+
27537+/* PCI */
27538+#define TSI620_PCI_BAR2 0x018
27539+#define TSI620_PCI_MEM_BAR TSI620_PCI_BAR2
27540+#define TSI620_PCI_P2O_BAR2_LUTx(x) (0x500 + (x * 0x08))
27541+#define TSI620_PCI_P2O_BAR2_LUTx_UPPER(x) (0x504 + (x * 0x08))
27542+#define TSI620_PCI_P2O_PAGE_SIZES 0x04c
27543+#define TSI620_PCI_NUM_P2O_LUTS 32
27544+
27545+#define TSI620_PCI_P2O_PAGE_SIZES__BAR2_SIZE_MASK 0x0000f800
27546+
27547+struct tsi620_bar
27548+{
27549+ int firstLut;
27550+ int luts;
27551+ u32 isfAddr;
27552+ void* procAddr;
27553+ u16 destid;
27554+ u8 hopcount;
27555+ int size;
27556+ int enabled;
27557+};
27558+
27559+/* global variables -- all in a nice, neat struct */
27560+struct tsi620_device {
27561+ u32 regs; /* Window into all Tsi620 regs */
27562+ u32 srep; /* Serial RapidIO endpoint registers */
27563+ u32 pci; /* PCI registers */
27564+
27565+ u32 memSize;
27566+
27567+ u32 i2rBase; /* This is the PCI address where we start I2R space */
27568+ u32 base; /* This is the processor space address used to access I2R space */
27569+
27570+ u32 i2rMaint; /* PCI address of where we start maintainence space */
27571+ u32 maint; /* Processor address of where we start maint space */
27572+
27573+ struct tsi620_bar bar[TSI620_SREP_I2R_NUMBARS];
27574+};
27575+
27576+#endif
27577diff --git a/drivers/rapidio/rio-scan.c b/drivers/rapidio/rio-scan.c
27578index ebe77dd..68d5828 100644
27579--- a/drivers/rapidio/rio-scan.c
27580+++ b/drivers/rapidio/rio-scan.c
27581@@ -36,6 +36,9 @@
27582
27583 #include "rio.h"
27584
27585+#undef pr_debug
27586+#define pr_debug printk
27587+
27588 LIST_HEAD(rio_devices);
27589 static LIST_HEAD(rio_switches);
27590
27591@@ -376,7 +379,7 @@ static struct rio_dev __devinit *rio_setup_device(struct rio_net *net,
27592 int ret = 0;
27593 struct rio_dev *rdev;
27594 struct rio_switch *rswitch = NULL;
27595- int result, rdid;
27596+ u32 result, rdid;
27597 size_t size;
27598 u32 swpinfo = 0;
27599
27600@@ -1198,6 +1201,8 @@ int __devinit rio_enum_mport(struct rio_mport *mport)
27601 }
27602
27603 out:
27604+ printk(KERN_INFO "RIO: master port %d destid %d\n",
27605+ mport->id, mport->host_deviceid);
27606 return rc;
27607 }
27608
27609@@ -1256,6 +1261,7 @@ static void rio_enum_timeout(unsigned long data)
27610 * peer discovery. Returns %0 if discovery succeeds or %-EBUSY
27611 * on failure.
27612 */
27613+
27614 int __devinit rio_disc_mport(struct rio_mport *mport)
27615 {
27616 struct rio_net *net = NULL;
27617@@ -1266,6 +1272,7 @@ int __devinit rio_disc_mport(struct rio_mport *mport)
27618
27619 /* If master port has an active link, allocate net and discover peers */
27620 if (rio_mport_is_active(mport)) {
27621+
27622 if (!(net = rio_alloc_net(mport))) {
27623 printk(KERN_ERR "RIO: Failed to allocate new net\n");
27624 goto bail;
27625@@ -1277,6 +1284,7 @@ int __devinit rio_disc_mport(struct rio_mport *mport)
27626 jiffies + CONFIG_RAPIDIO_DISC_TIMEOUT * HZ;
27627 rio_enum_timer.data = (unsigned long)&enum_timeout_flag;
27628 add_timer(&rio_enum_timer);
27629+
27630 while (!rio_enum_complete(mport)) {
27631 mdelay(1);
27632 if (enum_timeout_flag) {
27633@@ -1304,7 +1312,6 @@ int __devinit rio_disc_mport(struct rio_mport *mport)
27634
27635 rio_build_route_tables();
27636 }
27637-
27638 return 0;
27639
27640 timeout:
27641diff --git a/drivers/rapidio/rio.c b/drivers/rapidio/rio.c
27642index 86c9a09..4a2487b 100644
27643--- a/drivers/rapidio/rio.c
27644+++ b/drivers/rapidio/rio.c
27645@@ -243,7 +243,15 @@ int rio_request_inb_dbell(struct rio_mport *mport,
27646 {
27647 int rc = 0;
27648
27649- struct resource *res = kmalloc(sizeof(struct resource), GFP_KERNEL);
27650+ struct resource *res;
27651+
27652+ if (mport->ops->open_inb_mbox == NULL)
27653+ {
27654+ rc = -ENOTSUPP;
27655+ goto out;
27656+ }
27657+
27658+ res = kmalloc(sizeof(struct resource), GFP_KERNEL);
27659
27660 if (res) {
27661 rio_init_dbell_res(res, start, end);
27662@@ -831,7 +839,7 @@ int rio_inb_pwrite_handler(union rio_pw_msg *pw_msg)
27663 RIO_PORT_N_ACK_CLEAR);
27664
27665 /* Schedule Extraction Service */
27666- pr_debug("RIO_PW: Device Extraction on [%s]-P%d\n",
27667+ printk("RIO_PW: Device Extraction on [%s]-P%d\n",
27668 rio_name(rdev), portnum);
27669 }
27670 }
27671@@ -1184,6 +1192,21 @@ int rio_register_mport(struct rio_mport *port)
27672 return 0;
27673 }
27674
27675+void* rio_ioremap(struct rio_mport *mport, void* rio_address,
27676+ u16 destid, unsigned int length)
27677+{
27678+ if (!mport->ops->rio_ioremap)
27679+ return NULL;
27680+ return mport->ops->rio_ioremap(rio_address, destid, length);
27681+}
27682+
27683+void rio_unmap(struct rio_mport *mport, void* address)
27684+{
27685+ if (!mport->ops->rio_unmap)
27686+ return;
27687+ mport->ops->rio_unmap(address);
27688+}
27689+
27690 EXPORT_SYMBOL_GPL(rio_local_get_device_id);
27691 EXPORT_SYMBOL_GPL(rio_get_device);
27692 EXPORT_SYMBOL_GPL(rio_get_asm);
27693@@ -1195,3 +1218,7 @@ EXPORT_SYMBOL_GPL(rio_request_inb_mbox);
27694 EXPORT_SYMBOL_GPL(rio_release_inb_mbox);
27695 EXPORT_SYMBOL_GPL(rio_request_outb_mbox);
27696 EXPORT_SYMBOL_GPL(rio_release_outb_mbox);
27697+EXPORT_SYMBOL_GPL(rio_ioremap);
27698+EXPORT_SYMBOL_GPL(rio_unmap);
27699+EXPORT_SYMBOL_GPL(rio_register_mport);
27700+EXPORT_SYMBOL_GPL(rio_init_mports);
27701diff --git a/drivers/usb/host/Kconfig b/drivers/usb/host/Kconfig
27702index ab085f1..890c08d 100644
27703--- a/drivers/usb/host/Kconfig
27704+++ b/drivers/usb/host/Kconfig
27705@@ -230,6 +230,19 @@ config USB_OXU210HP_HCD
27706 To compile this driver as a module, choose M here: the
27707 module will be called oxu210hp-hcd.
27708
27709+config USB_CI13612_HCD
27710+ tristate "CI13612A HCD support"
27711+ depends on USB
27712+ ---help---
27713+ The CI13612A is an USB host/OTG/device controller. Enable this
27714+ option if your board has this chip. If unsure, say N.
27715+
27716+ This driver does not support isochronous transfers and doesn't
27717+ implement OTG nor USB device controllers.
27718+
27719+ To compile this driver as a module, choose M here: the
27720+ module will be called CI13612-hcd.
27721+
27722 config USB_ISP116X_HCD
27723 tristate "ISP116X HCD support"
27724 depends on USB
27725diff --git a/drivers/usb/host/ci13612.h b/drivers/usb/host/ci13612.h
27726new file mode 100644
27727index 0000000..b893018
27728--- /dev/null
27729+++ b/drivers/usb/host/ci13612.h
27730@@ -0,0 +1,887 @@
27731+/*
27732+ * System definitions
27733+ */
27734+#define ci13612_PHY_ADDR 0x0020004A0000
27735+#define ci13162_PHY_ADDR_SIZE 0x20000
27736+
27737+#define MAX_EHCI_FRAME_LIST_SIZE 8
27738+#define MAX_EHCI_FRAME_LIST_BITS EHCI_CMD_FRAME_SIZE_8
27739+
27740+#define MAX_QH_DESCRS (8)
27741+#define MAX_QTD_DESCRS (16)
27742+#define MAX_ITD_DESCRS (16)
27743+#define MAX_SITD_DESCRS (16)
27744+
27745+
27746+#define USB_MAX_INTERFACES (10)
27747+#define RX_BUFFER_SIZE (0xFF)
27748+
27749+/* Macro for alignment to specific byte boundary */
27750+#define USB_MEM32_ALIGN(n) ((n) + (-(n) & 31))
27751+#define USB_MEM512_ALIGN(n) ((n) + (-(n) & 511))
27752+#define USB_MEM4096_ALIGN(n) ((n) + (-(n) & 4095))
27753+
27754+#define BitStuffTime(x) (7* 8 * x / 6)
27755+
27756+/*
27757+ * Host interface registers
27758+ */
27759+
27760+/* define CI13612 USB registers here */
27761+
27762+
27763+#define ci13612_USB_CMD 0x140
27764+ /* 23:16 is r/w intr rate, in microframes; default "8" == 1/msec */
27765+ #define USB_CMD_PARK (1<<11) /* enable "park" on async qh */
27766+ #define USB_CMD_PARK_CNT(c) (((c)>>8)&3) /* how many transfers to park for */
27767+ #define USB_CMD_LRESET (1<<7) /* partial reset (no ports, etc) */
27768+ #define USB_CMD_IAAD (1<<6) /* "doorbell" interrupt async advance */
27769+ #define USB_CMD_ASE (1<<5) /* async schedule enable */
27770+ #define USB_CMD_PSE (1<<4) /* periodic schedule enable */
27771+ /* 3:2 is periodic frame list size */
27772+ #define USB_CMD_RESET (1<<1) /* reset HC not bus */
27773+ #define USB_CMD_RUN (1<<0) /* start/stop HC */
27774+
27775+
27776+#define ci13612_USB_STS 0x144
27777+ #define USB_STS_ASS (1<<15) /* Async Schedule Status */
27778+ #define USB_STS_PSS (1<<14) /* Periodic Schedule Status */
27779+ #define USB_STS_RECL (1<<13) /* Reclamation */
27780+ #define USB_STS_HALT (1<<12) /* Not running (any reason) */
27781+ /* some bits reserved */
27782+ /* these STS_* flags are also intr_enable bits (USBINTR) */
27783+ #define USB_STS_IAA (1<<5) /* Interrupted on async advance */
27784+ #define USB_STS_FATAL (1<<4) /* such as some PCI access errors */
27785+ #define USB_STS_FLR (1<<3) /* frame list rolled over */
27786+ #define USB_STS_PCD (1<<2) /* port change detect */
27787+ #define USB_STS_ERR (1<<1) /* "error" completion (overflow, ...) */
27788+ #define USB_STS_INT (1<<0) /* "normal" completion (short, ...) */
27789+
27790+#define ci13612_USB_INTEN 0x148
27791+
27792+
27793+#define ci13612_HCS_PARAMS 0x104
27794+#define ci13612_HCC_PARAMS 0x108
27795+
27796+#define ci13612_USBSTS 0x144
27797+#define ci13612_USBINTR 0x148
27798+#define ci13612_FRINDEX 0x14C
27799+#define ci13612_CTRLDSSEGMENT 0x150
27800+#define ci13612_CONFIGFLAG 0x180
27801+#define ci13612_PORTSCX0 0x184
27802+
27803+
27804+#define ci13612_DEVICEID 0x00
27805+ #define ci13612_REV_MASK 0xffff0000
27806+ #define ci13612_REV_SHIFT 16
27807+ #define ci13612_REV_2100 0x2100
27808+ #define ci13612_BO_SHIFT 8
27809+ #define ci13612_BO_MASK (0x3 << ci13612_BO_SHIFT)
27810+ #define ci13612_MAJ_REV_SHIFT 4
27811+ #define ci13612_MAJ_REV_MASK (0xf << ci13612_MAJ_REV_SHIFT)
27812+ #define ci13612_MIN_REV_SHIFT 0
27813+ #define ci13612_MIN_REV_MASK (0xf << ci13612_MIN_REV_SHIFT)
27814+#define ci13612_HOSTIFCONFIG 0x04
27815+#define ci13612_SOFTRESET 0x08
27816+ #define ci13612_SRESET (1 << 0)
27817+
27818+#define ci13612_PIOBURSTREADCTRL 0x0C
27819+
27820+#define ci13612_CHIPIRQSTATUS 0x10
27821+#define ci13612_CHIPIRQEN_SET 0x14
27822+#define ci13612_CHIPIRQEN_CLR 0x18
27823+ #define ci13612_USBSPHLPWUI 0x00000080
27824+ #define ci13612_USBOTGLPWUI 0x00000040
27825+ #define ci13612_USBSPHI 0x00000002
27826+ #define ci13612_USBOTGI 0x00000001
27827+
27828+#define ci13612_CLKCTRL_SET 0x1C
27829+ #define ci13612_SYSCLKEN 0x00000008
27830+ #define ci13612_USBSPHCLKEN 0x00000002
27831+ #define ci13612_USBOTGCLKEN 0x00000001
27832+
27833+#define ci13612_ASO 0x68
27834+ #define ci13612_SPHPOEN 0x00000100
27835+ #define ci13612_OVRCCURPUPDEN 0x00000800
27836+ #define ci13612_ASO_OP (1 << 10)
27837+ #define ci13612_COMPARATOR 0x000004000
27838+
27839+#define ci13612_USBMODE 0x1A8
27840+ #define ci13612_VBPS 0x00000020
27841+ #define ci13612_ES_LITTLE 0x00000004
27842+ #define ci13612_CM_HOST_ONLY 0x00000003
27843+
27844+/*
27845+ * Proper EHCI structs & defines
27846+ */
27847+
27848+/* Magic numbers that can affect system performance */
27849+#define EHCI_TUNE_CERR 3 /* 0-3 qtd retries; 0 == don't stop */
27850+#define EHCI_TUNE_RL_HS 4 /* nak throttle; see 4.9 */
27851+#define EHCI_TUNE_RL_TT 0
27852+#define EHCI_TUNE_MULT_HS 1 /* 1-3 transactions/uframe; 4.10.3 */
27853+#define EHCI_TUNE_MULT_TT 1
27854+#define EHCI_TUNE_FLS 2 /* (small) 256 frame schedule */
27855+
27856+struct ci13612_hcd;
27857+
27858+/* EHCI register interface, corresponds to EHCI Revision 0.95 specification */
27859+
27860+/* Section 2.2 Host Controller Capability Registers */
27861+#define HC_LENGTH(p) (((p)>>00)&0x00ff) /* bits 7:0 */
27862+#define HC_VERSION(p) (((p)>>16)&0xffff) /* bits 31:16 */
27863+#define HCS_DEBUG_PORT(p) (((p)>>20)&0xf) /* bits 23:20, debug port? */
27864+#define HCS_INDICATOR(p) ((p)&(1 << 16)) /* true: has port indicators */
27865+#define HCS_N_CC(p) (((p)>>12)&0xf) /* bits 15:12, #companion HCs */
27866+#define HCS_N_PCC(p) (((p)>>8)&0xf) /* bits 11:8, ports per CC */
27867+#define HCS_PORTROUTED(p) ((p)&(1 << 7)) /* true: port routing */
27868+#define HCS_PPC(p) ((p)&(1 << 4)) /* true: port power control */
27869+#define HCS_N_PORTS(p) (((p)>>0)&0xf) /* bits 3:0, ports on HC */
27870+#define HCC_EXT_CAPS(p) (((p)>>8)&0xff) /* for pci extended caps */
27871+#define HCC_ISOC_CACHE(p) ((p)&(1 << 7)) /* true: can cache isoc frame */
27872+#define HCC_ISOC_THRES(p) (((p)>>4)&0x7) /* bits 6:4, uframes cached */
27873+#define HCC_CANPARK(p) ((p)&(1 << 2)) /* true: can park on async qh */
27874+#define HCC_PGM_FRAMELISTLEN(p) ((p)&(1 << 1)) /* true: periodic_size changes*/
27875+#define HCC_64BIT_ADDR(p) ((p)&(1)) /* true: can use 64-bit addr */
27876+
27877+
27878+struct ehci_caps {
27879+ /* these fields are specified as 8 and 16 bit registers,
27880+ * but some hosts can't perform 8 or 16 bit PCI accesses.
27881+ */
27882+ u32 hc_capbase;
27883+ u32 hcs_params; /* HCSPARAMS - offset 0x4 */
27884+ u32 hcc_params; /* HCCPARAMS - offset 0x8 */
27885+ u8 portroute[8]; /* nibbles for routing - offset 0xC */
27886+} __attribute__ ((packed));
27887+
27888+/* 23:16 is r/w intr rate, in microframes; default "8" == 1/msec */
27889+#define CMD_PARK (1<<11) /* enable "park" on async qh */
27890+#define CMD_PARK_CNT(c) (((c)>>8)&3) /* how many transfers to park for */
27891+#define CMD_LRESET (1<<7) /* partial reset (no ports, etc) */
27892+#define CMD_IAAD (1<<6) /* "doorbell" interrupt async advance */
27893+#define CMD_ASE (1<<5) /* async schedule enable */
27894+#define CMD_PSE (1<<4) /* periodic schedule enable */
27895+/* 3:2 is periodic frame list size */
27896+#define CMD_RESET (1<<1) /* reset HC not bus */
27897+#define CMD_RUN (1<<0) /* start/stop HC */
27898+
27899+#define STS_ASS (1<<15) /* Async Schedule Status */
27900+#define STS_PSS (1<<14) /* Periodic Schedule Status */
27901+#define STS_RECL (1<<13) /* Reclamation */
27902+#define STS_HALT (1<<12) /* Not running (any reason) */
27903+/* some bits reserved */
27904+ /* these STS_* flags are also intr_enable bits (USBINTR) */
27905+#define STS_IAA (1<<5) /* Interrupted on async advance */
27906+#define STS_FATAL (1<<4) /* such as some PCI access errors */
27907+#define STS_FLR (1<<3) /* frame list rolled over */
27908+#define STS_PCD (1<<2) /* port change detect */
27909+#define STS_ERR (1<<1) /* "error" completion (overflow, ...) */
27910+#define STS_INT (1<<0) /* "normal" completion (short, ...) */
27911+
27912+#define INTR_MASK (STS_IAA | STS_FATAL | STS_PCD | STS_ERR | STS_INT)
27913+
27914+#define FLAG_CF (1<<0) /* true: we'll support "high speed" */
27915+
27916+
27917+/* 31:23 reserved */
27918+#define PORT_WKOC_E (1<<22) /* wake on overcurrent (enable) */
27919+#define PORT_WKDISC_E (1<<21) /* wake on disconnect (enable) */
27920+#define PORT_WKCONN_E (1<<20) /* wake on connect (enable) */
27921+/* 19:16 for port testing */
27922+#define PORT_LED_OFF (0<<14)
27923+#define PORT_LED_AMBER (1<<14)
27924+#define PORT_LED_GREEN (2<<14)
27925+#define PORT_LED_MASK (3<<14)
27926+#define PORT_OWNER (1<<13) /* true: companion hc owns this port */
27927+#define PORT_POWER (1<<12) /* true: has power (see PPC) */
27928+#define PORT_USB11(x) (((x)&(3<<10)) == (1<<10)) /* USB 1.1 device */
27929+/* 11:10 for detecting lowspeed devices (reset vs release ownership) */
27930+/* 9 reserved */
27931+#define PORT_RESET (1<<8) /* reset port */
27932+#define PORT_SUSPEND (1<<7) /* suspend port */
27933+#define PORT_RESUME (1<<6) /* resume it */
27934+#define PORT_OCC (1<<5) /* over current change */
27935+#define PORT_OC (1<<4) /* over current active */
27936+#define PORT_PEC (1<<3) /* port enable change */
27937+#define PORT_PE (1<<2) /* port enable */
27938+#define PORT_CSC (1<<1) /* connect status change */
27939+#define PORT_CONNECT (1<<0) /* device connected */
27940+#define PORT_RWC_BITS (PORT_CSC | PORT_PEC | PORT_OCC)
27941+
27942+
27943+/* Section 2.3 Host Controller Operational Registers */
27944+struct ehci_regs {
27945+ /* USBCMD: offset 0x00 */
27946+ u32 command;
27947+ /* USBSTS: offset 0x04 */
27948+ u32 status;
27949+ /* USBINTR: offset 0x08 */
27950+ u32 intr_enable;
27951+ /* FRINDEX: offset 0x0C */
27952+ u32 frame_index; /* current microframe number */
27953+ /* CTRLDSSEGMENT: offset 0x10 */
27954+ u32 segment; /* address bits 63:32 if needed */
27955+ /* PERIODICLISTBASE: offset 0x14 */
27956+ u32 frame_list; /* points to periodic list */
27957+ /* ASYNCLISTADDR: offset 0x18 */
27958+ u32 async_next; /* address of next async queue head */
27959+ u32 reserved[9];
27960+ /* CONFIGFLAG: offset 0x40 */
27961+ u32 configured_flag;
27962+ /* PORTSC: offset 0x44 */
27963+ u32 port_status[8]; /* up to N_PORTS */
27964+
27965+} __attribute__ ((packed));
27966+
27967+/* Appendix C, Debug port ... intended for use with special "debug devices"
27968+ * that can help if there's no serial console. (nonstandard enumeration.)
27969+ */
27970+struct ehci_dbg_port {
27971+ u32 control;
27972+#define DBGP_OWNER (1<<30)
27973+#define DBGP_ENABLED (1<<28)
27974+#define DBGP_DONE (1<<16)
27975+#define DBGP_INUSE (1<<10)
27976+#define DBGP_ERRCODE(x) (((x)>>7)&0x07)
27977+# define DBGP_ERR_BAD 1
27978+# define DBGP_ERR_SIGNAL 2
27979+#define DBGP_ERROR (1<<6)
27980+#define DBGP_GO (1<<5)
27981+#define DBGP_OUT (1<<4)
27982+#define DBGP_LEN(x) (((x)>>0)&0x0f)
27983+ u32 pids;
27984+#define DBGP_PID_GET(x) (((x)>>16)&0xff)
27985+#define DBGP_PID_SET(data, tok) (((data)<<8)|(tok))
27986+ u32 data03;
27987+ u32 data47;
27988+ u32 address;
27989+#define DBGP_EPADDR(dev, ep) (((dev)<<8)|(ep))
27990+} __attribute__ ((packed));
27991+
27992+
27993+#define QTD_NEXT(dma) cpu_to_le32((u32)dma)
27994+
27995+/*
27996+ * EHCI Specification 0.95 Section 3.5
27997+ * QTD: describe data transfer components (buffer, direction, ...)
27998+ * See Fig 3-6 "Queue Element Transfer Descriptor Block Diagram".
27999+ *
28000+ * These are associated only with "QH" (Queue Head) structures,
28001+ * used with control, bulk, and interrupt transfers.
28002+ */
28003+struct ehci_qtd {
28004+ /* first part defined by EHCI spec */
28005+ __le32 hw_next; /* see EHCI 3.5.1 */
28006+ __le32 hw_alt_next; /* see EHCI 3.5.2 */
28007+ __le32 hw_token; /* see EHCI 3.5.3 */
28008+#define QTD_TOGGLE (1 << 31) /* data toggle */
28009+#define QTD_LENGTH(tok) (((tok)>>16) & 0x7fff)
28010+#define QTD_IOC (1 << 15) /* interrupt on complete */
28011+#define QTD_CERR(tok) (((tok)>>10) & 0x3)
28012+#define QTD_PID(tok) (((tok)>>8) & 0x3)
28013+#define QTD_STS_ACTIVE (1 << 7) /* HC may execute this */
28014+#define QTD_STS_HALT (1 << 6) /* halted on error */
28015+#define QTD_STS_DBE (1 << 5) /* data buffer error (in HC) */
28016+#define QTD_STS_BABBLE (1 << 4) /* device was babbling (qtd halted) */
28017+#define QTD_STS_XACT (1 << 3) /* device gave illegal response */
28018+#define QTD_STS_MMF (1 << 2) /* incomplete split transaction */
28019+#define QTD_STS_STS (1 << 1) /* split transaction state */
28020+#define QTD_STS_PING (1 << 0) /* issue PING? */
28021+ __le32 hw_buf[5]; /* see EHCI 3.5.4 */
28022+ __le32 hw_buf_hi[5]; /* Appendix B */
28023+
28024+ /* the rest is HCD-private */
28025+ dma_addr_t qtd_dma; /* qtd address */
28026+ struct list_head qtd_list; /* sw qtd list */
28027+ struct urb *urb; /* qtd's urb */
28028+ size_t length; /* length of buffer */
28029+
28030+ u32 qtd_buffer_len;
28031+ void *buffer;
28032+ dma_addr_t buffer_dma;
28033+ void *transfer_buffer;
28034+ void *transfer_dma;
28035+} __attribute__ ((aligned(32)));
28036+
28037+/* mask NakCnt+T in qh->hw_alt_next */
28038+#define QTD_MASK __constant_cpu_to_le32 (~0x1f)
28039+
28040+#define IS_SHORT_READ(token) (QTD_LENGTH(token) != 0 && QTD_PID(token) == 1)
28041+
28042+/* Type tag from {qh, itd, sitd, fstn}->hw_next */
28043+#define Q_NEXT_TYPE(dma) ((dma) & __constant_cpu_to_le32 (3 << 1))
28044+
28045+/* values for that type tag */
28046+#define Q_TYPE_QH __constant_cpu_to_le32 (1 << 1)
28047+
28048+/* next async queue entry, or pointer to interrupt/periodic QH */
28049+#define QH_NEXT(dma) (cpu_to_le32(((u32)dma)&~0x01f)|Q_TYPE_QH)
28050+
28051+/* for periodic/async schedules and qtd lists, mark end of list */
28052+#define EHCI_LIST_END __constant_cpu_to_le32(1) /* "null pointer" to hw */
28053+
28054+/*
28055+ * Entries in periodic shadow table are pointers to one of four kinds
28056+ * of data structure. That's dictated by the hardware; a type tag is
28057+ * encoded in the low bits of the hardware's periodic schedule. Use
28058+ * Q_NEXT_TYPE to get the tag.
28059+ *
28060+ * For entries in the async schedule, the type tag always says "qh".
28061+ */
28062+union ehci_shadow {
28063+ struct ehci_qh *qh; /* Q_TYPE_QH */
28064+ __le32 *hw_next; /* (all types) */
28065+ void *ptr;
28066+};
28067+
28068+/*
28069+ * EHCI Specification 0.95 Section 3.6
28070+ * QH: describes control/bulk/interrupt endpoints
28071+ * See Fig 3-7 "Queue Head Structure Layout".
28072+ *
28073+ * These appear in both the async and (for interrupt) periodic schedules.
28074+ */
28075+
28076+struct ehci_qh {
28077+ /* first part defined by EHCI spec */
28078+ __le32 hw_next; /* see EHCI 3.6.1 */
28079+ __le32 hw_info1; /* see EHCI 3.6.2 */
28080+#define QH_HEAD 0x00008000
28081+ __le32 hw_info2; /* see EHCI 3.6.2 */
28082+#define QH_SMASK 0x000000ff
28083+#define QH_CMASK 0x0000ff00
28084+#define QH_HUBADDR 0x007f0000
28085+#define QH_HUBPORT 0x3f800000
28086+#define QH_MULT 0xc0000000
28087+ __le32 hw_current; /* qtd list - see EHCI 3.6.4 */
28088+
28089+ /* qtd overlay (hardware parts of a struct ehci_qtd) */
28090+ __le32 hw_qtd_next;
28091+ __le32 hw_alt_next;
28092+ __le32 hw_token;
28093+ __le32 hw_buf[5];
28094+ __le32 hw_buf_hi[5];
28095+
28096+ /* the rest is HCD-private */
28097+ dma_addr_t qh_dma; /* address of qh */
28098+ union ehci_shadow qh_next; /* ptr to qh; or periodic */
28099+ struct list_head qtd_list; /* sw qtd list */
28100+ struct ehci_qtd *dummy;
28101+ struct ehci_qh *reclaim; /* next to reclaim */
28102+
28103+ struct ci13612_hcd *ci13612;
28104+ struct kref kref;
28105+ unsigned stamp;
28106+
28107+ u8 qh_state;
28108+#define QH_STATE_LINKED 1 /* HC sees this */
28109+#define QH_STATE_UNLINK 2 /* HC may still see this */
28110+#define QH_STATE_IDLE 3 /* HC doesn't see this */
28111+#define QH_STATE_UNLINK_WAIT 4 /* LINKED and on reclaim q */
28112+#define QH_STATE_COMPLETING 5 /* don't touch token.HALT */
28113+
28114+ /* periodic schedule info */
28115+ u8 usecs; /* intr bandwidth */
28116+ u8 gap_uf; /* uframes split/csplit gap */
28117+ u8 c_usecs; /* ... split completion bw */
28118+ u16 tt_usecs; /* tt downstream bandwidth */
28119+ unsigned short period; /* polling interval */
28120+ unsigned short start; /* where polling starts */
28121+#define NO_FRAME ((unsigned short)~0) /* pick new start */
28122+ struct usb_device *dev; /* access to TT */
28123+} __attribute__ ((aligned(32)));
28124+
28125+/*
28126+ * Proper ci13612 structs
28127+ */
28128+
28129+#define ci13612_OTG_CORE_OFFSET 0x0
28130+#define ci13612_OTG_CAP_OFFSET (ci13612_OTG_CORE_OFFSET + 0x100)
28131+#define ci13612_SPH_CORE_OFFSET 0x0
28132+#define ci13612_SPH_CAP_OFFSET (ci13612_SPH_CORE_OFFSET + 0x100)
28133+
28134+#define ci13612_OTG_MEM 0xE000
28135+#define ci13612_SPH_MEM 0x16000
28136+
28137+/* Only how many elements & element structure are specifies here. */
28138+/* 2 host controllers are enabled - total size <= 28 kbytes */
28139+#define DEFAULT_I_TDPS 1024
28140+#define QHEAD_NUM 8
28141+#define QTD_NUM 16
28142+#define SITD_NUM 16
28143+#define MURB_NUM 8
28144+
28145+#define BUFFER_NUM 8
28146+#define BUFFER_SIZE 512
28147+
28148+struct ci13612_info {
28149+ struct usb_hcd *hcd[2];
28150+};
28151+
28152+struct ci13612_buf {
28153+ u8 buffer[BUFFER_SIZE];
28154+} __attribute__ ((aligned(BUFFER_SIZE)));
28155+
28156+struct ci13612_onchip_mem {
28157+ struct ci13612_buf db_pool[BUFFER_NUM];
28158+
28159+ u32 frame_list[DEFAULT_I_TDPS];
28160+ struct ehci_qh qh_pool[QHEAD_NUM];
28161+ struct ehci_qtd qtd_pool[QTD_NUM];
28162+} __attribute__ ((aligned(4 << 10)));
28163+
28164+#define EHCI_MAX_ROOT_PORTS 15 /* see HCS_N_PORTS */
28165+
28166+struct ci13612_murb {
28167+ struct urb urb;
28168+ struct urb *main;
28169+ u8 last;
28170+};
28171+
28172+struct ci13612_hcd { /* one per controller */
28173+ unsigned int is_otg:1;
28174+
28175+ u8 qh_used[QHEAD_NUM];
28176+ u8 qtd_used[QTD_NUM];
28177+ u8 db_used[BUFFER_NUM];
28178+ u8 murb_used[MURB_NUM];
28179+
28180+ struct ci13612_onchip_mem __iomem *mem;
28181+ spinlock_t mem_lock;
28182+
28183+ struct timer_list urb_timer;
28184+
28185+ struct ehci_caps __iomem *caps;
28186+ struct ehci_regs __iomem *regs;
28187+
28188+ __u32 hcs_params; /* cached register copy */
28189+ spinlock_t lock;
28190+
28191+ u32 FRAME_LIST_SIZE;
28192+ u8 UFRAME_COUNT;
28193+ u8 reset_in_progress;
28194+ u32 SPEED;
28195+ u32 PORT_NUM;
28196+
28197+ /* async schedule support */
28198+ struct ehci_qh *async;
28199+ struct ehci_qh *reclaim;
28200+ unsigned reclaim_ready:1;
28201+ unsigned scanning:1;
28202+
28203+ /* periodic schedule support */
28204+ unsigned periodic_size;
28205+ __le32 *periodic; /* hw periodic table */
28206+ dma_addr_t periodic_dma;
28207+ unsigned i_thresh; /* uframes HC might cache */
28208+
28209+ union ehci_shadow *pshadow; /* mirror hw periodic table */
28210+ int next_uframe; /* scan periodic, start here */
28211+ unsigned periodic_sched; /* periodic activity count */
28212+
28213+ /* per root hub port */
28214+ unsigned long reset_done[EHCI_MAX_ROOT_PORTS];
28215+ /* bit vectors (one bit per port) */
28216+ unsigned long bus_suspended; /* which ports were
28217+ * already suspended at the
28218+ * start of a bus suspend
28219+ */
28220+ unsigned long companion_ports;/* which ports are dedicated
28221+ * to the companion controller
28222+ */
28223+
28224+ struct timer_list watchdog;
28225+ unsigned long actions;
28226+ unsigned stamp;
28227+ unsigned long next_statechange;
28228+ u32 command;
28229+
28230+ /* SILICON QUIRKS */
28231+ struct list_head urb_list; /* this is the head to urb
28232+ * queue that didn't get enough
28233+ * resources
28234+ */
28235+ struct ci13612_murb *murb_pool; /* murb per split big urb */
28236+ unsigned urb_len;
28237+
28238+ u8 sbrn; /* packed release number */
28239+};
28240+
28241+#define EHCI_IAA_JIFFIES (HZ/100) /* arbitrary; ~10 msec */
28242+#define EHCI_IO_JIFFIES (HZ/10) /* io watchdog > irq_thresh */
28243+#define EHCI_ASYNC_JIFFIES (HZ/20) /* async idle timeout */
28244+#define EHCI_SHRINK_JIFFIES (HZ/200) /* async qh unlink delay */
28245+
28246+enum ehci_timer_action {
28247+ TIMER_IO_WATCHDOG,
28248+ TIMER_IAA_WATCHDOG,
28249+ TIMER_ASYNC_SHRINK,
28250+ TIMER_ASYNC_OFF,
28251+};
28252+
28253+
28254+/* Host specific */
28255+#define USB_DEBOUNCE_DELAY (101)
28256+#define USB_RESET_RECOVERY_DELAY (11)
28257+#define USB_RESET_DELAY (60)
28258+#define USB_RESUME_RECOVERY_DELAY (100)
28259+
28260+
28261+/* VUSBHS specific defines */
28262+#define VUSBHS_MAX_PORTS (8)
28263+#define EHCI_CAP_LEN_MASK (0x000000FF)
28264+#define EHCI_DATA_STRUCTURE_BASE_ADDRESS (0)
28265+
28266+/* Command Register Bit Masks */
28267+#define EHCI_CMD_RUN_STOP (0x00000001)
28268+#define EHCI_CMD_CTRL_RESET (0x00000002)
28269+#define EHCI_CMD_SETUP_TRIPWIRE_SET (0x00002000)
28270+#define EHCI_CMD_SETUP_TRIPWIRE_CLEAR ~EHCI_CMD_SETUP_TRIPWIRE_SET
28271+
28272+/* Bit 14 is the tripwire bit not bit 12 as some versions of the docs state. */
28273+#define EHCI_CMD_ATDTW_TRIPWIRE_SET (0x00004000)
28274+#define EHCI_CMD_ATDTW_TRIPWIRE_CLEAR ~EHCI_CMD_ATDTW_TRIPWIRE_SET
28275+
28276+ /*bit 15,3,2 are for frame list size */
28277+ #define EHCI_CMD_FRAME_SIZE_1024 (0x00000000) /* 000 */
28278+ #define EHCI_CMD_FRAME_SIZE_512 (0x00000004) /* 001 */
28279+ #define EHCI_CMD_FRAME_SIZE_256 (0x00000008) /* 010 */
28280+ #define EHCI_CMD_FRAME_SIZE_128 (0x0000000C) /* 011 */
28281+ #define EHCI_CMD_FRAME_SIZE_64 (0x00008000) /* 100 */
28282+ #define EHCI_CMD_FRAME_SIZE_32 (0x00008004) /* 101 */
28283+ #define EHCI_CMD_FRAME_SIZE_16 (0x00008008) /* 110 */
28284+ #define EHCI_CMD_FRAME_SIZE_8 (0x0000800C) /* 111 */
28285+
28286+
28287+/* Hardware Rev 4.0 related change */
28288+#ifdef STREAM_ENABLE
28289+ /* Mode Register Bit Masks */
28290+ #define VUSBHS_MODE_CTRL_MODE_IDLE (0x00000010)
28291+ #define VUSBHS_MODE_CTRL_MODE_DEV (0x00000012)
28292+ #define VUSBHS_MODE_CTRL_MODE_HOST (0x00000013)
28293+ #define VUSBHS_MODE_BIG_ENDIAN (0x00000014)
28294+ #define VUSBHS_MODE_SETUP_LOCK_DISABLE (0x00000008)
28295+
28296+#else
28297+ /* Mode Register Bit Masks */
28298+ #define VUSBHS_MODE_CTRL_MODE_IDLE (0x00000000)
28299+ #define VUSBHS_MODE_CTRL_MODE_DEV (0x00000002)
28300+ #define VUSBHS_MODE_CTRL_MODE_HOST (0x00000003)
28301+ #define VUSBHS_MODE_BIG_ENDIAN (0x00000004)
28302+ #define VUSBHS_MODE_SETUP_LOCK_DISABLE (0x00000008)
28303+#endif
28304+
28305+/* Interrupt Enable Register Bit Masks */
28306+#define EHCI_INTR_INT_EN (0x00000001)
28307+#define EHCI_INTR_ERR_INT_EN (0x00000002)
28308+#define EHCI_INTR_PORT_CHANGE_DETECT_EN (0x00000004)
28309+
28310+#define EHCI_INTR_ASYNC_ADV_AAE (0x00000020)
28311+ #define EHCI_INTR_ASYNC_ADV_AAE_ENABLE (0x00000020) /* | with this to enable */
28312+ #define EHCI_INTR_ASYNC_ADV_AAE_DISABLE (0xFFFFFFDF) /* & with this to disable */
28313+
28314+#define EHCI_INTR_RESET_EN (0x00000040)
28315+#define EHCI_INTR_SOF_UFRAME_EN (0x00000080)
28316+#define EHCI_INTR_DEVICE_SUSPEND (0x00000100)
28317+
28318+/* Interrupt Status Register Masks */
28319+#define EHCI_STS_SOF (0x00000080)
28320+#define EHCI_STS_RESET (0x00000040)
28321+#define EHCI_STS_PORT_CHANGE (0x00000004)
28322+#define EHCI_STS_ERR (0x00000002)
28323+#define EHCI_STS_INT (0x00000001)
28324+#define EHCI_STS_SUSPEND (0x00000100)
28325+#define EHCI_STS_HC_HALTED (0x00001000)
28326+
28327+/* Endpoint Queue Head Bit Masks */
28328+#define VUSB_EP_QUEUE_HEAD_IOS (0x00008000)
28329+#define VUSB_EP_QUEUE_HEAD_IOC (0x00008000)
28330+#define VUSB_EP_QUEUE_HEAD_INT (0x00000100)
28331+#define VUSB_EP_QUEUE_HEAD_NEXT_TERMINATE (0x00000001)
28332+#define VUSB_EP_QUEUE_HEAD_MAX_PKT_LEN_POS (16)
28333+#define VUSB_EP_QUEUE_HEAD_ZERO_LEN_TER_SEL (0x20000000)
28334+#define VUSB_EP_QUEUE_HEAD_MULT_POS (30)
28335+#define VUSB_EP_MAX_LENGTH_TRANSFER (0x4000)
28336+
28337+#define VUSB_EP_QUEUE_HEAD_STATUS_ACTIVE (0x00000080)
28338+
28339+#define VUSBHS_TD_NEXT_TERMINATE (0x00000001)
28340+#define VUSBHS_TD_IOC (0x00008000)
28341+#define VUSBHS_TD_STATUS_ACTIVE (0x00000080)
28342+#define VUSBHS_TD_STATUS_HALTED (0x00000040)
28343+#define VUSBHS_TD_RESERVED_FIELDS (0x00007F00)
28344+#define VUSBHS_TD_ERROR_MASK (0x68)
28345+#define VUSBHS_TD_ADDR_MASK (0xFFFFFFE0)
28346+#define VUSBHS_TD_LENGTH_BIT_POS (16)
28347+
28348+#define EHCI_EPCTRL_TX_DATA_TOGGLE_RST (0x00400000)
28349+#define EHCI_EPCTRL_TX_EP_STALL (0x00010000)
28350+#define EHCI_EPCTRL_RX_EP_STALL (0x00000001)
28351+#define EHCI_EPCTRL_RX_DATA_TOGGLE_RST (0x00000040)
28352+#define EHCI_EPCTRL_RX_ENABLE (0x00000080)
28353+#define EHCI_EPCTRL_TX_ENABLE (0x00800000)
28354+#define EHCI_EPCTRL_CONTROL (0x00000000)
28355+#define EHCI_EPCTRL_ISOCHRONOUS (0x00040000)
28356+#define EHCI_EPCTRL_BULK (0x00080000)
28357+#define EHCI_EPCTRL_INT (0x000C0000)
28358+#define EHCI_EPCTRL_TX_TYPE (0x000C0000)
28359+#define EHCI_EPCTRL_RX_TYPE (0x0000000C)
28360+#define EHCI_EPCTRL_DATA_TOGGLE_INHIBIT (0x00000020)
28361+#define EHCI_EPCTRL_TX_EP_TYPE_SHIFT (18)
28362+#define EHCI_EPCTRL_RX_EP_TYPE_SHIFT (2)
28363+
28364+#define EHCI_PORTSCX_FORCE_FULL_SPEED_CONNECT (0x01000000) // set bit 24 (PFSC) in PORTSCX register
28365+#define EHCI_PORTSCX_PHY_CLOCK_DISABLE (0x00800000) // set bit 23 (PHCD) in PORTSCX register
28366+#define EHCI_PORTSCX_PORT_TEST_MODE_DISABLE_MASK (0x000F0000)
28367+#define EHCI_PORTSCX_PORT_TEST_CONTROL_J_STATE (0x00010000)
28368+#define EHCI_PORTSCX_PORT_TEST_CONTROL_K_STATE (0x00020000)
28369+#define EHCI_PORTSCX_PORT_TEST_CONTROL_SE0_NAK (0x00030000)
28370+#define EHCI_PORTSCX_PORT_TEST_CONTROL_PACKET (0x00040000)
28371+#define EHCI_PORTSCX_PORT_TEST_CONTROL_FORCE_HS (0x00050000)
28372+#define EHCI_PORTSCX_PORT_TEST_CONTROL_FORCE_FS (0x00060000)
28373+#define EHCI_PORTSCX_PORT_TEST_CONTROL_FORCE_LS (0x00070000)
28374+#define EHCI_PORTSCX_PORT_POWER (0x00001000)
28375+#define EHCI_PORTSCX_LINE_STATUS_BITS (0x00000C00)
28376+#define EHCI_PORTSCX_LINE_STATUS_SE0 (0x00000000)
28377+#define EHCI_PORTSCX_LINE_STATUS_KSTATE (0x00000400)
28378+#define EHCI_PORTSCX_LINE_STATUS_JSTATE (0x00000800)
28379+#define EHCI_PORTSCX_PORT_HIGH_SPEED (0x00000200)
28380+#define EHCI_PORTSCX_PORT_RESET (0x00000100)
28381+#define EHCI_PORTSCX_PORT_SUSPEND (0x00000080)
28382+#define EHCI_PORTSCX_PORT_FORCE_RESUME (0x00000040)
28383+#define EHCI_PORTSCX_PORT_EN_DIS_CHANGE (0x00000008)
28384+#define EHCI_PORTSCX_PORT_ENABLE (0x00000004)
28385+#define EHCI_PORTSCX_CONNECT_STATUS_CHANGE (0x00000002)
28386+#define EHCI_PORTSCX_CURRENT_CONNECT_STATUS (0x00000001)
28387+
28388+#define VUSBHS_PORTSCX_PORT_SPEED_FULL (0x00000000)
28389+#define VUSBHS_PORTSCX_PORT_SPEED_LOW (0x04000000)
28390+#define VUSBHS_PORTSCX_PORT_SPEED_HIGH (0x08000000)
28391+#define VUSBHS_SPEED_MASK (0x0C000000)
28392+#define VUSBHS_SPEED_BIT_POS (26)
28393+
28394+#define EHCI_PORTSCX_W1C_BITS (0x2A)
28395+#define VUSB_EP_QH_PACKET_SIZE (0x3FFF0000)
28396+#define VUSB_EP_TR_PACKET_SIZE (0x7FFF0000)
28397+
28398+#define VUSBHS_FRINDEX_MS_MASK (0xFFFFFFF8)
28399+#define VUSBHS_ADDRESS_BIT_SHIFT (25)
28400+
28401+#define VUSB20_MAX_ENDPTS_SUPPORTED (0x1F)
28402+#define EHCI_HCC_PARAMS_64_BIT_ADDR_CAP (0x01)
28403+#define EHCI_HCC_PARAMS_PGM_FRM_LIST_FLAG (0x02)
28404+#define EHCI_HCC_PARAMS_ASYNC_PARK_CAP (0x04)
28405+#define EHCI_HCC_PARAMS_ISOCH_SCHED_THRESHOLD (0xF0)
28406+#define EHCI_HCC_PARAMS_ISOCH_FRAME_CACHED (0x80)
28407+
28408+#define VUSB20_HCS_PARAMS_PORT_POWER_CONTROL_FLAG (0x10)
28409+
28410+#define VUSB20_HOST_INTR_EN_BITS (0x37)
28411+
28412+#define VUSB20_DEFAULT_PERIODIC_FRAME_LIST_SIZE (1024)
28413+#define VUSB20_NEW_PERIODIC_FRAME_LIST_BITS (2)
28414+#define EHCI_FRAME_LIST_ELEMENT_POINTER_T_BIT (0x01)
28415+#define EHCI_ITD_T_BIT (0x01)
28416+#define EHCI_SITD_T_BIT (0x01)
28417+#define EHCI_QUEUE_HEAD_POINTER_T_BIT (0x01)
28418+
28419+
28420+/************************************************************
28421+Split transatcions specific defines
28422+************************************************************/
28423+#define EHCI_START_SPLIT_MAX_BUDGET 188
28424+
28425+#define EHCI_ELEMENT_TYPE_ITD (0x00)
28426+#define EHCI_ELEMENT_TYPE_QH (0x02)
28427+#define EHCI_ELEMENT_TYPE_SITD (0x04)
28428+#define EHCI_ELEMENT_TYPE_FSTN (0x06)
28429+#define EHCI_ELEMENT_TYPE_MASK (0x06)
28430+
28431+#define EHCI_FRAME_LIST_ELEMENT_TYPE_ITD (0x00)
28432+#define EHCI_FRAME_LIST_ELEMENT_TYPE_QH (0x01)
28433+#define EHCI_FRAME_LIST_ELEMENT_TYPE_SITD (0x02)
28434+#define EHCI_FRAME_LIST_ELEMENT_TYPE_FSTN (0x03)
28435+#define EHCI_FRAME_LIST_ELEMENT_TYPE_BIT_POS (1)
28436+
28437+
28438+#define EHCI_QH_ELEMENT_TYPE_ITD (0x00)
28439+#define EHCI_QH_ELEMENT_TYPE_QH (0x01)
28440+#define EHCI_QH_ELEMENT_TYPE_SITD (0x02)
28441+#define EHCI_QH_ELEMENT_TYPE_FSTN (0x03)
28442+
28443+#define EHCI_QH_ELEMENT_TYPE_BIT_POS (1)
28444+
28445+#define EHCI_QTD_PID_OUT_TOKEN (0x000)
28446+#define EHCI_QTD_PID_IN_TOKEN (0x100)
28447+#define EHCI_QTD_PID_SETUP_TOKEN (0x200)
28448+#define EHCI_QTD_IOC (0x8000)
28449+#define EHCI_QTD_STATUS_ACTIVE (0x0080)
28450+#define EHCI_QTD_STATUS_HALTED (0x0040)
28451+#define EHCI_QTD_PID_SETUP (0x0200)
28452+#define EHCI_QTD_PID_IN (0x0100)
28453+#define EHCI_QTD_PID_OUT (0x0000)
28454+#define EHCI_QTD_LENGTH_BIT_POS (16)
28455+#define EHCI_QTD_DATA_TOGGLE (0x80000000)
28456+#define EHCI_QTD_DATA_TOGGLE_BIT_POS (31)
28457+#define EHCI_QTD_LENGTH_BIT_MASK (0x7FFF0000)
28458+#define EHCI_QTD_ERROR_BITS_MASK (0x0000003E)
28459+#define EHCI_QTD_DEFAULT_CERR_VALUE (0xC00)
28460+
28461+#define EHCI_SETUP_TOKEN (2)
28462+#define EHCI_OUT_TOKEN (0)
28463+#define EHCI_IN_TOKEN (1)
28464+
28465+#define EHCI_QTD_T_BIT (0x01)
28466+
28467+#define EHCI_QH_ENDPOINT_SPEED_FULL (0x00)
28468+#define EHCI_QH_ENDPOINT_SPEED_LOW (0x01)
28469+#define EHCI_QH_ENDPOINT_SPEED_HIGH (0x02)
28470+#define EHCI_QH_ENDPOINT_SPEED_RESERVED (0x03)
28471+
28472+#define EHCI_ITD_LENGTH_BIT_POS (16)
28473+#define EHCI_ITD_IOC_BIT (0x00008000)
28474+#define EHCI_ITD_ACTIVE_BIT (0x80000000)
28475+#define EHCI_ITD_PG_SELECT_BIT_POS (12)
28476+#define EHCI_ITD_DIRECTION_BIT_POS (11)
28477+#define EHCI_ITD_EP_BIT_POS (8)
28478+#define EHCI_ITD_STATUS (0xF0000000)
28479+ #define EHCI_ITD_STATUS_ACTIVE (0x80000000) /*bit 4 = 1000*/
28480+ #define EHCI_ITD_STATUS_DATA_BUFFER_ERR (0x40000000) /*bit 3 = 0100*/
28481+ #define EHCI_ITD_STATUS_BABBLE_ERROR (0x20000000) /*bit 2 = 0010*/
28482+ #define EHCI_ITD_STATUS_TRANSACTION_ERR (0x10000000) /*bit 4 = 0001*/
28483+
28484+#define EHCI_ITD_LENGTH_TRANSMITTED (0x0FFF0000)
28485+#define EHCI_ITD_BUFFER_OFFSET (0x00000FFF)
28486+#define EHCI_ITD_PAGE_NUMBER (0x00007000)
28487+#define EHCI_ITD_BUFFER_POINTER (0xFFFFF000)
28488+#define EHCI_ITD_MULTI_TRANSACTION_BITS (0x00000003)
28489+
28490+
28491+
28492+/* SITD position bits */
28493+#define EHCI_SITD_DIRECTION_BIT_POS (31)
28494+#define EHCI_SITD_PORT_NUMBER_BIT_POS (24)
28495+#define EHCI_SITD_HUB_ADDR_BIT_POS (16)
28496+#define EHCI_SITD_EP_ADDR_BIT_POS (8)
28497+
28498+#define EHCI_SITD_COMPLETE_SPLIT_MASK_BIT_POS (8)
28499+
28500+#define EHCI_SITD_IOC_BIT_SET (0x80000000)
28501+#define EHCI_SITD_PAGE_SELECT_BIT_POS (30)
28502+#define EHCI_SITD_TRANSFER_LENGTH_BIT_POS (16)
28503+#define EHCI_SITD_STATUS_ACTIVE (0x80)
28504+
28505+#define EHCI_SITD_STATUS (0xFF)
28506+#define EHCI_SITD_LENGTH_TRANSMITTED (0x03FF0000)
28507+#define EHCI_SITD_BUFFER_OFFSET (0x00000FFF)
28508+#define EHCI_SITD_PAGE_NUMBER (0x40000000)
28509+#define EHCI_SITD_BUFFER_POINTER (0xFFFFF000)
28510+
28511+
28512+
28513+#define EHCI_SITD_BUFFER_PTR_BIT_POS (12)
28514+#define EHCI_SITD_TP_BIT_POS (3)
28515+ #define EHCI_SITD_TP_ALL (0)
28516+ #define EHCI_SITD_TP_BEGIN (1)
28517+ #define EHCI_SITD_TP_MID (2)
28518+ #define EHCI_SITD_TP_END (3)
28519+
28520+
28521+
28522+/* Interrupt enable bit masks */
28523+#define EHCI_IER_ASYNCH_ADVANCE (0x00000020)
28524+#define EHCI_IER_HOST_SYS_ERROR (0x00000010)
28525+#define EHCI_IER_FRAME_LIST_ROLLOVER (0x00000008)
28526+#define EHCI_IER_PORT_CHANGE (0x00000004)
28527+#define EHCI_IER_USB_ERROR (0x00000002)
28528+#define EHCI_IER_USB_INTERRUPT (0x00000001)
28529+
28530+/* Interrupt status bit masks */
28531+#define EHCI_STS_RECLAIMATION (0x00002000)
28532+#define EHCI_STS_SOF_COUNT (0x00000080)
28533+#define EHCI_STS_ASYNCH_ADVANCE (0x00000020)
28534+#define EHCI_STS_HOST_SYS_ERROR (0x00000010)
28535+#define EHCI_STS_FRAME_LIST_ROLLOVER (0x00000008)
28536+#define EHCI_STS_PORT_CHANGE (0x00000004)
28537+#define EHCI_STS_USB_ERROR (0x00000002)
28538+#define EHCI_STS_USB_INTERRUPT (0x00000001)
28539+
28540+/* Status bit masks */
28541+#define EHCI_STS_ASYNCH_SCHEDULE (0x00008000)
28542+#define EHCI_STS_PERIODIC_SCHEDULE (0x00004000)
28543+#define EHCI_STS_RECLAMATION (0x00002000)
28544+#define EHCI_STS_HC_HALTED (0x00001000)
28545+
28546+/* USB command bit masks */
28547+#define EHCI_USBCMD_ASYNC_SCHED_ENABLE (0x00000020)
28548+#define EHCI_USBCMD_PERIODIC_SCHED_ENABLE (0x00000010)
28549+
28550+#define EHCI_HCS_PARAMS_N_PORTS (0x0F)
28551+
28552+#define VUSB_HS_DELAY (3500)
28553+
28554+#define EHCI_QH_EP_NUM_MASK (0x0F00)
28555+#define EHCI_QH_EP_NUM_BITS_POS (8)
28556+#define EHCI_QH_DEVICE_ADDRESS_MASK (0x7F)
28557+#define EHCI_QH_SPEED_BITS_POS (12)
28558+#define EHCI_QH_MAX_PKT_SIZE_BITS_POS (16)
28559+#define EHCI_QH_NAK_COUNT_RL_BITS_POS (28)
28560+#define EHCI_QH_EP_CTRL_FLAG_BIT_POS (27)
28561+#define EHCI_QH_HEAD_RECLAMATION_BIT_POS (15)
28562+#define EHCI_QH_DTC_BIT_POS (14)
28563+#define EHCI_QH_HIGH_BW_MULT_BIT_POS (30)
28564+#define EHCI_QH_HUB_PORT_NUM_BITS_POS (23)
28565+#define EHCI_QH_HUB_ADDR_BITS_POS (16)
28566+#define EHCI_QH_SPLIT_COMPLETION_MASK_BITS_POS (8)
28567+#define EHCI_QH_SPLIT_COMPLETION_MASK (0xFF00)
28568+#define EHCI_QH_INTR_SCHED_MASK (0xFF)
28569+#define EHCI_QH_INACTIVATE_NEXT_TR_BIT_POS (7)
28570+#define EHCI_QH_HORIZ_PHY_ADDRESS_MASK (0xFFFFFFE0)
28571+#define EHCI_QH_TR_OVERLAY_DT_BIT (0x80000000)
28572+
28573+#define EHCI_SITD_SPLIT_COMPLETION_MASK_BITS_POS (8)
28574+
28575+#define EHCI_INTR_NO_THRESHOLD_IMMEDIATE (0x00010000)
28576+#define EHCI_NEW_PERIODIC_FRAME_LIST_SIZE (1024)
28577+#define EHCI_FRAME_LIST_SIZE_BITS_POS (2)
28578+#define EHCI_HORIZ_PHY_ADDRESS_MASK (0xFFFFFFE0)
28579+
28580+#define DEFAULT_MAX_NAK_COUNT (15)
28581+
28582+/* OTG Status and control register bit masks */
28583+
28584+/* OTG interrupt enable bit masks */
28585+#define VUSBHS_OTGSC_INTERRUPT_ENABLE_BITS_MASK (0x5F000000)
28586+#define VUSBHS_OTGSC_DPIE (0x40000000) /* Data-line pulsing IE */
28587+#define VUSBHS_OTGSC_1MSIE (0x20000000)
28588+#define VUSBHS_OTGSC_BSEIE (0x10000000) /* B-session end IE */
28589+#define VUSBHS_OTGSC_BSVIE (0x08000000) /* B-session valid IE */
28590+#define VUSBHS_OTGSC_ASVIE (0x04000000) /* A-session valid IE */
28591+#define VUSBHS_OTGSC_AVVIE (0x02000000) /* A-V-bus valid IE */
28592+#define VUSBHS_OTGSC_IDIE (0x01000000) /* OTG ID IE */
28593+
28594+/* OTG interrupt status bit masks */
28595+#define VUSBHS_OTGSC_INTERRUPT_STATUS_BITS_MASK (0x005F0000)
28596+#define VUSBHS_OTGSC_DPIS (0x00400000) /* Data-line pulsing IS */
28597+#define VUSBHS_OTGSC_1MSIS (0x00200000)
28598+#define VUSBHS_OTGSC_BSEIS (0x00100000) /* B-session end IS */
28599+#define VUSBHS_OTGSC_BSVIS (0x00080000) /* B-session valid IS */
28600+#define VUSBHS_OTGSC_ASVIS (0x00040000) /* A-session valid IS */
28601+#define VUSBHS_OTGSC_AVVIS (0x00020000) /* A-Vbus valid IS */
28602+#define VUSBHS_OTGSC_IDIS (0x00010000) /* OTG ID IS */
28603+
28604+/* OTG status bit masks */
28605+#define VUSBHS_OTGSC_DPS (0x00004000)
28606+#define VUSBHS_OTGSC_BSE (0x00001000) /* B-session end */
28607+#define VUSBHS_OTGSC_BSV (0x00000800) /* B-session valid */
28608+#define VUSBHS_OTGSC_ASV (0x00000400) /* A-session valid */
28609+#define VUSBHS_OTGSC_AVV (0x00000200) /* A-Vbus Valid */
28610+#define VUSBHS_OTGSC_ID (0x00000100) /* OTG ID */
28611+
28612+/* OTG control bit masks */
28613+#define VUSBHS_OTGSC_CTL_BITS (0x2F)
28614+#define VUSBHS_OTGSC_HABA (0x00000080) /* hardware assisted data pulse bits*/
28615+#define VUSBHS_OTGSC_HADP (0x00000040) /* hardware assisted data pulse bits*/
28616+
28617+/*#include <linux/ci13612.h>*/
28618diff --git a/drivers/usb/host/ehci-ci13612.c b/drivers/usb/host/ehci-ci13612.c
28619new file mode 100644
28620index 0000000..82ff48a
28621--- /dev/null
28622+++ b/drivers/usb/host/ehci-ci13612.c
28623@@ -0,0 +1,215 @@
28624+ /*
28625+ * drivers/usb/host/ehci-ci13612.c
28626+ *
28627+ * USB Host Controller Driver for LSI's ACP
28628+ *
28629+ * Copyright (C) 2010 LSI Inc.
28630+ *
28631+ * This program is free software; you can redistribute it and/or modify
28632+ * it under the terms of the GNU General Public License as published by
28633+ * the Free Software Foundation; either version 2 of the License, or
28634+ * (at your option) any later version.
28635+ *
28636+ * This program is distributed in the hope that it will be useful,
28637+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
28638+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
28639+ * GNU General Public License for more details.
28640+ *
28641+ * You should have received a copy of the GNU General Public License
28642+ * along with this program; if not, write to the Free Software
28643+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
28644+ *
28645+ */
28646+
28647+#include <linux/platform_device.h>
28648+#include <linux/irq.h>
28649+#include "ehci-ci13612.h"
28650+
28651+
28652+/* Patch the code to fix the bugs in Bugzilla */
28653+static void ci13612_usb_setup(struct usb_hcd *hcd)
28654+{
28655+ int USB_TXFIFOTHRES, VUSB_HS_TX_BURST;
28656+
28657+ /* fix Bugzilla #31874 */
28658+ /* fix Bugzilla #32212 */
28659+ VUSB_HS_TX_BURST = inl(USB_HWTXBUF) & 0x0f;
28660+ USB_TXFIFOTHRES = (inl(USB_TXFILLTUNING) & 0x3f0000) >> 16;
28661+
28662+ printk(KERN_INFO "ehci-ci13612 (ci13612_usb_setup): "
28663+ "VUSB_HS_TX_BURST = 0x%x, USB_TXFIFOTHRES = 0x%x\n",
28664+ VUSB_HS_TX_BURST, USB_TXFIFOTHRES);
28665+
28666+ return;
28667+}
28668+
28669+/* called after powerup, by probe or system-pm "wakeup" */
28670+static int ehci_ci13612_reinit(struct ehci_hcd *ehci)
28671+{
28672+ ci13612_usb_setup(ehci_to_hcd(ehci));
28673+ ehci_port_power(ehci, 0);
28674+
28675+ return 0;
28676+}
28677+
28678+
28679+static int ci13612_ehci_init(struct usb_hcd *hcd)
28680+{
28681+ struct ehci_hcd *ehci = hcd_to_ehci(hcd);
28682+ int retval = 0;
28683+ int len;
28684+
28685+
28686+ /* EHCI registers start at offset 0x100 */
28687+ ehci->caps = hcd->regs + 0x100;
28688+ ehci->regs = hcd->regs + 0x100
28689+ + HC_LENGTH(ehci, ehci_readl(ehci, &ehci->caps->hc_capbase));
28690+ len = HC_LENGTH(ehci, ehci_readl(ehci, &ehci->caps->hc_capbase));
28691+
28692+ /* configure other settings */
28693+ ehci->hcs_params = ehci_readl(ehci, &ehci->caps->hcs_params);
28694+ hcd->has_tt = 1;
28695+
28696+ ehci->sbrn = 0x20;
28697+
28698+ /* reset and halt controller */
28699+ ehci_reset(ehci);
28700+
28701+ /* data structure init */
28702+ retval = ehci_init(hcd);
28703+ if (retval)
28704+ return retval;
28705+ hcd->self.sg_tablesize = 0;
28706+
28707+ retval = ehci_ci13612_reinit(ehci);
28708+
28709+ return retval;
28710+}
28711+
28712+static int ehci_run_fix(struct usb_hcd *hcd)
28713+{
28714+ struct ehci_hcd *ehci = hcd_to_ehci(hcd);
28715+ u32 port_status;
28716+ unsigned burst_size;
28717+ int retval;
28718+
28719+ /* fix Bugzilla 33669 */
28720+ port_status = ehci_readl(ehci, &ehci->regs->port_status[0]);
28721+ printk(KERN_INFO "ehci_run: port_status = 0x%x\n", port_status);
28722+ if (port_status & 0x100) {
28723+ printk(KERN_ERR "USB port is in reset status, not able to "
28724+ "change host controller status to run\n");
28725+ return -EFAULT;
28726+ }
28727+
28728+ retval = ehci_run(hcd);
28729+ if (retval)
28730+ return retval;
28731+
28732+ burst_size = ehci_readl(ehci, &ehci->regs->reserved[1]);
28733+ burst_size = (burst_size & 0xffff00ff) | 0x4000; /* TXPBURST */
28734+ ehci_writel(ehci, burst_size, &ehci->regs->reserved[1]);
28735+
28736+ return 0;
28737+}
28738+
28739+static const struct hc_driver ci13612_hc_driver = {
28740+ .description = "ci13612_hcd",
28741+ .product_desc = "CI13612A EHCI USB Host Controller",
28742+ .hcd_priv_size = sizeof(struct ehci_hcd),
28743+ .irq = ehci_irq,
28744+ .flags = HCD_MEMORY | HCD_USB2 | HCD_LOCAL_MEM,
28745+ .reset = ci13612_ehci_init,
28746+ .start = ehci_run_fix,
28747+ .stop = ehci_stop,
28748+ .shutdown = ehci_shutdown,
28749+ .urb_enqueue = ehci_urb_enqueue,
28750+ .urb_dequeue = ehci_urb_dequeue,
28751+ .endpoint_disable = ehci_endpoint_disable,
28752+ .get_frame_number = ehci_get_frame,
28753+ .hub_status_data = ehci_hub_status_data,
28754+ .hub_control = ehci_hub_control,
28755+#if defined(CONFIG_PM)
28756+ .bus_suspend = ehci_bus_suspend,
28757+ .bus_resume = ehci_bus_resume,
28758+#endif
28759+ .relinquish_port = ehci_relinquish_port,
28760+ .port_handed_over = ehci_port_handed_over,
28761+};
28762+
28763+static int ci13612_ehci_probe(struct platform_device *pdev)
28764+{
28765+ struct usb_hcd *hcd;
28766+ const struct hc_driver *driver = &ci13612_hc_driver;
28767+ void __iomem *USB_base = (void __iomem *) 0xF00A0000;
28768+ void __iomem *gpreg_base = (void __iomem *) 0xF000C000;
28769+ int irq;
28770+ int retval;
28771+
28772+
28773+ if (usb_disabled())
28774+ return -ENODEV;
28775+
28776+ /* Map the irq in the PPC476 to get the irq number */
28777+ irq = irq_create_mapping(NULL, 31);
28778+
28779+ if (NO_IRQ == irq) {
28780+ dev_dbg(&pdev->dev, "error mapping irq number\n");
28781+ retval = -EBUSY;
28782+ goto fail_create_hcd;
28783+ }
28784+
28785+ if (0 != irq_set_irq_type(irq, IRQ_TYPE_LEVEL_HIGH)) {
28786+ dev_dbg(&pdev->dev, "set_irq_type() failed\n");
28787+ retval = -EBUSY;
28788+ goto fail_create_hcd;
28789+ }
28790+
28791+ hcd = usb_create_hcd(driver, &pdev->dev, dev_name(&pdev->dev));
28792+ if (!hcd) {
28793+ retval = -ENOMEM;
28794+ goto fail_create_hcd;
28795+ }
28796+
28797+ hcd->rsrc_start = ci13612_PHY_ADDR;
28798+ hcd->rsrc_len = 0x20000;
28799+
28800+ hcd->regs = USB_base;
28801+
28802+ /* Setup GPREG for USB to enable the 6-bit address line */
28803+ writel(0x0, gpreg_base + 0x8);
28804+
28805+ retval = usb_add_hcd(hcd, irq, IRQF_SHARED);
28806+ if (retval == 0) {
28807+ platform_set_drvdata(pdev, hcd);
28808+ return retval;
28809+ }
28810+
28811+ usb_put_hcd(hcd);
28812+fail_create_hcd:
28813+ dev_err(&pdev->dev, "init %s fail, %d\n", dev_name(&pdev->dev), retval);
28814+ return retval;
28815+}
28816+
28817+static int ci13612_ehci_remove(struct platform_device *pdev)
28818+{
28819+ struct usb_hcd *hcd = platform_get_drvdata(pdev);
28820+
28821+ usb_remove_hcd(hcd);
28822+ usb_put_hcd(hcd);
28823+ platform_set_drvdata(pdev, NULL);
28824+
28825+ return 0;
28826+}
28827+
28828+// MODULE_ALIAS("platform:ci13612-ehci");
28829+MODULE_ALIAS("platform:20004a4000.usb");
28830+
28831+static struct platform_driver ci13612_ehci_driver = {
28832+ .probe = ci13612_ehci_probe,
28833+ .remove = ci13612_ehci_remove,
28834+ .driver = {
28835+// .name = "ci13612-ehci",
28836+ .name = "20004a4000.usb",
28837+ },
28838+};
28839diff --git a/drivers/usb/host/ehci-ci13612.h b/drivers/usb/host/ehci-ci13612.h
28840new file mode 100644
28841index 0000000..bbba3f4
28842--- /dev/null
28843+++ b/drivers/usb/host/ehci-ci13612.h
28844@@ -0,0 +1,54 @@
28845+/*
28846+ * System definitions
28847+ */
28848+#define ci13612_PHY_ADDR 0x0020004A0000ULL
28849+#define ci13162_PHY_ADDR_SIZE 0x20000
28850+
28851+/*
28852+ * Host interface registers
28853+ */
28854+
28855+/* define CI13612 USB registers here */
28856+#define CI13612_USB_BASE ((unsigned) hcd->regs)
28857+
28858+#define USB_ID (CI13612_USB_BASE + 0x0000)
28859+#define USB_HWGENERAL (CI13612_USB_BASE + 0x0004)
28860+#define USB_HWHOST (CI13612_USB_BASE + 0x0008)
28861+#define USB_HWDEVICE (CI13612_USB_BASE + 0x000C)
28862+#define USB_HWTXBUF (CI13612_USB_BASE + 0x0010)
28863+#define USB_HWRXBUF (CI13612_USB_BASE + 0x0014)
28864+#define USB_GPTIMER0LD (CI13612_USB_BASE + 0x0080)
28865+#define USB_GPTIMER0CTRL (CI13612_USB_BASE + 0x0084)
28866+#define USB_GPTIMER1LD (CI13612_USB_BASE + 0x0088)
28867+#define USB_GPTIMER1CTRL (CI13612_USB_BASE + 0x008c)
28868+#define USB_SBUSCFG (CI13612_USB_BASE + 0x0090)
28869+
28870+#define USB_CAPLENGTH (CI13612_USB_BASE + 0x0100) /* 8 bit */
28871+#define USB_HCIVERSION (CI13612_USB_BASE + 0x0102) /* 16 bit */
28872+#define USB_HCSPARAMS (CI13612_USB_BASE + 0x0104)
28873+#define USB_HCCPARAMS (CI13612_USB_BASE + 0x0108)
28874+#define USB_DCIVERSION (CI13612_USB_BASE + 0x0120) /* 16 bit */
28875+#define USB_DCCPARAMS (CI13612_USB_BASE + 0x0124)
28876+#define USB_USBCMD (CI13612_USB_BASE + 0x0140)
28877+#define USB_USBSTS (CI13612_USB_BASE + 0x0144)
28878+#define USB_USBINTR (CI13612_USB_BASE + 0x0148)
28879+#define USB_FRINDEX (CI13612_USB_BASE + 0x014C)
28880+#define USB_DEVICEADDR (CI13612_USB_BASE + 0x0154)
28881+#define USB_ENDPOINTLISTADDR (CI13612_USB_BASE + 0x0158)
28882+#define USB_TTCTRL (CI13612_USB_BASE + 0x015C)
28883+#define USB_BURSTSIZE (CI13612_USB_BASE + 0x0160)
28884+#define USB_TXFILLTUNING (CI13612_USB_BASE + 0x0164)
28885+#define USB_ICUSB (CI13612_USB_BASE + 0x016C)
28886+#define USB_ULPI_VIEWPORT (CI13612_USB_BASE + 0x0170)
28887+#define USB_ENDPTNAK (CI13612_USB_BASE + 0x0178)
28888+#define USB_ENDPTNAKEN (CI13612_USB_BASE + 0x017C)
28889+#define USB_CONFIGFLAG (CI13612_USB_BASE + 0x0180)
28890+#define USB_PORTSC (CI13612_USB_BASE + 0x0184)
28891+#define USB_OTGSC (CI13612_USB_BASE + 0x01A4)
28892+#define USB_USBMODE (CI13612_USB_BASE + 0x01A8)
28893+#define USB_ENDPTSETUPSTAT (CI13612_USB_BASE + 0x01AC)
28894+#define USB_ENDPTPRIME (CI13612_USB_BASE + 0x01B0)
28895+#define USB_ENDPTFLUSH (CI13612_USB_BASE + 0x01B4)
28896+#define USB_ENDPTSTAT (CI13612_USB_BASE + 0x01B8)
28897+#define USB_ENDPTCOMPLETE (CI13612_USB_BASE + 0x01BC)
28898+#define USB_ENDPTCTRL(n) (CI13612_USB_BASE + 0x01C0 + (4 * (n)))
28899diff --git a/drivers/usb/host/ehci-hcd.c b/drivers/usb/host/ehci-hcd.c
28900index 9ff9abc..d460db7 100644
28901--- a/drivers/usb/host/ehci-hcd.c
28902+++ b/drivers/usb/host/ehci-hcd.c
28903@@ -1284,12 +1284,34 @@ MODULE_LICENSE ("GPL");
28904 #define PLATFORM_DRIVER ehci_grlib_driver
28905 #endif
28906
28907+
28908+#ifdef CONFIG_USB_CI13612_HCD
28909+#include "ehci-ci13612.c"
28910+#define PLATFORM_DRIVER ci13612_ehci_driver
28911+#endif
28912+
28913+
28914 #if !defined(PCI_DRIVER) && !defined(PLATFORM_DRIVER) && \
28915 !defined(PS3_SYSTEM_BUS_DRIVER) && !defined(OF_PLATFORM_DRIVER) && \
28916 !defined(XILINX_OF_PLATFORM_DRIVER)
28917 #error "missing bus glue for ehci-hcd"
28918 #endif
28919
28920+
28921+static void ci13612_device_release(struct device *dev)
28922+{
28923+}
28924+
28925+static struct platform_device ci13612_device = {
28926+ .name = "ci13612-ehci",
28927+ .id = -1,
28928+ .dev = {
28929+ .release = ci13612_device_release,
28930+ },
28931+};
28932+
28933+
28934+
28935 static int __init ehci_hcd_init(void)
28936 {
28937 int retval = 0;
28938@@ -1341,6 +1363,11 @@ static int __init ehci_hcd_init(void)
28939 goto clean3;
28940 #endif
28941
28942+
28943+ retval = platform_device_register(&ci13612_device);
28944+ if (retval < 0)
28945+ goto err_device_register;
28946+
28947 #ifdef XILINX_OF_PLATFORM_DRIVER
28948 retval = platform_driver_register(&XILINX_OF_PLATFORM_DRIVER);
28949 if (retval < 0)
28950@@ -1348,6 +1375,7 @@ static int __init ehci_hcd_init(void)
28951 #endif
28952 return retval;
28953
28954+err_device_register:
28955 #ifdef XILINX_OF_PLATFORM_DRIVER
28956 /* platform_driver_unregister(&XILINX_OF_PLATFORM_DRIVER); */
28957 clean4:
28958@@ -1380,6 +1408,9 @@ module_init(ehci_hcd_init);
28959
28960 static void __exit ehci_hcd_cleanup(void)
28961 {
28962+
28963+platform_device_unregister(&ci13612_device);
28964+
28965 #ifdef XILINX_OF_PLATFORM_DRIVER
28966 platform_driver_unregister(&XILINX_OF_PLATFORM_DRIVER);
28967 #endif
28968diff --git a/include/linux/rio.h b/include/linux/rio.h
28969index 4d50611..8fb185a 100644
28970--- a/include/linux/rio.h
28971+++ b/include/linux/rio.h
28972@@ -304,6 +304,17 @@ struct rio_ops {
28973 int (*cwrite) (struct rio_mport *mport, int index, u16 destid,
28974 u8 hopcount, u32 offset, int len, u32 data);
28975 int (*dsend) (struct rio_mport *mport, int index, u16 destid, u16 data);
28976+
28977+ /* Functions to access port's mailbox routines (may be NULL if not supported) */
28978+ // int (*hw_add_outb_message)(struct rio_mport *mport, struct rio_dev *rdev, int mbox, void *buffer, size_t len);
28979+ // int (*hw_add_inb_buffer)(struct rio_mport *mport, int mbox, void *buf);
28980+ // void* (*hw_get_inb_message)(struct rio_mport *mport, int mbox);
28981+
28982+ /* Functions that support ioremap style access to endpoints
28983+ * (may be NULL if not supported) */
28984+ void* (*rio_ioremap)(void* rio_address, u16 destid, unsigned int length);
28985+ void (*rio_unmap)(void* address);
28986+
28987 int (*pwenable) (struct rio_mport *mport, int enable);
28988 int (*open_outb_mbox)(struct rio_mport *mport, void *dev_id,
28989 int mbox, int entries);
28990@@ -402,4 +413,7 @@ extern void rio_close_inb_mbox(struct rio_mport *, int);
28991 extern int rio_open_outb_mbox(struct rio_mport *, void *, int, int);
28992 extern void rio_close_outb_mbox(struct rio_mport *, int);
28993
28994+extern void* rio_ioremap(struct rio_mport *mport, void* rio_address, u16 destid, unsigned int length);
28995+extern void rio_unmap(struct rio_mport *mport, void* address);
28996+
28997 #endif /* LINUX_RIO_H */
28998diff --git a/kernel/smp.c b/kernel/smp.c
28999index fb67dfa..7370bda 100644
29000--- a/kernel/smp.c
29001+++ b/kernel/smp.c
29002@@ -25,6 +25,7 @@ static struct {
29003
29004 enum {
29005 CSD_FLAG_LOCK = 0x01,
29006+ CSD_FLAG_NOWAIT = 0x02,
29007 };
29008
29009 struct call_function_data {
29010@@ -263,6 +264,8 @@ void generic_smp_call_function_single_interrupt(void)
29011
29012 while (!list_empty(&list)) {
29013 struct call_single_data *data;
29014+ void (*func)(void *);
29015+ void *info;
29016
29017 data = list_entry(list.next, struct call_single_data, list);
29018 list_del(&data->list);
29019@@ -273,12 +276,21 @@ void generic_smp_call_function_single_interrupt(void)
29020 * so save them away before making the call:
29021 */
29022 data_flags = data->flags;
29023-
29024- data->func(data->info);
29025+ func = data->func;
29026+ info = data->info;
29027
29028 /*
29029+ * Unlock before calling func so that func never has
29030+ * to return.
29031+ *
29032 * Unlocked CSDs are valid through generic_exec_single():
29033 */
29034+ if ((data_flags & CSD_FLAG_LOCK) &&
29035+ (data_flags & CSD_FLAG_NOWAIT))
29036+ csd_unlock(data);
29037+
29038+ func(info);
29039+
29040 if (data_flags & CSD_FLAG_LOCK)
29041 csd_unlock(data);
29042 }
29043@@ -332,6 +344,9 @@ int smp_call_function_single(int cpu, smp_call_func_t func, void *info,
29044
29045 csd_lock(data);
29046
29047+ if (!wait)
29048+ data->flags |= CSD_FLAG_NOWAIT;
29049+
29050 data->func = func;
29051 data->info = info;
29052 generic_exec_single(cpu, data, wait);
29053diff --git a/scripts/rw.sh b/scripts/rw.sh
29054new file mode 100644
29055index 0000000..a393a7c
29056--- /dev/null
29057+++ b/scripts/rw.sh
29058@@ -0,0 +1,120 @@
29059+#!/bin/sh
29060+# Generate tags or cscope files
29061+# Usage tags.sh <mode>
29062+#
29063+# mode may be any of: tags, TAGS, cscope
29064+#
29065+# Uses the following environment variables:
29066+# ARCH, SUBARCH, srctree, src, obj
29067+
29068+if [ "$KBUILD_VERBOSE" = "1" ]; then
29069+ set -x
29070+fi
29071+
29072+# This is a duplicate of RCS_FIND_IGNORE without escaped '()'
29073+ignore="( -name SCCS -o -name BitKeeper -o -name .svn -o \
29074+ -name CVS -o -name .pc -o -name .hg -o \
29075+ -name .git ) \
29076+ -prune -o"
29077+
29078+# Do not use full path is we do not use O=.. builds
29079+if [ "${KBUILD_SRC}" = "" ]; then
29080+ tree=
29081+else
29082+ tree=${srctree}/
29083+fi
29084+
29085+# Detect if ALLSOURCE_ARCHS is set. If not, we assume SRCARCH
29086+if [ "${ALLSOURCE_ARCHS}" = "" ]; then
29087+ ALLSOURCE_ARCHS=${SRCARCH}
29088+fi
29089+
29090+# find sources in arch/$ARCH
29091+find_arch_sources()
29092+{
29093+ find ${tree}arch/$1 $ignore -name "$2" -print;
29094+}
29095+
29096+# find sources in arch/$1/include
29097+find_arch_include_sources()
29098+{
29099+ find ${tree}arch/$1/include $ignore -name "$2" -print;
29100+}
29101+
29102+# find sources in include/
29103+find_include_sources()
29104+{
29105+ find ${tree}include $ignore -name config -prune -o -name "$1" -print;
29106+}
29107+
29108+# find sources in rest of tree
29109+# we could benefit from a list of dirs to search in here
29110+find_other_sources()
29111+{
29112+ find ${tree}* $ignore \
29113+ \( -name include -o -name arch -o -name '.tmp_*' \) -prune -o \
29114+ -name "$1" -print;
29115+}
29116+
29117+find_sources()
29118+{
29119+ find_arch_sources $1 "$2"
29120+}
29121+
29122+all_sources()
29123+{
29124+ for arch in $ALLSOURCE_ARCHS
29125+ do
29126+ find_sources $arch '*.[chS]'
29127+ done
29128+ if [ ! -z "$archinclude" ]; then
29129+ find_arch_include_sources $archinclude '*.[chS]'
29130+ fi
29131+ find_include_sources '*.[chS]'
29132+ find_other_sources '*.[chS]'
29133+}
29134+
29135+all_kconfigs()
29136+{
29137+ for arch in $ALLSOURCE_ARCHS; do
29138+ find_sources $arch 'Kconfig*'
29139+ done
29140+ find_other_sources 'Kconfig*'
29141+}
29142+
29143+all_defconfigs()
29144+{
29145+ find_sources $ALLSOURCE_ARCHS "defconfig"
29146+}
29147+
29148+#docscope()
29149+#{
29150+# (echo \-k; echo \-q; all_sources) > cscope.files
29151+# cscope -b
29152+#}
29153+#
29154+#case "$1" in
29155+# "cscope")
29156+# docscope
29157+# ;;
29158+#
29159+# "tags")
29160+# xtags ctags
29161+# ;;
29162+#
29163+# "TAGS")
29164+# xtags etags
29165+# ;;
29166+#esac
29167+
29168+TEMP=`mktemp rw.path.XXXXXXXXXXXX` || exit 1
29169+echo srchpath add linux > $TEMP
29170+
29171+for file in `all_sources`
29172+ do
29173+ echo srchpath add linux/`dirname $file` >> $TEMP
29174+done
29175+
29176+cat $TEMP | uniq > rw.path
29177+
29178+rm -f $TEMP
29179diff --git a/scripts/tags.sh b/scripts/tags.sh
29180index 75c5d24..7935fa5 100755
29181--- a/scripts/tags.sh
29182+++ b/scripts/tags.sh
29183@@ -93,6 +93,7 @@ all_sources()
29184 find_sources $arch '*.[chS]'
29185 done
29186 find_other_sources '*.[chS]'
29187+ find arch/${SRCARCH} -type f | egrep '(\.c$|\.h$|\.s$|\.S$|\.java$)'
29188 }
29189
29190 all_kconfigs()
29191@@ -111,7 +112,7 @@ all_defconfigs()
29192 docscope()
29193 {
29194 (echo \-k; echo \-q; all_sources) > cscope.files
29195- cscope -b -f cscope.out
29196+ cscope -b
29197 }
29198
29199 dogtags()
29200--
292011.7.0.4
29202
diff --git a/recipes-kernel/linux/linux-3.0.6/acp3448v2/0002-Patch-to-head_44x.S-to-support-lsi-acp3448v2.patch b/recipes-kernel/linux/linux-3.0.6/acp3448v2/0002-Patch-to-head_44x.S-to-support-lsi-acp3448v2.patch
new file mode 100644
index 0000000..2a9127c
--- /dev/null
+++ b/recipes-kernel/linux/linux-3.0.6/acp3448v2/0002-Patch-to-head_44x.S-to-support-lsi-acp3448v2.patch
@@ -0,0 +1,246 @@
1From 159aad211bf918f2b582f8a12622bf02fb7dd64f Mon Sep 17 00:00:00 2001
2From: Jerry Pei <jerry.pei@enea.com>
3Date: Mon, 23 Apr 2012 14:20:03 +0800
4Subject: [PATCH 2/7] Patch to head_44x.S to support lsi acp3448v2
5
6Signed-off-by: Jerry Pei <jerry.pei@enea.com>
7---
8 arch/powerpc/kernel/head_44x.S | 130 ++++++++++++++++++++++++++++++++++++---
9 1 files changed, 120 insertions(+), 10 deletions(-)
10
11diff --git a/arch/powerpc/kernel/head_44x.S b/arch/powerpc/kernel/head_44x.S
12index 5e12b74..ac8d20e 100644
13--- a/arch/powerpc/kernel/head_44x.S
14+++ b/arch/powerpc/kernel/head_44x.S
15@@ -26,6 +26,8 @@
16 * under the terms of the GNU General Public License as published by the
17 * Free Software Foundation; either version 2 of the License, or (at your
18 * option) any later version.
19+ *
20+ * These patches add ACP3400 support signed-off-by: john.jacques@lsi.com
21 */
22
23 #include <linux/init.h>
24@@ -41,6 +43,8 @@
25 #include <asm/synch.h>
26 #include "head_booke.h"
27
28+#undef TLBERRORCOUNTER
29+/*#define TLBERRORCOUNTER*/
30
31 /* As with the other PowerPC ports, it is expected that when code
32 * execution begins here, the following registers contain valid, yet
33@@ -93,6 +97,30 @@ _ENTRY(_start);
34
35 bl early_init
36
37+#ifdef CONFIG_RELOCATABLE
38+ /*
39+ * r25 will contain RPN/ERPN for the start address of memory
40+ *
41+ * Add the difference between KERNELBASE and PAGE_OFFSET to the
42+ * start of physical memory to get kernstart_addr.
43+ */
44+ lis r3,kernstart_addr@ha
45+ la r3,kernstart_addr@l(r3)
46+
47+ lis r4,KERNELBASE@h
48+ ori r4,r4,KERNELBASE@l
49+ lis r5,PAGE_OFFSET@h
50+ ori r5,r5,PAGE_OFFSET@l
51+ subf r4,r5,r4
52+
53+ rlwinm r6,r25,0,28,31 /* ERPN */
54+ rlwinm r7,r25,0,0,3 /* RPN - assuming 256 MB page size */
55+ add r7,r7,r4
56+
57+ stw r6,0(r3)
58+ stw r7,4(r3)
59+#endif
60+
61 /*
62 * Decide what sort of machine this is and initialize the MMU.
63 */
64@@ -449,6 +477,15 @@ finish_tlb_load_44x:
65 mtspr SPRN_SPRG_WSCRATCH1,r11
66 mtspr SPRN_SPRG_WSCRATCH2,r12
67 mtspr SPRN_SPRG_WSCRATCH3,r13
68+ /* ZZZ */
69+#ifdef TLBERRORCOUNTER
70+ lis r10,dtlb_misses@h
71+ ori r10,r10,dtlb_misses@l
72+ lwzu r11,0(r10)
73+ addi r11,r11,1
74+ stwu r11,0(r10)
75+#endif
76+ /* ZZZ */
77 mfcr r11
78 mtspr SPRN_SPRG_WSCRATCH4,r11
79 mfspr r10,SPRN_DEAR /* Get faulting address */
80@@ -546,6 +583,15 @@ finish_tlb_load_44x:
81 mtspr SPRN_SPRG_WSCRATCH1,r11
82 mtspr SPRN_SPRG_WSCRATCH2,r12
83 mtspr SPRN_SPRG_WSCRATCH3,r13
84+ /* ZZZ */
85+#ifdef TLBERRORCOUNTER
86+ lis r10,itlb_misses@h
87+ ori r10,r10,itlb_misses@l
88+ lwzu r11,0(r10)
89+ addi r11,r11,1
90+ stwu r11,0(r10)
91+#endif
92+ /* ZZZ */
93 mfcr r11
94 mtspr SPRN_SPRG_WSCRATCH4,r11
95 mfspr r10,SPRN_SRR0 /* Get faulting address */
96@@ -704,6 +750,7 @@ _GLOBAL(set_context)
97 stw r4, 0x4(r5)
98 #endif
99 mtspr SPRN_PID,r3
100+ PPC476_ERR_MTPID()
101 isync /* Force context change */
102 blr
103
104@@ -718,9 +765,12 @@ _GLOBAL(init_cpu_state)
105 /* We use the PVR to differenciate 44x cores from 476 */
106 mfspr r3,SPRN_PVR
107 srwi r3,r3,16
108- cmplwi cr0,r3,PVR_476@h
109+ cmplwi cr0,r3,PVR_476X2@h /* some x2 had a non-standard PVR */
110 beq head_start_47x
111- cmplwi cr0,r3,PVR_476_ISS@h
112+
113+ /* All other 476 cores have a 0x5 as the 4th nibble */
114+ rlwinm r3,r3,0,28,31
115+ cmplwi cr0,r3,PVR_476@h
116 beq head_start_47x
117 #endif /* CONFIG_PPC_47x */
118
119@@ -1001,9 +1051,6 @@ clear_utlb_entry:
120 lis r3,PAGE_OFFSET@h
121 ori r3,r3,PAGE_OFFSET@l
122
123- /* Kernel is at the base of RAM */
124- li r4, 0 /* Load the kernel physical address */
125-
126 /* Load the kernel PID = 0 */
127 li r0,0
128 mtspr SPRN_PID,r0
129@@ -1013,9 +1060,8 @@ clear_utlb_entry:
130 clrrwi r3,r3,12 /* Mask off the effective page number */
131 ori r3,r3,PPC47x_TLB0_VALID | PPC47x_TLB0_256M
132
133- /* Word 1 */
134- clrrwi r4,r4,12 /* Mask off the real page number */
135- /* ERPN is 0 for first 4GB page */
136+ /* Word 1 - use r25. RPN is the same as the original entry */
137+
138 /* Word 2 */
139 li r5,0
140 ori r5,r5,PPC47x_TLB2_S_RWX
141@@ -1026,7 +1072,7 @@ clear_utlb_entry:
142 /* We write to way 0 and bolted 0 */
143 lis r0,0x8800
144 tlbwe r3,r0,0
145- tlbwe r4,r0,1
146+ tlbwe r25,r0,1
147 tlbwe r5,r0,2
148
149 /*
150@@ -1057,6 +1103,7 @@ clear_utlb_entry:
151 tlbwe r24,r23,2
152 isync /* Clear out the shadow TLB entries */
153
154+#ifndef CONFIG_ACP
155 #ifdef CONFIG_PPC_EARLY_DEBUG_44x
156 /* Add UART mapping for early debug. */
157
158@@ -1083,6 +1130,54 @@ clear_utlb_entry:
159 /* Force context change */
160 isync
161 #endif /* CONFIG_PPC_EARLY_DEBUG_44x */
162+#endif /* CONFIG_ACP */
163+
164+#ifdef CONFIG_ACP
165+ /* Add bolted entries for I/O. */
166+
167+ /* Word 0 */
168+ lis r3,(0xf0000000)@h
169+ ori r3,r3,PPC47x_TLB0_VALID | PPC47x_TLB0_1M
170+
171+ /* Word 1 */
172+ lis r4,(0x00400000)@h
173+ ori r4,r4,0x20
174+
175+ /* Word 2 */
176+ li r5,(PPC47x_TLB2_SW | PPC47x_TLB2_SR | PPC47x_TLB2_I | PPC47x_TLB2_G)
177+
178+ /* Bolted in way 0, bolt slot 4, we -hope- we don't hit the same
179+ * congruence class as the kernel, we need to make sure of it at
180+ * some point
181+ */
182+ lis r0,0x8d00
183+ tlbwe r3,r0,0
184+ tlbwe r4,r0,1
185+ tlbwe r5,r0,2
186+
187+ /* Word 0 */
188+ lis r3,(0xf0100000)@h
189+ ori r3,r3,PPC47x_TLB0_VALID | PPC47x_TLB0_1M
190+
191+ /* Word 1 */
192+ lis r4,(0x00500000)@h
193+ ori r4,r4,0x20
194+
195+ /* Word 2 */
196+ li r5,(PPC47x_TLB2_SW | PPC47x_TLB2_SR | PPC47x_TLB2_I | PPC47x_TLB2_G)
197+
198+ /* Bolted in way 0, bolt slot 4, we -hope- we don't hit the same
199+ * congruence class as the kernel, we need to make sure of it at
200+ * some point
201+ */
202+ lis r0,0x8c00
203+ tlbwe r3,r0,0
204+ tlbwe r4,r0,1
205+ tlbwe r5,r0,2
206+
207+ /* Force context change */
208+ isync
209+#endif /* CONFIG_ACP */
210
211 /* Establish the interrupt vector offsets */
212 SET_IVOR(0, CriticalInput);
213@@ -1111,6 +1206,15 @@ clear_utlb_entry:
214 mtspr SPRN_CCR0,r3
215 isync
216
217+ /* XXX DD1.1 workaround, trap on dcbz & dcbf. We pre-configure
218+ * IOCR1 and 2 but we don't enable them in IOCCR, this will
219+ * be done on kernel entry/exit
220+ */
221+ LOAD_REG_IMMEDIATE(r3, (31 << 26) | ( 86 << 1)) /* dcbf */
222+ LOAD_REG_IMMEDIATE(r4, (31 << 26) | (1014 << 1)) /* dcbz */
223+ mtspr SPRN_IOCR1, r3
224+ mtspr SPRN_IOCR2, r4
225+
226 #endif /* CONFIG_PPC_47x */
227
228 /*
229@@ -1124,7 +1228,13 @@ head_start_common:
230 lis r4,interrupt_base@h /* IVPR only uses the high 16-bits */
231 mtspr SPRN_IVPR,r4
232
233- addis r22,r22,KERNELBASE@h
234+ /*
235+ * If the kernel was loaded at a non-zero 256 MB page, we need to
236+ * mask off the most significant 4 bits to get the relative address
237+ * from the start of physical memory
238+ */
239+ rlwinm r22,r22,0,4,31
240+ addis r22,r22,PAGE_OFFSET@h
241 mtlr r22
242 isync
243 blr
244--
2451.7.0.4
246
diff --git a/recipes-kernel/linux/linux-3.0.6/acp3448v2/0003-Patch-drivers_dma_Makefile.patch b/recipes-kernel/linux/linux-3.0.6/acp3448v2/0003-Patch-drivers_dma_Makefile.patch
new file mode 100644
index 0000000..ad1b5e4
--- /dev/null
+++ b/recipes-kernel/linux/linux-3.0.6/acp3448v2/0003-Patch-drivers_dma_Makefile.patch
@@ -0,0 +1,22 @@
1From 747361b78cf696a55791ba080f53181424f0a04a Mon Sep 17 00:00:00 2001
2From: Jerry Pei <jerry.pei@enea.com>
3Date: Mon, 23 Apr 2012 14:25:27 +0800
4Subject: [PATCH 3/7] Patch drivers_dma_Makefile to add lsi acp
5
6Signed-off-by: Jerry Pei <jerry.pei@enea.com>
7---
8 drivers/dma/Makefile | 1 +
9 1 files changed, 1 insertions(+), 0 deletions(-)
10
11diff --git a/drivers/dma/Makefile b/drivers/dma/Makefile
12index 836095a..6507f65 100644
13--- a/drivers/dma/Makefile
14+++ b/drivers/dma/Makefile
15@@ -25,3 +25,4 @@ obj-$(CONFIG_STE_DMA40) += ste_dma40.o ste_dma40_ll.o
16 obj-$(CONFIG_PL330_DMA) += pl330.o
17 obj-$(CONFIG_PCH_DMA) += pch_dma.o
18 obj-$(CONFIG_AMBA_PL08X) += amba-pl08x.o
19+obj-$(CONFIG_LSI_DMA) += lsi-dma.o
20--
211.7.0.4
22
diff --git a/recipes-kernel/linux/linux-3.0.6/acp3448v2/0004-change-arch_powerpc_kernel_setup_32_c.patch b/recipes-kernel/linux/linux-3.0.6/acp3448v2/0004-change-arch_powerpc_kernel_setup_32_c.patch
new file mode 100644
index 0000000..06ec9bd
--- /dev/null
+++ b/recipes-kernel/linux/linux-3.0.6/acp3448v2/0004-change-arch_powerpc_kernel_setup_32_c.patch
@@ -0,0 +1,56 @@
1From 33177944407c15cf8b1981c0803c5b30637781fa Mon Sep 17 00:00:00 2001
2From: Jerry Pei <jerry.pei@enea.com>
3Date: Mon, 23 Apr 2012 14:38:06 +0800
4Subject: [PATCH 4/7] change arch_powerpc_kernel_setup_32_c for lsi acp
5
6Signed-off-by: Jerry Pei <jerry.pei@enea.com>
7---
8 arch/powerpc/kernel/setup_32.c | 15 +++++++--------
9 1 files changed, 7 insertions(+), 8 deletions(-)
10
11diff --git a/arch/powerpc/kernel/setup_32.c b/arch/powerpc/kernel/setup_32.c
12index 620d792..33c17df 100644
13--- a/arch/powerpc/kernel/setup_32.c
14+++ b/arch/powerpc/kernel/setup_32.c
15@@ -121,12 +121,12 @@ notrace void __init machine_init(unsigned long dt_ptr)
16 {
17 lockdep_init();
18
19- /* Enable early debugging if any specified (see udbg.h) */
20- udbg_early_init();
21-
22 /* Do some early initialization based on the flat device tree */
23 early_init_devtree(__va(dt_ptr));
24
25+ /* Enable early debugging if any specified (see udbg.h) */
26+ udbg_early_init();
27+
28 probe_machine();
29
30 setup_kdump_trampoline();
31@@ -259,18 +259,17 @@ static void __init irqstack_early_init(void)
32 #if defined(CONFIG_BOOKE) || defined(CONFIG_40x)
33 static void __init exc_lvl_early_init(void)
34 {
35- unsigned int i, hw_cpu;
36+ unsigned int i;
37
38 /* interrupt stacks must be in lowmem, we get that for free on ppc32
39 * as the memblock is limited to lowmem by MEMBLOCK_REAL_LIMIT */
40 for_each_possible_cpu(i) {
41- hw_cpu = get_hard_smp_processor_id(i);
42- critirq_ctx[hw_cpu] = (struct thread_info *)
43+ critirq_ctx[i] = (struct thread_info *)
44 __va(memblock_alloc(THREAD_SIZE, THREAD_SIZE));
45 #ifdef CONFIG_BOOKE
46- dbgirq_ctx[hw_cpu] = (struct thread_info *)
47+ dbgirq_ctx[i] = (struct thread_info *)
48 __va(memblock_alloc(THREAD_SIZE, THREAD_SIZE));
49- mcheckirq_ctx[hw_cpu] = (struct thread_info *)
50+ mcheckirq_ctx[i] = (struct thread_info *)
51 __va(memblock_alloc(THREAD_SIZE, THREAD_SIZE));
52 #endif
53 }
54--
551.7.0.4
56
diff --git a/recipes-kernel/linux/linux-3.0.6/acp3448v2/0005-Patch-arch_powerpc_mm_tlb_nohash_c.patch b/recipes-kernel/linux/linux-3.0.6/acp3448v2/0005-Patch-arch_powerpc_mm_tlb_nohash_c.patch
new file mode 100644
index 0000000..4c5e0ef
--- /dev/null
+++ b/recipes-kernel/linux/linux-3.0.6/acp3448v2/0005-Patch-arch_powerpc_mm_tlb_nohash_c.patch
@@ -0,0 +1,85 @@
1From c1707a8d6ec37484edeb8d0221ebd6de41b3f4ad Mon Sep 17 00:00:00 2001
2From: Jerry Pei <jerry.pei@enea.com>
3Date: Mon, 23 Apr 2012 14:54:32 +0800
4Subject: [PATCH 5/7] Patch arch_powerpc_mm_tlb_nohash_c to support lsi acp
5
6Signed-off-by: Jerry Pei <jerry.pei@enea.com>
7---
8 arch/powerpc/mm/tlb_nohash.c | 35 ++++++++++++++++++++++++++++++++++-
9 1 files changed, 34 insertions(+), 1 deletions(-)
10
11diff --git a/arch/powerpc/mm/tlb_nohash.c b/arch/powerpc/mm/tlb_nohash.c
12index 0bdad3a..b4e065b 100644
13--- a/arch/powerpc/mm/tlb_nohash.c
14+++ b/arch/powerpc/mm/tlb_nohash.c
15@@ -36,6 +36,7 @@
16 #include <linux/spinlock.h>
17 #include <linux/memblock.h>
18
19+#include <linux/of_fdt.h>
20 #include <asm/tlbflush.h>
21 #include <asm/tlb.h>
22 #include <asm/code-patching.h>
23@@ -152,6 +153,16 @@ EXPORT_SYMBOL(local_flush_tlb_page);
24 * And here are the SMP non-local implementations
25 */
26 #ifdef CONFIG_SMP
27+static int amp;
28+
29+#ifdef CONFIG_44x
30+void __init early_init_mmu_44x(void)
31+{
32+ unsigned long root = of_get_flat_dt_root();
33+ if (of_flat_dt_is_compatible(root, "ibm,47x-AMP"))
34+ amp = 1;
35+}
36+#endif /* CONFIG_44x */
37
38 static DEFINE_RAW_SPINLOCK(tlbivax_lock);
39
40@@ -232,7 +243,7 @@ void __flush_tlb_page(struct mm_struct *mm, unsigned long vmaddr,
41 cpu_mask = mm_cpumask(mm);
42 if (!mm_is_core_local(mm)) {
43 /* If broadcast tlbivax is supported, use it */
44- if (mmu_has_feature(MMU_FTR_USE_TLBIVAX_BCAST)) {
45+ if (!amp && mmu_has_feature(MMU_FTR_USE_TLBIVAX_BCAST)) {
46 int lock = mmu_has_feature(MMU_FTR_LOCK_BCAST_INVAL);
47 if (lock)
48 raw_spin_lock(&tlbivax_lock);
49@@ -266,6 +277,17 @@ EXPORT_SYMBOL(flush_tlb_page);
50
51 #endif /* CONFIG_SMP */
52
53+#ifdef CONFIG_PPC_47x
54+void __init early_init_mmu_47x(void)
55+{
56+#ifdef CONFIG_SMP
57+ unsigned long root = of_get_flat_dt_root();
58+ if (of_get_flat_dt_prop(root, "cooperative-partition", NULL))
59+ mmu_clear_feature(MMU_FTR_USE_TLBIVAX_BCAST);
60+#endif /* CONFIG_SMP */
61+}
62+#endif /* CONFIG_PPC_47x */
63+
64 /*
65 * Flush kernel TLB entries in the given range
66 */
67@@ -584,4 +606,15 @@ void setup_initial_memory_limit(phys_addr_t first_memblock_base,
68 /* Finally limit subsequent allocations */
69 memblock_set_current_limit(first_memblock_base + ppc64_rma_size);
70 }
71+#else /* ! CONFIG_PPC64 */
72+void __init early_init_mmu(void)
73+{
74+#if defined(CONFIG_SMP) && defined(CONFIG_PPC_44x)
75+ early_init_mmu_44x();
76+#endif
77+#ifdef CONFIG_PPC_47x
78+ early_init_mmu_47x();
79+#endif
80+}
81 #endif /* CONFIG_PPC64 */
82+
83--
841.7.0.4
85
diff --git a/recipes-kernel/linux/linux-3.0.6/acp3448v2/0006-backport-mmu_clear_feature-function.patch b/recipes-kernel/linux/linux-3.0.6/acp3448v2/0006-backport-mmu_clear_feature-function.patch
new file mode 100644
index 0000000..5c716f7
--- /dev/null
+++ b/recipes-kernel/linux/linux-3.0.6/acp3448v2/0006-backport-mmu_clear_feature-function.patch
@@ -0,0 +1,29 @@
1From 2f2b38fd9d9d21099e1593537b4feb4be4fa1f31 Mon Sep 17 00:00:00 2001
2From: Jerry Pei <jerry.pei@enea.com>
3Date: Mon, 23 Apr 2012 15:01:44 +0800
4Subject: [PATCH 6/7] backport mmu_clear_feature() function from mel-linux-3.1.0
5
6Signed-off-by: Jerry Pei <jerry.pei@enea.com>
7---
8 arch/powerpc/include/asm/mmu.h | 5 +++++
9 1 files changed, 5 insertions(+), 0 deletions(-)
10
11diff --git a/arch/powerpc/include/asm/mmu.h b/arch/powerpc/include/asm/mmu.h
12index 4138b21..c80f7f5 100644
13--- a/arch/powerpc/include/asm/mmu.h
14+++ b/arch/powerpc/include/asm/mmu.h
15@@ -120,6 +120,11 @@ static inline int mmu_has_feature(unsigned long feature)
16 return (cur_cpu_spec->mmu_features & feature);
17 }
18
19+static inline void mmu_clear_feature(unsigned long feature)
20+{
21+ cur_cpu_spec->mmu_features &= ~feature;
22+}
23+
24 extern unsigned int __start___mmu_ftr_fixup, __stop___mmu_ftr_fixup;
25
26 /* MMU initialization (64-bit only fo now) */
27--
281.7.0.4
29
diff --git a/recipes-kernel/linux/linux-3.0.6/acp3448v2/0007-Enable-CONFIG_RELOCATABLE-for-ppc47x.patch b/recipes-kernel/linux/linux-3.0.6/acp3448v2/0007-Enable-CONFIG_RELOCATABLE-for-ppc47x.patch
new file mode 100644
index 0000000..3334bb3
--- /dev/null
+++ b/recipes-kernel/linux/linux-3.0.6/acp3448v2/0007-Enable-CONFIG_RELOCATABLE-for-ppc47x.patch
@@ -0,0 +1,26 @@
1From a2a09da26466463d934abdbac152a779b3455fa2 Mon Sep 17 00:00:00 2001
2From: Jerry Pei <jerry.pei@enea.com>
3Date: Wed, 25 Apr 2012 14:22:30 +0800
4Subject: [PATCH 7/7] Enable CONFIG_RELOCATABLE for ppc47x
5
6Signed-off-by: Jerry Pei <jerry.pei@enea.com>
7---
8 arch/powerpc/Kconfig | 2 +-
9 1 files changed, 1 insertions(+), 1 deletions(-)
10
11diff --git a/arch/powerpc/Kconfig b/arch/powerpc/Kconfig
12index da004ed..363c95e 100644
13--- a/arch/powerpc/Kconfig
14+++ b/arch/powerpc/Kconfig
15@@ -841,7 +841,7 @@ config LOWMEM_CAM_NUM
16
17 config RELOCATABLE
18 bool "Build a relocatable kernel (EXPERIMENTAL)"
19- depends on EXPERIMENTAL && ADVANCED_OPTIONS && FLATMEM && FSL_BOOKE
20+ depends on EXPERIMENTAL && ADVANCED_OPTIONS && FLATMEM && (FSL_BOOKE || PPC_47x)
21 help
22 This builds a kernel image that is capable of running at the
23 location the kernel is loaded at (some alignment restrictions may
24--
251.7.0.4
26
diff --git a/recipes-kernel/linux/linux-3.0.6/acp3448v2/0008-change-serial-baudrate_to_115200.patch b/recipes-kernel/linux/linux-3.0.6/acp3448v2/0008-change-serial-baudrate_to_115200.patch
new file mode 100644
index 0000000..a86e8f7
--- /dev/null
+++ b/recipes-kernel/linux/linux-3.0.6/acp3448v2/0008-change-serial-baudrate_to_115200.patch
@@ -0,0 +1,45 @@
1From 1e0026b4c525131d4fc41cc14f2655a50fc82955 Mon Sep 17 00:00:00 2001
2From: jack zhang <jack.zhang@enea.com>
3Date: Mon, 7 May 2012 08:46:12 +0200
4Subject: [PATCH 2/2] LXCR-472 change the serial port baud rate to be the same
5 as u-boot Signed-off-by: jack zhang
6 <jack.zhang@enea.com>
7
8---
9 drivers/lsi/acp/serial.c | 6 +++---
10 1 files changed, 3 insertions(+), 3 deletions(-)
11
12diff --git a/drivers/lsi/acp/serial.c b/drivers/lsi/acp/serial.c
13index a3da27e..8e4c228 100644
14--- a/drivers/lsi/acp/serial.c
15+++ b/drivers/lsi/acp/serial.c
16@@ -755,7 +755,7 @@ acp_serial_set_termios(struct uart_port *port, struct ktermios *termios,
17 */
18
19 /*baud = termios->c_ospeed;*/
20- baud = 9600;
21+ baud = 115200;
22 get_clock_stuff(port, baud);
23
24 switch (termios->c_cflag & CSIZE) {
25@@ -1006,7 +1006,7 @@ acp_console_get_options(struct uart_acp_port *uap, int *baud,
26 int __init acp_console_setup(struct console *co, char *options)
27 {
28 struct uart_acp_port *uap;
29- int baud = 9600;
30+ int baud = 115200;
31 int bits = 8;
32 int parity = 'n';
33 int flow = 'n';
34@@ -1195,7 +1195,7 @@ acp_serial_add_ports(struct uart_driver *driver)
35 baud_rate = *speed;
36 else {
37 printk(KERN_ERR "current speed not found\n");
38- baud_rate = 9600;
39+ baud_rate = 115200;
40 }
41 } else {
42 ret = -ENOMEM;
43--
441.7.5.4
45
diff --git a/recipes-kernel/linux/linux-3.0.6/acp3448v2/0009-add-acp3448-PCIe-controller-driver.patch b/recipes-kernel/linux/linux-3.0.6/acp3448v2/0009-add-acp3448-PCIe-controller-driver.patch
new file mode 100644
index 0000000..f97cbc5
--- /dev/null
+++ b/recipes-kernel/linux/linux-3.0.6/acp3448v2/0009-add-acp3448-PCIe-controller-driver.patch
@@ -0,0 +1,1081 @@
1commit b49648c2950a227edb4832924649485537d5c049
2Author: Jerry Pei <jerry.pei@enea.com>
3Date: Thu Sep 20 15:14:33 2012 +0800
4
5 add support for the PCIe controller on ACP34xx
6
7 Extracted from lsi.patch in lsi_acp_linux_3.8.1.28 tarball.
8
9 Signed-off-by: Jerry Pei <jerry.pei@enea.com>
10
11diff --git a/arch/powerpc/sysdev/ppc4xx_pci.c b/arch/powerpc/sysdev/ppc4xx_pci.c
12index 56e8b3c..a4e1c46 100644
13--- a/arch/powerpc/sysdev/ppc4xx_pci.c
14+++ b/arch/powerpc/sysdev/ppc4xx_pci.c
15@@ -34,8 +34,16 @@
16 #include <mm/mmu_decl.h>
17
18 #include "ppc4xx_pci.h"
19+#ifdef CONFIG_ACP
20+#include <linux/interrupt.h>
21+#include "../../../drivers/lsi/acp/ncr.h"
22+static int acp_plx;
23+#endif
24
25 static int dma_offset_set;
26+#ifdef CONFIG_ACP
27+static u32 last_mpage = 0;
28+#endif
29
30 #define U64_TO_U32_LOW(val) ((u32)((val) & 0x00000000ffffffffULL))
31 #define U64_TO_U32_HIGH(val) ((u32)((val) >> 32))
32@@ -45,6 +53,9 @@ static int dma_offset_set;
33 #define RES_TO_U32_HIGH(val) \
34 ((sizeof(resource_size_t) > sizeof(u32)) ? U64_TO_U32_HIGH(val) : (0))
35
36+#define ACPX1_PCIE_MPAGE_UPPER(n) (0x1010 + (n * 8))
37+#define ACPX1_PCIE_MPAGE_LOWER(n) (0x1014 + (n * 8))
38+
39 static inline int ppc440spe_revA(void)
40 {
41 /* Catch both 440SPe variants, with and without RAID6 support */
42@@ -87,7 +98,33 @@ static void fixup_ppc4xx_pci_bridge(struct pci_dev *dev)
43 printk(KERN_INFO "PCI: Hiding 4xx host bridge resources %s\n",
44 pci_name(dev));
45 }
46+
47+static void __init
48+fixup_acp_pci_bridge(struct pci_dev *dev)
49+{
50+ /* if we aren't a PCIe don't bother */
51+ if (!pci_find_capability(dev, PCI_CAP_ID_EXP))
52+ return ;
53+
54+ /*
55+ * Set the class appropriately for a bridge device
56+ */
57+ printk(KERN_INFO "PCI: Setting PCI Class to PCI_CLASS_BRIDGE_HOST for %04x:%04x\n", dev->vendor, dev->device);
58+
59+
60+ dev->class = PCI_CLASS_BRIDGE_HOST << 8;
61+
62+ /*
63+ * Make the bridge transparent
64+ */
65+ dev->transparent = 1;
66+
67+ return ;
68+}
69+
70 DECLARE_PCI_FIXUP_HEADER(PCI_ANY_ID, PCI_ANY_ID, fixup_ppc4xx_pci_bridge);
71+DECLARE_PCI_FIXUP_HEADER(0x1000, 0x5101, fixup_acp_pci_bridge);
72+DECLARE_PCI_FIXUP_HEADER(0x1000, 0x5108, fixup_acp_pci_bridge);
73
74 static int __init ppc4xx_parse_dma_ranges(struct pci_controller *hose,
75 void __iomem *reg,
76@@ -646,6 +683,9 @@ struct ppc4xx_pciex_port
77 struct resource cfg_space;
78 struct resource utl_regs;
79 void __iomem *utl_base;
80+#ifdef CONFIG_ACP
81+ int acpChipType;
82+#endif
83 };
84
85 static struct ppc4xx_pciex_port *ppc4xx_pciex_ports;
86@@ -939,6 +979,35 @@ static struct ppc4xx_pciex_hwops ppc440speB_pcie_hwops __initdata =
87 .check_link = ppc4xx_pciex_check_link_sdr,
88 };
89
90+#if defined(CONFIG_ACP)
91+
92+static int __init
93+acp_pciex_core_init(struct device_node *np)
94+{
95+ return 3;
96+}
97+
98+static int
99+acp_pciex_port_init_hw(struct ppc4xx_pciex_port *port)
100+{
101+ return 0;
102+}
103+
104+static int
105+acp_pciex_setup_utl(struct ppc4xx_pciex_port *port)
106+{
107+ return 0;
108+}
109+
110+static struct ppc4xx_pciex_hwops acp_pcie_hwops __initdata =
111+{
112+ .core_init = acp_pciex_core_init,
113+ .port_init_hw = acp_pciex_port_init_hw,
114+ .setup_utl = acp_pciex_setup_utl
115+};
116+
117+#endif
118+
119 static int __init ppc460ex_pciex_core_init(struct device_node *np)
120 {
121 /* Nothing to do, return 2 ports */
122@@ -1419,6 +1488,11 @@ static int __init ppc4xx_pciex_check_core_init(struct device_node *np)
123 if (core_init++)
124 return 0;
125
126+#if defined(CONFIG_ACP)
127+ if (of_device_is_compatible(np, "lsi,plb-pciex"))
128+ ppc4xx_pciex_hwops = &acp_pcie_hwops;
129+#endif
130+
131 #ifdef CONFIG_44x
132 if (of_device_is_compatible(np, "ibm,plb-pciex-440spe")) {
133 if (ppc440spe_revA())
134@@ -1578,9 +1652,11 @@ static int ppc4xx_pciex_validate_bdf(struct ppc4xx_pciex_port *port,
135 PCI_SLOT(devfn) != 0)
136 return PCIBIOS_DEVICE_NOT_FOUND;
137
138+#ifndef CONFIG_ACP
139 /* Check if we have a link */
140 if ((bus->number != port->hose->first_busno) && !port->link)
141 return PCIBIOS_DEVICE_NOT_FOUND;
142+#endif
143
144 return 0;
145 }
146@@ -1598,10 +1674,80 @@ static void __iomem *ppc4xx_pciex_get_config_base(struct ppc4xx_pciex_port *port
147 return (void __iomem *)port->hose->cfg_addr;
148
149 relbus = bus->number - (port->hose->first_busno + 1);
150+
151+#ifndef CONFIG_ACP
152 return (void __iomem *)port->hose->cfg_data +
153 ((relbus << 20) | (devfn << 12));
154+#else
155+
156+ {
157+ unsigned mpage;
158+ u32 addr;
159+ int dev, fn;
160+ int cfg_type;
161+
162+ /*
163+ * Set MPAGE0 to map config access for this BDF
164+ */
165+
166+ dev = ( (devfn & 0xf8) >> 3);
167+ fn = devfn & 0x7;
168+
169+ if (dev > 31) {
170+ return NULL;
171+ }
172+
173+#ifdef CONFIG_ACP_X1V1
174+ /* v1 only supports fn=0 */
175+ if (fn) {
176+ return NULL;
177+ }
178+#else
179+ /* v2 only supports fn0-3 and bus0-63 */
180+ if (port->acpChipType == 1) {
181+ if ((fn > 3) || (bus->number > 63)) {
182+ return NULL;
183+ }
184+ }
185+#endif
186+
187+ if (relbus && (bus->number != bus->primary)) {
188+ cfg_type = 1;
189+ } else {
190+ cfg_type = 0;
191+ }
192+
193+ /* build the mpage register */
194+ mpage = (bus->number << 11) |
195+ (dev << 6) |
196+ (cfg_type << 5 );
197+
198+ mpage |= 0x10; /* enable MPAGE for configuration access */
199+
200+ if (5 > port->acpChipType)
201+ mpage |= 1;
202+
203+ /* the function number moved for X2 */
204+ if (port->acpChipType < 2) {
205+ mpage |= (fn << 17);
206+ } else {
207+ mpage |= (fn << 19);
208+ }
209+
210+
211+ if (mpage != last_mpage) {
212+ /* printk("%02x:%02x:%02x setting mpage = 0x%08x\n", bus->number, dev, fn, mpage); */
213+ addr = ((u32) port->hose->cfg_addr) + ACPX1_PCIE_MPAGE_LOWER(7);
214+ out_le32((u32 *) addr, mpage);
215+ last_mpage = mpage;
216+ }
217+
218+ return (void __iomem *)port->hose->cfg_data;
219+ }
220+#endif
221 }
222
223+#ifndef CONFIG_ACP
224 static int ppc4xx_pciex_read_config(struct pci_bus *bus, unsigned int devfn,
225 int offset, int len, u32 *val)
226 {
227@@ -1703,10 +1849,225 @@ static int ppc4xx_pciex_write_config(struct pci_bus *bus, unsigned int devfn,
228 return PCIBIOS_SUCCESSFUL;
229 }
230
231+#else
232+static int
233+ppc4xx_pciex_acp_read_config(struct pci_bus *bus, unsigned int devfn,
234+ int offset, int len, u32 *val)
235+{
236+ struct pci_controller *hose = (struct pci_controller *) bus->sysdata;
237+ struct ppc4xx_pciex_port *port =
238+ &ppc4xx_pciex_ports[hose->indirect_type];
239+ void __iomem *addr;
240+ u32 bus_addr;
241+ u32 val32;
242+ u32 mcsr;
243+ int bo = offset & 0x3;
244+ int rc = PCIBIOS_SUCCESSFUL;
245+
246+ BUG_ON(hose != port->hose);
247+
248+ if (ppc4xx_pciex_validate_bdf(port, bus, devfn) != 0)
249+ return PCIBIOS_DEVICE_NOT_FOUND;
250+
251+ addr = ppc4xx_pciex_get_config_base(port, bus, devfn);
252+
253+ if (!addr) {
254+ *val = 0;
255+ return PCIBIOS_DEVICE_NOT_FOUND;
256+ }
257+
258+ /*
259+ * Reading from configuration space of non-existing device can
260+ * generate transaction errors. For the read duration we suppress
261+ * assertion of machine check exceptions to avoid those.
262+ */
263+ mtmsr( mfmsr() & ~(MSR_ME));
264+ __asm__ __volatile__("msync");
265+
266+ /*
267+ * addressing is different for local config access vs.
268+ * access through the mapped config space.
269+ */
270+ if (bus->number == port->hose->first_busno) {
271+ int wo = offset & 0xfffffffc;
272+ bus_addr = (u32) addr + wo;
273+
274+ } else {
275+
276+ /*
277+ * mapped config space only supports 32-bit access
278+ *
279+ * AXI address [3:0] is not used at all.
280+ * AXI address[9:4] becomes register number.
281+ * AXI address[13:10] becomes Ext. register number
282+ * AXI address[17:14] becomes 1st DWBE for configuration read only.
283+ * AXI address[29:27] is used to select one of 8 Mpage registers.
284+ */
285+
286+ bus_addr = (u32) addr + (offset << 2);
287+
288+ switch (len) {
289+ case 1:
290+ bus_addr |= ((1 << bo) ) << 14;
291+ break;
292+ case 2:
293+ bus_addr |= ((3 << bo) ) << 14;
294+ break;
295+ default:
296+ bus_addr |= ( 0xf ) << 14;
297+ break;
298+ }
299+
300+ }
301+
302+ /*
303+ * do the read
304+ */
305+
306+ val32 = in_le32((u32 *)bus_addr);
307+
308+ switch (len) {
309+ case 1:
310+ *val = (val32 >> (bo * 8)) & 0xff;
311+ break;
312+ case 2:
313+ *val = (val32 >> (bo * 8)) & 0xffff;
314+ break;
315+ default:
316+ *val = val32;
317+ break;
318+ }
319+
320+ __asm__ __volatile__("msync");
321+
322+ mcsr = mfspr(SPRN_MCSR);
323+ if ( mcsr != 0) {
324+ mtspr(SPRN_MCSR, 0);
325+ __asm__ __volatile__("msync");
326+
327+#ifdef PRINT_CONFIG_ACCESSES
328+ printk("acp_read_config : %3d [%3d..%3d] fn=0x%04x"
329+ " o=0x%04x l=%d a=0x%08x machine check!! 0x%08x\n",
330+ bus->number, hose->first_busno, hose->last_busno,
331+ devfn, offset, len, bus_addr, mcsr);
332+#endif
333+ pr_debug("acp_read_config : bus=%3d [%3d..%3d] devfn=0x%04x"
334+ " offset=0x%04x len=%d, addr=0x%08x machine check!! "
335+ "0x%08x\n",
336+ bus->number, hose->first_busno, hose->last_busno,
337+ devfn, offset, len, bus_addr, mcsr);
338+ *val = 0;
339+ rc = PCIBIOS_DEVICE_NOT_FOUND;
340+ } else {
341+#ifdef PRINT_CONFIG_ACCESSES
342+ printk("acp_read_config : %3d [%3d..%3d] fn=0x%04x"
343+ " o=0x%04x l=%d a=0x%08x v=0x%08x\n",
344+ bus->number, hose->first_busno, hose->last_busno,
345+ devfn, offset, len, bus_addr, *val);
346+#endif
347+ pr_debug("acp_read_config : bus=%3d [%3d..%3d] devfn=0x%04x"
348+ " offset=0x%04x len=%d, addr=0x%08x val=0x%08x\n",
349+ bus->number, hose->first_busno, hose->last_busno,
350+ devfn, offset, len, bus_addr, *val);
351+ }
352+
353+ /* re-enable machine checks */
354+ mtmsr(mfmsr() | (MSR_ME) );
355+ __asm__ __volatile__("msync");
356+
357+ return rc;
358+}
359+
360+static int ppc4xx_pciex_acp_write_config(struct pci_bus *bus, unsigned int devfn,
361+ int offset, int len, u32 val)
362+{
363+ struct pci_controller *hose = (struct pci_controller *) bus->sysdata;
364+ struct ppc4xx_pciex_port *port =
365+ &ppc4xx_pciex_ports[hose->indirect_type];
366+ void __iomem *addr;
367+ u32 bus_addr;
368+ u32 val32;
369+
370+ if (ppc4xx_pciex_validate_bdf(port, bus, devfn) != 0)
371+ return PCIBIOS_DEVICE_NOT_FOUND;
372+
373+ addr = ppc4xx_pciex_get_config_base(port, bus, devfn);
374+
375+ if (!addr) {
376+ return PCIBIOS_DEVICE_NOT_FOUND;
377+ }
378+
379+ /*
380+ * addressing is different for local config access vs.
381+ * access through the mapped config space. We need to
382+ * translate the offset for mapped config access
383+ */
384+ if (bus->number == port->hose->first_busno) {
385+ /* the local ACP RC only supports 32-bit dword config access,
386+ * so if this is a byte or 16-bit word access we need to
387+ * perform a read-modify write
388+ */
389+ if (len == 4) {
390+ bus_addr = (u32) addr + offset;
391+ } else {
392+ int bs = ((offset & 0x3) * 8);
393+
394+ bus_addr = (u32) addr + (offset & 0xfffffffc);
395+ val32 = in_le32((u32 *)bus_addr);
396+
397+
398+ if (len == 2) {
399+ val32 = (val32 & ~(0xffff << bs) ) | ((val & 0xffff) << bs);
400+ } else {
401+ val32 = (val32 & ~(0xff << bs) ) | ((val & 0xff) << bs);
402+ }
403+
404+ val = val32;
405+ len = 4;
406+ }
407+
408+ } else {
409+ bus_addr = (u32) addr + (offset << 2) + (offset & 0x3);
410+ }
411+
412+#ifdef PRINT_CONFIG_ACCESSES
413+ printk("acp_write_config: %3d [%3d..%3d] fn=0x%04x"
414+ " o=0x%04x l=%d a=0x%08x v=0x%08x\n",
415+ bus->number, hose->first_busno, hose->last_busno,
416+ devfn, offset, len, bus_addr, val);
417+#endif
418+ pr_debug("acp_write_config: bus=%3d [%3d..%3d] devfn=0x%04x"
419+ " offset=0x%04x len=%d, addr=0x%08x val=0x%08x\n",
420+ bus->number, hose->first_busno, hose->last_busno,
421+ devfn, offset, len, bus_addr, val);
422+
423+
424+ switch (len) {
425+ case 1:
426+ out_8((u8 *)(bus_addr), val);
427+ break;
428+ case 2:
429+ out_le16((u16 *)(bus_addr), val);
430+ break;
431+ default:
432+ out_le32((u32 *)(bus_addr), val);
433+ break;
434+ }
435+
436+ return PCIBIOS_SUCCESSFUL;
437+}
438+
439+#endif
440+
441 static struct pci_ops ppc4xx_pciex_pci_ops =
442 {
443+#ifndef CONFIG_ACP
444 .read = ppc4xx_pciex_read_config,
445 .write = ppc4xx_pciex_write_config,
446+#else
447+ .read = ppc4xx_pciex_acp_read_config,
448+ .write = ppc4xx_pciex_acp_write_config,
449+#endif
450 };
451
452 static int __init ppc4xx_setup_one_pciex_POM(struct ppc4xx_pciex_port *port,
453@@ -1718,7 +2079,10 @@ static int __init ppc4xx_setup_one_pciex_POM(struct ppc4xx_pciex_port *port,
454 unsigned int flags,
455 int index)
456 {
457- u32 lah, lal, pciah, pcial, sa;
458+ u32 pciah, pcial;
459+#ifndef CONFIG_ACP
460+ u32 lah, lal, sa;
461+#endif
462
463 if (!is_power_of_2(size) ||
464 (index < 2 && size < 0x100000) ||
465@@ -1730,10 +2094,11 @@ static int __init ppc4xx_setup_one_pciex_POM(struct ppc4xx_pciex_port *port,
466 }
467
468 /* Calculate register values */
469- lah = RES_TO_U32_HIGH(plb_addr);
470- lal = RES_TO_U32_LOW(plb_addr);
471 pciah = RES_TO_U32_HIGH(pci_addr);
472 pcial = RES_TO_U32_LOW(pci_addr);
473+#ifndef CONFIG_ACP
474+ lah = RES_TO_U32_HIGH(plb_addr);
475+ lal = RES_TO_U32_LOW(plb_addr);
476 sa = (0xffffffffu << ilog2(size)) | 0x1;
477
478 /* Program register values */
479@@ -1779,6 +2144,41 @@ static int __init ppc4xx_setup_one_pciex_POM(struct ppc4xx_pciex_port *port,
480 | DCRO_PEGPL_OMRxMSKL_VAL);
481 break;
482 }
483+#else
484+ {
485+ /* ACP X1 setup MPAGE registers */
486+
487+ int i, num_pages;
488+ u32 mpage_lower;
489+
490+ printk(KERN_INFO "setting outbound window %d with "
491+ "plb_add=0x%012llx, pci_addr=0x%012llx, size=0x%012llx\n",
492+ index, plb_addr, pci_addr, size);
493+
494+ /*
495+ * MPAGE7 is dedicated to config access, so we only
496+ * have 7 128MB pages available for memory i/o.
497+ * Calculate how many pages we need
498+ */
499+ if (size > (7 * 0x08000000)) {
500+ printk(KERN_WARNING "%s: Resource size 0x%012llx out of range\n",
501+ hose->dn->full_name, size);
502+ return -1;
503+ }
504+
505+ num_pages = ( (size - 1) >> 27) + 1;
506+ for (i = 0; i < num_pages; i++) {
507+ mpage_lower = (pcial & 0xf8000000);
508+
509+ if (5 > port->acpChipType)
510+ mpage_lower |= 1;
511+
512+ out_le32( mbase + ACPX1_PCIE_MPAGE_UPPER(i), pciah);
513+ out_le32( mbase + ACPX1_PCIE_MPAGE_LOWER(i), mpage_lower);
514+ pcial += 0x08000000;
515+ }
516+ }
517+#endif
518
519 return 0;
520 }
521@@ -1907,6 +2307,108 @@ static void __init ppc4xx_configure_pciex_PIMs(struct ppc4xx_pciex_port *port,
522 PCI_COMMAND_IO | PCI_COMMAND_MEMORY | PCI_COMMAND_MASTER);
523 }
524
525+#if defined(CONFIG_ACP)
526+
527+static void __init
528+ppc4xx_configure_acp_pciex_PIMs(struct ppc4xx_pciex_port *port,
529+ struct pci_controller *hose,
530+ void __iomem *mbase,
531+ struct resource *res)
532+{
533+ resource_size_t size = res->end - res->start + 1;
534+ u64 sa;
535+ u32 value = 0;
536+ void __iomem *tpage_base = mbase + 0x1050;
537+
538+ if (port->endpoint) {
539+ resource_size_t ep_addr = 0;
540+ resource_size_t ep_size = 32 << 20;
541+
542+ /* Currently we map a fixed 64MByte window to PLB address
543+ * 0 (SDRAM). This should probably be configurable via a dts
544+ * property.
545+ */
546+
547+ /* Calculate window size */
548+ sa = (0xffffffffffffffffull << ilog2(ep_size));;
549+
550+ /* TODO: */
551+
552+ out_le32(mbase + PCI_BASE_ADDRESS_0, RES_TO_U32_LOW(ep_addr));
553+ out_le32(mbase + PCI_BASE_ADDRESS_1, RES_TO_U32_HIGH(ep_addr));
554+ } else {
555+ /* Calculate window size */
556+ sa = (0xffffffffffffffffull << ilog2(size));;
557+
558+ if (res->flags & IORESOURCE_PREFETCH)
559+ sa |= 0x8;
560+
561+ printk(KERN_INFO
562+ "configure inbound mapping from 0x%012llx-0x%012llx "
563+ "(0x%08llx bytes)\n", res->start, res->end, size);
564+
565+ if (0 != ncr_read(NCP_REGION_ID(0xa, 0x10), 0x2c, 4, &value))
566+ printk(KERN_WARNING "** Unable to get ACP type!\n");
567+
568+ /*
569+ * For ACP we need to set the dema_offset to the size of
570+ * inbound window.
571+ */
572+
573+ pci_dram_offset = size;
574+ hose->dma_window_base_cur = size;
575+
576+ out_le32(mbase + PCI_BASE_ADDRESS_0, RES_TO_U32_LOW(size));
577+ out_le32(mbase + PCI_BASE_ADDRESS_1, RES_TO_U32_HIGH(size));
578+
579+ if (5 == port->acpChipType) {
580+ printk(KERN_WARNING "Setting SIZE for 2500\n");
581+ out_le32(mbase + 0x11f4, 0xf0000000UL);
582+ }
583+
584+ /*
585+ * set up the TPAGE registers
586+ *
587+ * We set the MSB of each TPAGE to select 128-bit AXI access.
588+ * For the address field we simply program an incrementing value
589+ * to map consecutive pages
590+ */
591+ if (0 == acp_plx) {
592+ int i;
593+
594+ for (i = 0; i < 8; i++) {
595+ out_le32(tpage_base, (0x80000000 + i));
596+ tpage_base += 4;
597+ }
598+ } else {
599+ out_le32(tpage_base, 0x0); /* tpage 0 point to 0x0, not used */
600+ tpage_base +=4;
601+ out_le32(tpage_base, 0x0); /* tpage 1 point to 0x0, not used */
602+ tpage_base +=4;
603+ out_le32(tpage_base, 0x0); /* tpage 2 point to 0x0, not used */
604+ tpage_base +=4;
605+ out_le32(tpage_base, 0x0); /* tpage 3 point to 0x0, not used */
606+ tpage_base +=4;
607+ out_le32(tpage_base, 0x0); /* tpage 4 point to 0x0, not used */
608+ tpage_base +=4;
609+ out_le32(tpage_base, 0x0); /* tpage 5 point to 0x0, not used */
610+ tpage_base +=4;
611+ out_le32(tpage_base, 0x0); /* tpage 6 point to 0x0 for dynamic mapping */
612+ tpage_base +=4;
613+ out_le32(tpage_base, 0x80001000); /* tpage 7 point to 0x20,0000,0000 tpage size = 256MB */
614+ }
615+ }
616+
617+ /* Enable I/O, Mem, and Busmaster cycles */
618+#if 0
619+ out_le16(mbase + PCI_COMMAND,
620+ in_le16(mbase + PCI_COMMAND) |
621+ PCI_COMMAND_IO | PCI_COMMAND_MEMORY | PCI_COMMAND_MASTER);
622+#endif
623+}
624+
625+#endif
626+
627 static void __init ppc4xx_pciex_port_setup_hose(struct ppc4xx_pciex_port *port)
628 {
629 struct resource dma_window;
630@@ -2070,6 +2572,439 @@ static void __init ppc4xx_pciex_port_setup_hose(struct ppc4xx_pciex_port *port)
631 iounmap(mbase);
632 }
633
634+#if defined(CONFIG_ACP)
635+
636+static irqreturn_t
637+acp_pcie_isr(int irq, void *arg)
638+{
639+ struct pci_controller *hose = (struct pci_controller *) arg;
640+ void __iomem *mbase = (void __iomem *)hose->cfg_addr;
641+
642+ u32 intr_status;
643+ u32 msg_fifo_stat;
644+ u32 msg_fifo_info;
645+ u8 externalPciIntr = 0;
646+
647+
648+ /* read the PEI interrupt status register */
649+ intr_status = in_le32(mbase + 0x10c0);
650+#if 0
651+ {
652+ u32 intr_enb;
653+ intr_enb = in_le32(mbase + 0x10c4);
654+ printk("PCIE%d mbase %p intr_status/enb = 0x%08x 0x%08x\n",
655+ hose->indirect_type, mbase, intr_status, intr_enb);
656+ }
657+#else
658+ in_le32(mbase + 0x10c4);
659+#endif
660+
661+ /* check if this is a PCIe message from an external device */
662+ if (intr_status & 0x00000010) {
663+ externalPciIntr = 1;
664+
665+ msg_fifo_stat = in_le32(mbase + 0x10b4);
666+
667+ /* loop until the message fifo is empty */
668+ while ( (msg_fifo_stat & 0x01) == 0) {
669+ u8 bus, dev, fn;
670+ u8 msg_type;
671+ msg_fifo_info = in_le32(mbase + 0x10b0);
672+
673+ bus = (msg_fifo_info >> 16 ) & 0xff;
674+ dev = (msg_fifo_info >> 11 ) & 0x1f;
675+ fn = (msg_fifo_info >> 8 ) & 0x07;
676+ msg_type = msg_fifo_info & 0xff;
677+
678+ /* print out the BDF and message type.
679+ * We ignore the common message types.
680+ */
681+ switch (msg_type) {
682+ case 0x20: /* assert_INTa */
683+ case 0x21: /* assert_INTb */
684+ case 0x22: /* assert_INTc */
685+ case 0x23: /* assert_INTd */
686+ case 0x24: /* de-assert_INTa */
687+ case 0x25: /* de-assert_INTb */
688+ case 0x26: /* de-assert_INTc */
689+ case 0x27: /* de-assert_INTd */
690+ /* do nothing */
691+ break;
692+ default:
693+ printk("BDF %02x:%02x.%x sent msgtype 0x%02x\n",
694+ bus, dev, fn, msg_type);
695+ break;
696+ }
697+
698+ /* re-read fifo status */
699+ msg_fifo_stat = in_le32(mbase + 0x10b4);
700+
701+ }
702+ } else {
703+ /*
704+ Ignore the common interrupts, still need to figure out what
705+ they all mean.
706+ */
707+ if (intr_status & 0xf3ffffab) {
708+ u32 t2a_err_stat;
709+ u32 t2a_other_err_stat;
710+ u32 int_enb;
711+ u32 linkStatus;
712+ u32 offset;
713+
714+ printk(KERN_ERR "ACP_PCIE_ISR: got PEI error interrupt 0x%08x\n",
715+ intr_status);
716+
717+ linkStatus = in_le32(mbase + 0x117c);
718+ printk(KERN_ERR "link_status (0x117c) = 0x%08x\n", linkStatus);
719+
720+ if (intr_status & 0x00020000) {
721+ t2a_err_stat = in_le32(mbase + 0x1170);
722+ printk(KERN_ERR "t2a_fn_indp_err_stat = 0x%08x\n", t2a_err_stat);
723+ int_enb = in_le32(mbase + 0x10c4);
724+ int_enb &= 0xfffdffff;
725+ out_le32(mbase + 0x10c4, int_enb);
726+ }
727+
728+ if (intr_status & 0x00040000) {
729+ t2a_other_err_stat = in_le32(mbase + 0x1174);
730+ printk(KERN_ERR "t2a_fn_indp_other_err_stat = 0x%08x\n",
731+ t2a_other_err_stat);
732+ int_enb = in_le32(mbase + 0x10c4);
733+ int_enb &= 0xfffbffff;
734+ out_le32(mbase + 0x10c4, int_enb);
735+ }
736+
737+ if (intr_status & 0x00000800) {
738+ printk("pci_config = 0x%08x\n", in_le32(mbase + 0x1000));
739+ printk("pci_status = 0x%08x\n", in_le32(mbase + 0x1004));
740+
741+ int_enb = in_le32(mbase + 0x10c4);
742+ int_enb &= 0xfffff7ff;
743+ out_le32(mbase + 0x10c4, int_enb);
744+ }
745+
746+ /*
747+ * dump all the potentially interesting PEI registers
748+ */
749+ for (offset = 0x114c; offset <= 0x1180; offset += 4) {
750+ printk(" 0x%04x : 0x%08x\n", offset, in_le32(mbase + offset));
751+ }
752+ }
753+ }
754+
755+ /*
756+ * We clear all the interrupts in the PEI status, even though
757+ * interrupts from external devices have not yet been handled.
758+ * That should be okay, since the PCI IRQ in the MPIC won't be
759+ * re-enabled until all external handlers have been called.
760+ */
761+ out_le32(mbase + 0x10c0, intr_status);
762+
763+ return (externalPciIntr ? IRQ_NONE : IRQ_HANDLED);
764+}
765+
766+static void __init ppc4xx_acp_pciex_port_setup_hose(struct ppc4xx_pciex_port *port)
767+{
768+ struct resource dma_window;
769+ struct pci_controller *hose = NULL;
770+ const int *bus_range;
771+ int primary = 0, busses;
772+ void __iomem *mbase = NULL, *cfg_data = NULL;
773+ int mappedIrq;
774+ int err;
775+ u32 pci_status;
776+ u32 link_state;
777+ u32 pci_config;
778+ u32 version;
779+
780+ /* Check if primary bridge */
781+ if (of_get_property(port->node, "primary", NULL))
782+ primary = 1;
783+
784+ /* Get bus range if any */
785+ bus_range = of_get_property(port->node, "bus-range", NULL);
786+
787+ /* Allocate the host controller data structure */
788+ hose = pcibios_alloc_controller(port->node);
789+ if (!hose)
790+ goto fail;
791+
792+ /* We stick the port number in "indirect_type" so the config space
793+ * ops can retrieve the port data structure easily
794+ */
795+ hose->indirect_type = port->index;
796+
797+ /* Get bus range */
798+ hose->first_busno = bus_range ? bus_range[0] : 0x0;
799+ hose->last_busno = bus_range ? bus_range[1] : 0xff;
800+
801+ /* Because of how big mapping the config space is (1M per bus), we
802+ * limit how many busses we support. In the long run, we could replace
803+ * that with something akin to kmap_atomic instead. We set aside 1 bus
804+ * for the host itself too.
805+ */
806+ busses = hose->last_busno - hose->first_busno; /* This is off by 1 */
807+ if (busses > MAX_PCIE_BUS_MAPPED) {
808+ busses = MAX_PCIE_BUS_MAPPED;
809+ hose->last_busno = hose->first_busno + busses;
810+ }
811+
812+ if (!port->endpoint) {
813+ /*
814+ * map the bottom page of PCIe memory for config space access
815+ */
816+ cfg_data = ioremap(port->cfg_space.start, 0x100000);
817+ if (cfg_data == NULL) {
818+ printk(KERN_ERR "%s: Can't map external config space !",
819+ port->node->full_name);
820+ goto fail;
821+ }
822+ hose->cfg_data = cfg_data;
823+ }
824+
825+ /*
826+ * The internal config space has already been mapped, so
827+ * just re-use that virtual address.
828+ */
829+ hose->cfg_addr = port->utl_base;
830+
831+ pr_debug("PCIE %s, bus %d..%d\n", port->node->full_name,
832+ hose->first_busno, hose->last_busno);
833+ pr_debug(" config space mapped at: root @0x%p, other @0x%p\n",
834+ hose->cfg_addr, hose->cfg_data);
835+
836+ /* Setup config space */
837+ hose->ops = &ppc4xx_pciex_pci_ops;
838+ port->hose = hose;
839+ mbase = (void __iomem *)hose->cfg_addr;
840+
841+ if (port->endpoint) {
842+ /* if we're an endpoint don't do anything else */
843+ printk(KERN_INFO "PCIE%d: successfully set as endpoint\n",
844+ port->index);
845+ return;
846+ }
847+
848+ /* setting up as root complex */
849+ pci_config = in_le32(mbase + 0x1000);
850+
851+ pci_status = in_le32(mbase + 0x1004);
852+ link_state = (pci_status & 0x3f00) >> 8;
853+ printk("PCIE%d status = 0x%08x : PCI link state = 0x%x\n",
854+ port->index, pci_status, link_state);
855+
856+ /* make sure the ACP device is configured as PCI Root Complex */
857+ if ((pci_status & 0x18) != 0x18) {
858+ printk("ACP device is not PCI Root Complex! status = 0x%08x\n",
859+ pci_status);
860+ goto fail;
861+ }
862+
863+ /* make sure the link is up */
864+ if (link_state != 0xb) {
865+ /* reset */
866+ printk("PCI link in bad state - resetting\n");
867+ pci_config |= 1;
868+ out_le32(mbase + 0x1000, pci_config);
869+ msleep(1000);
870+
871+ pci_status = in_le32(mbase + 0x1004);
872+ link_state = (pci_status & 0x3f00) >> 8;
873+
874+ printk("PCI link state now = 0x%x\n", link_state);
875+
876+ if (link_state != 0xb) {
877+ printk("PCI link still in bad state - giving up!\n");
878+ goto fail;
879+ }
880+ }
881+
882+ /* get the device version */
883+ if (0 != ncr_read(NCP_REGION_ID(0xa, 0x10), 0x2c, 4, &version)) {
884+ printk(KERN_ERR "Unable to detect ACP revision!\n");
885+ goto fail;
886+ }
887+ port->acpChipType = (version & 0x1f);
888+ printk(KERN_INFO "Using PEI register set for ACP chipType %d\n",
889+ port->acpChipType);
890+
891+ /*
892+ * Set bus numbers on our root port
893+ */
894+ out_8(mbase + PCI_PRIMARY_BUS, hose->first_busno);
895+ out_8(mbase + PCI_SECONDARY_BUS, hose->first_busno + 1);
896+ out_8(mbase + PCI_SUBORDINATE_BUS, hose->last_busno);
897+
898+
899+ /* Parse outbound mapping resources */
900+ pci_process_bridge_OF_ranges(hose, port->node, primary);
901+
902+ /* Parse inbound mapping resources */
903+ if (ppc4xx_parse_dma_ranges(hose, mbase, &dma_window) != 0)
904+ goto fail;
905+
906+ /* Configure outbound ranges POMs */
907+ ppc4xx_configure_pciex_POMs(port, hose, mbase);
908+
909+ /* Configure inbound ranges PIMs */
910+ ppc4xx_configure_acp_pciex_PIMs(port, hose, mbase, &dma_window);
911+
912+ /*
913+ * hook up an interrupt handler
914+ */
915+#if 0
916+ mappedIrq = irq_create_mapping(NULL, 29);
917+ if (mappedIrq == NO_IRQ) {
918+ printk(KERN_ERR "irq_create_mapping failed!!!\n");
919+ goto fail;
920+ }
921+
922+ err = set_irq_type(mappedIrq, IRQ_TYPE_LEVEL_HIGH);
923+ if (err) {
924+ printk(KERN_ERR "set_irq_type failed!!!!\n");
925+ goto fail;
926+ }
927+#endif
928+ printk("PCIE%d mapping interrupt\n", port->index);
929+ mappedIrq = irq_of_parse_and_map(port->node, 0);
930+
931+ err = request_irq(mappedIrq, acp_pcie_isr, IRQF_SHARED, "acp_pcie", hose);
932+ if (err) {
933+ printk(KERN_ERR "request_irq failed!!!!\n");
934+ goto fail;
935+ }
936+
937+ /* unmask PEI interrupts */
938+#if 0
939+ out_le32(mbase + 0x10c4, 0xffffffff);
940+#else
941+ /* for now ignore retry requests, and INT assert/deassert */
942+ out_le32(mbase + 0x10c4, 0xf3fffffd);
943+#endif
944+
945+ if (port->acpChipType == 1) {
946+ /*
947+ * for v2 we need to set the 'axi_interface_rdy' bit
948+ * this bit didn't exist in X1V1, and means something
949+ * else for X2...
950+ */
951+ pci_config = in_le32(mbase + 0x1000);
952+ pci_config |= 0x00040000;
953+ out_le32(mbase + 0x1000, pci_config);
954+ }
955+
956+ if (!port->endpoint) {
957+ printk(KERN_INFO "PCIE%d: successfully set as root-complex\n",
958+ port->index);
959+ } else {
960+ }
961+
962+ return;
963+ fail:
964+ if (hose)
965+ pcibios_free_controller(hose);
966+ if (cfg_data)
967+ iounmap(cfg_data);
968+}
969+
970+static void __init ppc4xx_probe_acp_pciex_bridge(struct device_node *np)
971+{
972+ struct ppc4xx_pciex_port *port;
973+ const u32 *pval;
974+ int portno;
975+ const char *val;
976+ const u32 *field;
977+
978+ /* First, proceed to core initialization as we assume there's
979+ * only one PCIe core in the system
980+ */
981+ if (ppc4xx_pciex_check_core_init(np))
982+ return;
983+
984+ /* Get the port number from the device-tree */
985+ pval = of_get_property(np, "port", NULL);
986+ if (pval == NULL) {
987+ printk(KERN_ERR "PCIE: Can't find port number for %s\n",
988+ np->full_name);
989+ return;
990+ }
991+ portno = *pval;
992+ if (portno >= ppc4xx_pciex_port_count) {
993+ printk(KERN_ERR "PCIE: port number out of range for %s\n",
994+ np->full_name);
995+ return;
996+ }
997+ port = &ppc4xx_pciex_ports[portno];
998+ port->index = portno;
999+
1000+ /*
1001+ * Check if device is enabled
1002+ */
1003+ if (!of_device_is_available(np)) {
1004+ printk(KERN_INFO "PCIE%d: Port disabled via device-tree\n",
1005+ port->index);
1006+ return;
1007+ }
1008+
1009+ /* Make sure PCIe is enabled in the device tree. */
1010+ field = of_get_property(np, "enabled", NULL);
1011+
1012+ if (!field || (field && (0 == *field))) {
1013+ printk(KERN_INFO "%s: Port disabled via device-tree\n",
1014+ np->full_name);
1015+ return;
1016+ }
1017+
1018+ /* Check for the PLX work-around. */
1019+ field = of_get_property(np, "plx", NULL);
1020+
1021+ if (field && (0 != *field))
1022+ acp_plx = 1;
1023+ else
1024+ acp_plx = 0;
1025+
1026+ port->node = of_node_get(np);
1027+
1028+ /* Check if device_type property is set to "pci" or "pci-endpoint".
1029+ * Resulting from this setup this PCIe port will be configured
1030+ * as root-complex or as endpoint.
1031+ */
1032+ val = of_get_property(port->node, "device_type", NULL);
1033+ if (!strcmp(val, "pci-endpoint")) {
1034+ port->endpoint = 1;
1035+ } else if (!strcmp(val, "pci")) {
1036+ port->endpoint = 0;
1037+ } else {
1038+ printk(KERN_ERR "PCIE%d: missing or incorrect device_type for %s\n",
1039+ portno, np->full_name);
1040+ return;
1041+ }
1042+
1043+ /* Fetch config space registers address */
1044+ if (of_address_to_resource(np, 0, &port->cfg_space)) {
1045+ printk(KERN_ERR "%s: Can't get PCI-E config space !",
1046+ np->full_name);
1047+ return;
1048+ }
1049+
1050+ /* Fetch host bridge internal registers address */
1051+ if (of_address_to_resource(np, 1, &port->utl_regs)) {
1052+ printk(KERN_ERR "%s: Can't get UTL register base !",
1053+ np->full_name);
1054+ return;
1055+ }
1056+
1057+ port->utl_base = ioremap(port->utl_regs.start, resource_size(&port->utl_regs));
1058+
1059+ printk("%s PCIE%d config base = 0x%012llx (0x%08x virtual)\n", np->full_name, port->index, port->utl_regs.start, (u32) port->utl_base);
1060+
1061+ /* Setup the linux hose data structure */
1062+ ppc4xx_acp_pciex_port_setup_hose(port);
1063+}
1064+
1065+#endif /* CONFIG_ACP */
1066+
1067 static void __init ppc4xx_probe_pciex_bridge(struct device_node *np)
1068 {
1069 struct ppc4xx_pciex_port *port;
1070@@ -2174,6 +3109,11 @@ static int __init ppc4xx_pci_find_bridges(void)
1071
1072 pci_add_flags(PCI_ENABLE_PROC_DOMAINS | PCI_COMPAT_DOMAIN_0);
1073
1074+#if defined(CONFIG_ACP)
1075+ for_each_compatible_node(np, NULL, "lsi,plb-pciex")
1076+ ppc4xx_probe_acp_pciex_bridge(np);
1077+#endif
1078+
1079 #ifdef CONFIG_PPC4xx_PCI_EXPRESS
1080 for_each_compatible_node(np, NULL, "ibm,plb-pciex")
1081 ppc4xx_probe_pciex_bridge(np);
diff --git a/recipes-kernel/linux/linux-3.0.6/acp3448v2/0010-fix-typo-error-for-acp-pcie.patch b/recipes-kernel/linux/linux-3.0.6/acp3448v2/0010-fix-typo-error-for-acp-pcie.patch
new file mode 100644
index 0000000..b7f4d33
--- /dev/null
+++ b/recipes-kernel/linux/linux-3.0.6/acp3448v2/0010-fix-typo-error-for-acp-pcie.patch
@@ -0,0 +1,21 @@
1commit 57aaa696b09b81d3407ef0ce93315394405ef042
2Author: Jerry Pei <jerry.pei@enea.com>
3Date: Wed Sep 26 11:12:02 2012 +0800
4
5 fix typo error for acp pcie
6
7 Signed-off-by: Jerry Pei <jerry.pei@enea.com>
8
9diff --git a/arch/powerpc/sysdev/ppc4xx_pci.c b/arch/powerpc/sysdev/ppc4xx_pci.c
10index a4e1c46..278144e 100644
11--- a/arch/powerpc/sysdev/ppc4xx_pci.c
12+++ b/arch/powerpc/sysdev/ppc4xx_pci.c
13@@ -2373,7 +2373,7 @@ ppc4xx_configure_acp_pciex_PIMs(struct ppc4xx_pciex_port *port,
14 * For the address field we simply program an incrementing value
15 * to map consecutive pages
16 */
17- if (0 == acp_plx) {
18+ if (acp_plx) {
19 int i;
20
21 for (i = 0; i < 8; i++) {
diff --git a/recipes-kernel/linux/linux-3.0.6/acp3448v2/0011-fix-compiler.h-__attribute_const__-redefined-problem.patch b/recipes-kernel/linux/linux-3.0.6/acp3448v2/0011-fix-compiler.h-__attribute_const__-redefined-problem.patch
new file mode 100644
index 0000000..7ecb907
--- /dev/null
+++ b/recipes-kernel/linux/linux-3.0.6/acp3448v2/0011-fix-compiler.h-__attribute_const__-redefined-problem.patch
@@ -0,0 +1,26 @@
1From efbd09c38d2060b045f2e897531cde94c7693c63 Mon Sep 17 00:00:00 2001
2From: Yuanyuan Liu <yuanyuan.liu@enea.com>
3Date: Mon, 26 Nov 2012 04:30:03 +0100
4Subject: [PATCH] fix compiler.h __attribute_const__ redefined problem
5
6---
7 tools/perf/util/include/linux/compiler.h | 2 ++
8 1 files changed, 2 insertions(+), 0 deletions(-)
9
10diff --git a/tools/perf/util/include/linux/compiler.h b/tools/perf/util/include/linux/compiler.h
11index 791f9dd..547628e 100644
12--- a/tools/perf/util/include/linux/compiler.h
13+++ b/tools/perf/util/include/linux/compiler.h
14@@ -5,7 +5,9 @@
15 #define __always_inline inline
16 #endif
17 #define __user
18+#ifndef __attribute_const__
19 #define __attribute_const__
20+#endif
21
22 #define __used __attribute__((__unused__))
23
24--
251.7.5.4
26
diff --git a/recipes-kernel/linux/linux-3.0.6/acp3448v2/defconfig b/recipes-kernel/linux/linux-3.0.6/acp3448v2/defconfig
new file mode 100644
index 0000000..db18b58
--- /dev/null
+++ b/recipes-kernel/linux/linux-3.0.6/acp3448v2/defconfig
@@ -0,0 +1,1862 @@
1#
2# Automatically generated file; DO NOT EDIT.
3# Linux/powerpc 3.1.0-rc9 Kernel Configuration
4#
5# CONFIG_PPC64 is not set
6
7#
8# Processor support
9#
10# CONFIG_PPC_BOOK3S_32 is not set
11# CONFIG_PPC_85xx is not set
12# CONFIG_PPC_8xx is not set
13# CONFIG_40x is not set
14CONFIG_44x=y
15# CONFIG_E200 is not set
16CONFIG_PPC_FPU=y
17CONFIG_4xx=y
18CONFIG_BOOKE=y
19CONFIG_PTE_64BIT=y
20CONFIG_PHYS_64BIT=y
21CONFIG_PPC_MMU_NOHASH=y
22CONFIG_PPC_MMU_NOHASH_32=y
23# CONFIG_PPC_MM_SLICES is not set
24CONFIG_SMP=y
25CONFIG_NR_CPUS=4
26# CONFIG_NOT_COHERENT_CACHE is not set
27CONFIG_PPC32=y
28CONFIG_32BIT=y
29CONFIG_WORD_SIZE=32
30CONFIG_ARCH_PHYS_ADDR_T_64BIT=y
31CONFIG_ARCH_DMA_ADDR_T_64BIT=y
32CONFIG_MMU=y
33CONFIG_GENERIC_CMOS_UPDATE=y
34CONFIG_GENERIC_TIME_VSYSCALL=y
35CONFIG_GENERIC_CLOCKEVENTS=y
36# CONFIG_HAVE_SETUP_PER_CPU_AREA is not set
37# CONFIG_NEED_PER_CPU_EMBED_FIRST_CHUNK is not set
38CONFIG_NR_IRQS=512
39CONFIG_STACKTRACE_SUPPORT=y
40CONFIG_HAVE_LATENCYTOP_SUPPORT=y
41CONFIG_TRACE_IRQFLAGS_SUPPORT=y
42CONFIG_LOCKDEP_SUPPORT=y
43CONFIG_RWSEM_XCHGADD_ALGORITHM=y
44CONFIG_GENERIC_LOCKBREAK=y
45CONFIG_ARCH_HAS_ILOG2_U32=y
46CONFIG_GENERIC_HWEIGHT=y
47CONFIG_GENERIC_GPIO=y
48# CONFIG_ARCH_NO_VIRT_TO_BUS is not set
49CONFIG_PPC=y
50CONFIG_EARLY_PRINTK=y
51CONFIG_GENERIC_NVRAM=y
52CONFIG_SCHED_OMIT_FRAME_POINTER=y
53CONFIG_ARCH_MAY_HAVE_PC_FDC=y
54CONFIG_PPC_OF=y
55CONFIG_PPC_UDBG_16550=y
56CONFIG_GENERIC_TBSYNC=y
57CONFIG_AUDIT_ARCH=y
58CONFIG_GENERIC_BUG=y
59# CONFIG_EPAPR_BOOT is not set
60# CONFIG_DEFAULT_UIMAGE is not set
61CONFIG_ARCH_HIBERNATION_POSSIBLE=y
62CONFIG_ARCH_SUSPEND_POSSIBLE=y
63CONFIG_PPC_DCR_NATIVE=y
64# CONFIG_PPC_DCR_MMIO is not set
65CONFIG_PPC_DCR=y
66CONFIG_ARCH_SUPPORTS_DEBUG_PAGEALLOC=y
67CONFIG_PPC_ADV_DEBUG_REGS=y
68CONFIG_PPC_ADV_DEBUG_IACS=4
69CONFIG_PPC_ADV_DEBUG_DACS=2
70CONFIG_PPC_ADV_DEBUG_DVCS=2
71CONFIG_PPC_ADV_DEBUG_DAC_RANGE=y
72CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
73CONFIG_HAVE_IRQ_WORK=y
74
75#
76# General setup
77#
78CONFIG_EXPERIMENTAL=y
79CONFIG_INIT_ENV_ARG_LIMIT=32
80CONFIG_CROSS_COMPILE="powerpc-linux-gnu-"
81CONFIG_LOCALVERSION=""
82CONFIG_LOCALVERSION_AUTO=y
83CONFIG_DEFAULT_HOSTNAME="el-paso"
84CONFIG_SWAP=y
85CONFIG_SYSVIPC=y
86CONFIG_SYSVIPC_SYSCTL=y
87CONFIG_POSIX_MQUEUE=y
88CONFIG_POSIX_MQUEUE_SYSCTL=y
89# CONFIG_BSD_PROCESS_ACCT is not set
90# CONFIG_FHANDLE is not set
91# CONFIG_TASKSTATS is not set
92# CONFIG_AUDIT is not set
93CONFIG_HAVE_GENERIC_HARDIRQS=y
94
95#
96# IRQ subsystem
97#
98CONFIG_GENERIC_HARDIRQS=y
99CONFIG_HAVE_SPARSE_IRQ=y
100CONFIG_GENERIC_IRQ_SHOW=y
101CONFIG_GENERIC_IRQ_SHOW_LEVEL=y
102CONFIG_SPARSE_IRQ=y
103
104#
105# RCU Subsystem
106#
107CONFIG_TREE_PREEMPT_RCU=y
108CONFIG_PREEMPT_RCU=y
109# CONFIG_RCU_TRACE is not set
110CONFIG_RCU_FANOUT=32
111# CONFIG_RCU_FANOUT_EXACT is not set
112# CONFIG_TREE_RCU_TRACE is not set
113# CONFIG_RCU_BOOST is not set
114CONFIG_IKCONFIG=m
115CONFIG_IKCONFIG_PROC=y
116CONFIG_LOG_BUF_SHIFT=14
117# CONFIG_CGROUPS is not set
118# CONFIG_NAMESPACES is not set
119# CONFIG_SCHED_AUTOGROUP is not set
120# CONFIG_SYSFS_DEPRECATED is not set
121# CONFIG_SYSFS_DEPRECATED_V2 is not set
122# CONFIG_RELAY is not set
123CONFIG_BLK_DEV_INITRD=y
124CONFIG_INITRAMFS_SOURCE=""
125CONFIG_RD_GZIP=y
126CONFIG_DECOMPRESS_GZIP=y
127# CONFIG_CC_OPTIMIZE_FOR_SIZE is not set
128CONFIG_SYSCTL=y
129CONFIG_ANON_INODES=y
130CONFIG_EXPERT=y
131CONFIG_SYSCTL_SYSCALL=y
132CONFIG_KALLSYMS=y
133# CONFIG_KALLSYMS_ALL is not set
134CONFIG_HOTPLUG=y
135CONFIG_PRINTK=y
136CONFIG_BUG=y
137CONFIG_ELF_CORE=y
138CONFIG_BASE_FULL=y
139CONFIG_FUTEX=y
140CONFIG_EPOLL=y
141CONFIG_SIGNALFD=y
142CONFIG_TIMERFD=y
143CONFIG_EVENTFD=y
144CONFIG_SHMEM=y
145CONFIG_AIO=y
146CONFIG_EMBEDDED=y
147CONFIG_HAVE_PERF_EVENTS=y
148
149#
150# Kernel Performance Events And Counters
151#
152# CONFIG_PERF_EVENTS is not set
153# CONFIG_PERF_COUNTERS is not set
154CONFIG_VM_EVENT_COUNTERS=y
155CONFIG_PCI_QUIRKS=y
156CONFIG_SLUB_DEBUG=y
157CONFIG_COMPAT_BRK=y
158# CONFIG_SLAB is not set
159CONFIG_SLUB=y
160# CONFIG_SLOB is not set
161CONFIG_PROFILING=y
162CONFIG_OPROFILE=m
163CONFIG_HAVE_OPROFILE=y
164# CONFIG_KPROBES is not set
165# CONFIG_JUMP_LABEL is not set
166CONFIG_HAVE_EFFICIENT_UNALIGNED_ACCESS=y
167CONFIG_HAVE_IOREMAP_PROT=y
168CONFIG_HAVE_KPROBES=y
169CONFIG_HAVE_KRETPROBES=y
170CONFIG_HAVE_ARCH_TRACEHOOK=y
171CONFIG_HAVE_DMA_ATTRS=y
172CONFIG_USE_GENERIC_SMP_HELPERS=y
173CONFIG_HAVE_REGS_AND_STACK_ACCESS_API=y
174CONFIG_HAVE_DMA_API_DEBUG=y
175CONFIG_HAVE_ARCH_JUMP_LABEL=y
176CONFIG_HAVE_RCU_TABLE_FREE=y
177CONFIG_ARCH_HAVE_NMI_SAFE_CMPXCHG=y
178
179#
180# GCOV-based kernel profiling
181#
182# CONFIG_GCOV_KERNEL is not set
183# CONFIG_HAVE_GENERIC_DMA_COHERENT is not set
184CONFIG_SLABINFO=y
185CONFIG_RT_MUTEXES=y
186CONFIG_BASE_SMALL=0
187CONFIG_MODULES=y
188CONFIG_MODULE_FORCE_LOAD=y
189CONFIG_MODULE_UNLOAD=y
190CONFIG_MODULE_FORCE_UNLOAD=y
191CONFIG_MODVERSIONS=y
192CONFIG_MODULE_SRCVERSION_ALL=y
193CONFIG_STOP_MACHINE=y
194CONFIG_BLOCK=y
195CONFIG_LBDAF=y
196# CONFIG_BLK_DEV_BSG is not set
197# CONFIG_BLK_DEV_BSGLIB is not set
198# CONFIG_BLK_DEV_INTEGRITY is not set
199
200#
201# IO Schedulers
202#
203CONFIG_IOSCHED_NOOP=y
204CONFIG_IOSCHED_DEADLINE=y
205CONFIG_IOSCHED_CFQ=y
206# CONFIG_DEFAULT_DEADLINE is not set
207CONFIG_DEFAULT_CFQ=y
208# CONFIG_DEFAULT_NOOP is not set
209CONFIG_DEFAULT_IOSCHED="cfq"
210# CONFIG_INLINE_SPIN_TRYLOCK is not set
211# CONFIG_INLINE_SPIN_TRYLOCK_BH is not set
212# CONFIG_INLINE_SPIN_LOCK is not set
213# CONFIG_INLINE_SPIN_LOCK_BH is not set
214# CONFIG_INLINE_SPIN_LOCK_IRQ is not set
215# CONFIG_INLINE_SPIN_LOCK_IRQSAVE is not set
216# CONFIG_INLINE_SPIN_UNLOCK is not set
217# CONFIG_INLINE_SPIN_UNLOCK_BH is not set
218# CONFIG_INLINE_SPIN_UNLOCK_IRQ is not set
219# CONFIG_INLINE_SPIN_UNLOCK_IRQRESTORE is not set
220# CONFIG_INLINE_READ_TRYLOCK is not set
221# CONFIG_INLINE_READ_LOCK is not set
222# CONFIG_INLINE_READ_LOCK_BH is not set
223# CONFIG_INLINE_READ_LOCK_IRQ is not set
224# CONFIG_INLINE_READ_LOCK_IRQSAVE is not set
225# CONFIG_INLINE_READ_UNLOCK is not set
226# CONFIG_INLINE_READ_UNLOCK_BH is not set
227# CONFIG_INLINE_READ_UNLOCK_IRQ is not set
228# CONFIG_INLINE_READ_UNLOCK_IRQRESTORE is not set
229# CONFIG_INLINE_WRITE_TRYLOCK is not set
230# CONFIG_INLINE_WRITE_LOCK is not set
231# CONFIG_INLINE_WRITE_LOCK_BH is not set
232# CONFIG_INLINE_WRITE_LOCK_IRQ is not set
233# CONFIG_INLINE_WRITE_LOCK_IRQSAVE is not set
234# CONFIG_INLINE_WRITE_UNLOCK is not set
235# CONFIG_INLINE_WRITE_UNLOCK_BH is not set
236# CONFIG_INLINE_WRITE_UNLOCK_IRQ is not set
237# CONFIG_INLINE_WRITE_UNLOCK_IRQRESTORE is not set
238CONFIG_MUTEX_SPIN_ON_OWNER=y
239CONFIG_FREEZER=y
240CONFIG_PPC4xx_PCI_EXPRESS=y
241# CONFIG_PPC4xx_MSI is not set
242CONFIG_PPC_MSI_BITMAP=y
243# CONFIG_PPC_XICS is not set
244# CONFIG_PPC_ICP_NATIVE is not set
245# CONFIG_PPC_ICP_HV is not set
246# CONFIG_PPC_ICS_RTAS is not set
247
248#
249# Platform support
250#
251# CONFIG_PPC_CELL is not set
252# CONFIG_PPC_CELL_NATIVE is not set
253# CONFIG_PQ2ADS is not set
254CONFIG_PPC_47x=y
255# CONFIG_BAMBOO is not set
256# CONFIG_BLUESTONE is not set
257# CONFIG_EBONY is not set
258# CONFIG_SAM440EP is not set
259# CONFIG_SEQUOIA is not set
260# CONFIG_TAISHAN is not set
261# CONFIG_KATMAI is not set
262# CONFIG_RAINIER is not set
263# CONFIG_WARP is not set
264# CONFIG_ARCHES is not set
265# CONFIG_CANYONLANDS is not set
266# CONFIG_GLACIER is not set
267# CONFIG_REDWOOD is not set
268# CONFIG_EIGER is not set
269# CONFIG_YOSEMITE is not set
270# CONFIG_ISS4xx is not set
271# CONFIG_ICON is not set
272CONFIG_ACP=y
273# CONFIG_ACPISS is not set
274# CONFIG_ACP_X1V1 is not set
275# CONFIG_XILINX_VIRTEX440_GENERIC_BOARD is not set
276# CONFIG_PPC44x_SIMPLE is not set
277CONFIG_PPC4xx_GPIO=y
278CONFIG_440GP=y
279# CONFIG_PPC_WSP is not set
280# CONFIG_KVM_GUEST is not set
281# CONFIG_IPIC is not set
282CONFIG_MPIC=y
283# CONFIG_PPC_EPAPR_HV_PIC is not set
284# CONFIG_MPIC_WEIRD is not set
285# CONFIG_PPC_I8259 is not set
286# CONFIG_PPC_RTAS is not set
287# CONFIG_MMIO_NVRAM is not set
288# CONFIG_MPIC_U3_HT_IRQS is not set
289# CONFIG_PPC_MPC106 is not set
290# CONFIG_PPC_970_NAP is not set
291# CONFIG_PPC_P7_NAP is not set
292
293#
294# CPU Frequency scaling
295#
296# CONFIG_CPU_FREQ is not set
297# CONFIG_FSL_ULI1575 is not set
298CONFIG_SIMPLE_GPIO=y
299
300#
301# Kernel options
302#
303CONFIG_HIGHMEM=y
304CONFIG_TICK_ONESHOT=y
305# CONFIG_NO_HZ is not set
306CONFIG_HIGH_RES_TIMERS=y
307CONFIG_GENERIC_CLOCKEVENTS_BUILD=y
308CONFIG_HZ_100=y
309# CONFIG_HZ_250 is not set
310# CONFIG_HZ_300 is not set
311# CONFIG_HZ_1000 is not set
312CONFIG_HZ=100
313CONFIG_SCHED_HRTICK=y
314# CONFIG_PREEMPT_NONE is not set
315# CONFIG_PREEMPT_VOLUNTARY is not set
316CONFIG_PREEMPT=y
317CONFIG_PREEMPT_COUNT=y
318CONFIG_BINFMT_ELF=y
319# CONFIG_CORE_DUMP_DEFAULT_ELF_HEADERS is not set
320# CONFIG_HAVE_AOUT is not set
321# CONFIG_BINFMT_MISC is not set
322# CONFIG_MATH_EMULATION is not set
323# CONFIG_IOMMU_HELPER is not set
324# CONFIG_SWIOTLB is not set
325CONFIG_HOTPLUG_CPU=y
326CONFIG_ARCH_CPU_PROBE_RELEASE=y
327CONFIG_ARCH_ENABLE_MEMORY_HOTPLUG=y
328CONFIG_ARCH_HAS_WALK_MEMORY=y
329CONFIG_ARCH_ENABLE_MEMORY_HOTREMOVE=y
330# CONFIG_IRQ_ALL_CPUS is not set
331CONFIG_MAX_ACTIVE_REGIONS=32
332CONFIG_ARCH_FLATMEM_ENABLE=y
333CONFIG_ARCH_POPULATES_NODE_MAP=y
334CONFIG_SELECT_MEMORY_MODEL=y
335CONFIG_FLATMEM_MANUAL=y
336CONFIG_FLATMEM=y
337CONFIG_FLAT_NODE_MEM_MAP=y
338CONFIG_HAVE_MEMBLOCK=y
339CONFIG_PAGEFLAGS_EXTENDED=y
340CONFIG_SPLIT_PTLOCK_CPUS=4
341# CONFIG_COMPACTION is not set
342CONFIG_MIGRATION=y
343CONFIG_PHYS_ADDR_T_64BIT=y
344CONFIG_ZONE_DMA_FLAG=1
345CONFIG_BOUNCE=y
346CONFIG_VIRT_TO_BUS=y
347# CONFIG_KSM is not set
348CONFIG_DEFAULT_MMAP_MIN_ADDR=4096
349# CONFIG_CLEANCACHE is not set
350CONFIG_STDBINUTILS=y
351CONFIG_PPC_4K_PAGES=y
352# CONFIG_PPC_16K_PAGES is not set
353# CONFIG_PPC_64K_PAGES is not set
354CONFIG_FORCE_MAX_ZONEORDER=11
355# CONFIG_CMDLINE_BOOL is not set
356CONFIG_EXTRA_TARGETS=""
357CONFIG_SUSPEND=y
358CONFIG_SUSPEND_FREEZER=y
359# CONFIG_HIBERNATION is not set
360CONFIG_PM_SLEEP=y
361CONFIG_PM_SLEEP_SMP=y
362# CONFIG_PM_RUNTIME is not set
363CONFIG_PM=y
364# CONFIG_PM_DEBUG is not set
365CONFIG_SECCOMP=y
366CONFIG_ISA_DMA_API=y
367
368#
369# Bus options
370#
371CONFIG_ZONE_DMA=y
372# CONFIG_NEED_DMA_MAP_STATE is not set
373CONFIG_NEED_SG_DMA_LENGTH=y
374CONFIG_GENERIC_ISA_DMA=y
375CONFIG_PPC_INDIRECT_PCI=y
376CONFIG_PPC4xx_CPM=y
377CONFIG_4xx_SOC=y
378CONFIG_PPC_PCI_CHOICE=y
379CONFIG_PCI=y
380CONFIG_PCI_DOMAINS=y
381CONFIG_PCI_SYSCALL=y
382CONFIG_PCIEPORTBUS=y
383# CONFIG_PCIEAER is not set
384CONFIG_PCIEASPM=y
385# CONFIG_PCIEASPM_DEBUG is not set
386CONFIG_ARCH_SUPPORTS_MSI=y
387CONFIG_PCI_MSI=y
388# CONFIG_PCI_DEBUG is not set
389# CONFIG_PCI_STUB is not set
390# CONFIG_PCI_IOV is not set
391# CONFIG_PCCARD is not set
392# CONFIG_HOTPLUG_PCI is not set
393CONFIG_HAS_RAPIDIO=y
394CONFIG_RAPIDIO=y
395# CONFIG_FSL_RIO is not set
396CONFIG_RAPIDIO_DISC_TIMEOUT=30
397# CONFIG_RAPIDIO_ENABLE_RX_TX_PORTS is not set
398# CONFIG_RAPIDIO_ACP is not set
399CONFIG_RAPIDIO_TSI57X=y
400CONFIG_RAPIDIO_CPS_XX=y
401CONFIG_RAPIDIO_TSI568=y
402# CONFIG_RAPIDIO_CPS_GEN2 is not set
403CONFIG_RAPIDIO_TSI500=y
404CONFIG_RAPIDIO_DEBUG=y
405
406#
407# Advanced setup
408#
409CONFIG_ADVANCED_OPTIONS=y
410# CONFIG_LOWMEM_SIZE_BOOL is not set
411CONFIG_LOWMEM_SIZE=0x30000000
412CONFIG_RELOCATABLE=y
413CONFIG_PAGE_OFFSET_BOOL=y
414CONFIG_PAGE_OFFSET=0xc0000000
415CONFIG_KERNEL_START_BOOL=y
416CONFIG_KERNEL_START=0xc0400000
417CONFIG_PHYSICAL_START_BOOL=y
418CONFIG_PHYSICAL_START=0x00400000
419CONFIG_TASK_SIZE_BOOL=y
420CONFIG_TASK_SIZE=0xc0000000
421CONFIG_NET=y
422
423#
424# Networking options
425#
426CONFIG_PACKET=y
427CONFIG_UNIX=y
428CONFIG_XFRM=y
429CONFIG_XFRM_USER=y
430CONFIG_XFRM_SUB_POLICY=y
431CONFIG_XFRM_MIGRATE=y
432CONFIG_XFRM_STATISTICS=y
433CONFIG_XFRM_IPCOMP=y
434CONFIG_NET_KEY=y
435# CONFIG_NET_KEY_MIGRATE is not set
436CONFIG_INET=y
437CONFIG_IP_MULTICAST=y
438# CONFIG_IP_ADVANCED_ROUTER is not set
439CONFIG_IP_PNP=y
440CONFIG_IP_PNP_DHCP=y
441CONFIG_IP_PNP_BOOTP=y
442CONFIG_IP_PNP_RARP=y
443CONFIG_NET_IPIP=y
444# CONFIG_NET_IPGRE_DEMUX is not set
445# CONFIG_IP_MROUTE is not set
446# CONFIG_ARPD is not set
447CONFIG_SYN_COOKIES=y
448CONFIG_INET_AH=y
449CONFIG_INET_ESP=y
450CONFIG_INET_IPCOMP=y
451CONFIG_INET_XFRM_TUNNEL=y
452CONFIG_INET_TUNNEL=y
453CONFIG_INET_XFRM_MODE_TRANSPORT=y
454CONFIG_INET_XFRM_MODE_TUNNEL=y
455CONFIG_INET_XFRM_MODE_BEET=y
456# CONFIG_INET_LRO is not set
457CONFIG_INET_DIAG=y
458CONFIG_INET_TCP_DIAG=y
459# CONFIG_TCP_CONG_ADVANCED is not set
460CONFIG_TCP_CONG_CUBIC=y
461CONFIG_DEFAULT_TCP_CONG="cubic"
462# CONFIG_TCP_MD5SIG is not set
463CONFIG_IPV6=y
464# CONFIG_IPV6_PRIVACY is not set
465# CONFIG_IPV6_ROUTER_PREF is not set
466# CONFIG_IPV6_OPTIMISTIC_DAD is not set
467CONFIG_INET6_AH=y
468CONFIG_INET6_ESP=y
469CONFIG_INET6_IPCOMP=y
470CONFIG_IPV6_MIP6=y
471CONFIG_INET6_XFRM_TUNNEL=y
472CONFIG_INET6_TUNNEL=y
473CONFIG_INET6_XFRM_MODE_TRANSPORT=y
474CONFIG_INET6_XFRM_MODE_TUNNEL=y
475CONFIG_INET6_XFRM_MODE_BEET=y
476# CONFIG_INET6_XFRM_MODE_ROUTEOPTIMIZATION is not set
477CONFIG_IPV6_SIT=y
478# CONFIG_IPV6_SIT_6RD is not set
479CONFIG_IPV6_NDISC_NODETYPE=y
480CONFIG_IPV6_TUNNEL=y
481# CONFIG_IPV6_MULTIPLE_TABLES is not set
482# CONFIG_IPV6_MROUTE is not set
483CONFIG_NETWORK_SECMARK=y
484# CONFIG_NETWORK_PHY_TIMESTAMPING is not set
485CONFIG_NETFILTER=y
486# CONFIG_NETFILTER_DEBUG is not set
487CONFIG_NETFILTER_ADVANCED=y
488
489#
490# Core Netfilter Configuration
491#
492# CONFIG_NETFILTER_NETLINK_QUEUE is not set
493# CONFIG_NETFILTER_NETLINK_LOG is not set
494# CONFIG_NF_CONNTRACK is not set
495# CONFIG_NETFILTER_XTABLES is not set
496# CONFIG_IP_VS is not set
497
498#
499# IP: Netfilter Configuration
500#
501# CONFIG_NF_DEFRAG_IPV4 is not set
502# CONFIG_IP_NF_QUEUE is not set
503# CONFIG_IP_NF_IPTABLES is not set
504# CONFIG_IP_NF_ARPTABLES is not set
505
506#
507# IPv6: Netfilter Configuration
508#
509# CONFIG_NF_DEFRAG_IPV6 is not set
510# CONFIG_IP6_NF_QUEUE is not set
511# CONFIG_IP6_NF_IPTABLES is not set
512# CONFIG_IP_DCCP is not set
513# CONFIG_IP_SCTP is not set
514# CONFIG_RDS is not set
515# CONFIG_TIPC is not set
516# CONFIG_ATM is not set
517# CONFIG_L2TP is not set
518# CONFIG_BRIDGE is not set
519# CONFIG_NET_DSA is not set
520CONFIG_VLAN_8021Q=y
521# CONFIG_VLAN_8021Q_GVRP is not set
522# CONFIG_DECNET is not set
523# CONFIG_LLC2 is not set
524# CONFIG_IPX is not set
525# CONFIG_ATALK is not set
526# CONFIG_X25 is not set
527# CONFIG_LAPB is not set
528# CONFIG_ECONET is not set
529# CONFIG_WAN_ROUTER is not set
530# CONFIG_PHONET is not set
531# CONFIG_IEEE802154 is not set
532# CONFIG_NET_SCHED is not set
533# CONFIG_DCB is not set
534CONFIG_DNS_RESOLVER=y
535# CONFIG_BATMAN_ADV is not set
536CONFIG_RPS=y
537CONFIG_RFS_ACCEL=y
538CONFIG_XPS=y
539
540#
541# Network testing
542#
543# CONFIG_NET_PKTGEN is not set
544# CONFIG_HAMRADIO is not set
545# CONFIG_CAN is not set
546# CONFIG_IRDA is not set
547# CONFIG_BT is not set
548# CONFIG_AF_RXRPC is not set
549CONFIG_WIRELESS=y
550CONFIG_WIRELESS_EXT=y
551CONFIG_WEXT_CORE=y
552CONFIG_WEXT_PROC=y
553CONFIG_WEXT_PRIV=y
554# CONFIG_CFG80211 is not set
555CONFIG_WIRELESS_EXT_SYSFS=y
556# CONFIG_LIB80211 is not set
557
558#
559# CFG80211 needs to be enabled for MAC80211
560#
561# CONFIG_WIMAX is not set
562# CONFIG_RFKILL is not set
563# CONFIG_NET_9P is not set
564# CONFIG_CAIF is not set
565# CONFIG_CEPH_LIB is not set
566# CONFIG_NFC is not set
567
568#
569# Device Drivers
570#
571
572#
573# Generic Driver Options
574#
575CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug"
576# CONFIG_DEVTMPFS is not set
577CONFIG_STANDALONE=y
578CONFIG_PREVENT_FIRMWARE_BUILD=y
579CONFIG_FW_LOADER=y
580CONFIG_FIRMWARE_IN_KERNEL=y
581CONFIG_EXTRA_FIRMWARE=""
582CONFIG_DEBUG_DRIVER=y
583# CONFIG_DEBUG_DEVRES is not set
584# CONFIG_SYS_HYPERVISOR is not set
585# CONFIG_CONNECTOR is not set
586CONFIG_MTD=y
587# CONFIG_MTD_DEBUG is not set
588# CONFIG_MTD_TESTS is not set
589# CONFIG_MTD_REDBOOT_PARTS is not set
590CONFIG_MTD_CMDLINE_PARTS=y
591CONFIG_MTD_OF_PARTS=y
592# CONFIG_MTD_AR7_PARTS is not set
593
594#
595# User Modules And Translation Layers
596#
597CONFIG_MTD_CHAR=y
598CONFIG_MTD_BLKDEVS=y
599CONFIG_MTD_BLOCK=y
600# CONFIG_FTL is not set
601# CONFIG_NFTL is not set
602# CONFIG_INFTL is not set
603# CONFIG_RFD_FTL is not set
604# CONFIG_SSFDC is not set
605# CONFIG_SM_FTL is not set
606# CONFIG_MTD_OOPS is not set
607# CONFIG_MTD_SWAP is not set
608
609#
610# RAM/ROM/Flash chip drivers
611#
612# CONFIG_MTD_CFI is not set
613CONFIG_MTD_JEDECPROBE=y
614CONFIG_MTD_GEN_PROBE=y
615# CONFIG_MTD_CFI_ADV_OPTIONS is not set
616CONFIG_MTD_MAP_BANK_WIDTH_1=y
617CONFIG_MTD_MAP_BANK_WIDTH_2=y
618CONFIG_MTD_MAP_BANK_WIDTH_4=y
619# CONFIG_MTD_MAP_BANK_WIDTH_8 is not set
620# CONFIG_MTD_MAP_BANK_WIDTH_16 is not set
621# CONFIG_MTD_MAP_BANK_WIDTH_32 is not set
622CONFIG_MTD_CFI_I1=y
623CONFIG_MTD_CFI_I2=y
624# CONFIG_MTD_CFI_I4 is not set
625# CONFIG_MTD_CFI_I8 is not set
626# CONFIG_MTD_CFI_INTELEXT is not set
627CONFIG_MTD_CFI_AMDSTD=y
628# CONFIG_MTD_CFI_STAA is not set
629CONFIG_MTD_CFI_UTIL=y
630# CONFIG_MTD_RAM is not set
631# CONFIG_MTD_ROM is not set
632# CONFIG_MTD_ABSENT is not set
633
634#
635# Mapping drivers for chip access
636#
637# CONFIG_MTD_COMPLEX_MAPPINGS is not set
638# CONFIG_MTD_PHYSMAP is not set
639CONFIG_MTD_PHYSMAP_OF=y
640# CONFIG_MTD_INTEL_VR_NOR is not set
641# CONFIG_MTD_PLATRAM is not set
642
643#
644# Self-contained MTD device drivers
645#
646# CONFIG_MTD_PMC551 is not set
647# CONFIG_MTD_SLRAM is not set
648# CONFIG_MTD_PHRAM is not set
649# CONFIG_MTD_MTDRAM is not set
650# CONFIG_MTD_BLOCK2MTD is not set
651
652#
653# Disk-On-Chip Device Drivers
654#
655# CONFIG_MTD_DOC2000 is not set
656# CONFIG_MTD_DOC2001 is not set
657# CONFIG_MTD_DOC2001PLUS is not set
658CONFIG_MTD_NAND_ECC=y
659# CONFIG_MTD_NAND_ECC_SMC is not set
660CONFIG_MTD_NAND=y
661# CONFIG_MTD_NAND_VERIFY_WRITE is not set
662# CONFIG_MTD_NAND_ECC_BCH is not set
663# CONFIG_MTD_SM_COMMON is not set
664# CONFIG_MTD_NAND_MUSEUM_IDS is not set
665# CONFIG_MTD_NAND_DENALI is not set
666CONFIG_MTD_NAND_IDS=y
667# CONFIG_MTD_NAND_RICOH is not set
668# CONFIG_MTD_NAND_NDFC is not set
669# CONFIG_MTD_NAND_DISKONCHIP is not set
670# CONFIG_MTD_NAND_CAFE is not set
671# CONFIG_MTD_NAND_NANDSIM is not set
672CONFIG_MTD_NAND_PLATFORM=y
673# CONFIG_MTD_ALAUDA is not set
674# CONFIG_MTD_NAND_FSL_ELBC is not set
675# CONFIG_MTD_ONENAND is not set
676
677#
678# LPDDR flash memory drivers
679#
680# CONFIG_MTD_LPDDR is not set
681# CONFIG_MTD_UBI is not set
682CONFIG_DTC=y
683CONFIG_OF=y
684
685#
686# Device Tree and Open Firmware support
687#
688CONFIG_PROC_DEVICETREE=y
689CONFIG_OF_FLATTREE=y
690CONFIG_OF_EARLY_FLATTREE=y
691CONFIG_OF_DYNAMIC=y
692CONFIG_OF_ADDRESS=y
693CONFIG_OF_IRQ=y
694CONFIG_OF_DEVICE=y
695CONFIG_OF_GPIO=y
696CONFIG_OF_NET=y
697CONFIG_OF_PCI=y
698CONFIG_OF_PCI_IRQ=y
699# CONFIG_PARPORT is not set
700CONFIG_BLK_DEV=y
701# CONFIG_BLK_DEV_FD is not set
702# CONFIG_BLK_CPQ_DA is not set
703# CONFIG_BLK_CPQ_CISS_DA is not set
704# CONFIG_BLK_DEV_DAC960 is not set
705# CONFIG_BLK_DEV_UMEM is not set
706# CONFIG_BLK_DEV_COW_COMMON is not set
707# CONFIG_BLK_DEV_LOOP is not set
708
709#
710# DRBD disabled because PROC_FS, INET or CONNECTOR not selected
711#
712# CONFIG_BLK_DEV_NBD is not set
713# CONFIG_BLK_DEV_SX8 is not set
714CONFIG_BLK_DEV_UB=y
715CONFIG_BLK_DEV_RAM=y
716CONFIG_BLK_DEV_RAM_COUNT=16
717CONFIG_BLK_DEV_RAM_SIZE=35000
718# CONFIG_BLK_DEV_XIP is not set
719# CONFIG_BLK_DEV_ISS is not set
720# CONFIG_CDROM_PKTCDVD is not set
721# CONFIG_ATA_OVER_ETH is not set
722# CONFIG_XILINX_SYSACE is not set
723# CONFIG_BLK_DEV_HD is not set
724# CONFIG_BLK_DEV_RBD is not set
725# CONFIG_SENSORS_LIS3LV02D is not set
726CONFIG_MISC_DEVICES=y
727# CONFIG_PHANTOM is not set
728# CONFIG_INTEL_MID_PTI is not set
729# CONFIG_SGI_IOC4 is not set
730# CONFIG_TIFM_CORE is not set
731# CONFIG_ENCLOSURE_SERVICES is not set
732# CONFIG_HP_ILO is not set
733# CONFIG_PCH_PHUB is not set
734# CONFIG_C2PORT is not set
735
736#
737# EEPROM support
738#
739# CONFIG_EEPROM_93CX6 is not set
740# CONFIG_CB710_CORE is not set
741
742#
743# Texas Instruments shared transport line discipline
744#
745# CONFIG_TI_ST is not set
746CONFIG_HAVE_IDE=y
747# CONFIG_IDE is not set
748
749#
750# SCSI device support
751#
752CONFIG_SCSI_MOD=y
753# CONFIG_RAID_ATTRS is not set
754CONFIG_SCSI=y
755CONFIG_SCSI_DMA=y
756CONFIG_SCSI_TGT=y
757# CONFIG_SCSI_NETLINK is not set
758CONFIG_SCSI_PROC_FS=y
759
760#
761# SCSI support type (disk, tape, CD-ROM)
762#
763CONFIG_BLK_DEV_SD=y
764# CONFIG_CHR_DEV_ST is not set
765# CONFIG_CHR_DEV_OSST is not set
766# CONFIG_BLK_DEV_SR is not set
767# CONFIG_CHR_DEV_SG is not set
768# CONFIG_CHR_DEV_SCH is not set
769# CONFIG_SCSI_MULTI_LUN is not set
770CONFIG_SCSI_CONSTANTS=y
771# CONFIG_SCSI_LOGGING is not set
772# CONFIG_SCSI_SCAN_ASYNC is not set
773CONFIG_SCSI_WAIT_SCAN=m
774
775#
776# SCSI Transports
777#
778# CONFIG_SCSI_SPI_ATTRS is not set
779# CONFIG_SCSI_FC_ATTRS is not set
780# CONFIG_SCSI_ISCSI_ATTRS is not set
781# CONFIG_SCSI_SAS_ATTRS is not set
782# CONFIG_SCSI_SAS_LIBSAS is not set
783# CONFIG_SCSI_SRP_ATTRS is not set
784CONFIG_SCSI_LOWLEVEL=y
785# CONFIG_ISCSI_TCP is not set
786# CONFIG_ISCSI_BOOT_SYSFS is not set
787# CONFIG_SCSI_CXGB3_ISCSI is not set
788# CONFIG_SCSI_CXGB4_ISCSI is not set
789# CONFIG_SCSI_BNX2_ISCSI is not set
790# CONFIG_SCSI_BNX2X_FCOE is not set
791# CONFIG_BE2ISCSI is not set
792# CONFIG_BLK_DEV_3W_XXXX_RAID is not set
793# CONFIG_SCSI_HPSA is not set
794# CONFIG_SCSI_3W_9XXX is not set
795# CONFIG_SCSI_3W_SAS is not set
796# CONFIG_SCSI_ACARD is not set
797# CONFIG_SCSI_AACRAID is not set
798# CONFIG_SCSI_AIC7XXX is not set
799# CONFIG_SCSI_AIC7XXX_OLD is not set
800# CONFIG_SCSI_AIC79XX is not set
801# CONFIG_SCSI_AIC94XX is not set
802# CONFIG_SCSI_MVSAS is not set
803# CONFIG_SCSI_DPT_I2O is not set
804# CONFIG_SCSI_ADVANSYS is not set
805# CONFIG_SCSI_ARCMSR is not set
806# CONFIG_MEGARAID_NEWGEN is not set
807# CONFIG_MEGARAID_LEGACY is not set
808# CONFIG_MEGARAID_SAS is not set
809# CONFIG_SCSI_MPT2SAS is not set
810# CONFIG_SCSI_HPTIOP is not set
811# CONFIG_SCSI_BUSLOGIC is not set
812# CONFIG_LIBFC is not set
813# CONFIG_LIBFCOE is not set
814# CONFIG_FCOE is not set
815# CONFIG_SCSI_DMX3191D is not set
816# CONFIG_SCSI_EATA is not set
817# CONFIG_SCSI_FUTURE_DOMAIN is not set
818# CONFIG_SCSI_GDTH is not set
819# CONFIG_SCSI_IPS is not set
820# CONFIG_SCSI_INITIO is not set
821# CONFIG_SCSI_INIA100 is not set
822# CONFIG_SCSI_STEX is not set
823# CONFIG_SCSI_SYM53C8XX_2 is not set
824# CONFIG_SCSI_QLOGIC_1280 is not set
825# CONFIG_SCSI_QLA_FC is not set
826# CONFIG_SCSI_QLA_ISCSI is not set
827# CONFIG_SCSI_LPFC is not set
828# CONFIG_SCSI_DC395x is not set
829# CONFIG_SCSI_DC390T is not set
830# CONFIG_SCSI_NSP32 is not set
831# CONFIG_SCSI_DEBUG is not set
832# CONFIG_SCSI_PMCRAID is not set
833# CONFIG_SCSI_PM8001 is not set
834# CONFIG_SCSI_SRP is not set
835# CONFIG_SCSI_BFA_FC is not set
836# CONFIG_SCSI_DH is not set
837# CONFIG_SCSI_OSD_INITIATOR is not set
838# CONFIG_ATA is not set
839CONFIG_MD=y
840CONFIG_BLK_DEV_MD=y
841CONFIG_MD_AUTODETECT=y
842CONFIG_MD_LINEAR=y
843CONFIG_MD_RAID0=y
844CONFIG_MD_RAID1=y
845CONFIG_MD_RAID10=y
846# CONFIG_MD_RAID456 is not set
847CONFIG_MD_MULTIPATH=y
848CONFIG_MD_FAULTY=y
849CONFIG_BLK_DEV_DM=y
850# CONFIG_DM_DEBUG is not set
851CONFIG_DM_CRYPT=y
852CONFIG_DM_SNAPSHOT=y
853CONFIG_DM_MIRROR=y
854# CONFIG_DM_RAID is not set
855# CONFIG_DM_LOG_USERSPACE is not set
856CONFIG_DM_ZERO=y
857# CONFIG_DM_MULTIPATH is not set
858# CONFIG_DM_DELAY is not set
859# CONFIG_DM_UEVENT is not set
860# CONFIG_DM_FLAKEY is not set
861# CONFIG_TARGET_CORE is not set
862# CONFIG_FUSION is not set
863
864#
865# IEEE 1394 (FireWire) support
866#
867# CONFIG_FIREWIRE is not set
868# CONFIG_FIREWIRE_NOSY is not set
869# CONFIG_I2O is not set
870# CONFIG_MACINTOSH_DRIVERS is not set
871CONFIG_NETDEVICES=y
872CONFIG_DUMMY=y
873# CONFIG_BONDING is not set
874# CONFIG_MACVLAN is not set
875# CONFIG_EQUALIZER is not set
876CONFIG_TUN=y
877# CONFIG_VETH is not set
878# CONFIG_ARCNET is not set
879CONFIG_MII=y
880# CONFIG_PHYLIB is not set
881CONFIG_NET_ETHERNET=y
882# CONFIG_HAPPYMEAL is not set
883# CONFIG_SUNGEM is not set
884# CONFIG_CASSINI is not set
885# CONFIG_NET_VENDOR_3COM is not set
886# CONFIG_ETHOC is not set
887# CONFIG_DNET is not set
888# CONFIG_NET_TULIP is not set
889# CONFIG_HP100 is not set
890# CONFIG_IBM_NEW_EMAC is not set
891CONFIG_IBM_NEW_EMAC_ZMII=y
892# CONFIG_IBM_NEW_EMAC_RGMII is not set
893# CONFIG_IBM_NEW_EMAC_TAH is not set
894# CONFIG_IBM_NEW_EMAC_EMAC4 is not set
895# CONFIG_IBM_NEW_EMAC_NO_FLOW_CTRL is not set
896# CONFIG_IBM_NEW_EMAC_MAL_CLR_ICINTSTAT is not set
897# CONFIG_IBM_NEW_EMAC_MAL_COMMON_ERR is not set
898# CONFIG_NET_PCI is not set
899# CONFIG_B44 is not set
900# CONFIG_KS8842 is not set
901# CONFIG_KS8851_MLL is not set
902# CONFIG_ATL2 is not set
903# CONFIG_XILINX_EMACLITE is not set
904CONFIG_NETDEV_1000=y
905# CONFIG_ACENIC is not set
906# CONFIG_DL2K is not set
907CONFIG_E1000=y
908CONFIG_E1000E=y
909# CONFIG_IP1000 is not set
910CONFIG_IGB=y
911CONFIG_IGBVF=y
912# CONFIG_NS83820 is not set
913# CONFIG_HAMACHI is not set
914# CONFIG_YELLOWFIN is not set
915# CONFIG_R8169 is not set
916# CONFIG_SIS190 is not set
917# CONFIG_SKGE is not set
918# CONFIG_SKY2 is not set
919# CONFIG_VIA_VELOCITY is not set
920# CONFIG_TIGON3 is not set
921# CONFIG_BNX2 is not set
922# CONFIG_CNIC is not set
923# CONFIG_MV643XX_ETH is not set
924# CONFIG_XILINX_LL_TEMAC is not set
925# CONFIG_QLA3XXX is not set
926# CONFIG_ATL1 is not set
927# CONFIG_ATL1E is not set
928# CONFIG_ATL1C is not set
929# CONFIG_JME is not set
930# CONFIG_STMMAC_ETH is not set
931# CONFIG_PCH_GBE is not set
932# CONFIG_NETDEV_10000 is not set
933# CONFIG_TR is not set
934CONFIG_WLAN=y
935# CONFIG_AIRO is not set
936# CONFIG_ATMEL is not set
937# CONFIG_PRISM54 is not set
938CONFIG_USB_ZD1201=y
939# CONFIG_HOSTAP is not set
940
941#
942# Enable WiMAX (Networking options) to see the WiMAX drivers
943#
944
945#
946# USB Network Adapters
947#
948# CONFIG_USB_CATC is not set
949# CONFIG_USB_KAWETH is not set
950# CONFIG_USB_PEGASUS is not set
951# CONFIG_USB_RTL8150 is not set
952# CONFIG_USB_USBNET is not set
953# CONFIG_USB_IPHETH is not set
954# CONFIG_WAN is not set
955
956#
957# CAIF transport drivers
958#
959# CONFIG_RIONET is not set
960# CONFIG_FDDI is not set
961# CONFIG_HIPPI is not set
962CONFIG_PPP=m
963CONFIG_PPP_MULTILINK=y
964CONFIG_PPP_FILTER=y
965CONFIG_PPP_ASYNC=m
966CONFIG_PPP_SYNC_TTY=m
967CONFIG_PPP_DEFLATE=m
968CONFIG_PPP_BSDCOMP=m
969# CONFIG_PPP_MPPE is not set
970CONFIG_PPPOE=m
971CONFIG_SLIP=m
972CONFIG_SLIP_COMPRESSED=y
973CONFIG_SLHC=m
974CONFIG_SLIP_SMART=y
975CONFIG_SLIP_MODE_SLIP6=y
976# CONFIG_NET_FC is not set
977CONFIG_NETCONSOLE=y
978CONFIG_NETPOLL=y
979CONFIG_NETPOLL_TRAP=y
980CONFIG_NET_POLL_CONTROLLER=y
981# CONFIG_VMXNET3 is not set
982# CONFIG_ISDN is not set
983# CONFIG_PHONE is not set
984
985#
986# Input device support
987#
988CONFIG_INPUT=y
989# CONFIG_INPUT_FF_MEMLESS is not set
990# CONFIG_INPUT_POLLDEV is not set
991# CONFIG_INPUT_SPARSEKMAP is not set
992
993#
994# Userland interfaces
995#
996CONFIG_INPUT_MOUSEDEV=y
997CONFIG_INPUT_MOUSEDEV_PSAUX=y
998CONFIG_INPUT_MOUSEDEV_SCREEN_X=1024
999CONFIG_INPUT_MOUSEDEV_SCREEN_Y=768
1000# CONFIG_INPUT_JOYDEV is not set
1001# CONFIG_INPUT_EVDEV is not set
1002# CONFIG_INPUT_EVBUG is not set
1003
1004#
1005# Input Device Drivers
1006#
1007# CONFIG_INPUT_KEYBOARD is not set
1008# CONFIG_INPUT_MOUSE is not set
1009# CONFIG_INPUT_JOYSTICK is not set
1010# CONFIG_INPUT_TABLET is not set
1011# CONFIG_INPUT_TOUCHSCREEN is not set
1012# CONFIG_INPUT_MISC is not set
1013
1014#
1015# Hardware I/O ports
1016#
1017CONFIG_SERIO=y
1018CONFIG_SERIO_I8042=y
1019CONFIG_SERIO_SERPORT=y
1020# CONFIG_SERIO_PCIPS2 is not set
1021CONFIG_SERIO_LIBPS2=y
1022# CONFIG_SERIO_RAW is not set
1023# CONFIG_SERIO_XILINX_XPS_PS2 is not set
1024# CONFIG_SERIO_ALTERA_PS2 is not set
1025# CONFIG_SERIO_PS2MULT is not set
1026# CONFIG_GAMEPORT is not set
1027
1028#
1029# Character devices
1030#
1031CONFIG_VT=y
1032CONFIG_CONSOLE_TRANSLATIONS=y
1033CONFIG_VT_CONSOLE=y
1034CONFIG_HW_CONSOLE=y
1035# CONFIG_VT_HW_CONSOLE_BINDING is not set
1036CONFIG_UNIX98_PTYS=y
1037# CONFIG_DEVPTS_MULTIPLE_INSTANCES is not set
1038CONFIG_LEGACY_PTYS=y
1039CONFIG_LEGACY_PTY_COUNT=20
1040# CONFIG_SERIAL_NONSTANDARD is not set
1041# CONFIG_NOZOMI is not set
1042CONFIG_N_GSM=y
1043# CONFIG_TRACE_SINK is not set
1044CONFIG_DEVKMEM=y
1045
1046#
1047# Serial drivers
1048#
1049# CONFIG_SERIAL_8250 is not set
1050
1051#
1052# Non-8250 serial port support
1053#
1054# CONFIG_SERIAL_MFD_HSU is not set
1055# CONFIG_SERIAL_UARTLITE is not set
1056CONFIG_SERIAL_CORE=y
1057CONFIG_SERIAL_CORE_CONSOLE=y
1058# CONFIG_SERIAL_JSM is not set
1059# CONFIG_SERIAL_OF_PLATFORM_NWPSERIAL is not set
1060# CONFIG_SERIAL_TIMBERDALE is not set
1061# CONFIG_SERIAL_ALTERA_JTAGUART is not set
1062# CONFIG_SERIAL_ALTERA_UART is not set
1063# CONFIG_SERIAL_PCH_UART is not set
1064# CONFIG_SERIAL_XILINX_PS_UART is not set
1065# CONFIG_TTY_PRINTK is not set
1066# CONFIG_HVC_UDBG is not set
1067# CONFIG_IPMI_HANDLER is not set
1068# CONFIG_HW_RANDOM is not set
1069# CONFIG_NVRAM is not set
1070# CONFIG_R3964 is not set
1071# CONFIG_APPLICOM is not set
1072# CONFIG_RAW_DRIVER is not set
1073# CONFIG_TCG_TPM is not set
1074CONFIG_DEVPORT=y
1075# CONFIG_RAMOOPS is not set
1076# CONFIG_I2C is not set
1077# CONFIG_SPI is not set
1078
1079#
1080# PPS support
1081#
1082# CONFIG_PPS is not set
1083
1084#
1085# PPS generators support
1086#
1087
1088#
1089# PTP clock support
1090#
1091
1092#
1093# Enable Device Drivers -> PPS to see the PTP clock options.
1094#
1095CONFIG_ARCH_WANT_OPTIONAL_GPIOLIB=y
1096CONFIG_ARCH_REQUIRE_GPIOLIB=y
1097CONFIG_GPIOLIB=y
1098# CONFIG_DEBUG_GPIO is not set
1099CONFIG_GPIO_SYSFS=y
1100
1101#
1102# Memory mapped GPIO drivers:
1103#
1104# CONFIG_GPIO_GENERIC_PLATFORM is not set
1105# CONFIG_GPIO_IT8761E is not set
1106# CONFIG_GPIO_XILINX is not set
1107
1108#
1109# I2C GPIO expanders:
1110#
1111
1112#
1113# PCI GPIO expanders:
1114#
1115# CONFIG_GPIO_BT8XX is not set
1116# CONFIG_GPIO_ML_IOH is not set
1117# CONFIG_GPIO_RDC321X is not set
1118
1119#
1120# SPI GPIO expanders:
1121#
1122
1123#
1124# AC97 GPIO expanders:
1125#
1126
1127#
1128# MODULbus GPIO expanders:
1129#
1130# CONFIG_W1 is not set
1131# CONFIG_POWER_SUPPLY is not set
1132# CONFIG_HWMON is not set
1133CONFIG_THERMAL=y
1134# CONFIG_WATCHDOG is not set
1135CONFIG_SSB_POSSIBLE=y
1136
1137#
1138# Sonics Silicon Backplane
1139#
1140# CONFIG_SSB is not set
1141CONFIG_BCMA_POSSIBLE=y
1142
1143#
1144# Broadcom specific AMBA
1145#
1146# CONFIG_BCMA is not set
1147# CONFIG_MFD_SUPPORT is not set
1148# CONFIG_REGULATOR is not set
1149# CONFIG_MEDIA_SUPPORT is not set
1150
1151#
1152# Graphics support
1153#
1154# CONFIG_AGP is not set
1155# CONFIG_VGA_ARB is not set
1156# CONFIG_DRM is not set
1157# CONFIG_STUB_POULSBO is not set
1158# CONFIG_VGASTATE is not set
1159# CONFIG_VIDEO_OUTPUT_CONTROL is not set
1160# CONFIG_FB is not set
1161# CONFIG_BACKLIGHT_LCD_SUPPORT is not set
1162
1163#
1164# Display device support
1165#
1166# CONFIG_DISPLAY_SUPPORT is not set
1167
1168#
1169# Console display driver support
1170#
1171CONFIG_DUMMY_CONSOLE=y
1172# CONFIG_SOUND is not set
1173CONFIG_HID_SUPPORT=y
1174CONFIG_HID=y
1175CONFIG_HIDRAW=y
1176
1177#
1178# USB Input Devices
1179#
1180CONFIG_USB_HID=y
1181CONFIG_HID_PID=y
1182CONFIG_USB_HIDDEV=y
1183
1184#
1185# Special HID drivers
1186#
1187CONFIG_HID_A4TECH=y
1188# CONFIG_HID_ACRUX is not set
1189CONFIG_HID_APPLE=y
1190# CONFIG_HID_BELKIN is not set
1191# CONFIG_HID_CHERRY is not set
1192# CONFIG_HID_CHICONY is not set
1193# CONFIG_HID_CYPRESS is not set
1194# CONFIG_HID_DRAGONRISE is not set
1195# CONFIG_HID_EMS_FF is not set
1196# CONFIG_HID_EZKEY is not set
1197# CONFIG_HID_HOLTEK is not set
1198# CONFIG_HID_KEYTOUCH is not set
1199# CONFIG_HID_KYE is not set
1200# CONFIG_HID_UCLOGIC is not set
1201# CONFIG_HID_WALTOP is not set
1202# CONFIG_HID_GYRATION is not set
1203# CONFIG_HID_TWINHAN is not set
1204# CONFIG_HID_KENSINGTON is not set
1205# CONFIG_HID_LCPOWER is not set
1206# CONFIG_HID_LOGITECH is not set
1207# CONFIG_HID_MICROSOFT is not set
1208# CONFIG_HID_MONTEREY is not set
1209# CONFIG_HID_MULTITOUCH is not set
1210# CONFIG_HID_NTRIG is not set
1211# CONFIG_HID_ORTEK is not set
1212# CONFIG_HID_PANTHERLORD is not set
1213# CONFIG_HID_PETALYNX is not set
1214# CONFIG_HID_PICOLCD is not set
1215# CONFIG_HID_QUANTA is not set
1216# CONFIG_HID_ROCCAT is not set
1217# CONFIG_HID_SAMSUNG is not set
1218# CONFIG_HID_SONY is not set
1219# CONFIG_HID_SPEEDLINK is not set
1220# CONFIG_HID_SUNPLUS is not set
1221# CONFIG_HID_GREENASIA is not set
1222# CONFIG_HID_SMARTJOYPLUS is not set
1223# CONFIG_HID_TOPSEED is not set
1224# CONFIG_HID_THRUSTMASTER is not set
1225# CONFIG_HID_ZEROPLUS is not set
1226# CONFIG_HID_ZYDACRON is not set
1227CONFIG_USB_SUPPORT=y
1228CONFIG_USB_ARCH_HAS_HCD=y
1229CONFIG_USB_ARCH_HAS_OHCI=y
1230CONFIG_USB_ARCH_HAS_EHCI=y
1231CONFIG_USB=y
1232# CONFIG_USB_DEBUG is not set
1233CONFIG_USB_ANNOUNCE_NEW_DEVICES=y
1234
1235#
1236# Miscellaneous USB options
1237#
1238CONFIG_USB_DEVICEFS=y
1239CONFIG_USB_DEVICE_CLASS=y
1240CONFIG_USB_DYNAMIC_MINORS=y
1241# CONFIG_USB_OTG_WHITELIST is not set
1242# CONFIG_USB_OTG_BLACKLIST_HUB is not set
1243CONFIG_USB_MON=y
1244# CONFIG_USB_WUSB is not set
1245# CONFIG_USB_WUSB_CBAF is not set
1246
1247#
1248# USB Host Controller Drivers
1249#
1250# CONFIG_USB_C67X00_HCD is not set
1251# CONFIG_USB_XHCI_HCD is not set
1252CONFIG_USB_EHCI_HCD=y
1253CONFIG_USB_EHCI_ROOT_HUB_TT=y
1254# CONFIG_USB_EHCI_TT_NEWSCHED is not set
1255CONFIG_USB_EHCI_BIG_ENDIAN_MMIO=y
1256CONFIG_USB_EHCI_BIG_ENDIAN_DESC=y
1257CONFIG_XPS_USB_HCD_XILINX=y
1258# CONFIG_USB_EHCI_HCD_PPC_OF is not set
1259# CONFIG_USB_OXU210HP_HCD is not set
1260CONFIG_USB_CI13612_HCD=y
1261# CONFIG_USB_ISP116X_HCD is not set
1262# CONFIG_USB_ISP1760_HCD is not set
1263# CONFIG_USB_ISP1362_HCD is not set
1264# CONFIG_USB_OHCI_HCD is not set
1265# CONFIG_USB_UHCI_HCD is not set
1266# CONFIG_USB_SL811_HCD is not set
1267# CONFIG_USB_R8A66597_HCD is not set
1268# CONFIG_USB_WHCI_HCD is not set
1269# CONFIG_USB_HWA_HCD is not set
1270
1271#
1272# USB Device Class drivers
1273#
1274# CONFIG_USB_ACM is not set
1275# CONFIG_USB_PRINTER is not set
1276# CONFIG_USB_WDM is not set
1277# CONFIG_USB_TMC is not set
1278
1279#
1280# NOTE: USB_STORAGE depends on SCSI but BLK_DEV_SD may
1281#
1282
1283#
1284# also be needed; see USB_STORAGE Help for more info
1285#
1286CONFIG_USB_STORAGE=y
1287# CONFIG_USB_STORAGE_DEBUG is not set
1288# CONFIG_USB_STORAGE_REALTEK is not set
1289# CONFIG_USB_STORAGE_DATAFAB is not set
1290# CONFIG_USB_STORAGE_FREECOM is not set
1291# CONFIG_USB_STORAGE_ISD200 is not set
1292# CONFIG_USB_STORAGE_USBAT is not set
1293# CONFIG_USB_STORAGE_SDDR09 is not set
1294# CONFIG_USB_STORAGE_SDDR55 is not set
1295# CONFIG_USB_STORAGE_JUMPSHOT is not set
1296# CONFIG_USB_STORAGE_ALAUDA is not set
1297# CONFIG_USB_STORAGE_ONETOUCH is not set
1298# CONFIG_USB_STORAGE_KARMA is not set
1299# CONFIG_USB_STORAGE_CYPRESS_ATACB is not set
1300# CONFIG_USB_STORAGE_ENE_UB6250 is not set
1301# CONFIG_USB_UAS is not set
1302CONFIG_USB_LIBUSUAL=y
1303
1304#
1305# USB Imaging devices
1306#
1307# CONFIG_USB_MDC800 is not set
1308# CONFIG_USB_MICROTEK is not set
1309
1310#
1311# USB port drivers
1312#
1313# CONFIG_USB_SERIAL is not set
1314
1315#
1316# USB Miscellaneous drivers
1317#
1318# CONFIG_USB_EMI62 is not set
1319# CONFIG_USB_EMI26 is not set
1320# CONFIG_USB_ADUTUX is not set
1321# CONFIG_USB_SEVSEG is not set
1322# CONFIG_USB_RIO500 is not set
1323# CONFIG_USB_LEGOTOWER is not set
1324# CONFIG_USB_LCD is not set
1325# CONFIG_USB_LED is not set
1326# CONFIG_USB_CYPRESS_CY7C63 is not set
1327# CONFIG_USB_CYTHERM is not set
1328# CONFIG_USB_IDMOUSE is not set
1329# CONFIG_USB_FTDI_ELAN is not set
1330# CONFIG_USB_APPLEDISPLAY is not set
1331# CONFIG_USB_SISUSBVGA is not set
1332# CONFIG_USB_LD is not set
1333# CONFIG_USB_TRANCEVIBRATOR is not set
1334# CONFIG_USB_IOWARRIOR is not set
1335# CONFIG_USB_TEST is not set
1336# CONFIG_USB_ISIGHTFW is not set
1337# CONFIG_USB_YUREX is not set
1338# CONFIG_USB_GADGET is not set
1339
1340#
1341# OTG and related infrastructure
1342#
1343# CONFIG_USB_GPIO_VBUS is not set
1344# CONFIG_NOP_USB_XCEIV is not set
1345# CONFIG_UWB is not set
1346# CONFIG_MMC is not set
1347# CONFIG_MEMSTICK is not set
1348# CONFIG_NEW_LEDS is not set
1349# CONFIG_ACCESSIBILITY is not set
1350# CONFIG_INFINIBAND is not set
1351# CONFIG_EDAC is not set
1352CONFIG_RTC_LIB=y
1353CONFIG_RTC_CLASS=y
1354CONFIG_RTC_HCTOSYS=y
1355CONFIG_RTC_HCTOSYS_DEVICE="rtc0"
1356# CONFIG_RTC_DEBUG is not set
1357
1358#
1359# RTC interfaces
1360#
1361CONFIG_RTC_INTF_SYSFS=y
1362CONFIG_RTC_INTF_PROC=y
1363CONFIG_RTC_INTF_DEV=y
1364# CONFIG_RTC_INTF_DEV_UIE_EMUL is not set
1365# CONFIG_RTC_DRV_TEST is not set
1366
1367#
1368# SPI RTC drivers
1369#
1370
1371#
1372# Platform RTC drivers
1373#
1374# CONFIG_RTC_DRV_CMOS is not set
1375# CONFIG_RTC_DRV_DS1286 is not set
1376# CONFIG_RTC_DRV_DS1511 is not set
1377# CONFIG_RTC_DRV_DS1553 is not set
1378CONFIG_RTC_DRV_DS1742=y
1379# CONFIG_RTC_DRV_STK17TA8 is not set
1380# CONFIG_RTC_DRV_M48T86 is not set
1381# CONFIG_RTC_DRV_M48T35 is not set
1382# CONFIG_RTC_DRV_M48T59 is not set
1383# CONFIG_RTC_DRV_MSM6242 is not set
1384# CONFIG_RTC_DRV_BQ4802 is not set
1385# CONFIG_RTC_DRV_RP5C01 is not set
1386# CONFIG_RTC_DRV_V3020 is not set
1387
1388#
1389# on-CPU RTC drivers
1390#
1391# CONFIG_RTC_DRV_GENERIC is not set
1392CONFIG_DMADEVICES=y
1393CONFIG_DMADEVICES_DEBUG=y
1394CONFIG_DMADEVICES_VDEBUG=y
1395
1396#
1397# DMA Devices
1398#
1399# CONFIG_TIMB_DMA is not set
1400CONFIG_LSI_DMA=y
1401CONFIG_DMA_ENGINE=y
1402
1403#
1404# DMA Clients
1405#
1406# CONFIG_NET_DMA is not set
1407# CONFIG_ASYNC_TX_DMA is not set
1408CONFIG_DMATEST=m
1409# CONFIG_AUXDISPLAY is not set
1410# CONFIG_UIO is not set
1411
1412#
1413# Virtio drivers
1414#
1415# CONFIG_VIRTIO_PCI is not set
1416# CONFIG_VIRTIO_BALLOON is not set
1417# CONFIG_STAGING is not set
1418CONFIG_IOMMU_SUPPORT=y
1419# CONFIG_VIRT_DRIVERS is not set
1420
1421#
1422# LSI Drivers (APP3, APP3K, and ACP)
1423#
1424CONFIG_SERIAL_ACP=y
1425CONFIG_SERIAL_ACP_CONSOLE=y
1426# CONFIG_SERIAL_ACP_CONSOLE_POLL is not set
1427CONFIG_LSI_NET=y
1428CONFIG_LSI_NET_NUM_RX_DESC=16
1429CONFIG_LSI_NET_RX_BUF_SZ=131072
1430CONFIG_LSI_NET_NUM_TX_DESC=8
1431CONFIG_LSI_NET_TX_BUF_SZ=65536
1432CONFIG_LSI_NAND=y
1433CONFIG_LSI_UBOOTENV=y
1434CONFIG_LSI_PLX_PCIE_BRIDGE=y
1435
1436#
1437# File systems
1438#
1439CONFIG_EXT2_FS=y
1440# CONFIG_EXT2_FS_XATTR is not set
1441# CONFIG_EXT2_FS_XIP is not set
1442CONFIG_EXT3_FS=y
1443CONFIG_EXT3_DEFAULTS_TO_ORDERED=y
1444CONFIG_EXT3_FS_XATTR=y
1445# CONFIG_EXT3_FS_POSIX_ACL is not set
1446# CONFIG_EXT3_FS_SECURITY is not set
1447CONFIG_EXT4_FS=y
1448CONFIG_EXT4_FS_XATTR=y
1449# CONFIG_EXT4_FS_POSIX_ACL is not set
1450# CONFIG_EXT4_FS_SECURITY is not set
1451# CONFIG_EXT4_DEBUG is not set
1452CONFIG_JBD=y
1453# CONFIG_JBD_DEBUG is not set
1454CONFIG_JBD2=y
1455# CONFIG_JBD2_DEBUG is not set
1456CONFIG_FS_MBCACHE=y
1457# CONFIG_REISERFS_FS is not set
1458# CONFIG_JFS_FS is not set
1459# CONFIG_XFS_FS is not set
1460# CONFIG_GFS2_FS is not set
1461# CONFIG_OCFS2_FS is not set
1462# CONFIG_BTRFS_FS is not set
1463# CONFIG_NILFS2_FS is not set
1464CONFIG_FS_POSIX_ACL=y
1465CONFIG_EXPORTFS=m
1466CONFIG_FILE_LOCKING=y
1467CONFIG_FSNOTIFY=y
1468CONFIG_DNOTIFY=y
1469CONFIG_INOTIFY_USER=y
1470CONFIG_FANOTIFY=y
1471# CONFIG_QUOTA is not set
1472# CONFIG_QUOTACTL is not set
1473CONFIG_AUTOFS4_FS=y
1474# CONFIG_FUSE_FS is not set
1475
1476#
1477# Caches
1478#
1479# CONFIG_FSCACHE is not set
1480
1481#
1482# CD-ROM/DVD Filesystems
1483#
1484# CONFIG_ISO9660_FS is not set
1485# CONFIG_UDF_FS is not set
1486
1487#
1488# DOS/FAT/NT Filesystems
1489#
1490CONFIG_FAT_FS=y
1491CONFIG_MSDOS_FS=y
1492CONFIG_VFAT_FS=y
1493CONFIG_FAT_DEFAULT_CODEPAGE=437
1494CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1"
1495CONFIG_NTFS_FS=m
1496# CONFIG_NTFS_DEBUG is not set
1497CONFIG_NTFS_RW=y
1498
1499#
1500# Pseudo filesystems
1501#
1502CONFIG_PROC_FS=y
1503# CONFIG_PROC_KCORE is not set
1504CONFIG_PROC_SYSCTL=y
1505CONFIG_PROC_PAGE_MONITOR=y
1506CONFIG_SYSFS=y
1507CONFIG_TMPFS=y
1508# CONFIG_TMPFS_POSIX_ACL is not set
1509# CONFIG_TMPFS_XATTR is not set
1510# CONFIG_HUGETLB_PAGE is not set
1511CONFIG_CONFIGFS_FS=m
1512CONFIG_MISC_FILESYSTEMS=y
1513# CONFIG_ADFS_FS is not set
1514# CONFIG_AFFS_FS is not set
1515# CONFIG_ECRYPT_FS is not set
1516# CONFIG_HFS_FS is not set
1517# CONFIG_HFSPLUS_FS is not set
1518# CONFIG_BEFS_FS is not set
1519# CONFIG_BFS_FS is not set
1520# CONFIG_EFS_FS is not set
1521CONFIG_JFFS2_FS=y
1522CONFIG_JFFS2_FS_DEBUG=0
1523CONFIG_JFFS2_FS_WRITEBUFFER=y
1524# CONFIG_JFFS2_FS_WBUF_VERIFY is not set
1525# CONFIG_JFFS2_SUMMARY is not set
1526# CONFIG_JFFS2_FS_XATTR is not set
1527# CONFIG_JFFS2_COMPRESSION_OPTIONS is not set
1528CONFIG_JFFS2_ZLIB=y
1529# CONFIG_JFFS2_LZO is not set
1530CONFIG_JFFS2_RTIME=y
1531# CONFIG_JFFS2_RUBIN is not set
1532# CONFIG_LOGFS is not set
1533# CONFIG_CRAMFS is not set
1534# CONFIG_SQUASHFS is not set
1535# CONFIG_VXFS_FS is not set
1536# CONFIG_MINIX_FS is not set
1537# CONFIG_OMFS_FS is not set
1538# CONFIG_HPFS_FS is not set
1539# CONFIG_QNX4FS_FS is not set
1540# CONFIG_ROMFS_FS is not set
1541# CONFIG_PSTORE is not set
1542# CONFIG_SYSV_FS is not set
1543# CONFIG_UFS_FS is not set
1544CONFIG_NETWORK_FILESYSTEMS=y
1545CONFIG_NFS_FS=y
1546CONFIG_NFS_V3=y
1547# CONFIG_NFS_V3_ACL is not set
1548# CONFIG_NFS_V4 is not set
1549CONFIG_ROOT_NFS=y
1550CONFIG_NFSD=m
1551CONFIG_NFSD_V3=y
1552# CONFIG_NFSD_V3_ACL is not set
1553CONFIG_NFSD_V4=y
1554CONFIG_LOCKD=y
1555CONFIG_LOCKD_V4=y
1556CONFIG_NFS_COMMON=y
1557CONFIG_SUNRPC=y
1558CONFIG_SUNRPC_GSS=m
1559# CONFIG_CEPH_FS is not set
1560# CONFIG_CIFS is not set
1561# CONFIG_NCP_FS is not set
1562# CONFIG_CODA_FS is not set
1563# CONFIG_AFS_FS is not set
1564
1565#
1566# Partition Types
1567#
1568# CONFIG_PARTITION_ADVANCED is not set
1569CONFIG_MSDOS_PARTITION=y
1570CONFIG_NLS=y
1571CONFIG_NLS_DEFAULT="iso8859-1"
1572CONFIG_NLS_CODEPAGE_437=y
1573# CONFIG_NLS_CODEPAGE_737 is not set
1574# CONFIG_NLS_CODEPAGE_775 is not set
1575CONFIG_NLS_CODEPAGE_850=y
1576# CONFIG_NLS_CODEPAGE_852 is not set
1577# CONFIG_NLS_CODEPAGE_855 is not set
1578# CONFIG_NLS_CODEPAGE_857 is not set
1579# CONFIG_NLS_CODEPAGE_860 is not set
1580# CONFIG_NLS_CODEPAGE_861 is not set
1581# CONFIG_NLS_CODEPAGE_862 is not set
1582# CONFIG_NLS_CODEPAGE_863 is not set
1583# CONFIG_NLS_CODEPAGE_864 is not set
1584CONFIG_NLS_CODEPAGE_865=y
1585# CONFIG_NLS_CODEPAGE_866 is not set
1586# CONFIG_NLS_CODEPAGE_869 is not set
1587# CONFIG_NLS_CODEPAGE_936 is not set
1588# CONFIG_NLS_CODEPAGE_950 is not set
1589# CONFIG_NLS_CODEPAGE_932 is not set
1590# CONFIG_NLS_CODEPAGE_949 is not set
1591# CONFIG_NLS_CODEPAGE_874 is not set
1592# CONFIG_NLS_ISO8859_8 is not set
1593# CONFIG_NLS_CODEPAGE_1250 is not set
1594# CONFIG_NLS_CODEPAGE_1251 is not set
1595CONFIG_NLS_ASCII=y
1596CONFIG_NLS_ISO8859_1=y
1597# CONFIG_NLS_ISO8859_2 is not set
1598# CONFIG_NLS_ISO8859_3 is not set
1599# CONFIG_NLS_ISO8859_4 is not set
1600# CONFIG_NLS_ISO8859_5 is not set
1601# CONFIG_NLS_ISO8859_6 is not set
1602# CONFIG_NLS_ISO8859_7 is not set
1603# CONFIG_NLS_ISO8859_9 is not set
1604# CONFIG_NLS_ISO8859_13 is not set
1605# CONFIG_NLS_ISO8859_14 is not set
1606# CONFIG_NLS_ISO8859_15 is not set
1607# CONFIG_NLS_KOI8_R is not set
1608# CONFIG_NLS_KOI8_U is not set
1609# CONFIG_NLS_UTF8 is not set
1610# CONFIG_DLM is not set
1611# CONFIG_BINARY_PRINTF is not set
1612
1613#
1614# Library routines
1615#
1616CONFIG_BITREVERSE=y
1617CONFIG_CRC_CCITT=m
1618CONFIG_CRC16=y
1619# CONFIG_CRC_T10DIF is not set
1620# CONFIG_CRC_ITU_T is not set
1621CONFIG_CRC32=y
1622# CONFIG_CRC7 is not set
1623# CONFIG_LIBCRC32C is not set
1624# CONFIG_CRC8 is not set
1625CONFIG_ZLIB_INFLATE=y
1626CONFIG_ZLIB_DEFLATE=y
1627# CONFIG_XZ_DEC is not set
1628# CONFIG_XZ_DEC_BCJ is not set
1629CONFIG_HAS_IOMEM=y
1630CONFIG_HAS_IOPORT=y
1631CONFIG_HAS_DMA=y
1632CONFIG_CPU_RMAP=y
1633CONFIG_NLATTR=y
1634CONFIG_GENERIC_ATOMIC64=y
1635# CONFIG_AVERAGE is not set
1636# CONFIG_CORDIC is not set
1637
1638#
1639# Kernel hacking
1640#
1641# CONFIG_PRINTK_TIME is not set
1642CONFIG_DEFAULT_MESSAGE_LOGLEVEL=4
1643CONFIG_ENABLE_WARN_DEPRECATED=y
1644CONFIG_ENABLE_MUST_CHECK=y
1645CONFIG_FRAME_WARN=1024
1646CONFIG_MAGIC_SYSRQ=y
1647# CONFIG_STRIP_ASM_SYMS is not set
1648# CONFIG_UNUSED_SYMBOLS is not set
1649CONFIG_DEBUG_FS=y
1650# CONFIG_HEADERS_CHECK is not set
1651# CONFIG_DEBUG_SECTION_MISMATCH is not set
1652CONFIG_DEBUG_KERNEL=y
1653# CONFIG_DEBUG_SHIRQ is not set
1654# CONFIG_LOCKUP_DETECTOR is not set
1655# CONFIG_HARDLOCKUP_DETECTOR is not set
1656# CONFIG_DETECT_HUNG_TASK is not set
1657CONFIG_SCHED_DEBUG=y
1658# CONFIG_SCHEDSTATS is not set
1659# CONFIG_TIMER_STATS is not set
1660# CONFIG_DEBUG_OBJECTS is not set
1661# CONFIG_SLUB_DEBUG_ON is not set
1662# CONFIG_SLUB_STATS is not set
1663# CONFIG_DEBUG_KMEMLEAK is not set
1664CONFIG_DEBUG_PREEMPT=y
1665# CONFIG_DEBUG_RT_MUTEXES is not set
1666# CONFIG_RT_MUTEX_TESTER is not set
1667# CONFIG_DEBUG_SPINLOCK is not set
1668# CONFIG_DEBUG_MUTEXES is not set
1669# CONFIG_DEBUG_LOCK_ALLOC is not set
1670# CONFIG_PROVE_LOCKING is not set
1671# CONFIG_SPARSE_RCU_POINTER is not set
1672# CONFIG_LOCK_STAT is not set
1673# CONFIG_DEBUG_ATOMIC_SLEEP is not set
1674# CONFIG_DEBUG_LOCKING_API_SELFTESTS is not set
1675# CONFIG_DEBUG_STACK_USAGE is not set
1676# CONFIG_DEBUG_KOBJECT is not set
1677# CONFIG_DEBUG_HIGHMEM is not set
1678CONFIG_DEBUG_BUGVERBOSE=y
1679CONFIG_DEBUG_INFO=y
1680# CONFIG_DEBUG_INFO_REDUCED is not set
1681# CONFIG_DEBUG_VM is not set
1682# CONFIG_DEBUG_WRITECOUNT is not set
1683# CONFIG_DEBUG_MEMORY_INIT is not set
1684# CONFIG_DEBUG_LIST is not set
1685# CONFIG_TEST_LIST_SORT is not set
1686# CONFIG_DEBUG_SG is not set
1687# CONFIG_DEBUG_NOTIFIERS is not set
1688# CONFIG_DEBUG_CREDENTIALS is not set
1689# CONFIG_RCU_TORTURE_TEST is not set
1690CONFIG_RCU_CPU_STALL_TIMEOUT=60
1691CONFIG_RCU_CPU_STALL_VERBOSE=y
1692# CONFIG_BACKTRACE_SELF_TEST is not set
1693# CONFIG_DEBUG_BLOCK_EXT_DEVT is not set
1694# CONFIG_DEBUG_FORCE_WEAK_PER_CPU is not set
1695# CONFIG_DEBUG_PER_CPU_MAPS is not set
1696# CONFIG_LKDTM is not set
1697# CONFIG_CPU_NOTIFIER_ERROR_INJECT is not set
1698# CONFIG_FAULT_INJECTION is not set
1699# CONFIG_LATENCYTOP is not set
1700CONFIG_SYSCTL_SYSCALL_CHECK=y
1701# CONFIG_DEBUG_PAGEALLOC is not set
1702CONFIG_HAVE_FUNCTION_TRACER=y
1703CONFIG_HAVE_FUNCTION_GRAPH_TRACER=y
1704CONFIG_HAVE_DYNAMIC_FTRACE=y
1705CONFIG_HAVE_FTRACE_MCOUNT_RECORD=y
1706CONFIG_HAVE_SYSCALL_TRACEPOINTS=y
1707CONFIG_RING_BUFFER=y
1708CONFIG_RING_BUFFER_ALLOW_SWAP=y
1709CONFIG_TRACING_SUPPORT=y
1710CONFIG_FTRACE=y
1711# CONFIG_FUNCTION_TRACER is not set
1712# CONFIG_IRQSOFF_TRACER is not set
1713# CONFIG_PREEMPT_TRACER is not set
1714# CONFIG_SCHED_TRACER is not set
1715# CONFIG_ENABLE_DEFAULT_TRACERS is not set
1716# CONFIG_FTRACE_SYSCALLS is not set
1717CONFIG_BRANCH_PROFILE_NONE=y
1718# CONFIG_PROFILE_ANNOTATED_BRANCHES is not set
1719# CONFIG_PROFILE_ALL_BRANCHES is not set
1720# CONFIG_STACK_TRACER is not set
1721# CONFIG_BLK_DEV_IO_TRACE is not set
1722# CONFIG_RING_BUFFER_BENCHMARK is not set
1723# CONFIG_DYNAMIC_DEBUG is not set
1724# CONFIG_DMA_API_DEBUG is not set
1725# CONFIG_ATOMIC64_SELFTEST is not set
1726# CONFIG_SAMPLES is not set
1727CONFIG_HAVE_ARCH_KGDB=y
1728# CONFIG_KGDB is not set
1729# CONFIG_TEST_KSTRTOX is not set
1730# CONFIG_PPC_DISABLE_WERROR is not set
1731CONFIG_PPC_WERROR=y
1732CONFIG_PRINT_STACK_DEPTH=64
1733# CONFIG_DEBUG_STACKOVERFLOW is not set
1734# CONFIG_PPC_EMULATED_STATS is not set
1735# CONFIG_CODE_PATCHING_SELFTEST is not set
1736# CONFIG_FTR_FIXUP_SELFTEST is not set
1737# CONFIG_MSI_BITMAP_SELFTEST is not set
1738CONFIG_XMON=y
1739CONFIG_XMON_DEFAULT=y
1740CONFIG_XMON_DISASSEMBLY=y
1741CONFIG_DEBUGGER=y
1742# CONFIG_VIRQ_DEBUG is not set
1743# CONFIG_BDI_SWITCH is not set
1744# CONFIG_PPC_EARLY_DEBUG is not set
1745
1746#
1747# Security options
1748#
1749CONFIG_KEYS=y
1750# CONFIG_KEYS_DEBUG_PROC_KEYS is not set
1751# CONFIG_SECURITY_DMESG_RESTRICT is not set
1752# CONFIG_SECURITY is not set
1753# CONFIG_SECURITYFS is not set
1754CONFIG_DEFAULT_SECURITY_DAC=y
1755CONFIG_DEFAULT_SECURITY=""
1756CONFIG_CRYPTO=y
1757
1758#
1759# Crypto core or helper
1760#
1761CONFIG_CRYPTO_ALGAPI=y
1762CONFIG_CRYPTO_ALGAPI2=y
1763CONFIG_CRYPTO_AEAD=y
1764CONFIG_CRYPTO_AEAD2=y
1765CONFIG_CRYPTO_BLKCIPHER=y
1766CONFIG_CRYPTO_BLKCIPHER2=y
1767CONFIG_CRYPTO_HASH=y
1768CONFIG_CRYPTO_HASH2=y
1769CONFIG_CRYPTO_RNG=y
1770CONFIG_CRYPTO_RNG2=y
1771CONFIG_CRYPTO_PCOMP2=y
1772CONFIG_CRYPTO_MANAGER=y
1773CONFIG_CRYPTO_MANAGER2=y
1774CONFIG_CRYPTO_MANAGER_DISABLE_TESTS=y
1775CONFIG_CRYPTO_GF128MUL=y
1776CONFIG_CRYPTO_NULL=y
1777# CONFIG_CRYPTO_PCRYPT is not set
1778CONFIG_CRYPTO_WORKQUEUE=y
1779# CONFIG_CRYPTO_CRYPTD is not set
1780CONFIG_CRYPTO_AUTHENC=y
1781# CONFIG_CRYPTO_TEST is not set
1782
1783#
1784# Authenticated Encryption with Associated Data
1785#
1786# CONFIG_CRYPTO_CCM is not set
1787CONFIG_CRYPTO_GCM=y
1788CONFIG_CRYPTO_SEQIV=y
1789
1790#
1791# Block modes
1792#
1793CONFIG_CRYPTO_CBC=y
1794CONFIG_CRYPTO_CTR=y
1795# CONFIG_CRYPTO_CTS is not set
1796# CONFIG_CRYPTO_ECB is not set
1797# CONFIG_CRYPTO_LRW is not set
1798# CONFIG_CRYPTO_PCBC is not set
1799# CONFIG_CRYPTO_XTS is not set
1800
1801#
1802# Hash modes
1803#
1804CONFIG_CRYPTO_HMAC=y
1805CONFIG_CRYPTO_XCBC=y
1806# CONFIG_CRYPTO_VMAC is not set
1807
1808#
1809# Digest
1810#
1811# CONFIG_CRYPTO_CRC32C is not set
1812CONFIG_CRYPTO_GHASH=y
1813# CONFIG_CRYPTO_MD4 is not set
1814CONFIG_CRYPTO_MD5=y
1815# CONFIG_CRYPTO_MICHAEL_MIC is not set
1816# CONFIG_CRYPTO_RMD128 is not set
1817# CONFIG_CRYPTO_RMD160 is not set
1818# CONFIG_CRYPTO_RMD256 is not set
1819# CONFIG_CRYPTO_RMD320 is not set
1820CONFIG_CRYPTO_SHA1=y
1821CONFIG_CRYPTO_SHA256=y
1822# CONFIG_CRYPTO_SHA512 is not set
1823# CONFIG_CRYPTO_TGR192 is not set
1824# CONFIG_CRYPTO_WP512 is not set
1825
1826#
1827# Ciphers
1828#
1829CONFIG_CRYPTO_AES=y
1830# CONFIG_CRYPTO_ANUBIS is not set
1831# CONFIG_CRYPTO_ARC4 is not set
1832# CONFIG_CRYPTO_BLOWFISH is not set
1833# CONFIG_CRYPTO_CAMELLIA is not set
1834# CONFIG_CRYPTO_CAST5 is not set
1835# CONFIG_CRYPTO_CAST6 is not set
1836CONFIG_CRYPTO_DES=y
1837# CONFIG_CRYPTO_FCRYPT is not set
1838# CONFIG_CRYPTO_KHAZAD is not set
1839# CONFIG_CRYPTO_SALSA20 is not set
1840# CONFIG_CRYPTO_SEED is not set
1841# CONFIG_CRYPTO_SERPENT is not set
1842# CONFIG_CRYPTO_TEA is not set
1843# CONFIG_CRYPTO_TWOFISH is not set
1844
1845#
1846# Compression
1847#
1848CONFIG_CRYPTO_DEFLATE=y
1849# CONFIG_CRYPTO_ZLIB is not set
1850# CONFIG_CRYPTO_LZO is not set
1851
1852#
1853# Random Number Generation
1854#
1855# CONFIG_CRYPTO_ANSI_CPRNG is not set
1856# CONFIG_CRYPTO_USER_API_HASH is not set
1857# CONFIG_CRYPTO_USER_API_SKCIPHER is not set
1858CONFIG_CRYPTO_HW=y
1859# CONFIG_CRYPTO_DEV_HIFN_795X is not set
1860CONFIG_CRYPTO_DEV_PPC4XX=y
1861# CONFIG_PPC_CLOCK is not set
1862# CONFIG_VIRTUALIZATION is not set
diff --git a/recipes-kernel/linux/linux-3.0.6/merge_config.sh b/recipes-kernel/linux/linux-3.0.6/merge_config.sh
new file mode 100755
index 0000000..33f18d4
--- /dev/null
+++ b/recipes-kernel/linux/linux-3.0.6/merge_config.sh
@@ -0,0 +1,142 @@
1#!/bin/sh
2# merge_config.sh - Takes a list of config fragment values, and merges
3# them one by one. Provides warnings on overridden values, and specified
4# values that did not make it to the resulting .config file (due to missed
5# dependencies or config symbol removal).
6#
7# Portions reused from kconf_check and generate_cfg:
8# http://git.yoctoproject.org/cgit/cgit.cgi/yocto-kernel-tools/tree/tools/kconf_check
9# http://git.yoctoproject.org/cgit/cgit.cgi/yocto-kernel-tools/tree/tools/generate_cfg
10#
11# Copyright (c) 2009-2010 Wind River Systems, Inc.
12# Copyright 2011 Linaro
13#
14# This program is free software; you can redistribute it and/or modify
15# it under the terms of the GNU General Public License version 2 as
16# published by the Free Software Foundation.
17#
18# This program is distributed in the hope that it will be useful,
19# but WITHOUT ANY WARRANTY; without even the implied warranty of
20# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
21# See the GNU General Public License for more details.
22
23
24usage() {
25 echo "Usage: $0 [OPTIONS] [CONFIG [...]]"
26echo " -h display this help text"
27echo " -m only merge the fragments, do not execute the make command"
28echo " -n use allnoconfig instead of alldefconfig"
29echo " -x use allmodconfig instead of alldefconfig"
30echo " -d debug. Don't cleanup temporary files"
31}
32
33MAKE_FLAG=true
34ALLTARGET=alldefconfig
35
36# There are two variables that impact where the .config will be dropped,
37# O= and KBUILD_OUTPUT=. So we'll respect those variables and use them as
38# an output directory as well. These two variables are not propagating
39# automatically to the kernel build, so always explicitly setting O=
40# and passing it to the kernel build ensures that it is respected.
41if [ -n "$KBUILD_OUTPUT" ]; then
42 O=$KBUILD_OUTPUT
43fi
44if [ -z "$O" ]; then
45 O=.
46fi
47
48while true; do
49 case $1 in
50 "-n")
51 ALLTARGET=allnoconfig
52 shift
53 continue
54 ;;
55 "-m")
56 MAKE_FLAG=false
57 shift
58 continue
59 ;;
60 "-d")
61 DEBUG=true
62 shift
63 continue
64 ;;
65 "-h")
66 usage
67 exit
68 ;;
69 *)
70 break
71 ;;
72 esac
73done
74
75clean_up() {
76 rm -f $TMP_FILE
77 exit
78}
79if [ -z "$DEBUG" ]; then
80 trap clean_up SIGHUP SIGINT SIGTERM
81fi
82
83
84MERGE_LIST=$*
85SED_CONFIG_EXP="s/^\(# \)\{0,1\}\(CONFIG_[a-zA-Z0-9_]*\)[= ].*/\2/p"
86TMP_FILE=$(mktemp $O/.tmp.config.XXXXXXXXXX)
87
88# Merge files, printing warnings on overrided values
89for MERGE_FILE in $MERGE_LIST ; do
90 echo "Merging $MERGE_FILE"
91 CFG_LIST=$(sed -n "$SED_CONFIG_EXP" $MERGE_FILE)
92
93 for CFG in $CFG_LIST ; do
94 grep -q -w $CFG $TMP_FILE
95 if [ $? -eq 0 ] ; then
96 PREV_VAL=$(grep -w $CFG $TMP_FILE)
97 NEW_VAL=$(grep -w $CFG $MERGE_FILE)
98 if [ "x$PREV_VAL" != "x$NEW_VAL" ] ; then
99 echo Value of $CFG is redefined by fragment $MERGE_FILE:
100 echo Previous value: $PREV_VAL
101 echo New value: $NEW_VAL
102 echo
103 fi
104 sed -i "/$CFG[ =]/d" $TMP_FILE
105 fi
106 done
107 cat $MERGE_FILE >> $TMP_FILE
108done
109
110if [ "$MAKE_FLAG" = "false" ]; then
111 cp $TMP_FILE $O/.config
112 echo "#"
113 echo "# merged configuration written to $O/.config (needs make)"
114 echo "#"
115 if [ -z "$DEBUG" ]; then
116 clean_up
117 fi
118 exit
119fi
120
121# Use the merged file as the starting point for:
122# alldefconfig: Fills in any missing symbols with Kconfig default
123# allnoconfig: Fills in any missing symbols with # CONFIG_* is not set
124make KCONFIG_ALLCONFIG=$TMP_FILE O=$O $ALLTARGET
125
126
127# Check all specified config values took (might have missed-dependency issues)
128for CFG in $(sed -n "$SED_CONFIG_EXP" $TMP_FILE); do
129
130 REQUESTED_VAL=$(sed -n "$SED_CONFIG_EXP" $TMP_FILE | grep -w -e "$CFG")
131 ACTUAL_VAL=$(sed -n "$SED_CONFIG_EXP" $O/.config | grep -w -e "$CFG")
132 if [ "x$REQUESTED_VAL" != "x$ACTUAL_VAL" ] ; then
133 echo "Value requested for $CFG not in final .config"
134 echo "Requested value: $REQUESTED_VAL"
135 echo "Actual value: $ACTUAL_VAL"
136 echo ""
137 fi
138done
139
140if [ -z "$DEBUG" ]; then
141 clean_up
142fi
diff --git a/recipes-kernel/linux/linux-bsc913x-headers.bb b/recipes-kernel/linux/linux-bsc913x-headers.bb
new file mode 100644
index 0000000..8078aad
--- /dev/null
+++ b/recipes-kernel/linux/linux-bsc913x-headers.bb
@@ -0,0 +1,62 @@
1DESCRIPTION = "Linux kernel headers for Freescale platforms"
2SECTION = "devel"
3LICENSE = "GPLv2"
4
5PKGSUFFIX = ""
6PKGSUFFIX_virtclass-nativesdk = "-nativesdk"
7
8INHIBIT_DEFAULT_DEPS = "1"
9DEPENDS += "unifdef-native"
10
11PROVIDES = "linux-libc-headers${PKGSUFFIX} ${PN}"
12RPROVIDES_${PN}-dev += "linux-libc-headers${PKGSUFFIX}-dev"
13RPROVIDES_${PN}-dbg += "linux-libc-headers${PKGSUFFIX}-dbg"
14RDEPENDS_${PN}-dev = ""
15RRECOMMENDS_${PN}-dbg = "linux-libc-headers${PKGSUFFIX}-dev (= ${EXTENDPKGV})"
16
17require recipes-kernel/linux/linux-bsc913x.inc
18
19set_arch() {
20 case ${TARGET_ARCH} in
21 arm*) ARCH=arm ;;
22 i*86*) ARCH=i386 ;;
23 ia64*) ARCH=ia64 ;;
24 mips*) ARCH=mips ;;
25 powerpc*) ARCH=powerpc ;;
26 x86_64*) ARCH=x86_64 ;;
27 esac
28}
29
30do_configure () {
31 set_arch
32 oe_runmake allnoconfig ARCH=$ARCH
33}
34
35do_compile () {
36 :
37}
38
39do_install() {
40 set_arch
41 cd ${S}
42 oe_runmake headers_install INSTALL_HDR_PATH=${D}${exec_prefix} ARCH=${ARCH}
43
44 # The ..install.cmd conflicts between various configure runs
45 find ${D}${includedir} -name ..install.cmd | xargs rm -f
46}
47
48BBCLASSEXTEND = "nativesdk"
49
50# The following tasks are not required when we just want
51# headers. So we override and stub them out.
52do_kernel_configme() {
53}
54
55do_compile () {
56}
57
58do_validate_branches () {
59}
60
61do_kernel_configcheck () {
62}
diff --git a/recipes-kernel/linux/linux-bsc913x.bb b/recipes-kernel/linux/linux-bsc913x.bb
new file mode 100644
index 0000000..3a53b8b
--- /dev/null
+++ b/recipes-kernel/linux/linux-bsc913x.bb
@@ -0,0 +1,30 @@
1inherit kernel
2require recipes-kernel/linux/linux-dtb.inc
3
4DESCRIPTION = "Linux kernel headers for Freescale platforms"
5SECTION = "kernel"
6LICENSE = "GPLv2"
7
8# For bsc913x kernel, the defconfig is included locally
9KERNEL_DEFCONFIG="${WORKDIR}/defconfig"
10
11KERNEL_FEATURES="cfg/localversion \
12 cfg/with_modules \
13 cfg/embedded \
14 cfg/root_nfs \
15 cfg/devtmpfs \
16 cfg/bootlogd \
17 cfg/mtd_tests \
18 "
19
20STAGING_KERNEL_FEATURES = "${KERNEL_FEATURES} cfg/debug"
21STAGING_KERNEL_FEATURES_append = " cfg/kprobes cfg/oprofile cfg/i2c"
22
23require recipes-kernel/linux/linux-bsc913x.inc
24require recipes-kernel/linux/staging-kernel.inc
25require recipes-kernel/linux/pramfs-2.6.33.inc
26
27# For linx-mod built
28kernel_do_install_append() {
29 cp -fR ${S}/include/generated/* ${D}/usr/src/kernel/include/generated
30}
diff --git a/recipes-kernel/linux/linux-bsc913x.inc b/recipes-kernel/linux/linux-bsc913x.inc
new file mode 100644
index 0000000..468efed
--- /dev/null
+++ b/recipes-kernel/linux/linux-bsc913x.inc
@@ -0,0 +1,22 @@
1LIC_FILES_CHKSUM = "file://COPYING;md5=d7810fab7487fb0aad327b76f1be7cd7"
2
3FILESDIR = "${@os.path.dirname(bb.data.getVar('FILE',d,1))}/linux-bsc913x/${MACHINE}"
4
5SRC_URI = "file://linux-${MACHINE}-${PV}.tar.bz2 \
6 file://defconfig \
7 "
8SRC_URI_append = " \
9 file://0001-add-options-to-KBUILD_CFLAGS.patch \
10 file://0002-take-back-DECLARE_MUTEX-for-linx.patch \
11 file://0003-fix-nonexistant-type-u8-issue.patch \
12 file://0004-fix-wrong-WDTP_MASK-in-booke_wdt_c.patch \
13 file://0007-perf-makefile.patch \
14 file://0008-solve-bsc9131-MExtUtils-error.patch \
15 "
16
17PV = "2.6.33"
18PR = "r0"
19
20S = "${WORKDIR}/linux-${PV}"
21
22COMPATIBLE_MACHINE = "(bsc9131rdb)"
diff --git a/recipes-kernel/linux/linux-bsc913x/bsc9131rdb/0001-add-options-to-KBUILD_CFLAGS.patch b/recipes-kernel/linux/linux-bsc913x/bsc9131rdb/0001-add-options-to-KBUILD_CFLAGS.patch
new file mode 100644
index 0000000..b74d512
--- /dev/null
+++ b/recipes-kernel/linux/linux-bsc913x/bsc9131rdb/0001-add-options-to-KBUILD_CFLAGS.patch
@@ -0,0 +1,25 @@
1From: Jerry Pei <jerry.pei@enea.com>
2Date: Tue, 10 Jul 2012 11:44:18 +0800
3Subject: [PATCH] add options to KBUILD_CFLAGS
4
5Signed-off-by: Jerry Pei <jerry.pei@enea.com>
6---
7 Makefile | 2 ++
8 1 file changed, 2 insertions(+)
9
10diff --git a/Makefile b/Makefile
11index e19c848..b07ce1e 100644
12--- a/Makefile
13+++ b/Makefile
14@@ -526,6 +526,8 @@ endif # $(dot-config)
15 # Defaults vmlinux but it is usually overridden in the arch makefile
16 all: vmlinux
17
18+KBUILD_CFLAGS += -Wno-unused-but-set-variable -Wno-error=array-bounds
19+
20 ifdef CONFIG_CC_OPTIMIZE_FOR_SIZE
21 KBUILD_CFLAGS += -Os
22 else
23--
241.7.9.5
25
diff --git a/recipes-kernel/linux/linux-bsc913x/bsc9131rdb/0002-take-back-DECLARE_MUTEX-for-linx.patch b/recipes-kernel/linux/linux-bsc913x/bsc9131rdb/0002-take-back-DECLARE_MUTEX-for-linx.patch
new file mode 100644
index 0000000..a648a81
--- /dev/null
+++ b/recipes-kernel/linux/linux-bsc913x/bsc9131rdb/0002-take-back-DECLARE_MUTEX-for-linx.patch
@@ -0,0 +1,26 @@
1From: Jerry Pei <jeei@sestofb01.enea.se>
2Date: Thu, 22 Dec 2011 03:55:03 +0100
3Subject: [PATCH] take back DECLARE_MUTEX for linx
4
5Signed-off-by: Jerry Pei <jeei@sestofb01.enea.se>
6---
7 include/linux/semaphore.h | 3 +++
8 1 files changed, 3 insertions(+), 0 deletions(-)
9
10diff --git a/include/linux/semaphore.h b/include/linux/semaphore.h
11index 66d2591..8b75bb6 100644
12--- a/include/linux/semaphore.h
13+++ b/include/linux/semaphore.h
14@@ -29,6 +29,9 @@ struct semaphore {
15 #define DEFINE_SEMAPHORE(name, val) \
16 struct semaphore name = __SEMAPHORE_INITIALIZER(name, val)
17
18+#define DECLARE_MUTEX(name) \
19+ struct semaphore name = __SEMAPHORE_INITIALIZER(name, 1)
20+
21 static inline void sema_init(struct semaphore *sem, int val)
22 {
23 static struct lock_class_key __key;
24--
251.7.5.4
26
diff --git a/recipes-kernel/linux/linux-bsc913x/bsc9131rdb/0003-fix-nonexistant-type-u8-issue.patch b/recipes-kernel/linux/linux-bsc913x/bsc9131rdb/0003-fix-nonexistant-type-u8-issue.patch
new file mode 100644
index 0000000..b091290
--- /dev/null
+++ b/recipes-kernel/linux/linux-bsc913x/bsc9131rdb/0003-fix-nonexistant-type-u8-issue.patch
@@ -0,0 +1,31 @@
1From: jerry pei <jerry.pei@enea.com>
2Date: Mon, 30 Jul 2012 05:06:27 +0200
3Subject: [PATCH] change u8 to __u8 in scsi.h
4
5Signed-off-by: jerry pei <jerry.pei@enea.com>
6---
7 include/scsi/scsi.h | 8 ++++----
8 1 files changed, 4 insertions(+), 4 deletions(-)
9
10diff --git a/include/scsi/scsi.h b/include/scsi/scsi.h
11index 8b4deca..ec3053e 100644
12--- a/include/scsi/scsi.h
13+++ b/include/scsi/scsi.h
14@@ -149,10 +149,10 @@ struct scsi_cmnd;
15
16 /* defined in T10 SCSI Primary Commands-2 (SPC2) */
17 struct scsi_varlen_cdb_hdr {
18- u8 opcode; /* opcode always == VARIABLE_LENGTH_CMD */
19- u8 control;
20- u8 misc[5];
21- u8 additional_cdb_length; /* total cdb length - 8 */
22+ __u8 opcode; /* opcode always == VARIABLE_LENGTH_CMD */
23+ __u8 control;
24+ __u8 misc[5];
25+ __u8 additional_cdb_length; /* total cdb length - 8 */
26 __be16 service_action;
27 /* service specific data follows */
28 };
29--
301.7.5.4
31
diff --git a/recipes-kernel/linux/linux-bsc913x/bsc9131rdb/0004-fix-wrong-WDTP_MASK-in-booke_wdt_c.patch b/recipes-kernel/linux/linux-bsc913x/bsc9131rdb/0004-fix-wrong-WDTP_MASK-in-booke_wdt_c.patch
new file mode 100644
index 0000000..fa5d061
--- /dev/null
+++ b/recipes-kernel/linux/linux-bsc913x/bsc9131rdb/0004-fix-wrong-WDTP_MASK-in-booke_wdt_c.patch
@@ -0,0 +1,26 @@
1From f94d0836740b00fb99861651ce261df94244a1d7 Mon Sep 17 00:00:00 2001
2From: Alex He <Alex.He@enea.com>
3Date: Wed, 22 Aug 2012 11:40:11 +0200
4Subject: [PATCH] fix wrong WDTP_MASK in booke_wdt.c in
5 linux-bsc9131qds-2.6.33
6
7---
8 drivers/watchdog/booke_wdt.c | 2 +-
9 1 files changed, 1 insertions(+), 1 deletions(-)
10
11diff --git a/drivers/watchdog/booke_wdt.c b/drivers/watchdog/booke_wdt.c
12index a01e298..77defbe 100644
13--- a/drivers/watchdog/booke_wdt.c
14+++ b/drivers/watchdog/booke_wdt.c
15@@ -44,7 +44,7 @@ u32 booke_wdt_period = WDT_PERIOD_DEFAULT;
16
17 #ifdef CONFIG_FSL_BOOKE
18 #define WDTP(x) ((((x)&0x3)<<30)|(((x)&0x3c)<<15))
19-#define WDTP_MASK (WDTP(0))
20+#define WDTP_MASK (WDTP(0x3f))
21 #else
22 #define WDTP(x) (TCR_WP(x))
23 #define WDTP_MASK (TCR_WP_MASK)
24--
251.7.5.4
26
diff --git a/recipes-kernel/linux/linux-bsc913x/bsc9131rdb/0007-perf-makefile.patch b/recipes-kernel/linux/linux-bsc913x/bsc9131rdb/0007-perf-makefile.patch
new file mode 100644
index 0000000..911ffd9
--- /dev/null
+++ b/recipes-kernel/linux/linux-bsc913x/bsc9131rdb/0007-perf-makefile.patch
@@ -0,0 +1,11 @@
1--- a/tools/perf/Makefile 2012-08-27 09:40:05.887241976 +0200
2+++ b/tools/perf/Makefile 2012-08-27 09:40:16.742768991 +0200
3@@ -198,7 +198,7 @@
4 CFLAGS_OPTIMIZE = -O6
5 endif
6
7-CFLAGS = -ggdb3 -Wall -Wextra -std=gnu99 -Werror $(CFLAGS_OPTIMIZE) -D_FORTIFY_SOURCE=2 $(EXTRA_WARNINGS) $(EXTRA_CFLAGS)
8+CFLAGS = -ggdb3 -Wall -Wextra -std=gnu99 $(CFLAGS_OPTIMIZE) -D_FORTIFY_SOURCE=2 $(EXTRA_WARNINGS) $(EXTRA_CFLAGS)
9 EXTLIBS = -lpthread -lrt -lelf -lm
10 ALL_CFLAGS = $(CFLAGS)
11 ALL_LDFLAGS = $(LDFLAGS)
diff --git a/recipes-kernel/linux/linux-bsc913x/bsc9131rdb/0008-solve-bsc9131-MExtUtils-error.patch b/recipes-kernel/linux/linux-bsc913x/bsc9131rdb/0008-solve-bsc9131-MExtUtils-error.patch
new file mode 100644
index 0000000..fd2ae86
--- /dev/null
+++ b/recipes-kernel/linux/linux-bsc913x/bsc9131rdb/0008-solve-bsc9131-MExtUtils-error.patch
@@ -0,0 +1,31 @@
1From d4dc0a79f4e6db11b3c3eabb079f4a97119717d9 Mon Sep 17 00:00:00 2001
2From: jack zhang <jack.zhang@enea.com>
3Date: Tue, 27 Nov 2012 02:53:06 +0100
4Subject: [PATCH] LXCRF-1247 BSC9131 failed to build images after upgrading
5 yocto 1.3
6
7Signed-off-by: jack zhang <jack.zhang@enea.com>
8
9MExtUtils::Embed generate wrong LDFLAGS for libperl
10---
11 tools/perf/Makefile | 4 ++--
12 1 files changed, 2 insertions(+), 2 deletions(-)
13
14diff --git a/tools/perf/Makefile b/tools/perf/Makefile
15index 560e515..a94a4f8 100644
16--- a/tools/perf/Makefile
17+++ b/tools/perf/Makefile
18@@ -514,8 +514,8 @@ else
19 endif
20
21 ifndef NO_LIBPERL
22-PERL_EMBED_LDOPTS = `perl -MExtUtils::Embed -e ldopts 2>/dev/null`
23-PERL_EMBED_CCOPTS = `perl -MExtUtils::Embed -e ccopts 2>/dev/null`
24+#PERL_EMBED_LDOPTS = `perl -MExtUtils::Embed -e ldopts 2>/dev/null`
25+#PERL_EMBED_CCOPTS = `perl -MExtUtils::Embed -e ccopts 2>/dev/null`
26 endif
27
28 ifneq ($(shell sh -c "(echo '\#include <EXTERN.h>'; echo '\#include <perl.h>'; echo 'int main(void) { perl_alloc(); return 0; }') | $(CC) -x c - $(PERL_EMBED_CCOPTS) -o $(BITBUCKET) $(PERL_EMBED_LDOPTS) > /dev/null 2>&1 && echo y"), y)
29--
301.7.5.4
31
diff --git a/recipes-kernel/linux/linux-bsc913x/bsc9131rdb/defconfig b/recipes-kernel/linux/linux-bsc913x/bsc9131rdb/defconfig
new file mode 100644
index 0000000..9f91c73
--- /dev/null
+++ b/recipes-kernel/linux/linux-bsc913x/bsc9131rdb/defconfig
@@ -0,0 +1,1958 @@
1#
2# Automatically generated make config: don't edit
3# Linux kernel version: 2.6.33.9-rt31
4# Wed Mar 7 11:18:39 2012
5#
6# CONFIG_PPC64 is not set
7
8#
9# Processor support
10#
11# CONFIG_PPC_BOOK3S_32 is not set
12CONFIG_PPC_85xx=y
13# CONFIG_PPC_8xx is not set
14# CONFIG_40x is not set
15# CONFIG_44x is not set
16# CONFIG_E200 is not set
17CONFIG_E500=y
18# CONFIG_PPC_E500MC is not set
19CONFIG_FSL_EMB_PERFMON=y
20CONFIG_BOOKE=y
21CONFIG_FSL_BOOKE=y
22CONFIG_PPC_FSL_BOOK3E=y
23CONFIG_PTE_64BIT=y
24# CONFIG_PHYS_64BIT is not set
25CONFIG_SPE=y
26CONFIG_PPC_MMU_NOHASH=y
27CONFIG_PPC_MMU_NOHASH_32=y
28CONFIG_PPC_BOOK3E_MMU=y
29# CONFIG_PPC_MM_SLICES is not set
30# CONFIG_SMP is not set
31CONFIG_PPC32=y
32CONFIG_WORD_SIZE=32
33# CONFIG_ARCH_PHYS_ADDR_T_64BIT is not set
34CONFIG_MMU=y
35CONFIG_GENERIC_CMOS_UPDATE=y
36CONFIG_GENERIC_TIME=y
37CONFIG_GENERIC_TIME_VSYSCALL=y
38CONFIG_GENERIC_CLOCKEVENTS=y
39CONFIG_GENERIC_HARDIRQS=y
40CONFIG_GENERIC_HARDIRQS_NO__DO_IRQ=y
41# CONFIG_HAVE_SETUP_PER_CPU_AREA is not set
42# CONFIG_NEED_PER_CPU_EMBED_FIRST_CHUNK is not set
43CONFIG_IRQ_PER_CPU=y
44CONFIG_NR_IRQS=512
45CONFIG_STACKTRACE_SUPPORT=y
46CONFIG_HAVE_LATENCYTOP_SUPPORT=y
47CONFIG_TRACE_IRQFLAGS_SUPPORT=y
48CONFIG_LOCKDEP_SUPPORT=y
49CONFIG_ARCH_HAS_ILOG2_U32=y
50CONFIG_GENERIC_HWEIGHT=y
51CONFIG_GENERIC_FIND_NEXT_BIT=y
52CONFIG_GENERIC_GPIO=y
53# CONFIG_ARCH_NO_VIRT_TO_BUS is not set
54CONFIG_PPC=y
55CONFIG_EARLY_PRINTK=y
56CONFIG_GENERIC_NVRAM=y
57CONFIG_SCHED_OMIT_FRAME_POINTER=y
58CONFIG_ARCH_MAY_HAVE_PC_FDC=y
59CONFIG_PPC_OF=y
60CONFIG_OF=y
61CONFIG_PPC_UDBG_16550=y
62# CONFIG_GENERIC_TBSYNC is not set
63CONFIG_AUDIT_ARCH=y
64CONFIG_GENERIC_BUG=y
65CONFIG_DTC=y
66CONFIG_DEFAULT_UIMAGE=y
67CONFIG_ARCH_HIBERNATION_POSSIBLE=y
68CONFIG_ARCH_SUSPEND_POSSIBLE=y
69# CONFIG_PPC_DCR_NATIVE is not set
70# CONFIG_PPC_DCR_MMIO is not set
71CONFIG_ARCH_SUPPORTS_DEBUG_PAGEALLOC=y
72CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
73CONFIG_CONSTRUCTORS=y
74
75#
76# General setup
77#
78CONFIG_EXPERIMENTAL=y
79CONFIG_BROKEN_ON_SMP=y
80CONFIG_LOCK_KERNEL=y
81CONFIG_INIT_ENV_ARG_LIMIT=32
82CONFIG_LOCALVERSION=""
83# CONFIG_LOCALVERSION_AUTO is not set
84CONFIG_SWAP=y
85CONFIG_SYSVIPC=y
86CONFIG_SYSVIPC_SYSCTL=y
87CONFIG_POSIX_MQUEUE=y
88CONFIG_POSIX_MQUEUE_SYSCTL=y
89CONFIG_BSD_PROCESS_ACCT=y
90# CONFIG_BSD_PROCESS_ACCT_V3 is not set
91# CONFIG_TASKSTATS is not set
92CONFIG_AUDIT=y
93# CONFIG_AUDITSYSCALL is not set
94
95#
96# RCU Subsystem
97#
98# CONFIG_TREE_RCU is not set
99CONFIG_TREE_PREEMPT_RCU=y
100# CONFIG_TINY_RCU is not set
101# CONFIG_RCU_TRACE is not set
102CONFIG_RCU_FANOUT=32
103# CONFIG_RCU_FANOUT_EXACT is not set
104# CONFIG_TREE_RCU_TRACE is not set
105CONFIG_IKCONFIG=y
106CONFIG_IKCONFIG_PROC=y
107CONFIG_LOG_BUF_SHIFT=14
108# CONFIG_GROUP_SCHED is not set
109# CONFIG_CGROUPS is not set
110CONFIG_SYSFS_DEPRECATED=y
111CONFIG_SYSFS_DEPRECATED_V2=y
112# CONFIG_RELAY is not set
113# CONFIG_NAMESPACES is not set
114CONFIG_BLK_DEV_INITRD=y
115CONFIG_INITRAMFS_SOURCE=""
116CONFIG_RD_GZIP=y
117# CONFIG_RD_BZIP2 is not set
118# CONFIG_RD_LZMA is not set
119# CONFIG_RD_LZO is not set
120# CONFIG_CC_OPTIMIZE_FOR_SIZE is not set
121CONFIG_SYSCTL=y
122CONFIG_ANON_INODES=y
123CONFIG_EMBEDDED=y
124CONFIG_SYSCTL_SYSCALL=y
125CONFIG_KALLSYMS=y
126CONFIG_KALLSYMS_EXTRA_PASS=y
127CONFIG_HOTPLUG=y
128CONFIG_PRINTK=y
129CONFIG_BUG=y
130CONFIG_ELF_CORE=y
131CONFIG_BASE_FULL=y
132CONFIG_FUTEX=y
133CONFIG_EPOLL=y
134CONFIG_SIGNALFD=y
135CONFIG_TIMERFD=y
136CONFIG_EVENTFD=y
137CONFIG_SHMEM=y
138CONFIG_AIO=y
139CONFIG_HAVE_PERF_EVENTS=y
140
141#
142# Kernel Performance Events And Counters
143#
144# CONFIG_PERF_EVENTS is not set
145# CONFIG_PERF_COUNTERS is not set
146CONFIG_VM_EVENT_COUNTERS=y
147CONFIG_PCI_QUIRKS=y
148CONFIG_COMPAT_BRK=y
149CONFIG_SLAB=y
150# CONFIG_SLUB is not set
151# CONFIG_SLOB is not set
152# CONFIG_PROFILING is not set
153CONFIG_HAVE_OPROFILE=y
154# CONFIG_KPROBES is not set
155CONFIG_HAVE_EFFICIENT_UNALIGNED_ACCESS=y
156CONFIG_HAVE_IOREMAP_PROT=y
157CONFIG_HAVE_KPROBES=y
158CONFIG_HAVE_KRETPROBES=y
159CONFIG_HAVE_ARCH_TRACEHOOK=y
160CONFIG_HAVE_DMA_ATTRS=y
161CONFIG_HAVE_DMA_API_DEBUG=y
162
163#
164# GCOV-based kernel profiling
165#
166CONFIG_SLOW_WORK=y
167# CONFIG_HAVE_GENERIC_DMA_COHERENT is not set
168CONFIG_SLABINFO=y
169CONFIG_RT_MUTEXES=y
170CONFIG_BASE_SMALL=0
171CONFIG_MODULES=y
172# CONFIG_MODULE_FORCE_LOAD is not set
173CONFIG_MODULE_UNLOAD=y
174CONFIG_MODULE_FORCE_UNLOAD=y
175# CONFIG_MODVERSIONS is not set
176# CONFIG_MODULE_SRCVERSION_ALL is not set
177CONFIG_BLOCK=y
178CONFIG_LBDAF=y
179# CONFIG_BLK_DEV_BSG is not set
180# CONFIG_BLK_DEV_INTEGRITY is not set
181
182#
183# IO Schedulers
184#
185CONFIG_IOSCHED_NOOP=y
186CONFIG_IOSCHED_DEADLINE=y
187CONFIG_IOSCHED_CFQ=y
188# CONFIG_DEFAULT_DEADLINE is not set
189CONFIG_DEFAULT_CFQ=y
190# CONFIG_DEFAULT_NOOP is not set
191CONFIG_DEFAULT_IOSCHED="cfq"
192# CONFIG_INLINE_SPIN_TRYLOCK is not set
193# CONFIG_INLINE_SPIN_TRYLOCK_BH is not set
194# CONFIG_INLINE_SPIN_LOCK is not set
195# CONFIG_INLINE_SPIN_LOCK_BH is not set
196# CONFIG_INLINE_SPIN_LOCK_IRQ is not set
197# CONFIG_INLINE_SPIN_LOCK_IRQSAVE is not set
198# CONFIG_INLINE_SPIN_UNLOCK is not set
199# CONFIG_INLINE_SPIN_UNLOCK_BH is not set
200# CONFIG_INLINE_SPIN_UNLOCK_IRQ is not set
201# CONFIG_INLINE_SPIN_UNLOCK_IRQRESTORE is not set
202# CONFIG_INLINE_READ_TRYLOCK is not set
203# CONFIG_INLINE_READ_LOCK is not set
204# CONFIG_INLINE_READ_LOCK_BH is not set
205# CONFIG_INLINE_READ_LOCK_IRQ is not set
206# CONFIG_INLINE_READ_LOCK_IRQSAVE is not set
207# CONFIG_INLINE_READ_UNLOCK is not set
208# CONFIG_INLINE_READ_UNLOCK_BH is not set
209# CONFIG_INLINE_READ_UNLOCK_IRQ is not set
210# CONFIG_INLINE_READ_UNLOCK_IRQRESTORE is not set
211# CONFIG_INLINE_WRITE_TRYLOCK is not set
212# CONFIG_INLINE_WRITE_LOCK is not set
213# CONFIG_INLINE_WRITE_LOCK_BH is not set
214# CONFIG_INLINE_WRITE_LOCK_IRQ is not set
215# CONFIG_INLINE_WRITE_LOCK_IRQSAVE is not set
216# CONFIG_INLINE_WRITE_UNLOCK is not set
217# CONFIG_INLINE_WRITE_UNLOCK_BH is not set
218# CONFIG_INLINE_WRITE_UNLOCK_IRQ is not set
219# CONFIG_INLINE_WRITE_UNLOCK_IRQRESTORE is not set
220# CONFIG_MUTEX_SPIN_ON_OWNER is not set
221CONFIG_FREEZER=y
222CONFIG_PPC_MSI_BITMAP=y
223
224#
225# Platform support
226#
227# CONFIG_PPC_CELL is not set
228# CONFIG_PPC_CELL_NATIVE is not set
229# CONFIG_PQ2ADS is not set
230CONFIG_FSL_SOC_BOOKE=y
231# CONFIG_MPC8540_ADS is not set
232# CONFIG_MPC8560_ADS is not set
233# CONFIG_FLEXCAN is not set
234# CONFIG_MPC85xx_CDS is not set
235# CONFIG_MPC85xx_MDS is not set
236# CONFIG_MPC8536_DS is not set
237# CONFIG_MPC85xx_DS is not set
238CONFIG_MPC85xx_RDB=y
239CONFIG_P1010_RDB=y
240# CONFIG_P1022_DS is not set
241CONFIG_BSC9131_QDS=y
242CONFIG_BSC9132_QDS=y
243CONFIG_BSC9131_RDB=y
244# CONFIG_SOCRATES is not set
245# CONFIG_KSI8560 is not set
246# CONFIG_XES_MPC85xx is not set
247# CONFIG_STX_GP3 is not set
248# CONFIG_TQM8540 is not set
249# CONFIG_TQM8541 is not set
250# CONFIG_TQM8548 is not set
251# CONFIG_TQM8555 is not set
252# CONFIG_TQM8560 is not set
253# CONFIG_SBC8548 is not set
254# CONFIG_SBC8560 is not set
255# CONFIG_P4080_DS is not set
256CONFIG_FSL_85XX_CACHE_SRAM=y
257# CONFIG_IPIC is not set
258CONFIG_MPIC=y
259# CONFIG_MPIC_WEIRD is not set
260CONFIG_PPC_I8259=y
261# CONFIG_PPC_RTAS is not set
262# CONFIG_MMIO_NVRAM is not set
263# CONFIG_PPC_MPC106 is not set
264# CONFIG_PPC_970_NAP is not set
265# CONFIG_PPC_INDIRECT_IO is not set
266# CONFIG_GENERIC_IOMAP is not set
267# CONFIG_CPU_FREQ is not set
268# CONFIG_QUICC_ENGINE is not set
269# CONFIG_CPM2 is not set
270CONFIG_FSL_ULI1575=y
271CONFIG_MPC8xxx_GPIO=y
272# CONFIG_SIMPLE_GPIO is not set
273
274#
275# Kernel options
276#
277CONFIG_HIGHMEM=y
278CONFIG_TICK_ONESHOT=y
279CONFIG_NO_HZ=y
280CONFIG_HIGH_RES_TIMERS=y
281CONFIG_GENERIC_CLOCKEVENTS_BUILD=y
282# CONFIG_HZ_100 is not set
283CONFIG_HZ_250=y
284# CONFIG_HZ_300 is not set
285# CONFIG_HZ_1000 is not set
286CONFIG_HZ=250
287CONFIG_SCHED_HRTICK=y
288# CONFIG_PREEMPT_NONE is not set
289# CONFIG_PREEMPT_VOLUNTARY is not set
290# CONFIG_PREEMPT_DESKTOP is not set
291CONFIG_PREEMPT_RT=y
292CONFIG_PREEMPT=y
293CONFIG_PREEMPT_SOFTIRQS=y
294CONFIG_PREEMPT_HARDIRQS=y
295CONFIG_RWSEM_GENERIC_SPINLOCK=y
296CONFIG_BINFMT_ELF=y
297# CONFIG_CORE_DUMP_DEFAULT_ELF_HEADERS is not set
298# CONFIG_HAVE_AOUT is not set
299# CONFIG_BINFMT_MISC is not set
300CONFIG_HUGETLB_PAGE_SIZE_VARIABLE=y
301CONFIG_MATH_EMULATION=y
302CONFIG_IOMMU_HELPER=y
303CONFIG_SWIOTLB=y
304CONFIG_ARCH_ENABLE_MEMORY_HOTPLUG=y
305CONFIG_ARCH_HAS_WALK_MEMORY=y
306CONFIG_ARCH_ENABLE_MEMORY_HOTREMOVE=y
307CONFIG_MAX_ACTIVE_REGIONS=32
308CONFIG_ARCH_FLATMEM_ENABLE=y
309CONFIG_ARCH_POPULATES_NODE_MAP=y
310CONFIG_SYS_SUPPORTS_HUGETLBFS=y
311CONFIG_SELECT_MEMORY_MODEL=y
312CONFIG_FLATMEM_MANUAL=y
313# CONFIG_DISCONTIGMEM_MANUAL is not set
314# CONFIG_SPARSEMEM_MANUAL is not set
315CONFIG_FLATMEM=y
316CONFIG_FLAT_NODE_MEM_MAP=y
317CONFIG_PAGEFLAGS_EXTENDED=y
318CONFIG_SPLIT_PTLOCK_CPUS=4
319CONFIG_MIGRATION=y
320# CONFIG_PHYS_ADDR_T_64BIT is not set
321CONFIG_ZONE_DMA_FLAG=1
322CONFIG_BOUNCE=y
323CONFIG_VIRT_TO_BUS=y
324# CONFIG_KSM is not set
325CONFIG_DEFAULT_MMAP_MIN_ADDR=4096
326CONFIG_PPC_4K_PAGES=y
327# CONFIG_PPC_16K_PAGES is not set
328# CONFIG_PPC_64K_PAGES is not set
329# CONFIG_PPC_256K_PAGES is not set
330CONFIG_FORCE_MAX_ZONEORDER=11
331CONFIG_PROC_DEVICETREE=y
332# CONFIG_CMDLINE_BOOL is not set
333CONFIG_EXTRA_TARGETS=""
334CONFIG_PM=y
335# CONFIG_PM_DEBUG is not set
336CONFIG_PM_SLEEP=y
337CONFIG_SUSPEND=y
338CONFIG_SUSPEND_FREEZER=y
339# CONFIG_HIBERNATION is not set
340# CONFIG_PM_RUNTIME is not set
341CONFIG_SECCOMP=y
342CONFIG_ISA_DMA_API=y
343
344#
345# Bus options
346#
347CONFIG_ZONE_DMA=y
348CONFIG_GENERIC_ISA_DMA=y
349CONFIG_PPC_INDIRECT_PCI=y
350CONFIG_FSL_SOC=y
351CONFIG_FSL_PCI=y
352CONFIG_FSL_PMC=y
353CONFIG_FSL_LBC=y
354CONFIG_FSL_IFC=y
355CONFIG_FSL_MPIC_MSG_INTS=y
356CONFIG_PPC_PCI_CHOICE=y
357CONFIG_PCI=y
358CONFIG_PCI_DOMAINS=y
359CONFIG_PCI_SYSCALL=y
360CONFIG_PCIEPORTBUS=y
361# CONFIG_PCIEAER is not set
362# CONFIG_PCIEASPM is not set
363CONFIG_ARCH_SUPPORTS_MSI=y
364CONFIG_PCI_MSI=y
365CONFIG_PCI_LEGACY=y
366# CONFIG_PCI_STUB is not set
367# CONFIG_PCI_IOV is not set
368# CONFIG_PCCARD is not set
369# CONFIG_HOTPLUG_PCI is not set
370# CONFIG_HAS_RAPIDIO is not set
371
372#
373# Advanced setup
374#
375CONFIG_ADVANCED_OPTIONS=y
376# CONFIG_LOWMEM_SIZE_BOOL is not set
377CONFIG_LOWMEM_SIZE=0x30000000
378CONFIG_LOWMEM_CAM_NUM_BOOL=y
379CONFIG_LOWMEM_CAM_NUM=6
380# CONFIG_RELOCATABLE is not set
381# CONFIG_PAGE_OFFSET_BOOL is not set
382CONFIG_PAGE_OFFSET=0xc0000000
383# CONFIG_KERNEL_START_BOOL is not set
384CONFIG_KERNEL_START=0xc0000000
385# CONFIG_PHYSICAL_START_BOOL is not set
386CONFIG_PHYSICAL_START=0x00000000
387CONFIG_PHYSICAL_ALIGN=0x04000000
388# CONFIG_TASK_SIZE_BOOL is not set
389CONFIG_TASK_SIZE=0xc0000000
390CONFIG_NET=y
391
392#
393# Networking options
394#
395CONFIG_PACKET=y
396# CONFIG_PACKET_MMAP is not set
397CONFIG_UNIX=y
398CONFIG_XFRM=y
399CONFIG_XFRM_USER=y
400# CONFIG_XFRM_SUB_POLICY is not set
401# CONFIG_XFRM_MIGRATE is not set
402# CONFIG_XFRM_STATISTICS is not set
403CONFIG_XFRM_IPCOMP=y
404CONFIG_NET_KEY=y
405# CONFIG_NET_KEY_MIGRATE is not set
406CONFIG_INET=y
407CONFIG_IP_MULTICAST=y
408CONFIG_IP_ADVANCED_ROUTER=y
409CONFIG_ASK_IP_FIB_HASH=y
410# CONFIG_IP_FIB_TRIE is not set
411CONFIG_IP_FIB_HASH=y
412CONFIG_IP_MULTIPLE_TABLES=y
413CONFIG_IP_ROUTE_MULTIPATH=y
414CONFIG_IP_ROUTE_VERBOSE=y
415CONFIG_IP_PNP=y
416CONFIG_IP_PNP_DHCP=y
417CONFIG_IP_PNP_BOOTP=y
418CONFIG_IP_PNP_RARP=y
419CONFIG_NET_IPIP=y
420CONFIG_NET_IPGRE=y
421CONFIG_NET_IPGRE_BROADCAST=y
422CONFIG_IP_MROUTE=y
423CONFIG_IP_PIMSM_V1=y
424CONFIG_IP_PIMSM_V2=y
425CONFIG_ARPD=y
426# CONFIG_SYN_COOKIES is not set
427CONFIG_INET_AH=y
428CONFIG_INET_ESP=y
429CONFIG_INET_IPCOMP=y
430CONFIG_INET_XFRM_TUNNEL=y
431CONFIG_INET_TUNNEL=y
432CONFIG_INET_XFRM_MODE_TRANSPORT=y
433CONFIG_INET_XFRM_MODE_TUNNEL=y
434CONFIG_INET_XFRM_MODE_BEET=y
435# CONFIG_INET_LRO is not set
436CONFIG_INET_DIAG=y
437CONFIG_INET_TCP_DIAG=y
438# CONFIG_TCP_CONG_ADVANCED is not set
439CONFIG_TCP_CONG_CUBIC=y
440CONFIG_DEFAULT_TCP_CONG="cubic"
441# CONFIG_TCP_MD5SIG is not set
442CONFIG_IPV6=y
443# CONFIG_IPV6_PRIVACY is not set
444# CONFIG_IPV6_ROUTER_PREF is not set
445# CONFIG_IPV6_OPTIMISTIC_DAD is not set
446# CONFIG_INET6_AH is not set
447# CONFIG_INET6_ESP is not set
448# CONFIG_INET6_IPCOMP is not set
449# CONFIG_IPV6_MIP6 is not set
450# CONFIG_INET6_XFRM_TUNNEL is not set
451# CONFIG_INET6_TUNNEL is not set
452CONFIG_INET6_XFRM_MODE_TRANSPORT=y
453CONFIG_INET6_XFRM_MODE_TUNNEL=y
454CONFIG_INET6_XFRM_MODE_BEET=y
455# CONFIG_INET6_XFRM_MODE_ROUTEOPTIMIZATION is not set
456CONFIG_IPV6_SIT=y
457# CONFIG_IPV6_SIT_6RD is not set
458CONFIG_IPV6_NDISC_NODETYPE=y
459# CONFIG_IPV6_TUNNEL is not set
460# CONFIG_IPV6_MULTIPLE_TABLES is not set
461# CONFIG_IPV6_MROUTE is not set
462# CONFIG_NETWORK_SECMARK is not set
463# CONFIG_NETFILTER is not set
464# CONFIG_IP_DCCP is not set
465# CONFIG_IP_SCTP is not set
466# CONFIG_RDS is not set
467# CONFIG_TIPC is not set
468# CONFIG_ATM is not set
469CONFIG_STP=y
470CONFIG_BRIDGE=y
471# CONFIG_NET_DSA is not set
472CONFIG_VLAN_8021Q=y
473# CONFIG_VLAN_8021Q_GVRP is not set
474# CONFIG_DECNET is not set
475CONFIG_LLC=y
476# CONFIG_LLC2 is not set
477# CONFIG_IPX is not set
478# CONFIG_ATALK is not set
479# CONFIG_X25 is not set
480# CONFIG_LAPB is not set
481# CONFIG_ECONET is not set
482# CONFIG_WAN_ROUTER is not set
483# CONFIG_PHONET is not set
484# CONFIG_IEEE802154 is not set
485# CONFIG_NET_SCHED is not set
486# CONFIG_DCB is not set
487
488#
489# Network testing
490#
491# CONFIG_NET_PKTGEN is not set
492# CONFIG_HAMRADIO is not set
493# CONFIG_CAN is not set
494# CONFIG_IRDA is not set
495# CONFIG_BT is not set
496# CONFIG_AF_RXRPC is not set
497CONFIG_FIB_RULES=y
498CONFIG_WIRELESS=y
499# CONFIG_CFG80211 is not set
500# CONFIG_LIB80211 is not set
501
502#
503# CFG80211 needs to be enabled for MAC80211
504#
505
506#
507# Some wireless drivers require a rate control algorithm
508#
509# CONFIG_WIMAX is not set
510# CONFIG_RFKILL is not set
511# CONFIG_NET_9P is not set
512
513#
514# Device Drivers
515#
516
517#
518# Generic Driver Options
519#
520CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug"
521# CONFIG_DEVTMPFS is not set
522CONFIG_STANDALONE=y
523CONFIG_PREVENT_FIRMWARE_BUILD=y
524CONFIG_FW_LOADER=y
525CONFIG_FIRMWARE_IN_KERNEL=y
526CONFIG_EXTRA_FIRMWARE=""
527# CONFIG_SYS_HYPERVISOR is not set
528# CONFIG_CONNECTOR is not set
529CONFIG_MTD=y
530# CONFIG_MTD_DEBUG is not set
531# CONFIG_MTD_TESTS is not set
532# CONFIG_MTD_CONCAT is not set
533CONFIG_MTD_PARTITIONS=y
534# CONFIG_MTD_REDBOOT_PARTS is not set
535CONFIG_MTD_CMDLINE_PARTS=y
536CONFIG_MTD_OF_PARTS=y
537# CONFIG_MTD_AR7_PARTS is not set
538
539#
540# User Modules And Translation Layers
541#
542CONFIG_MTD_CHAR=y
543CONFIG_MTD_BLKDEVS=y
544CONFIG_MTD_BLOCK=y
545CONFIG_FTL=y
546# CONFIG_NFTL is not set
547# CONFIG_INFTL is not set
548# CONFIG_RFD_FTL is not set
549# CONFIG_SSFDC is not set
550# CONFIG_MTD_OOPS is not set
551
552#
553# RAM/ROM/Flash chip drivers
554#
555CONFIG_MTD_CFI=y
556# CONFIG_MTD_JEDECPROBE is not set
557CONFIG_MTD_GEN_PROBE=y
558# CONFIG_MTD_CFI_ADV_OPTIONS is not set
559CONFIG_MTD_MAP_BANK_WIDTH_1=y
560CONFIG_MTD_MAP_BANK_WIDTH_2=y
561CONFIG_MTD_MAP_BANK_WIDTH_4=y
562# CONFIG_MTD_MAP_BANK_WIDTH_8 is not set
563# CONFIG_MTD_MAP_BANK_WIDTH_16 is not set
564# CONFIG_MTD_MAP_BANK_WIDTH_32 is not set
565CONFIG_MTD_CFI_I1=y
566CONFIG_MTD_CFI_I2=y
567# CONFIG_MTD_CFI_I4 is not set
568# CONFIG_MTD_CFI_I8 is not set
569CONFIG_MTD_CFI_INTELEXT=y
570CONFIG_MTD_CFI_AMDSTD=y
571# CONFIG_MTD_CFI_STAA is not set
572CONFIG_MTD_CFI_UTIL=y
573# CONFIG_MTD_RAM is not set
574# CONFIG_MTD_ROM is not set
575# CONFIG_MTD_ABSENT is not set
576
577#
578# Mapping drivers for chip access
579#
580# CONFIG_MTD_COMPLEX_MAPPINGS is not set
581# CONFIG_MTD_PHYSMAP is not set
582CONFIG_MTD_PHYSMAP_OF=y
583# CONFIG_MTD_INTEL_VR_NOR is not set
584# CONFIG_MTD_PLATRAM is not set
585
586#
587# Self-contained MTD device drivers
588#
589# CONFIG_MTD_PMC551 is not set
590# CONFIG_MTD_DATAFLASH is not set
591# CONFIG_MTD_M25P80 is not set
592CONFIG_MTD_FSL_M25P80=y
593CONFIG_M25PXX_USE_FAST_READ=y
594# CONFIG_MTD_SST25L is not set
595# CONFIG_MTD_SLRAM is not set
596# CONFIG_MTD_PHRAM is not set
597# CONFIG_MTD_MTDRAM is not set
598# CONFIG_MTD_BLOCK2MTD is not set
599
600#
601# Disk-On-Chip Device Drivers
602#
603# CONFIG_MTD_DOC2000 is not set
604# CONFIG_MTD_DOC2001 is not set
605# CONFIG_MTD_DOC2001PLUS is not set
606CONFIG_MTD_NAND=y
607# CONFIG_MTD_NAND_VERIFY_WRITE is not set
608# CONFIG_MTD_NAND_ECC_SMC is not set
609# CONFIG_MTD_NAND_MUSEUM_IDS is not set
610CONFIG_MTD_NAND_IDS=y
611# CONFIG_MTD_NAND_DISKONCHIP is not set
612# CONFIG_MTD_NAND_CAFE is not set
613# CONFIG_MTD_NAND_NANDSIM is not set
614CONFIG_MTD_NAND_PLATFORM=y
615# CONFIG_MTD_ALAUDA is not set
616CONFIG_MTD_NAND_FSL_ELBC=y
617CONFIG_MTD_NAND_FSL_IFC=y
618CONFIG_MTD_NAND_FSL_UPM=y
619# CONFIG_MTD_ONENAND is not set
620
621#
622# LPDDR flash memory drivers
623#
624# CONFIG_MTD_LPDDR is not set
625
626#
627# UBI - Unsorted block images
628#
629CONFIG_MTD_UBI=y
630CONFIG_MTD_UBI_WL_THRESHOLD=4096
631CONFIG_MTD_UBI_BEB_RESERVE=1
632# CONFIG_MTD_UBI_GLUEBI is not set
633
634#
635# UBI debugging options
636#
637# CONFIG_MTD_UBI_DEBUG is not set
638CONFIG_OF_DEVICE=y
639CONFIG_OF_GPIO=y
640CONFIG_OF_I2C=y
641CONFIG_OF_SPI=y
642CONFIG_OF_MDIO=y
643# CONFIG_PARPORT is not set
644CONFIG_BLK_DEV=y
645# CONFIG_BLK_DEV_FD is not set
646# CONFIG_BLK_CPQ_DA is not set
647# CONFIG_BLK_CPQ_CISS_DA is not set
648# CONFIG_BLK_DEV_DAC960 is not set
649# CONFIG_BLK_DEV_UMEM is not set
650# CONFIG_BLK_DEV_COW_COMMON is not set
651CONFIG_BLK_DEV_LOOP=y
652# CONFIG_BLK_DEV_CRYPTOLOOP is not set
653
654#
655# DRBD disabled because PROC_FS, INET or CONNECTOR not selected
656#
657# CONFIG_BLK_DEV_NBD is not set
658# CONFIG_BLK_DEV_SX8 is not set
659# CONFIG_BLK_DEV_UB is not set
660CONFIG_BLK_DEV_RAM=y
661CONFIG_BLK_DEV_RAM_COUNT=16
662CONFIG_BLK_DEV_RAM_SIZE=131072
663# CONFIG_BLK_DEV_XIP is not set
664# CONFIG_CDROM_PKTCDVD is not set
665# CONFIG_ATA_OVER_ETH is not set
666# CONFIG_BLK_DEV_HD is not set
667CONFIG_MISC_DEVICES=y
668# CONFIG_AD525X_DPOT is not set
669# CONFIG_PHANTOM is not set
670# CONFIG_SGI_IOC4 is not set
671# CONFIG_TIFM_CORE is not set
672# CONFIG_ICS932S401 is not set
673# CONFIG_ENCLOSURE_SERVICES is not set
674# CONFIG_HP_ILO is not set
675# CONFIG_ISL29003 is not set
676# CONFIG_DS1682 is not set
677# CONFIG_TI_DAC7512 is not set
678# CONFIG_C2PORT is not set
679
680#
681# EEPROM support
682#
683# CONFIG_EEPROM_AT24 is not set
684# CONFIG_EEPROM_AT25 is not set
685# CONFIG_EEPROM_LEGACY is not set
686# CONFIG_EEPROM_MAX6875 is not set
687# CONFIG_EEPROM_93CX6 is not set
688# CONFIG_CB710_CORE is not set
689# CONFIG_IWMC3200TOP is not set
690# CONFIG_FSL_PME is not set
691CONFIG_BSC9131_HET_IPC=y
692CONFIG_BSC9131_HET_MGR=y
693CONFIG_FSL_HUGEPAGE_SHM=y
694# CONFIG_FSL_PWM is not set
695CONFIG_HAVE_IDE=y
696# CONFIG_IDE is not set
697
698#
699# SCSI device support
700#
701# CONFIG_RAID_ATTRS is not set
702CONFIG_SCSI=y
703CONFIG_SCSI_DMA=y
704# CONFIG_SCSI_TGT is not set
705# CONFIG_SCSI_NETLINK is not set
706CONFIG_SCSI_PROC_FS=y
707
708#
709# SCSI support type (disk, tape, CD-ROM)
710#
711CONFIG_BLK_DEV_SD=y
712CONFIG_CHR_DEV_ST=y
713# CONFIG_CHR_DEV_OSST is not set
714CONFIG_BLK_DEV_SR=y
715# CONFIG_BLK_DEV_SR_VENDOR is not set
716CONFIG_CHR_DEV_SG=y
717# CONFIG_CHR_DEV_SCH is not set
718CONFIG_SCSI_MULTI_LUN=y
719# CONFIG_SCSI_CONSTANTS is not set
720CONFIG_SCSI_LOGGING=y
721# CONFIG_SCSI_SCAN_ASYNC is not set
722CONFIG_SCSI_WAIT_SCAN=m
723
724#
725# SCSI Transports
726#
727# CONFIG_SCSI_SPI_ATTRS is not set
728# CONFIG_SCSI_FC_ATTRS is not set
729# CONFIG_SCSI_ISCSI_ATTRS is not set
730# CONFIG_SCSI_SAS_LIBSAS is not set
731# CONFIG_SCSI_SRP_ATTRS is not set
732CONFIG_SCSI_LOWLEVEL=y
733# CONFIG_ISCSI_TCP is not set
734# CONFIG_SCSI_BNX2_ISCSI is not set
735# CONFIG_BE2ISCSI is not set
736# CONFIG_BLK_DEV_3W_XXXX_RAID is not set
737# CONFIG_SCSI_HPSA is not set
738# CONFIG_SCSI_3W_9XXX is not set
739# CONFIG_SCSI_3W_SAS is not set
740# CONFIG_SCSI_ACARD is not set
741# CONFIG_SCSI_AACRAID is not set
742# CONFIG_SCSI_AIC7XXX is not set
743# CONFIG_SCSI_AIC7XXX_OLD is not set
744# CONFIG_SCSI_AIC79XX is not set
745# CONFIG_SCSI_AIC94XX is not set
746# CONFIG_SCSI_MVSAS is not set
747# CONFIG_SCSI_DPT_I2O is not set
748# CONFIG_SCSI_ADVANSYS is not set
749# CONFIG_SCSI_ARCMSR is not set
750# CONFIG_MEGARAID_NEWGEN is not set
751# CONFIG_MEGARAID_LEGACY is not set
752# CONFIG_MEGARAID_SAS is not set
753# CONFIG_SCSI_MPT2SAS is not set
754# CONFIG_SCSI_HPTIOP is not set
755# CONFIG_SCSI_BUSLOGIC is not set
756# CONFIG_LIBFC is not set
757# CONFIG_LIBFCOE is not set
758# CONFIG_FCOE is not set
759# CONFIG_SCSI_DMX3191D is not set
760# CONFIG_SCSI_EATA is not set
761# CONFIG_SCSI_FUTURE_DOMAIN is not set
762# CONFIG_SCSI_GDTH is not set
763# CONFIG_SCSI_IPS is not set
764# CONFIG_SCSI_INITIO is not set
765# CONFIG_SCSI_INIA100 is not set
766# CONFIG_SCSI_STEX is not set
767# CONFIG_SCSI_SYM53C8XX_2 is not set
768# CONFIG_SCSI_IPR is not set
769# CONFIG_SCSI_QLOGIC_1280 is not set
770# CONFIG_SCSI_QLA_FC is not set
771# CONFIG_SCSI_QLA_ISCSI is not set
772# CONFIG_SCSI_LPFC is not set
773# CONFIG_SCSI_DC395x is not set
774# CONFIG_SCSI_DC390T is not set
775# CONFIG_SCSI_NSP32 is not set
776# CONFIG_SCSI_DEBUG is not set
777# CONFIG_SCSI_PMCRAID is not set
778# CONFIG_SCSI_PM8001 is not set
779# CONFIG_SCSI_SRP is not set
780# CONFIG_SCSI_BFA_FC is not set
781# CONFIG_SCSI_DH is not set
782# CONFIG_SCSI_OSD_INITIATOR is not set
783CONFIG_ATA=y
784# CONFIG_ATA_NONSTANDARD is not set
785CONFIG_ATA_VERBOSE_ERROR=y
786CONFIG_SATA_PMP=y
787CONFIG_SATA_AHCI=y
788CONFIG_SATA_SIL24=y
789CONFIG_SATA_FSL=y
790CONFIG_ATA_SFF=y
791# CONFIG_SATA_SVW is not set
792# CONFIG_ATA_PIIX is not set
793# CONFIG_SATA_MV is not set
794# CONFIG_SATA_NV is not set
795# CONFIG_PDC_ADMA is not set
796# CONFIG_SATA_QSTOR is not set
797# CONFIG_SATA_PROMISE is not set
798# CONFIG_SATA_SX4 is not set
799# CONFIG_SATA_SIL is not set
800# CONFIG_SATA_SIS is not set
801# CONFIG_SATA_ULI is not set
802# CONFIG_SATA_VIA is not set
803# CONFIG_SATA_VITESSE is not set
804# CONFIG_SATA_INIC162X is not set
805# CONFIG_PATA_ALI is not set
806# CONFIG_PATA_AMD is not set
807# CONFIG_PATA_ARTOP is not set
808# CONFIG_PATA_ATP867X is not set
809# CONFIG_PATA_ATIIXP is not set
810# CONFIG_PATA_CMD640_PCI is not set
811# CONFIG_PATA_CMD64X is not set
812# CONFIG_PATA_CS5520 is not set
813# CONFIG_PATA_CS5530 is not set
814# CONFIG_PATA_CYPRESS is not set
815# CONFIG_PATA_EFAR is not set
816# CONFIG_ATA_GENERIC is not set
817# CONFIG_PATA_HPT366 is not set
818# CONFIG_PATA_HPT37X is not set
819# CONFIG_PATA_HPT3X2N is not set
820# CONFIG_PATA_HPT3X3 is not set
821# CONFIG_PATA_IT821X is not set
822# CONFIG_PATA_IT8213 is not set
823# CONFIG_PATA_JMICRON is not set
824# CONFIG_PATA_TRIFLEX is not set
825# CONFIG_PATA_MARVELL is not set
826# CONFIG_PATA_MPIIX is not set
827# CONFIG_PATA_OLDPIIX is not set
828# CONFIG_PATA_NETCELL is not set
829# CONFIG_PATA_NINJA32 is not set
830# CONFIG_PATA_NS87410 is not set
831# CONFIG_PATA_NS87415 is not set
832# CONFIG_PATA_OPTI is not set
833# CONFIG_PATA_OPTIDMA is not set
834# CONFIG_PATA_PDC2027X is not set
835# CONFIG_PATA_PDC_OLD is not set
836# CONFIG_PATA_RADISYS is not set
837# CONFIG_PATA_RDC is not set
838# CONFIG_PATA_RZ1000 is not set
839# CONFIG_PATA_SC1200 is not set
840# CONFIG_PATA_SERVERWORKS is not set
841# CONFIG_PATA_SIL680 is not set
842# CONFIG_PATA_SIS is not set
843# CONFIG_PATA_TOSHIBA is not set
844# CONFIG_PATA_VIA is not set
845# CONFIG_PATA_WINBOND is not set
846# CONFIG_PATA_PLATFORM is not set
847# CONFIG_PATA_SCH is not set
848CONFIG_MD=y
849CONFIG_BLK_DEV_MD=y
850# CONFIG_MD_AUTODETECT is not set
851# CONFIG_MD_LINEAR is not set
852# CONFIG_MD_RAID0 is not set
853# CONFIG_MD_RAID1 is not set
854# CONFIG_MD_RAID10 is not set
855CONFIG_MD_RAID456=y
856CONFIG_MD_RAID6_PQ=y
857# CONFIG_ASYNC_RAID6_TEST is not set
858# CONFIG_MD_MULTIPATH is not set
859# CONFIG_MD_FAULTY is not set
860# CONFIG_BLK_DEV_DM is not set
861# CONFIG_FUSION is not set
862
863#
864# IEEE 1394 (FireWire) support
865#
866
867#
868# You can enable one or both FireWire driver stacks.
869#
870
871#
872# The newer stack is recommended.
873#
874# CONFIG_FIREWIRE is not set
875# CONFIG_IEEE1394 is not set
876# CONFIG_I2O is not set
877# CONFIG_MACINTOSH_DRIVERS is not set
878CONFIG_NETDEVICES=y
879# CONFIG_AS_FASTPATH is not set
880CONFIG_DUMMY=y
881# CONFIG_BONDING is not set
882# CONFIG_MACVLAN is not set
883# CONFIG_EQUALIZER is not set
884# CONFIG_TUN is not set
885# CONFIG_VETH is not set
886
887#
888# MPC85xx PCI agent mode driver
889#
890# CONFIG_CARDNET is not set
891
892#
893# MPC85xx board PCI demo driver
894#
895# CONFIG_BOARDNET is not set
896# CONFIG_ARCNET is not set
897CONFIG_PHYLIB=y
898
899#
900# MII PHY device drivers
901#
902# CONFIG_MARVELL_PHY is not set
903# CONFIG_DAVICOM_PHY is not set
904# CONFIG_QSEMI_PHY is not set
905# CONFIG_LXT_PHY is not set
906# CONFIG_CICADA_PHY is not set
907CONFIG_VITESSE_PHY=y
908# CONFIG_SMSC_PHY is not set
909# CONFIG_BROADCOM_PHY is not set
910# CONFIG_ICPLUS_PHY is not set
911# CONFIG_REALTEK_PHY is not set
912# CONFIG_NATIONAL_PHY is not set
913# CONFIG_STE10XP is not set
914# CONFIG_LSI_ET1011C_PHY is not set
915CONFIG_FIXED_PHY=y
916# CONFIG_MDIO_BITBANG is not set
917CONFIG_NET_ETHERNET=y
918CONFIG_MII=y
919# CONFIG_HAPPYMEAL is not set
920# CONFIG_SUNGEM is not set
921# CONFIG_CASSINI is not set
922# CONFIG_NET_VENDOR_3COM is not set
923# CONFIG_ENC28J60 is not set
924# CONFIG_ETHOC is not set
925# CONFIG_DNET is not set
926# CONFIG_NET_TULIP is not set
927# CONFIG_HP100 is not set
928# CONFIG_IBM_NEW_EMAC_ZMII is not set
929# CONFIG_IBM_NEW_EMAC_RGMII is not set
930# CONFIG_IBM_NEW_EMAC_TAH is not set
931# CONFIG_IBM_NEW_EMAC_EMAC4 is not set
932# CONFIG_IBM_NEW_EMAC_NO_FLOW_CTRL is not set
933# CONFIG_IBM_NEW_EMAC_MAL_CLR_ICINTSTAT is not set
934# CONFIG_IBM_NEW_EMAC_MAL_COMMON_ERR is not set
935# CONFIG_NET_PCI is not set
936# CONFIG_B44 is not set
937# CONFIG_KS8842 is not set
938# CONFIG_KS8851 is not set
939# CONFIG_KS8851_MLL is not set
940# CONFIG_ATL2 is not set
941# CONFIG_XILINX_EMACLITE is not set
942CONFIG_NETDEV_1000=y
943# CONFIG_ACENIC is not set
944# CONFIG_DL2K is not set
945# CONFIG_E1000 is not set
946CONFIG_E1000E=y
947# CONFIG_IP1000 is not set
948# CONFIG_IGB is not set
949# CONFIG_IGBVF is not set
950# CONFIG_NS83820 is not set
951# CONFIG_HAMACHI is not set
952# CONFIG_YELLOWFIN is not set
953# CONFIG_R8169 is not set
954# CONFIG_SIS190 is not set
955# CONFIG_SKGE is not set
956# CONFIG_SKY2 is not set
957# CONFIG_VIA_VELOCITY is not set
958# CONFIG_TIGON3 is not set
959# CONFIG_BNX2 is not set
960# CONFIG_CNIC is not set
961CONFIG_FSL_PQ_MDIO=y
962CONFIG_GIANFAR=y
963# CONFIG_TCP_FAST_ACK is not set
964# CONFIG_GFAR_HW_TCP_RECEIVE_OFFLOAD is not set
965CONFIG_GFAR_SKBUFF_RECYCLING=y
966# CONFIG_RX_TX_BD_XNGE is not set
967CONFIG_GIANFAR_TXNAPI=y
968CONFIG_GIANFAR_L2SRAM=y
969# CONFIG_GFAR_SW_VLAN is not set
970# CONFIG_GIANFAR_SG_SUPPORT is not set
971# CONFIG_NET_GIANFAR_FP is not set
972# CONFIG_1588_MUX_eTSEC1 is not set
973# CONFIG_1588_MUX_eTSEC2 is not set
974# CONFIG_GFAR_SW_PKT_STEERING is not set
975# CONFIG_MV643XX_ETH is not set
976# CONFIG_QLA3XXX is not set
977# CONFIG_ATL1 is not set
978# CONFIG_ATL1E is not set
979# CONFIG_ATL1C is not set
980# CONFIG_JME is not set
981# CONFIG_NETDEV_10000 is not set
982# CONFIG_TR is not set
983CONFIG_WLAN=y
984# CONFIG_AIRO is not set
985# CONFIG_ATMEL is not set
986# CONFIG_PRISM54 is not set
987# CONFIG_USB_ZD1201 is not set
988# CONFIG_HOSTAP is not set
989
990#
991# Enable WiMAX (Networking options) to see the WiMAX drivers
992#
993
994#
995# USB Network Adapters
996#
997# CONFIG_USB_CATC is not set
998# CONFIG_USB_KAWETH is not set
999# CONFIG_USB_PEGASUS is not set
1000# CONFIG_USB_RTL8150 is not set
1001# CONFIG_USB_USBNET is not set
1002# CONFIG_WAN is not set
1003# CONFIG_FDDI is not set
1004# CONFIG_HIPPI is not set
1005# CONFIG_PPP is not set
1006# CONFIG_SLIP is not set
1007# CONFIG_NET_FC is not set
1008# CONFIG_NETCONSOLE is not set
1009# CONFIG_NETPOLL is not set
1010# CONFIG_NET_POLL_CONTROLLER is not set
1011# CONFIG_VMXNET3 is not set
1012# CONFIG_ISDN is not set
1013# CONFIG_PHONE is not set
1014
1015#
1016# Input device support
1017#
1018CONFIG_INPUT=y
1019CONFIG_INPUT_FF_MEMLESS=m
1020# CONFIG_INPUT_POLLDEV is not set
1021# CONFIG_INPUT_SPARSEKMAP is not set
1022
1023#
1024# Userland interfaces
1025#
1026# CONFIG_INPUT_MOUSEDEV is not set
1027# CONFIG_INPUT_JOYDEV is not set
1028# CONFIG_INPUT_EVDEV is not set
1029# CONFIG_INPUT_EVBUG is not set
1030
1031#
1032# Input Device Drivers
1033#
1034# CONFIG_INPUT_KEYBOARD is not set
1035# CONFIG_INPUT_MOUSE is not set
1036# CONFIG_INPUT_JOYSTICK is not set
1037# CONFIG_INPUT_TABLET is not set
1038# CONFIG_INPUT_TOUCHSCREEN is not set
1039# CONFIG_INPUT_MISC is not set
1040
1041#
1042# Hardware I/O ports
1043#
1044CONFIG_SERIO=y
1045CONFIG_SERIO_I8042=y
1046CONFIG_SERIO_SERPORT=y
1047# CONFIG_SERIO_PCIPS2 is not set
1048CONFIG_SERIO_LIBPS2=y
1049# CONFIG_SERIO_RAW is not set
1050# CONFIG_SERIO_XILINX_XPS_PS2 is not set
1051# CONFIG_SERIO_ALTERA_PS2 is not set
1052# CONFIG_GAMEPORT is not set
1053
1054#
1055# Character devices
1056#
1057CONFIG_VT=y
1058CONFIG_CONSOLE_TRANSLATIONS=y
1059CONFIG_VT_CONSOLE=y
1060CONFIG_HW_CONSOLE=y
1061# CONFIG_VT_HW_CONSOLE_BINDING is not set
1062CONFIG_DEVKMEM=y
1063# CONFIG_SERIAL_NONSTANDARD is not set
1064# CONFIG_NOZOMI is not set
1065CONFIG_FSL_SIM=y
1066
1067#
1068# Serial drivers
1069#
1070CONFIG_SERIAL_8250=y
1071CONFIG_SERIAL_8250_CONSOLE=y
1072CONFIG_SERIAL_8250_PCI=y
1073CONFIG_SERIAL_8250_NR_UARTS=2
1074CONFIG_SERIAL_8250_RUNTIME_UARTS=2
1075CONFIG_SERIAL_8250_EXTENDED=y
1076CONFIG_SERIAL_8250_MANY_PORTS=y
1077CONFIG_SERIAL_8250_SHARE_IRQ=y
1078CONFIG_SERIAL_8250_DETECT_IRQ=y
1079CONFIG_SERIAL_8250_RSA=y
1080
1081#
1082# Non-8250 serial port support
1083#
1084# CONFIG_SERIAL_MAX3100 is not set
1085# CONFIG_SERIAL_UARTLITE is not set
1086CONFIG_SERIAL_CORE=y
1087CONFIG_SERIAL_CORE_CONSOLE=y
1088# CONFIG_SERIAL_JSM is not set
1089# CONFIG_SERIAL_OF_PLATFORM is not set
1090# CONFIG_SERIAL_GRLIB_GAISLER_APBUART is not set
1091CONFIG_UNIX98_PTYS=y
1092# CONFIG_DEVPTS_MULTIPLE_INSTANCES is not set
1093CONFIG_LEGACY_PTYS=y
1094CONFIG_LEGACY_PTY_COUNT=256
1095# CONFIG_HVC_UDBG is not set
1096# CONFIG_IPMI_HANDLER is not set
1097CONFIG_HW_RANDOM=y
1098# CONFIG_HW_RANDOM_TIMERIOMEM is not set
1099CONFIG_NVRAM=y
1100# CONFIG_R3964 is not set
1101# CONFIG_APPLICOM is not set
1102# CONFIG_RAW_DRIVER is not set
1103# CONFIG_TCG_TPM is not set
1104CONFIG_DEVPORT=y
1105CONFIG_I2C=y
1106CONFIG_I2C_BOARDINFO=y
1107CONFIG_I2C_COMPAT=y
1108CONFIG_I2C_CHARDEV=y
1109CONFIG_I2C_HELPER_AUTO=y
1110
1111#
1112# I2C Hardware Bus support
1113#
1114
1115#
1116# PC SMBus host controller drivers
1117#
1118# CONFIG_I2C_ALI1535 is not set
1119# CONFIG_I2C_ALI1563 is not set
1120# CONFIG_I2C_ALI15X3 is not set
1121# CONFIG_I2C_AMD756 is not set
1122# CONFIG_I2C_AMD8111 is not set
1123# CONFIG_I2C_I801 is not set
1124# CONFIG_I2C_ISCH is not set
1125# CONFIG_I2C_PIIX4 is not set
1126# CONFIG_I2C_NFORCE2 is not set
1127# CONFIG_I2C_SIS5595 is not set
1128# CONFIG_I2C_SIS630 is not set
1129# CONFIG_I2C_SIS96X is not set
1130# CONFIG_I2C_VIA is not set
1131# CONFIG_I2C_VIAPRO is not set
1132
1133#
1134# I2C system bus drivers (mostly embedded / system-on-chip)
1135#
1136# CONFIG_I2C_GPIO is not set
1137CONFIG_I2C_MPC=y
1138# CONFIG_I2C_OCORES is not set
1139# CONFIG_I2C_SIMTEC is not set
1140
1141#
1142# External I2C/SMBus adapter drivers
1143#
1144# CONFIG_I2C_PARPORT_LIGHT is not set
1145# CONFIG_I2C_TAOS_EVM is not set
1146# CONFIG_I2C_TINY_USB is not set
1147
1148#
1149# Other I2C/SMBus bus drivers
1150#
1151# CONFIG_I2C_PCA_PLATFORM is not set
1152# CONFIG_I2C_STUB is not set
1153
1154#
1155# Miscellaneous I2C Chip support
1156#
1157# CONFIG_SENSORS_TSL2550 is not set
1158# CONFIG_I2C_DEBUG_CORE is not set
1159# CONFIG_I2C_DEBUG_ALGO is not set
1160# CONFIG_I2C_DEBUG_BUS is not set
1161# CONFIG_I2C_DEBUG_CHIP is not set
1162CONFIG_SPI=y
1163CONFIG_SPI_MASTER=y
1164
1165#
1166# SPI Master Controller Drivers
1167#
1168CONFIG_SPI_BITBANG=y
1169# CONFIG_SPI_GPIO is not set
1170# CONFIG_SPI_MPC8xxx is not set
1171CONFIG_FSL_ESPI=y
1172# CONFIG_SPI_XILINX is not set
1173# CONFIG_SPI_DESIGNWARE is not set
1174
1175#
1176# SPI Protocol Masters
1177#
1178# CONFIG_SPI_SPIDEV is not set
1179# CONFIG_SPI_TLE62X0 is not set
1180
1181#
1182# PPS support
1183#
1184# CONFIG_PPS is not set
1185CONFIG_ARCH_WANT_OPTIONAL_GPIOLIB=y
1186CONFIG_ARCH_REQUIRE_GPIOLIB=y
1187CONFIG_GPIOLIB=y
1188# CONFIG_GPIO_SYSFS is not set
1189
1190#
1191# Memory mapped GPIO expanders:
1192#
1193# CONFIG_GPIO_XILINX is not set
1194
1195#
1196# I2C GPIO expanders:
1197#
1198# CONFIG_GPIO_MAX732X is not set
1199# CONFIG_GPIO_PCA953X is not set
1200# CONFIG_GPIO_PCF857X is not set
1201# CONFIG_GPIO_ADP5588 is not set
1202
1203#
1204# PCI GPIO expanders:
1205#
1206# CONFIG_GPIO_CS5535 is not set
1207# CONFIG_GPIO_BT8XX is not set
1208# CONFIG_GPIO_LANGWELL is not set
1209
1210#
1211# SPI GPIO expanders:
1212#
1213# CONFIG_GPIO_MAX7301 is not set
1214# CONFIG_GPIO_MCP23S08 is not set
1215# CONFIG_GPIO_MC33880 is not set
1216
1217#
1218# AC97 GPIO expanders:
1219#
1220# CONFIG_W1 is not set
1221# CONFIG_POWER_SUPPLY is not set
1222# CONFIG_HWMON is not set
1223# CONFIG_THERMAL is not set
1224CONFIG_WATCHDOG=y
1225# CONFIG_WATCHDOG_NOWAYOUT is not set
1226
1227#
1228# Watchdog Device Drivers
1229#
1230# CONFIG_SOFT_WATCHDOG is not set
1231# CONFIG_ALIM7101_WDT is not set
1232CONFIG_BOOKE_WDT=y
1233CONFIG_BOOKE_WDT_TESTER=m
1234
1235#
1236# PCI-based Watchdog Cards
1237#
1238# CONFIG_PCIPCWATCHDOG is not set
1239# CONFIG_WDTPCI is not set
1240
1241#
1242# USB-based Watchdog Cards
1243#
1244# CONFIG_USBPCWATCHDOG is not set
1245CONFIG_SSB_POSSIBLE=y
1246
1247#
1248# Sonics Silicon Backplane
1249#
1250# CONFIG_SSB is not set
1251
1252#
1253# Multifunction device drivers
1254#
1255# CONFIG_MFD_CORE is not set
1256# CONFIG_MFD_SM501 is not set
1257# CONFIG_HTC_PASIC3 is not set
1258# CONFIG_TPS65010 is not set
1259# CONFIG_TWL4030_CORE is not set
1260# CONFIG_MFD_TMIO is not set
1261# CONFIG_PMIC_DA903X is not set
1262# CONFIG_PMIC_ADP5520 is not set
1263# CONFIG_MFD_WM8400 is not set
1264# CONFIG_MFD_WM831X is not set
1265# CONFIG_MFD_WM8350_I2C is not set
1266# CONFIG_MFD_PCF50633 is not set
1267# CONFIG_MFD_MC13783 is not set
1268# CONFIG_AB3100_CORE is not set
1269# CONFIG_EZX_PCAP is not set
1270# CONFIG_MFD_88PM8607 is not set
1271# CONFIG_AB4500_CORE is not set
1272# CONFIG_REGULATOR is not set
1273# CONFIG_MEDIA_SUPPORT is not set
1274
1275#
1276# Graphics support
1277#
1278# CONFIG_AGP is not set
1279CONFIG_VGA_ARB=y
1280# CONFIG_DRM is not set
1281# CONFIG_VGASTATE is not set
1282CONFIG_VIDEO_OUTPUT_CONTROL=y
1283# CONFIG_FB is not set
1284# CONFIG_BACKLIGHT_LCD_SUPPORT is not set
1285
1286#
1287# Display device support
1288#
1289# CONFIG_DISPLAY_SUPPORT is not set
1290
1291#
1292# Console display driver support
1293#
1294CONFIG_VGA_CONSOLE=y
1295# CONFIG_VGACON_SOFT_SCROLLBACK is not set
1296CONFIG_DUMMY_CONSOLE=y
1297# CONFIG_SOUND is not set
1298# CONFIG_HID_SUPPORT is not set
1299CONFIG_USB_SUPPORT=y
1300CONFIG_USB_ARCH_HAS_HCD=y
1301CONFIG_USB_ARCH_HAS_OHCI=y
1302CONFIG_USB_ARCH_HAS_EHCI=y
1303CONFIG_USB=y
1304# CONFIG_USB_DEBUG is not set
1305# CONFIG_USB_ANNOUNCE_NEW_DEVICES is not set
1306
1307#
1308# Miscellaneous USB options
1309#
1310CONFIG_USB_DEVICEFS=y
1311# CONFIG_USB_DEVICE_CLASS is not set
1312# CONFIG_USB_DYNAMIC_MINORS is not set
1313# CONFIG_USB_SUSPEND is not set
1314# CONFIG_USB_OTG is not set
1315# CONFIG_USB_OTG_WHITELIST is not set
1316# CONFIG_USB_OTG_BLACKLIST_HUB is not set
1317# CONFIG_USB_MON is not set
1318# CONFIG_USB_WUSB is not set
1319# CONFIG_USB_WUSB_CBAF is not set
1320
1321#
1322# USB Host Controller Drivers
1323#
1324# CONFIG_USB_C67X00_HCD is not set
1325# CONFIG_USB_XHCI_HCD is not set
1326CONFIG_USB_EHCI_HCD=y
1327CONFIG_USB_EHCI_ROOT_HUB_TT=y
1328# CONFIG_USB_EHCI_TT_NEWSCHED is not set
1329# CONFIG_XPS_USB_HCD_XILINX is not set
1330CONFIG_USB_EHCI_FSL=y
1331CONFIG_USB_EHCI_HCD_PPC_OF=y
1332# CONFIG_USB_OXU210HP_HCD is not set
1333# CONFIG_USB_ISP116X_HCD is not set
1334# CONFIG_USB_ISP1760_HCD is not set
1335# CONFIG_USB_ISP1362_HCD is not set
1336CONFIG_USB_OHCI_HCD=y
1337CONFIG_USB_OHCI_HCD_PPC_OF_BE=y
1338CONFIG_USB_OHCI_HCD_PPC_OF_LE=y
1339CONFIG_USB_OHCI_HCD_PPC_OF=y
1340CONFIG_USB_OHCI_HCD_PCI=y
1341CONFIG_USB_OHCI_BIG_ENDIAN_DESC=y
1342CONFIG_USB_OHCI_BIG_ENDIAN_MMIO=y
1343CONFIG_USB_OHCI_LITTLE_ENDIAN=y
1344# CONFIG_USB_UHCI_HCD is not set
1345# CONFIG_USB_SL811_HCD is not set
1346# CONFIG_USB_R8A66597_HCD is not set
1347# CONFIG_USB_WHCI_HCD is not set
1348# CONFIG_USB_HWA_HCD is not set
1349
1350#
1351# USB Device Class drivers
1352#
1353# CONFIG_USB_ACM is not set
1354# CONFIG_USB_PRINTER is not set
1355# CONFIG_USB_WDM is not set
1356# CONFIG_USB_TMC is not set
1357
1358#
1359# NOTE: USB_STORAGE depends on SCSI but BLK_DEV_SD may
1360#
1361
1362#
1363# also be needed; see USB_STORAGE Help for more info
1364#
1365CONFIG_USB_STORAGE=y
1366# CONFIG_USB_STORAGE_DEBUG is not set
1367# CONFIG_USB_STORAGE_DATAFAB is not set
1368# CONFIG_USB_STORAGE_FREECOM is not set
1369# CONFIG_USB_STORAGE_ISD200 is not set
1370# CONFIG_USB_STORAGE_USBAT is not set
1371# CONFIG_USB_STORAGE_SDDR09 is not set
1372# CONFIG_USB_STORAGE_SDDR55 is not set
1373# CONFIG_USB_STORAGE_JUMPSHOT is not set
1374# CONFIG_USB_STORAGE_ALAUDA is not set
1375# CONFIG_USB_STORAGE_ONETOUCH is not set
1376# CONFIG_USB_STORAGE_KARMA is not set
1377# CONFIG_USB_STORAGE_CYPRESS_ATACB is not set
1378# CONFIG_USB_LIBUSUAL is not set
1379
1380#
1381# USB Imaging devices
1382#
1383# CONFIG_USB_MDC800 is not set
1384# CONFIG_USB_MICROTEK is not set
1385
1386#
1387# USB port drivers
1388#
1389# CONFIG_FSL_USB_OTG is not set
1390# CONFIG_USB_SERIAL is not set
1391
1392#
1393# USB Miscellaneous drivers
1394#
1395# CONFIG_USB_EMI62 is not set
1396# CONFIG_USB_EMI26 is not set
1397# CONFIG_USB_ADUTUX is not set
1398# CONFIG_USB_SEVSEG is not set
1399# CONFIG_USB_RIO500 is not set
1400# CONFIG_USB_LEGOTOWER is not set
1401# CONFIG_USB_LCD is not set
1402# CONFIG_USB_BERRY_CHARGE is not set
1403# CONFIG_USB_LED is not set
1404# CONFIG_USB_CYPRESS_CY7C63 is not set
1405# CONFIG_USB_CYTHERM is not set
1406# CONFIG_USB_IDMOUSE is not set
1407# CONFIG_USB_FTDI_ELAN is not set
1408# CONFIG_USB_APPLEDISPLAY is not set
1409# CONFIG_USB_SISUSBVGA is not set
1410# CONFIG_USB_LD is not set
1411# CONFIG_USB_TRANCEVIBRATOR is not set
1412# CONFIG_USB_IOWARRIOR is not set
1413# CONFIG_USB_TEST is not set
1414# CONFIG_USB_ISIGHTFW is not set
1415# CONFIG_USB_VST is not set
1416# CONFIG_USB_GADGET is not set
1417
1418#
1419# OTG and related infrastructure
1420#
1421# CONFIG_USB_GPIO_VBUS is not set
1422# CONFIG_NOP_USB_XCEIV is not set
1423# CONFIG_UWB is not set
1424CONFIG_MMC=y
1425# CONFIG_MMC_DEBUG is not set
1426CONFIG_MMC_UNSAFE_RESUME=y
1427
1428#
1429# MMC/SD/SDIO Card Drivers
1430#
1431CONFIG_MMC_BLOCK=y
1432CONFIG_MMC_BLOCK_BOUNCE=y
1433# CONFIG_SDIO_UART is not set
1434# CONFIG_MMC_TEST is not set
1435
1436#
1437# MMC/SD/SDIO Host Controller Drivers
1438#
1439CONFIG_MMC_SDHCI=y
1440CONFIG_MMC_SDHCI_IO_ACCESSORS=y
1441CONFIG_MMC_SDHCI_BIG_ENDIAN_32BIT_BYTE_SWAPPER=y
1442# CONFIG_MMC_SDHCI_PCI is not set
1443CONFIG_MMC_SDHCI_OF=y
1444CONFIG_MMC_SDHCI_OF_ESDHC=y
1445# CONFIG_MMC_SDHCI_OF_HLWD is not set
1446CONFIG_MMC_SDHCI_PLTFM=y
1447# CONFIG_MMC_WBSD is not set
1448# CONFIG_MMC_AT91 is not set
1449# CONFIG_MMC_ATMELMCI is not set
1450# CONFIG_MMC_TIFM_SD is not set
1451# CONFIG_MMC_CB710 is not set
1452# CONFIG_MMC_VIA_SDMMC is not set
1453# CONFIG_MEMSTICK is not set
1454# CONFIG_NEW_LEDS is not set
1455# CONFIG_ACCESSIBILITY is not set
1456# CONFIG_INFINIBAND is not set
1457# CONFIG_EDAC is not set
1458CONFIG_RTC_LIB=y
1459CONFIG_RTC_CLASS=y
1460CONFIG_RTC_HCTOSYS=y
1461CONFIG_RTC_HCTOSYS_DEVICE="rtc0"
1462# CONFIG_RTC_DEBUG is not set
1463
1464#
1465# RTC interfaces
1466#
1467CONFIG_RTC_INTF_SYSFS=y
1468CONFIG_RTC_INTF_PROC=y
1469CONFIG_RTC_INTF_DEV=y
1470# CONFIG_RTC_INTF_DEV_UIE_EMUL is not set
1471# CONFIG_RTC_DRV_TEST is not set
1472
1473#
1474# I2C RTC drivers
1475#
1476CONFIG_RTC_DRV_DS1307=y
1477# CONFIG_RTC_DRV_DS1374 is not set
1478# CONFIG_RTC_DRV_DS1672 is not set
1479CONFIG_RTC_DRV_DS3232=y
1480# CONFIG_RTC_DRV_MAX6900 is not set
1481# CONFIG_RTC_DRV_RS5C372 is not set
1482# CONFIG_RTC_DRV_ISL1208 is not set
1483# CONFIG_RTC_DRV_X1205 is not set
1484# CONFIG_RTC_DRV_PCF8563 is not set
1485# CONFIG_RTC_DRV_PCF8583 is not set
1486# CONFIG_RTC_DRV_M41T80 is not set
1487# CONFIG_RTC_DRV_BQ32K is not set
1488# CONFIG_RTC_DRV_S35390A is not set
1489# CONFIG_RTC_DRV_FM3130 is not set
1490# CONFIG_RTC_DRV_RX8581 is not set
1491# CONFIG_RTC_DRV_RX8025 is not set
1492CONFIG_RTC_DRV_PT7C4338=y
1493
1494#
1495# SPI RTC drivers
1496#
1497# CONFIG_RTC_DRV_M41T94 is not set
1498# CONFIG_RTC_DRV_DS1305 is not set
1499# CONFIG_RTC_DRV_DS1390 is not set
1500# CONFIG_RTC_DRV_MAX6902 is not set
1501# CONFIG_RTC_DRV_R9701 is not set
1502# CONFIG_RTC_DRV_RS5C348 is not set
1503# CONFIG_RTC_DRV_DS3234 is not set
1504# CONFIG_RTC_DRV_PCF2123 is not set
1505
1506#
1507# Platform RTC drivers
1508#
1509CONFIG_RTC_DRV_CMOS=y
1510# CONFIG_RTC_DRV_DS1286 is not set
1511# CONFIG_RTC_DRV_DS1511 is not set
1512# CONFIG_RTC_DRV_DS1553 is not set
1513# CONFIG_RTC_DRV_DS1742 is not set
1514# CONFIG_RTC_DRV_STK17TA8 is not set
1515# CONFIG_RTC_DRV_M48T86 is not set
1516# CONFIG_RTC_DRV_M48T35 is not set
1517# CONFIG_RTC_DRV_M48T59 is not set
1518# CONFIG_RTC_DRV_MSM6242 is not set
1519# CONFIG_RTC_DRV_BQ4802 is not set
1520# CONFIG_RTC_DRV_RP5C01 is not set
1521# CONFIG_RTC_DRV_V3020 is not set
1522
1523#
1524# on-CPU RTC drivers
1525#
1526# CONFIG_RTC_DRV_GENERIC is not set
1527CONFIG_DMADEVICES=y
1528
1529#
1530# DMA Devices
1531#
1532CONFIG_FSL_DMA=y
1533CONFIG_DMA_ENGINE=y
1534
1535#
1536# DMA Clients
1537#
1538# CONFIG_NET_DMA is not set
1539CONFIG_ASYNC_TX_DMA=y
1540# CONFIG_DMATEST is not set
1541# CONFIG_AUXDISPLAY is not set
1542CONFIG_UIO=y
1543# CONFIG_UIO_CIF is not set
1544# CONFIG_UIO_PDRV is not set
1545# CONFIG_UIO_PDRV_GENIRQ is not set
1546# CONFIG_UIO_SMX is not set
1547# CONFIG_UIO_AEC is not set
1548# CONFIG_UIO_SERCOS3 is not set
1549# CONFIG_UIO_PCI_GENERIC is not set
1550# CONFIG_UIO_NETX is not set
1551
1552#
1553# TI VLYNQ
1554#
1555# CONFIG_STAGING is not set
1556# CONFIG_TDM is not set
1557CONFIG_RFDEVICES=y
1558CONFIG_RFDEV_CORE=y
1559CONFIG_FSL_AIC=y
1560CONFIG_ADI9361=y
1561# CONFIG_FSL_SWIM_EDC is not set
1562
1563#
1564# File systems
1565#
1566CONFIG_EXT2_FS=y
1567# CONFIG_EXT2_FS_XATTR is not set
1568# CONFIG_EXT2_FS_XIP is not set
1569CONFIG_EXT3_FS=y
1570# CONFIG_EXT3_DEFAULTS_TO_ORDERED is not set
1571CONFIG_EXT3_FS_XATTR=y
1572# CONFIG_EXT3_FS_POSIX_ACL is not set
1573# CONFIG_EXT3_FS_SECURITY is not set
1574# CONFIG_EXT4_FS is not set
1575CONFIG_JBD=y
1576CONFIG_FS_MBCACHE=y
1577# CONFIG_REISERFS_FS is not set
1578# CONFIG_JFS_FS is not set
1579CONFIG_FS_POSIX_ACL=y
1580CONFIG_XFS_FS=y
1581# CONFIG_XFS_QUOTA is not set
1582# CONFIG_XFS_POSIX_ACL is not set
1583# CONFIG_XFS_RT is not set
1584# CONFIG_XFS_DEBUG is not set
1585# CONFIG_GFS2_FS is not set
1586# CONFIG_OCFS2_FS is not set
1587# CONFIG_BTRFS_FS is not set
1588# CONFIG_NILFS2_FS is not set
1589CONFIG_FILE_LOCKING=y
1590# CONFIG_OPTIMIZE_SD_PERFORMANCE is not set
1591# CONFIG_DELAY_ASYNC_READAHEAD is not set
1592# CONFIG_SEND_PAGES is not set
1593CONFIG_FSNOTIFY=y
1594CONFIG_DNOTIFY=y
1595CONFIG_INOTIFY=y
1596CONFIG_INOTIFY_USER=y
1597# CONFIG_QUOTA is not set
1598# CONFIG_AUTOFS_FS is not set
1599# CONFIG_AUTOFS4_FS is not set
1600# CONFIG_FUSE_FS is not set
1601
1602#
1603# Caches
1604#
1605# CONFIG_FSCACHE is not set
1606
1607#
1608# CD-ROM/DVD Filesystems
1609#
1610CONFIG_ISO9660_FS=m
1611CONFIG_JOLIET=y
1612CONFIG_ZISOFS=y
1613CONFIG_UDF_FS=m
1614CONFIG_UDF_NLS=y
1615
1616#
1617# DOS/FAT/NT Filesystems
1618#
1619CONFIG_FAT_FS=y
1620CONFIG_MSDOS_FS=m
1621CONFIG_VFAT_FS=y
1622CONFIG_FAT_DEFAULT_CODEPAGE=437
1623CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1"
1624CONFIG_NTFS_FS=y
1625# CONFIG_NTFS_DEBUG is not set
1626# CONFIG_NTFS_RW is not set
1627
1628#
1629# Pseudo filesystems
1630#
1631CONFIG_PROC_FS=y
1632CONFIG_PROC_KCORE=y
1633CONFIG_PROC_SYSCTL=y
1634CONFIG_PROC_PAGE_MONITOR=y
1635CONFIG_SYSFS=y
1636CONFIG_TMPFS=y
1637# CONFIG_TMPFS_POSIX_ACL is not set
1638CONFIG_HUGETLBFS=y
1639CONFIG_HUGETLB_PAGE=y
1640# CONFIG_CONFIGFS_FS is not set
1641CONFIG_MISC_FILESYSTEMS=y
1642# CONFIG_ADFS_FS is not set
1643# CONFIG_AFFS_FS is not set
1644# CONFIG_HFS_FS is not set
1645# CONFIG_HFSPLUS_FS is not set
1646# CONFIG_BEFS_FS is not set
1647# CONFIG_BFS_FS is not set
1648# CONFIG_EFS_FS is not set
1649CONFIG_JFFS2_FS=y
1650CONFIG_JFFS2_FS_DEBUG=1
1651CONFIG_JFFS2_FS_WRITEBUFFER=y
1652CONFIG_JFFS2_FS_WBUF_VERIFY=y
1653CONFIG_JFFS2_SUMMARY=y
1654CONFIG_JFFS2_FS_XATTR=y
1655CONFIG_JFFS2_FS_POSIX_ACL=y
1656CONFIG_JFFS2_FS_SECURITY=y
1657CONFIG_JFFS2_COMPRESSION_OPTIONS=y
1658CONFIG_JFFS2_ZLIB=y
1659CONFIG_JFFS2_LZO=y
1660CONFIG_JFFS2_RTIME=y
1661CONFIG_JFFS2_RUBIN=y
1662# CONFIG_JFFS2_CMODE_NONE is not set
1663CONFIG_JFFS2_CMODE_PRIORITY=y
1664# CONFIG_JFFS2_CMODE_SIZE is not set
1665# CONFIG_JFFS2_CMODE_FAVOURLZO is not set
1666CONFIG_UBIFS_FS=y
1667CONFIG_UBIFS_FS_XATTR=y
1668# CONFIG_UBIFS_FS_ADVANCED_COMPR is not set
1669CONFIG_UBIFS_FS_LZO=y
1670CONFIG_UBIFS_FS_ZLIB=y
1671# CONFIG_UBIFS_FS_DEBUG is not set
1672# CONFIG_CRAMFS is not set
1673# CONFIG_SQUASHFS is not set
1674# CONFIG_VXFS_FS is not set
1675# CONFIG_MINIX_FS is not set
1676# CONFIG_OMFS_FS is not set
1677# CONFIG_HPFS_FS is not set
1678# CONFIG_QNX4FS_FS is not set
1679# CONFIG_ROMFS_FS is not set
1680# CONFIG_SYSV_FS is not set
1681# CONFIG_UFS_FS is not set
1682CONFIG_NETWORK_FILESYSTEMS=y
1683CONFIG_NFS_FS=y
1684CONFIG_NFS_V3=y
1685# CONFIG_NFS_V3_ACL is not set
1686CONFIG_NFS_V4=y
1687# CONFIG_NFS_V4_1 is not set
1688CONFIG_ROOT_NFS=y
1689CONFIG_NFSD=y
1690# CONFIG_NFSD_V3 is not set
1691# CONFIG_NFSD_V4 is not set
1692CONFIG_LOCKD=y
1693CONFIG_LOCKD_V4=y
1694CONFIG_EXPORTFS=y
1695CONFIG_NFS_COMMON=y
1696CONFIG_SUNRPC=y
1697CONFIG_SUNRPC_GSS=y
1698CONFIG_RPCSEC_GSS_KRB5=y
1699# CONFIG_RPCSEC_GSS_SPKM3 is not set
1700# CONFIG_SMB_FS is not set
1701CONFIG_CIFS=y
1702# CONFIG_CIFS_STATS is not set
1703# CONFIG_CIFS_WEAK_PW_HASH is not set
1704# CONFIG_CIFS_XATTR is not set
1705# CONFIG_CIFS_DEBUG2 is not set
1706# CONFIG_CIFS_EXPERIMENTAL is not set
1707# CONFIG_NCP_FS is not set
1708# CONFIG_CODA_FS is not set
1709# CONFIG_AFS_FS is not set
1710
1711#
1712# Partition Types
1713#
1714CONFIG_PARTITION_ADVANCED=y
1715# CONFIG_ACORN_PARTITION is not set
1716# CONFIG_OSF_PARTITION is not set
1717# CONFIG_AMIGA_PARTITION is not set
1718# CONFIG_ATARI_PARTITION is not set
1719CONFIG_MAC_PARTITION=y
1720CONFIG_MSDOS_PARTITION=y
1721# CONFIG_BSD_DISKLABEL is not set
1722# CONFIG_MINIX_SUBPARTITION is not set
1723# CONFIG_SOLARIS_X86_PARTITION is not set
1724# CONFIG_UNIXWARE_DISKLABEL is not set
1725# CONFIG_LDM_PARTITION is not set
1726# CONFIG_SGI_PARTITION is not set
1727# CONFIG_ULTRIX_PARTITION is not set
1728# CONFIG_SUN_PARTITION is not set
1729# CONFIG_KARMA_PARTITION is not set
1730# CONFIG_EFI_PARTITION is not set
1731# CONFIG_SYSV68_PARTITION is not set
1732CONFIG_NLS=y
1733CONFIG_NLS_DEFAULT="iso8859-1"
1734CONFIG_NLS_CODEPAGE_437=y
1735# CONFIG_NLS_CODEPAGE_737 is not set
1736# CONFIG_NLS_CODEPAGE_775 is not set
1737# CONFIG_NLS_CODEPAGE_850 is not set
1738# CONFIG_NLS_CODEPAGE_852 is not set
1739# CONFIG_NLS_CODEPAGE_855 is not set
1740# CONFIG_NLS_CODEPAGE_857 is not set
1741# CONFIG_NLS_CODEPAGE_860 is not set
1742# CONFIG_NLS_CODEPAGE_861 is not set
1743# CONFIG_NLS_CODEPAGE_862 is not set
1744# CONFIG_NLS_CODEPAGE_863 is not set
1745# CONFIG_NLS_CODEPAGE_864 is not set
1746# CONFIG_NLS_CODEPAGE_865 is not set
1747# CONFIG_NLS_CODEPAGE_866 is not set
1748# CONFIG_NLS_CODEPAGE_869 is not set
1749# CONFIG_NLS_CODEPAGE_936 is not set
1750# CONFIG_NLS_CODEPAGE_950 is not set
1751# CONFIG_NLS_CODEPAGE_932 is not set
1752# CONFIG_NLS_CODEPAGE_949 is not set
1753# CONFIG_NLS_CODEPAGE_874 is not set
1754# CONFIG_NLS_ISO8859_8 is not set
1755# CONFIG_NLS_CODEPAGE_1250 is not set
1756# CONFIG_NLS_CODEPAGE_1251 is not set
1757# CONFIG_NLS_ASCII is not set
1758CONFIG_NLS_ISO8859_1=y
1759# CONFIG_NLS_ISO8859_2 is not set
1760# CONFIG_NLS_ISO8859_3 is not set
1761# CONFIG_NLS_ISO8859_4 is not set
1762# CONFIG_NLS_ISO8859_5 is not set
1763# CONFIG_NLS_ISO8859_6 is not set
1764# CONFIG_NLS_ISO8859_7 is not set
1765# CONFIG_NLS_ISO8859_9 is not set
1766# CONFIG_NLS_ISO8859_13 is not set
1767# CONFIG_NLS_ISO8859_14 is not set
1768# CONFIG_NLS_ISO8859_15 is not set
1769# CONFIG_NLS_KOI8_R is not set
1770# CONFIG_NLS_KOI8_U is not set
1771# CONFIG_NLS_UTF8 is not set
1772# CONFIG_DLM is not set
1773# CONFIG_BINARY_PRINTF is not set
1774
1775#
1776# Library routines
1777#
1778CONFIG_BITREVERSE=y
1779CONFIG_GENERIC_FIND_LAST_BIT=y
1780# CONFIG_CRC_CCITT is not set
1781CONFIG_CRC16=y
1782CONFIG_CRC_T10DIF=y
1783CONFIG_CRC_ITU_T=m
1784CONFIG_CRC32=y
1785# CONFIG_CRC7 is not set
1786# CONFIG_LIBCRC32C is not set
1787CONFIG_ZLIB_INFLATE=y
1788CONFIG_ZLIB_DEFLATE=y
1789CONFIG_LZO_COMPRESS=y
1790CONFIG_LZO_DECOMPRESS=y
1791CONFIG_DECOMPRESS_GZIP=y
1792CONFIG_HAS_IOMEM=y
1793CONFIG_HAS_IOPORT=y
1794CONFIG_HAS_DMA=y
1795CONFIG_HAVE_LMB=y
1796CONFIG_NLATTR=y
1797CONFIG_GENERIC_ATOMIC64=y
1798
1799#
1800# Kernel hacking
1801#
1802# CONFIG_PRINTK_TIME is not set
1803CONFIG_ENABLE_WARN_DEPRECATED=y
1804CONFIG_ENABLE_MUST_CHECK=y
1805CONFIG_FRAME_WARN=1024
1806# CONFIG_MAGIC_SYSRQ is not set
1807# CONFIG_STRIP_ASM_SYMS is not set
1808# CONFIG_UNUSED_SYMBOLS is not set
1809# CONFIG_DEBUG_FS is not set
1810# CONFIG_HEADERS_CHECK is not set
1811# CONFIG_DEBUG_KERNEL is not set
1812CONFIG_DEBUG_BUGVERBOSE=y
1813# CONFIG_DEBUG_MEMORY_INIT is not set
1814# CONFIG_RCU_CPU_STALL_DETECTOR is not set
1815# CONFIG_LATENCYTOP is not set
1816# CONFIG_SYSCTL_SYSCALL_CHECK is not set
1817CONFIG_HAVE_FUNCTION_TRACER=y
1818CONFIG_HAVE_FUNCTION_GRAPH_TRACER=y
1819CONFIG_HAVE_DYNAMIC_FTRACE=y
1820CONFIG_HAVE_FTRACE_MCOUNT_RECORD=y
1821CONFIG_TRACING_SUPPORT=y
1822# CONFIG_FTRACE is not set
1823# CONFIG_DMA_API_DEBUG is not set
1824# CONFIG_SAMPLES is not set
1825CONFIG_HAVE_ARCH_KGDB=y
1826# CONFIG_PPC_DISABLE_WERROR is not set
1827CONFIG_PPC_WERROR=y
1828CONFIG_PRINT_STACK_DEPTH=64
1829# CONFIG_IRQSTACKS is not set
1830# CONFIG_PPC_EARLY_DEBUG is not set
1831
1832#
1833# Security options
1834#
1835# CONFIG_KEYS is not set
1836# CONFIG_SECURITY is not set
1837# CONFIG_SECURITYFS is not set
1838# CONFIG_DEFAULT_SECURITY_SELINUX is not set
1839# CONFIG_DEFAULT_SECURITY_SMACK is not set
1840# CONFIG_DEFAULT_SECURITY_TOMOYO is not set
1841CONFIG_DEFAULT_SECURITY_DAC=y
1842CONFIG_DEFAULT_SECURITY=""
1843CONFIG_XOR_BLOCKS=y
1844CONFIG_ASYNC_CORE=y
1845CONFIG_ASYNC_MEMCPY=y
1846CONFIG_ASYNC_XOR=y
1847CONFIG_ASYNC_PQ=y
1848CONFIG_ASYNC_RAID6_RECOV=y
1849CONFIG_CRYPTO=y
1850
1851#
1852# Crypto core or helper
1853#
1854CONFIG_CRYPTO_ALGAPI=y
1855CONFIG_CRYPTO_ALGAPI2=y
1856CONFIG_CRYPTO_AEAD=y
1857CONFIG_CRYPTO_AEAD2=y
1858CONFIG_CRYPTO_BLKCIPHER=y
1859CONFIG_CRYPTO_BLKCIPHER2=y
1860CONFIG_CRYPTO_HASH=y
1861CONFIG_CRYPTO_HASH2=y
1862CONFIG_CRYPTO_RNG2=y
1863CONFIG_CRYPTO_PCOMP=y
1864CONFIG_CRYPTO_MANAGER=y
1865CONFIG_CRYPTO_MANAGER2=y
1866# CONFIG_CRYPTO_GF128MUL is not set
1867# CONFIG_CRYPTO_NULL is not set
1868CONFIG_CRYPTO_WORKQUEUE=y
1869# CONFIG_CRYPTO_CRYPTD is not set
1870CONFIG_CRYPTO_AUTHENC=y
1871# CONFIG_CRYPTO_TEST is not set
1872
1873#
1874# Authenticated Encryption with Associated Data
1875#
1876# CONFIG_CRYPTO_CCM is not set
1877# CONFIG_CRYPTO_GCM is not set
1878# CONFIG_CRYPTO_SEQIV is not set
1879
1880#
1881# Block modes
1882#
1883CONFIG_CRYPTO_CBC=y
1884# CONFIG_CRYPTO_CTR is not set
1885# CONFIG_CRYPTO_CTS is not set
1886CONFIG_CRYPTO_ECB=y
1887# CONFIG_CRYPTO_LRW is not set
1888CONFIG_CRYPTO_PCBC=y
1889# CONFIG_CRYPTO_XTS is not set
1890
1891#
1892# Hash modes
1893#
1894CONFIG_CRYPTO_HMAC=y
1895# CONFIG_CRYPTO_XCBC is not set
1896# CONFIG_CRYPTO_VMAC is not set
1897
1898#
1899# Digest
1900#
1901CONFIG_CRYPTO_CRC32C=y
1902# CONFIG_CRYPTO_GHASH is not set
1903CONFIG_CRYPTO_MD4=y
1904CONFIG_CRYPTO_MD5=y
1905# CONFIG_CRYPTO_MICHAEL_MIC is not set
1906# CONFIG_CRYPTO_RMD128 is not set
1907# CONFIG_CRYPTO_RMD160 is not set
1908# CONFIG_CRYPTO_RMD256 is not set
1909# CONFIG_CRYPTO_RMD320 is not set
1910CONFIG_CRYPTO_SHA1=y
1911# CONFIG_CRYPTO_SHA256 is not set
1912# CONFIG_CRYPTO_SHA512 is not set
1913# CONFIG_CRYPTO_TGR192 is not set
1914# CONFIG_CRYPTO_WP512 is not set
1915
1916#
1917# Ciphers
1918#
1919CONFIG_CRYPTO_AES=y
1920# CONFIG_CRYPTO_ANUBIS is not set
1921# CONFIG_CRYPTO_ARC4 is not set
1922# CONFIG_CRYPTO_BLOWFISH is not set
1923# CONFIG_CRYPTO_CAMELLIA is not set
1924# CONFIG_CRYPTO_CAST5 is not set
1925# CONFIG_CRYPTO_CAST6 is not set
1926CONFIG_CRYPTO_DES=y
1927# CONFIG_CRYPTO_FCRYPT is not set
1928# CONFIG_CRYPTO_KHAZAD is not set
1929# CONFIG_CRYPTO_SALSA20 is not set
1930# CONFIG_CRYPTO_SEED is not set
1931# CONFIG_CRYPTO_SERPENT is not set
1932# CONFIG_CRYPTO_TEA is not set
1933# CONFIG_CRYPTO_TWOFISH is not set
1934
1935#
1936# Compression
1937#
1938CONFIG_CRYPTO_DEFLATE=y
1939# CONFIG_CRYPTO_ZLIB is not set
1940CONFIG_CRYPTO_LZO=y
1941
1942#
1943# Random Number Generation
1944#
1945# CONFIG_CRYPTO_ANSI_CPRNG is not set
1946CONFIG_CRYPTO_HW=y
1947# CONFIG_CRYPTO_DEV_HIFN_795X is not set
1948CONFIG_CRYPTO_DEV_FSL_CAAM=y
1949CONFIG_CRYPTO_DEV_FSL_CAAM_RINGSIZE=9
1950CONFIG_CRYPTO_DEV_FSL_CAAM_INTC=y
1951CONFIG_CRYPTO_DEV_FSL_CAAM_INTC_COUNT_THLD=255
1952CONFIG_CRYPTO_DEV_FSL_CAAM_INTC_TIME_THLD=2048
1953CONFIG_CRYPTO_DEV_FSL_CAAM_CRYPTO_API=y
1954CONFIG_CRYPTO_DEV_FSL_CAAM_UIO=y
1955# CONFIG_CRYPTO_DEV_TALITOS is not set
1956# CONFIG_PPC_CLOCK is not set
1957CONFIG_PPC_LIB_RHEAP=y
1958# CONFIG_VIRTUALIZATION is not set
diff --git a/recipes-kernel/linux/linux-bsc913x/bsc9131rdb/linux-bsc9131rdb-2.6.33.tar.bz2 b/recipes-kernel/linux/linux-bsc913x/bsc9131rdb/linux-bsc9131rdb-2.6.33.tar.bz2
new file mode 100644
index 0000000..a16bf61
--- /dev/null
+++ b/recipes-kernel/linux/linux-bsc913x/bsc9131rdb/linux-bsc9131rdb-2.6.33.tar.bz2
Binary files differ
diff --git a/recipes-kernel/linux/linux-bsc913x/bsc9132qds/0001-add-options-to-KBUILD_CFLAGS.patch b/recipes-kernel/linux/linux-bsc913x/bsc9132qds/0001-add-options-to-KBUILD_CFLAGS.patch
new file mode 100644
index 0000000..b74d512
--- /dev/null
+++ b/recipes-kernel/linux/linux-bsc913x/bsc9132qds/0001-add-options-to-KBUILD_CFLAGS.patch
@@ -0,0 +1,25 @@
1From: Jerry Pei <jerry.pei@enea.com>
2Date: Tue, 10 Jul 2012 11:44:18 +0800
3Subject: [PATCH] add options to KBUILD_CFLAGS
4
5Signed-off-by: Jerry Pei <jerry.pei@enea.com>
6---
7 Makefile | 2 ++
8 1 file changed, 2 insertions(+)
9
10diff --git a/Makefile b/Makefile
11index e19c848..b07ce1e 100644
12--- a/Makefile
13+++ b/Makefile
14@@ -526,6 +526,8 @@ endif # $(dot-config)
15 # Defaults vmlinux but it is usually overridden in the arch makefile
16 all: vmlinux
17
18+KBUILD_CFLAGS += -Wno-unused-but-set-variable -Wno-error=array-bounds
19+
20 ifdef CONFIG_CC_OPTIMIZE_FOR_SIZE
21 KBUILD_CFLAGS += -Os
22 else
23--
241.7.9.5
25
diff --git a/recipes-kernel/linux/linux-bsc913x/bsc9132qds/0002-take-back-DECLARE_MUTEX-for-linx.patch b/recipes-kernel/linux/linux-bsc913x/bsc9132qds/0002-take-back-DECLARE_MUTEX-for-linx.patch
new file mode 100644
index 0000000..a648a81
--- /dev/null
+++ b/recipes-kernel/linux/linux-bsc913x/bsc9132qds/0002-take-back-DECLARE_MUTEX-for-linx.patch
@@ -0,0 +1,26 @@
1From: Jerry Pei <jeei@sestofb01.enea.se>
2Date: Thu, 22 Dec 2011 03:55:03 +0100
3Subject: [PATCH] take back DECLARE_MUTEX for linx
4
5Signed-off-by: Jerry Pei <jeei@sestofb01.enea.se>
6---
7 include/linux/semaphore.h | 3 +++
8 1 files changed, 3 insertions(+), 0 deletions(-)
9
10diff --git a/include/linux/semaphore.h b/include/linux/semaphore.h
11index 66d2591..8b75bb6 100644
12--- a/include/linux/semaphore.h
13+++ b/include/linux/semaphore.h
14@@ -29,6 +29,9 @@ struct semaphore {
15 #define DEFINE_SEMAPHORE(name, val) \
16 struct semaphore name = __SEMAPHORE_INITIALIZER(name, val)
17
18+#define DECLARE_MUTEX(name) \
19+ struct semaphore name = __SEMAPHORE_INITIALIZER(name, 1)
20+
21 static inline void sema_init(struct semaphore *sem, int val)
22 {
23 static struct lock_class_key __key;
24--
251.7.5.4
26
diff --git a/recipes-kernel/linux/linux-bsc913x/bsc9132qds/0003-fix-nonexistant-type-u8-issue.patch b/recipes-kernel/linux/linux-bsc913x/bsc9132qds/0003-fix-nonexistant-type-u8-issue.patch
new file mode 100644
index 0000000..b091290
--- /dev/null
+++ b/recipes-kernel/linux/linux-bsc913x/bsc9132qds/0003-fix-nonexistant-type-u8-issue.patch
@@ -0,0 +1,31 @@
1From: jerry pei <jerry.pei@enea.com>
2Date: Mon, 30 Jul 2012 05:06:27 +0200
3Subject: [PATCH] change u8 to __u8 in scsi.h
4
5Signed-off-by: jerry pei <jerry.pei@enea.com>
6---
7 include/scsi/scsi.h | 8 ++++----
8 1 files changed, 4 insertions(+), 4 deletions(-)
9
10diff --git a/include/scsi/scsi.h b/include/scsi/scsi.h
11index 8b4deca..ec3053e 100644
12--- a/include/scsi/scsi.h
13+++ b/include/scsi/scsi.h
14@@ -149,10 +149,10 @@ struct scsi_cmnd;
15
16 /* defined in T10 SCSI Primary Commands-2 (SPC2) */
17 struct scsi_varlen_cdb_hdr {
18- u8 opcode; /* opcode always == VARIABLE_LENGTH_CMD */
19- u8 control;
20- u8 misc[5];
21- u8 additional_cdb_length; /* total cdb length - 8 */
22+ __u8 opcode; /* opcode always == VARIABLE_LENGTH_CMD */
23+ __u8 control;
24+ __u8 misc[5];
25+ __u8 additional_cdb_length; /* total cdb length - 8 */
26 __be16 service_action;
27 /* service specific data follows */
28 };
29--
301.7.5.4
31
diff --git a/recipes-kernel/linux/linux-bsc913x/bsc9132qds/0004-fix-wrong-WDTP_MASK-in-booke_wdt_c.patch b/recipes-kernel/linux/linux-bsc913x/bsc9132qds/0004-fix-wrong-WDTP_MASK-in-booke_wdt_c.patch
new file mode 100644
index 0000000..c9e2308
--- /dev/null
+++ b/recipes-kernel/linux/linux-bsc913x/bsc9132qds/0004-fix-wrong-WDTP_MASK-in-booke_wdt_c.patch
@@ -0,0 +1,26 @@
1From f94d0836740b00fb99861651ce261df94244a1d7 Mon Sep 17 00:00:00 2001
2From: Alex He <Alex.He@enea.com>
3Date: Wed, 22 Aug 2012 11:40:11 +0200
4Subject: [PATCH] fix wrong WDTP_MASK in booke_wdt.c in
5 linux-bsc9132qds-2.6.33
6
7---
8 drivers/watchdog/booke_wdt.c | 2 +-
9 1 files changed, 1 insertions(+), 1 deletions(-)
10
11diff --git a/drivers/watchdog/booke_wdt.c b/drivers/watchdog/booke_wdt.c
12index a01e298..77defbe 100644
13--- a/drivers/watchdog/booke_wdt.c
14+++ b/drivers/watchdog/booke_wdt.c
15@@ -44,7 +44,7 @@ u32 booke_wdt_period = WDT_PERIOD_DEFAULT;
16
17 #ifdef CONFIG_FSL_BOOKE
18 #define WDTP(x) ((((x)&0x3)<<30)|(((x)&0x3c)<<15))
19-#define WDTP_MASK (WDTP(0))
20+#define WDTP_MASK (WDTP(0x3f))
21 #else
22 #define WDTP(x) (TCR_WP(x))
23 #define WDTP_MASK (TCR_WP_MASK)
24--
251.7.5.4
26
diff --git a/recipes-kernel/linux/linux-bsc913x/bsc9132qds/0007-perf-makefile.patch b/recipes-kernel/linux/linux-bsc913x/bsc9132qds/0007-perf-makefile.patch
new file mode 100644
index 0000000..911ffd9
--- /dev/null
+++ b/recipes-kernel/linux/linux-bsc913x/bsc9132qds/0007-perf-makefile.patch
@@ -0,0 +1,11 @@
1--- a/tools/perf/Makefile 2012-08-27 09:40:05.887241976 +0200
2+++ b/tools/perf/Makefile 2012-08-27 09:40:16.742768991 +0200
3@@ -198,7 +198,7 @@
4 CFLAGS_OPTIMIZE = -O6
5 endif
6
7-CFLAGS = -ggdb3 -Wall -Wextra -std=gnu99 -Werror $(CFLAGS_OPTIMIZE) -D_FORTIFY_SOURCE=2 $(EXTRA_WARNINGS) $(EXTRA_CFLAGS)
8+CFLAGS = -ggdb3 -Wall -Wextra -std=gnu99 $(CFLAGS_OPTIMIZE) -D_FORTIFY_SOURCE=2 $(EXTRA_WARNINGS) $(EXTRA_CFLAGS)
9 EXTLIBS = -lpthread -lrt -lelf -lm
10 ALL_CFLAGS = $(CFLAGS)
11 ALL_LDFLAGS = $(LDFLAGS)
diff --git a/recipes-kernel/linux/linux-bsc913x/bsc9132qds/defconfig b/recipes-kernel/linux/linux-bsc913x/bsc9132qds/defconfig
new file mode 100644
index 0000000..9f91c73
--- /dev/null
+++ b/recipes-kernel/linux/linux-bsc913x/bsc9132qds/defconfig
@@ -0,0 +1,1958 @@
1#
2# Automatically generated make config: don't edit
3# Linux kernel version: 2.6.33.9-rt31
4# Wed Mar 7 11:18:39 2012
5#
6# CONFIG_PPC64 is not set
7
8#
9# Processor support
10#
11# CONFIG_PPC_BOOK3S_32 is not set
12CONFIG_PPC_85xx=y
13# CONFIG_PPC_8xx is not set
14# CONFIG_40x is not set
15# CONFIG_44x is not set
16# CONFIG_E200 is not set
17CONFIG_E500=y
18# CONFIG_PPC_E500MC is not set
19CONFIG_FSL_EMB_PERFMON=y
20CONFIG_BOOKE=y
21CONFIG_FSL_BOOKE=y
22CONFIG_PPC_FSL_BOOK3E=y
23CONFIG_PTE_64BIT=y
24# CONFIG_PHYS_64BIT is not set
25CONFIG_SPE=y
26CONFIG_PPC_MMU_NOHASH=y
27CONFIG_PPC_MMU_NOHASH_32=y
28CONFIG_PPC_BOOK3E_MMU=y
29# CONFIG_PPC_MM_SLICES is not set
30# CONFIG_SMP is not set
31CONFIG_PPC32=y
32CONFIG_WORD_SIZE=32
33# CONFIG_ARCH_PHYS_ADDR_T_64BIT is not set
34CONFIG_MMU=y
35CONFIG_GENERIC_CMOS_UPDATE=y
36CONFIG_GENERIC_TIME=y
37CONFIG_GENERIC_TIME_VSYSCALL=y
38CONFIG_GENERIC_CLOCKEVENTS=y
39CONFIG_GENERIC_HARDIRQS=y
40CONFIG_GENERIC_HARDIRQS_NO__DO_IRQ=y
41# CONFIG_HAVE_SETUP_PER_CPU_AREA is not set
42# CONFIG_NEED_PER_CPU_EMBED_FIRST_CHUNK is not set
43CONFIG_IRQ_PER_CPU=y
44CONFIG_NR_IRQS=512
45CONFIG_STACKTRACE_SUPPORT=y
46CONFIG_HAVE_LATENCYTOP_SUPPORT=y
47CONFIG_TRACE_IRQFLAGS_SUPPORT=y
48CONFIG_LOCKDEP_SUPPORT=y
49CONFIG_ARCH_HAS_ILOG2_U32=y
50CONFIG_GENERIC_HWEIGHT=y
51CONFIG_GENERIC_FIND_NEXT_BIT=y
52CONFIG_GENERIC_GPIO=y
53# CONFIG_ARCH_NO_VIRT_TO_BUS is not set
54CONFIG_PPC=y
55CONFIG_EARLY_PRINTK=y
56CONFIG_GENERIC_NVRAM=y
57CONFIG_SCHED_OMIT_FRAME_POINTER=y
58CONFIG_ARCH_MAY_HAVE_PC_FDC=y
59CONFIG_PPC_OF=y
60CONFIG_OF=y
61CONFIG_PPC_UDBG_16550=y
62# CONFIG_GENERIC_TBSYNC is not set
63CONFIG_AUDIT_ARCH=y
64CONFIG_GENERIC_BUG=y
65CONFIG_DTC=y
66CONFIG_DEFAULT_UIMAGE=y
67CONFIG_ARCH_HIBERNATION_POSSIBLE=y
68CONFIG_ARCH_SUSPEND_POSSIBLE=y
69# CONFIG_PPC_DCR_NATIVE is not set
70# CONFIG_PPC_DCR_MMIO is not set
71CONFIG_ARCH_SUPPORTS_DEBUG_PAGEALLOC=y
72CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
73CONFIG_CONSTRUCTORS=y
74
75#
76# General setup
77#
78CONFIG_EXPERIMENTAL=y
79CONFIG_BROKEN_ON_SMP=y
80CONFIG_LOCK_KERNEL=y
81CONFIG_INIT_ENV_ARG_LIMIT=32
82CONFIG_LOCALVERSION=""
83# CONFIG_LOCALVERSION_AUTO is not set
84CONFIG_SWAP=y
85CONFIG_SYSVIPC=y
86CONFIG_SYSVIPC_SYSCTL=y
87CONFIG_POSIX_MQUEUE=y
88CONFIG_POSIX_MQUEUE_SYSCTL=y
89CONFIG_BSD_PROCESS_ACCT=y
90# CONFIG_BSD_PROCESS_ACCT_V3 is not set
91# CONFIG_TASKSTATS is not set
92CONFIG_AUDIT=y
93# CONFIG_AUDITSYSCALL is not set
94
95#
96# RCU Subsystem
97#
98# CONFIG_TREE_RCU is not set
99CONFIG_TREE_PREEMPT_RCU=y
100# CONFIG_TINY_RCU is not set
101# CONFIG_RCU_TRACE is not set
102CONFIG_RCU_FANOUT=32
103# CONFIG_RCU_FANOUT_EXACT is not set
104# CONFIG_TREE_RCU_TRACE is not set
105CONFIG_IKCONFIG=y
106CONFIG_IKCONFIG_PROC=y
107CONFIG_LOG_BUF_SHIFT=14
108# CONFIG_GROUP_SCHED is not set
109# CONFIG_CGROUPS is not set
110CONFIG_SYSFS_DEPRECATED=y
111CONFIG_SYSFS_DEPRECATED_V2=y
112# CONFIG_RELAY is not set
113# CONFIG_NAMESPACES is not set
114CONFIG_BLK_DEV_INITRD=y
115CONFIG_INITRAMFS_SOURCE=""
116CONFIG_RD_GZIP=y
117# CONFIG_RD_BZIP2 is not set
118# CONFIG_RD_LZMA is not set
119# CONFIG_RD_LZO is not set
120# CONFIG_CC_OPTIMIZE_FOR_SIZE is not set
121CONFIG_SYSCTL=y
122CONFIG_ANON_INODES=y
123CONFIG_EMBEDDED=y
124CONFIG_SYSCTL_SYSCALL=y
125CONFIG_KALLSYMS=y
126CONFIG_KALLSYMS_EXTRA_PASS=y
127CONFIG_HOTPLUG=y
128CONFIG_PRINTK=y
129CONFIG_BUG=y
130CONFIG_ELF_CORE=y
131CONFIG_BASE_FULL=y
132CONFIG_FUTEX=y
133CONFIG_EPOLL=y
134CONFIG_SIGNALFD=y
135CONFIG_TIMERFD=y
136CONFIG_EVENTFD=y
137CONFIG_SHMEM=y
138CONFIG_AIO=y
139CONFIG_HAVE_PERF_EVENTS=y
140
141#
142# Kernel Performance Events And Counters
143#
144# CONFIG_PERF_EVENTS is not set
145# CONFIG_PERF_COUNTERS is not set
146CONFIG_VM_EVENT_COUNTERS=y
147CONFIG_PCI_QUIRKS=y
148CONFIG_COMPAT_BRK=y
149CONFIG_SLAB=y
150# CONFIG_SLUB is not set
151# CONFIG_SLOB is not set
152# CONFIG_PROFILING is not set
153CONFIG_HAVE_OPROFILE=y
154# CONFIG_KPROBES is not set
155CONFIG_HAVE_EFFICIENT_UNALIGNED_ACCESS=y
156CONFIG_HAVE_IOREMAP_PROT=y
157CONFIG_HAVE_KPROBES=y
158CONFIG_HAVE_KRETPROBES=y
159CONFIG_HAVE_ARCH_TRACEHOOK=y
160CONFIG_HAVE_DMA_ATTRS=y
161CONFIG_HAVE_DMA_API_DEBUG=y
162
163#
164# GCOV-based kernel profiling
165#
166CONFIG_SLOW_WORK=y
167# CONFIG_HAVE_GENERIC_DMA_COHERENT is not set
168CONFIG_SLABINFO=y
169CONFIG_RT_MUTEXES=y
170CONFIG_BASE_SMALL=0
171CONFIG_MODULES=y
172# CONFIG_MODULE_FORCE_LOAD is not set
173CONFIG_MODULE_UNLOAD=y
174CONFIG_MODULE_FORCE_UNLOAD=y
175# CONFIG_MODVERSIONS is not set
176# CONFIG_MODULE_SRCVERSION_ALL is not set
177CONFIG_BLOCK=y
178CONFIG_LBDAF=y
179# CONFIG_BLK_DEV_BSG is not set
180# CONFIG_BLK_DEV_INTEGRITY is not set
181
182#
183# IO Schedulers
184#
185CONFIG_IOSCHED_NOOP=y
186CONFIG_IOSCHED_DEADLINE=y
187CONFIG_IOSCHED_CFQ=y
188# CONFIG_DEFAULT_DEADLINE is not set
189CONFIG_DEFAULT_CFQ=y
190# CONFIG_DEFAULT_NOOP is not set
191CONFIG_DEFAULT_IOSCHED="cfq"
192# CONFIG_INLINE_SPIN_TRYLOCK is not set
193# CONFIG_INLINE_SPIN_TRYLOCK_BH is not set
194# CONFIG_INLINE_SPIN_LOCK is not set
195# CONFIG_INLINE_SPIN_LOCK_BH is not set
196# CONFIG_INLINE_SPIN_LOCK_IRQ is not set
197# CONFIG_INLINE_SPIN_LOCK_IRQSAVE is not set
198# CONFIG_INLINE_SPIN_UNLOCK is not set
199# CONFIG_INLINE_SPIN_UNLOCK_BH is not set
200# CONFIG_INLINE_SPIN_UNLOCK_IRQ is not set
201# CONFIG_INLINE_SPIN_UNLOCK_IRQRESTORE is not set
202# CONFIG_INLINE_READ_TRYLOCK is not set
203# CONFIG_INLINE_READ_LOCK is not set
204# CONFIG_INLINE_READ_LOCK_BH is not set
205# CONFIG_INLINE_READ_LOCK_IRQ is not set
206# CONFIG_INLINE_READ_LOCK_IRQSAVE is not set
207# CONFIG_INLINE_READ_UNLOCK is not set
208# CONFIG_INLINE_READ_UNLOCK_BH is not set
209# CONFIG_INLINE_READ_UNLOCK_IRQ is not set
210# CONFIG_INLINE_READ_UNLOCK_IRQRESTORE is not set
211# CONFIG_INLINE_WRITE_TRYLOCK is not set
212# CONFIG_INLINE_WRITE_LOCK is not set
213# CONFIG_INLINE_WRITE_LOCK_BH is not set
214# CONFIG_INLINE_WRITE_LOCK_IRQ is not set
215# CONFIG_INLINE_WRITE_LOCK_IRQSAVE is not set
216# CONFIG_INLINE_WRITE_UNLOCK is not set
217# CONFIG_INLINE_WRITE_UNLOCK_BH is not set
218# CONFIG_INLINE_WRITE_UNLOCK_IRQ is not set
219# CONFIG_INLINE_WRITE_UNLOCK_IRQRESTORE is not set
220# CONFIG_MUTEX_SPIN_ON_OWNER is not set
221CONFIG_FREEZER=y
222CONFIG_PPC_MSI_BITMAP=y
223
224#
225# Platform support
226#
227# CONFIG_PPC_CELL is not set
228# CONFIG_PPC_CELL_NATIVE is not set
229# CONFIG_PQ2ADS is not set
230CONFIG_FSL_SOC_BOOKE=y
231# CONFIG_MPC8540_ADS is not set
232# CONFIG_MPC8560_ADS is not set
233# CONFIG_FLEXCAN is not set
234# CONFIG_MPC85xx_CDS is not set
235# CONFIG_MPC85xx_MDS is not set
236# CONFIG_MPC8536_DS is not set
237# CONFIG_MPC85xx_DS is not set
238CONFIG_MPC85xx_RDB=y
239CONFIG_P1010_RDB=y
240# CONFIG_P1022_DS is not set
241CONFIG_BSC9131_QDS=y
242CONFIG_BSC9132_QDS=y
243CONFIG_BSC9131_RDB=y
244# CONFIG_SOCRATES is not set
245# CONFIG_KSI8560 is not set
246# CONFIG_XES_MPC85xx is not set
247# CONFIG_STX_GP3 is not set
248# CONFIG_TQM8540 is not set
249# CONFIG_TQM8541 is not set
250# CONFIG_TQM8548 is not set
251# CONFIG_TQM8555 is not set
252# CONFIG_TQM8560 is not set
253# CONFIG_SBC8548 is not set
254# CONFIG_SBC8560 is not set
255# CONFIG_P4080_DS is not set
256CONFIG_FSL_85XX_CACHE_SRAM=y
257# CONFIG_IPIC is not set
258CONFIG_MPIC=y
259# CONFIG_MPIC_WEIRD is not set
260CONFIG_PPC_I8259=y
261# CONFIG_PPC_RTAS is not set
262# CONFIG_MMIO_NVRAM is not set
263# CONFIG_PPC_MPC106 is not set
264# CONFIG_PPC_970_NAP is not set
265# CONFIG_PPC_INDIRECT_IO is not set
266# CONFIG_GENERIC_IOMAP is not set
267# CONFIG_CPU_FREQ is not set
268# CONFIG_QUICC_ENGINE is not set
269# CONFIG_CPM2 is not set
270CONFIG_FSL_ULI1575=y
271CONFIG_MPC8xxx_GPIO=y
272# CONFIG_SIMPLE_GPIO is not set
273
274#
275# Kernel options
276#
277CONFIG_HIGHMEM=y
278CONFIG_TICK_ONESHOT=y
279CONFIG_NO_HZ=y
280CONFIG_HIGH_RES_TIMERS=y
281CONFIG_GENERIC_CLOCKEVENTS_BUILD=y
282# CONFIG_HZ_100 is not set
283CONFIG_HZ_250=y
284# CONFIG_HZ_300 is not set
285# CONFIG_HZ_1000 is not set
286CONFIG_HZ=250
287CONFIG_SCHED_HRTICK=y
288# CONFIG_PREEMPT_NONE is not set
289# CONFIG_PREEMPT_VOLUNTARY is not set
290# CONFIG_PREEMPT_DESKTOP is not set
291CONFIG_PREEMPT_RT=y
292CONFIG_PREEMPT=y
293CONFIG_PREEMPT_SOFTIRQS=y
294CONFIG_PREEMPT_HARDIRQS=y
295CONFIG_RWSEM_GENERIC_SPINLOCK=y
296CONFIG_BINFMT_ELF=y
297# CONFIG_CORE_DUMP_DEFAULT_ELF_HEADERS is not set
298# CONFIG_HAVE_AOUT is not set
299# CONFIG_BINFMT_MISC is not set
300CONFIG_HUGETLB_PAGE_SIZE_VARIABLE=y
301CONFIG_MATH_EMULATION=y
302CONFIG_IOMMU_HELPER=y
303CONFIG_SWIOTLB=y
304CONFIG_ARCH_ENABLE_MEMORY_HOTPLUG=y
305CONFIG_ARCH_HAS_WALK_MEMORY=y
306CONFIG_ARCH_ENABLE_MEMORY_HOTREMOVE=y
307CONFIG_MAX_ACTIVE_REGIONS=32
308CONFIG_ARCH_FLATMEM_ENABLE=y
309CONFIG_ARCH_POPULATES_NODE_MAP=y
310CONFIG_SYS_SUPPORTS_HUGETLBFS=y
311CONFIG_SELECT_MEMORY_MODEL=y
312CONFIG_FLATMEM_MANUAL=y
313# CONFIG_DISCONTIGMEM_MANUAL is not set
314# CONFIG_SPARSEMEM_MANUAL is not set
315CONFIG_FLATMEM=y
316CONFIG_FLAT_NODE_MEM_MAP=y
317CONFIG_PAGEFLAGS_EXTENDED=y
318CONFIG_SPLIT_PTLOCK_CPUS=4
319CONFIG_MIGRATION=y
320# CONFIG_PHYS_ADDR_T_64BIT is not set
321CONFIG_ZONE_DMA_FLAG=1
322CONFIG_BOUNCE=y
323CONFIG_VIRT_TO_BUS=y
324# CONFIG_KSM is not set
325CONFIG_DEFAULT_MMAP_MIN_ADDR=4096
326CONFIG_PPC_4K_PAGES=y
327# CONFIG_PPC_16K_PAGES is not set
328# CONFIG_PPC_64K_PAGES is not set
329# CONFIG_PPC_256K_PAGES is not set
330CONFIG_FORCE_MAX_ZONEORDER=11
331CONFIG_PROC_DEVICETREE=y
332# CONFIG_CMDLINE_BOOL is not set
333CONFIG_EXTRA_TARGETS=""
334CONFIG_PM=y
335# CONFIG_PM_DEBUG is not set
336CONFIG_PM_SLEEP=y
337CONFIG_SUSPEND=y
338CONFIG_SUSPEND_FREEZER=y
339# CONFIG_HIBERNATION is not set
340# CONFIG_PM_RUNTIME is not set
341CONFIG_SECCOMP=y
342CONFIG_ISA_DMA_API=y
343
344#
345# Bus options
346#
347CONFIG_ZONE_DMA=y
348CONFIG_GENERIC_ISA_DMA=y
349CONFIG_PPC_INDIRECT_PCI=y
350CONFIG_FSL_SOC=y
351CONFIG_FSL_PCI=y
352CONFIG_FSL_PMC=y
353CONFIG_FSL_LBC=y
354CONFIG_FSL_IFC=y
355CONFIG_FSL_MPIC_MSG_INTS=y
356CONFIG_PPC_PCI_CHOICE=y
357CONFIG_PCI=y
358CONFIG_PCI_DOMAINS=y
359CONFIG_PCI_SYSCALL=y
360CONFIG_PCIEPORTBUS=y
361# CONFIG_PCIEAER is not set
362# CONFIG_PCIEASPM is not set
363CONFIG_ARCH_SUPPORTS_MSI=y
364CONFIG_PCI_MSI=y
365CONFIG_PCI_LEGACY=y
366# CONFIG_PCI_STUB is not set
367# CONFIG_PCI_IOV is not set
368# CONFIG_PCCARD is not set
369# CONFIG_HOTPLUG_PCI is not set
370# CONFIG_HAS_RAPIDIO is not set
371
372#
373# Advanced setup
374#
375CONFIG_ADVANCED_OPTIONS=y
376# CONFIG_LOWMEM_SIZE_BOOL is not set
377CONFIG_LOWMEM_SIZE=0x30000000
378CONFIG_LOWMEM_CAM_NUM_BOOL=y
379CONFIG_LOWMEM_CAM_NUM=6
380# CONFIG_RELOCATABLE is not set
381# CONFIG_PAGE_OFFSET_BOOL is not set
382CONFIG_PAGE_OFFSET=0xc0000000
383# CONFIG_KERNEL_START_BOOL is not set
384CONFIG_KERNEL_START=0xc0000000
385# CONFIG_PHYSICAL_START_BOOL is not set
386CONFIG_PHYSICAL_START=0x00000000
387CONFIG_PHYSICAL_ALIGN=0x04000000
388# CONFIG_TASK_SIZE_BOOL is not set
389CONFIG_TASK_SIZE=0xc0000000
390CONFIG_NET=y
391
392#
393# Networking options
394#
395CONFIG_PACKET=y
396# CONFIG_PACKET_MMAP is not set
397CONFIG_UNIX=y
398CONFIG_XFRM=y
399CONFIG_XFRM_USER=y
400# CONFIG_XFRM_SUB_POLICY is not set
401# CONFIG_XFRM_MIGRATE is not set
402# CONFIG_XFRM_STATISTICS is not set
403CONFIG_XFRM_IPCOMP=y
404CONFIG_NET_KEY=y
405# CONFIG_NET_KEY_MIGRATE is not set
406CONFIG_INET=y
407CONFIG_IP_MULTICAST=y
408CONFIG_IP_ADVANCED_ROUTER=y
409CONFIG_ASK_IP_FIB_HASH=y
410# CONFIG_IP_FIB_TRIE is not set
411CONFIG_IP_FIB_HASH=y
412CONFIG_IP_MULTIPLE_TABLES=y
413CONFIG_IP_ROUTE_MULTIPATH=y
414CONFIG_IP_ROUTE_VERBOSE=y
415CONFIG_IP_PNP=y
416CONFIG_IP_PNP_DHCP=y
417CONFIG_IP_PNP_BOOTP=y
418CONFIG_IP_PNP_RARP=y
419CONFIG_NET_IPIP=y
420CONFIG_NET_IPGRE=y
421CONFIG_NET_IPGRE_BROADCAST=y
422CONFIG_IP_MROUTE=y
423CONFIG_IP_PIMSM_V1=y
424CONFIG_IP_PIMSM_V2=y
425CONFIG_ARPD=y
426# CONFIG_SYN_COOKIES is not set
427CONFIG_INET_AH=y
428CONFIG_INET_ESP=y
429CONFIG_INET_IPCOMP=y
430CONFIG_INET_XFRM_TUNNEL=y
431CONFIG_INET_TUNNEL=y
432CONFIG_INET_XFRM_MODE_TRANSPORT=y
433CONFIG_INET_XFRM_MODE_TUNNEL=y
434CONFIG_INET_XFRM_MODE_BEET=y
435# CONFIG_INET_LRO is not set
436CONFIG_INET_DIAG=y
437CONFIG_INET_TCP_DIAG=y
438# CONFIG_TCP_CONG_ADVANCED is not set
439CONFIG_TCP_CONG_CUBIC=y
440CONFIG_DEFAULT_TCP_CONG="cubic"
441# CONFIG_TCP_MD5SIG is not set
442CONFIG_IPV6=y
443# CONFIG_IPV6_PRIVACY is not set
444# CONFIG_IPV6_ROUTER_PREF is not set
445# CONFIG_IPV6_OPTIMISTIC_DAD is not set
446# CONFIG_INET6_AH is not set
447# CONFIG_INET6_ESP is not set
448# CONFIG_INET6_IPCOMP is not set
449# CONFIG_IPV6_MIP6 is not set
450# CONFIG_INET6_XFRM_TUNNEL is not set
451# CONFIG_INET6_TUNNEL is not set
452CONFIG_INET6_XFRM_MODE_TRANSPORT=y
453CONFIG_INET6_XFRM_MODE_TUNNEL=y
454CONFIG_INET6_XFRM_MODE_BEET=y
455# CONFIG_INET6_XFRM_MODE_ROUTEOPTIMIZATION is not set
456CONFIG_IPV6_SIT=y
457# CONFIG_IPV6_SIT_6RD is not set
458CONFIG_IPV6_NDISC_NODETYPE=y
459# CONFIG_IPV6_TUNNEL is not set
460# CONFIG_IPV6_MULTIPLE_TABLES is not set
461# CONFIG_IPV6_MROUTE is not set
462# CONFIG_NETWORK_SECMARK is not set
463# CONFIG_NETFILTER is not set
464# CONFIG_IP_DCCP is not set
465# CONFIG_IP_SCTP is not set
466# CONFIG_RDS is not set
467# CONFIG_TIPC is not set
468# CONFIG_ATM is not set
469CONFIG_STP=y
470CONFIG_BRIDGE=y
471# CONFIG_NET_DSA is not set
472CONFIG_VLAN_8021Q=y
473# CONFIG_VLAN_8021Q_GVRP is not set
474# CONFIG_DECNET is not set
475CONFIG_LLC=y
476# CONFIG_LLC2 is not set
477# CONFIG_IPX is not set
478# CONFIG_ATALK is not set
479# CONFIG_X25 is not set
480# CONFIG_LAPB is not set
481# CONFIG_ECONET is not set
482# CONFIG_WAN_ROUTER is not set
483# CONFIG_PHONET is not set
484# CONFIG_IEEE802154 is not set
485# CONFIG_NET_SCHED is not set
486# CONFIG_DCB is not set
487
488#
489# Network testing
490#
491# CONFIG_NET_PKTGEN is not set
492# CONFIG_HAMRADIO is not set
493# CONFIG_CAN is not set
494# CONFIG_IRDA is not set
495# CONFIG_BT is not set
496# CONFIG_AF_RXRPC is not set
497CONFIG_FIB_RULES=y
498CONFIG_WIRELESS=y
499# CONFIG_CFG80211 is not set
500# CONFIG_LIB80211 is not set
501
502#
503# CFG80211 needs to be enabled for MAC80211
504#
505
506#
507# Some wireless drivers require a rate control algorithm
508#
509# CONFIG_WIMAX is not set
510# CONFIG_RFKILL is not set
511# CONFIG_NET_9P is not set
512
513#
514# Device Drivers
515#
516
517#
518# Generic Driver Options
519#
520CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug"
521# CONFIG_DEVTMPFS is not set
522CONFIG_STANDALONE=y
523CONFIG_PREVENT_FIRMWARE_BUILD=y
524CONFIG_FW_LOADER=y
525CONFIG_FIRMWARE_IN_KERNEL=y
526CONFIG_EXTRA_FIRMWARE=""
527# CONFIG_SYS_HYPERVISOR is not set
528# CONFIG_CONNECTOR is not set
529CONFIG_MTD=y
530# CONFIG_MTD_DEBUG is not set
531# CONFIG_MTD_TESTS is not set
532# CONFIG_MTD_CONCAT is not set
533CONFIG_MTD_PARTITIONS=y
534# CONFIG_MTD_REDBOOT_PARTS is not set
535CONFIG_MTD_CMDLINE_PARTS=y
536CONFIG_MTD_OF_PARTS=y
537# CONFIG_MTD_AR7_PARTS is not set
538
539#
540# User Modules And Translation Layers
541#
542CONFIG_MTD_CHAR=y
543CONFIG_MTD_BLKDEVS=y
544CONFIG_MTD_BLOCK=y
545CONFIG_FTL=y
546# CONFIG_NFTL is not set
547# CONFIG_INFTL is not set
548# CONFIG_RFD_FTL is not set
549# CONFIG_SSFDC is not set
550# CONFIG_MTD_OOPS is not set
551
552#
553# RAM/ROM/Flash chip drivers
554#
555CONFIG_MTD_CFI=y
556# CONFIG_MTD_JEDECPROBE is not set
557CONFIG_MTD_GEN_PROBE=y
558# CONFIG_MTD_CFI_ADV_OPTIONS is not set
559CONFIG_MTD_MAP_BANK_WIDTH_1=y
560CONFIG_MTD_MAP_BANK_WIDTH_2=y
561CONFIG_MTD_MAP_BANK_WIDTH_4=y
562# CONFIG_MTD_MAP_BANK_WIDTH_8 is not set
563# CONFIG_MTD_MAP_BANK_WIDTH_16 is not set
564# CONFIG_MTD_MAP_BANK_WIDTH_32 is not set
565CONFIG_MTD_CFI_I1=y
566CONFIG_MTD_CFI_I2=y
567# CONFIG_MTD_CFI_I4 is not set
568# CONFIG_MTD_CFI_I8 is not set
569CONFIG_MTD_CFI_INTELEXT=y
570CONFIG_MTD_CFI_AMDSTD=y
571# CONFIG_MTD_CFI_STAA is not set
572CONFIG_MTD_CFI_UTIL=y
573# CONFIG_MTD_RAM is not set
574# CONFIG_MTD_ROM is not set
575# CONFIG_MTD_ABSENT is not set
576
577#
578# Mapping drivers for chip access
579#
580# CONFIG_MTD_COMPLEX_MAPPINGS is not set
581# CONFIG_MTD_PHYSMAP is not set
582CONFIG_MTD_PHYSMAP_OF=y
583# CONFIG_MTD_INTEL_VR_NOR is not set
584# CONFIG_MTD_PLATRAM is not set
585
586#
587# Self-contained MTD device drivers
588#
589# CONFIG_MTD_PMC551 is not set
590# CONFIG_MTD_DATAFLASH is not set
591# CONFIG_MTD_M25P80 is not set
592CONFIG_MTD_FSL_M25P80=y
593CONFIG_M25PXX_USE_FAST_READ=y
594# CONFIG_MTD_SST25L is not set
595# CONFIG_MTD_SLRAM is not set
596# CONFIG_MTD_PHRAM is not set
597# CONFIG_MTD_MTDRAM is not set
598# CONFIG_MTD_BLOCK2MTD is not set
599
600#
601# Disk-On-Chip Device Drivers
602#
603# CONFIG_MTD_DOC2000 is not set
604# CONFIG_MTD_DOC2001 is not set
605# CONFIG_MTD_DOC2001PLUS is not set
606CONFIG_MTD_NAND=y
607# CONFIG_MTD_NAND_VERIFY_WRITE is not set
608# CONFIG_MTD_NAND_ECC_SMC is not set
609# CONFIG_MTD_NAND_MUSEUM_IDS is not set
610CONFIG_MTD_NAND_IDS=y
611# CONFIG_MTD_NAND_DISKONCHIP is not set
612# CONFIG_MTD_NAND_CAFE is not set
613# CONFIG_MTD_NAND_NANDSIM is not set
614CONFIG_MTD_NAND_PLATFORM=y
615# CONFIG_MTD_ALAUDA is not set
616CONFIG_MTD_NAND_FSL_ELBC=y
617CONFIG_MTD_NAND_FSL_IFC=y
618CONFIG_MTD_NAND_FSL_UPM=y
619# CONFIG_MTD_ONENAND is not set
620
621#
622# LPDDR flash memory drivers
623#
624# CONFIG_MTD_LPDDR is not set
625
626#
627# UBI - Unsorted block images
628#
629CONFIG_MTD_UBI=y
630CONFIG_MTD_UBI_WL_THRESHOLD=4096
631CONFIG_MTD_UBI_BEB_RESERVE=1
632# CONFIG_MTD_UBI_GLUEBI is not set
633
634#
635# UBI debugging options
636#
637# CONFIG_MTD_UBI_DEBUG is not set
638CONFIG_OF_DEVICE=y
639CONFIG_OF_GPIO=y
640CONFIG_OF_I2C=y
641CONFIG_OF_SPI=y
642CONFIG_OF_MDIO=y
643# CONFIG_PARPORT is not set
644CONFIG_BLK_DEV=y
645# CONFIG_BLK_DEV_FD is not set
646# CONFIG_BLK_CPQ_DA is not set
647# CONFIG_BLK_CPQ_CISS_DA is not set
648# CONFIG_BLK_DEV_DAC960 is not set
649# CONFIG_BLK_DEV_UMEM is not set
650# CONFIG_BLK_DEV_COW_COMMON is not set
651CONFIG_BLK_DEV_LOOP=y
652# CONFIG_BLK_DEV_CRYPTOLOOP is not set
653
654#
655# DRBD disabled because PROC_FS, INET or CONNECTOR not selected
656#
657# CONFIG_BLK_DEV_NBD is not set
658# CONFIG_BLK_DEV_SX8 is not set
659# CONFIG_BLK_DEV_UB is not set
660CONFIG_BLK_DEV_RAM=y
661CONFIG_BLK_DEV_RAM_COUNT=16
662CONFIG_BLK_DEV_RAM_SIZE=131072
663# CONFIG_BLK_DEV_XIP is not set
664# CONFIG_CDROM_PKTCDVD is not set
665# CONFIG_ATA_OVER_ETH is not set
666# CONFIG_BLK_DEV_HD is not set
667CONFIG_MISC_DEVICES=y
668# CONFIG_AD525X_DPOT is not set
669# CONFIG_PHANTOM is not set
670# CONFIG_SGI_IOC4 is not set
671# CONFIG_TIFM_CORE is not set
672# CONFIG_ICS932S401 is not set
673# CONFIG_ENCLOSURE_SERVICES is not set
674# CONFIG_HP_ILO is not set
675# CONFIG_ISL29003 is not set
676# CONFIG_DS1682 is not set
677# CONFIG_TI_DAC7512 is not set
678# CONFIG_C2PORT is not set
679
680#
681# EEPROM support
682#
683# CONFIG_EEPROM_AT24 is not set
684# CONFIG_EEPROM_AT25 is not set
685# CONFIG_EEPROM_LEGACY is not set
686# CONFIG_EEPROM_MAX6875 is not set
687# CONFIG_EEPROM_93CX6 is not set
688# CONFIG_CB710_CORE is not set
689# CONFIG_IWMC3200TOP is not set
690# CONFIG_FSL_PME is not set
691CONFIG_BSC9131_HET_IPC=y
692CONFIG_BSC9131_HET_MGR=y
693CONFIG_FSL_HUGEPAGE_SHM=y
694# CONFIG_FSL_PWM is not set
695CONFIG_HAVE_IDE=y
696# CONFIG_IDE is not set
697
698#
699# SCSI device support
700#
701# CONFIG_RAID_ATTRS is not set
702CONFIG_SCSI=y
703CONFIG_SCSI_DMA=y
704# CONFIG_SCSI_TGT is not set
705# CONFIG_SCSI_NETLINK is not set
706CONFIG_SCSI_PROC_FS=y
707
708#
709# SCSI support type (disk, tape, CD-ROM)
710#
711CONFIG_BLK_DEV_SD=y
712CONFIG_CHR_DEV_ST=y
713# CONFIG_CHR_DEV_OSST is not set
714CONFIG_BLK_DEV_SR=y
715# CONFIG_BLK_DEV_SR_VENDOR is not set
716CONFIG_CHR_DEV_SG=y
717# CONFIG_CHR_DEV_SCH is not set
718CONFIG_SCSI_MULTI_LUN=y
719# CONFIG_SCSI_CONSTANTS is not set
720CONFIG_SCSI_LOGGING=y
721# CONFIG_SCSI_SCAN_ASYNC is not set
722CONFIG_SCSI_WAIT_SCAN=m
723
724#
725# SCSI Transports
726#
727# CONFIG_SCSI_SPI_ATTRS is not set
728# CONFIG_SCSI_FC_ATTRS is not set
729# CONFIG_SCSI_ISCSI_ATTRS is not set
730# CONFIG_SCSI_SAS_LIBSAS is not set
731# CONFIG_SCSI_SRP_ATTRS is not set
732CONFIG_SCSI_LOWLEVEL=y
733# CONFIG_ISCSI_TCP is not set
734# CONFIG_SCSI_BNX2_ISCSI is not set
735# CONFIG_BE2ISCSI is not set
736# CONFIG_BLK_DEV_3W_XXXX_RAID is not set
737# CONFIG_SCSI_HPSA is not set
738# CONFIG_SCSI_3W_9XXX is not set
739# CONFIG_SCSI_3W_SAS is not set
740# CONFIG_SCSI_ACARD is not set
741# CONFIG_SCSI_AACRAID is not set
742# CONFIG_SCSI_AIC7XXX is not set
743# CONFIG_SCSI_AIC7XXX_OLD is not set
744# CONFIG_SCSI_AIC79XX is not set
745# CONFIG_SCSI_AIC94XX is not set
746# CONFIG_SCSI_MVSAS is not set
747# CONFIG_SCSI_DPT_I2O is not set
748# CONFIG_SCSI_ADVANSYS is not set
749# CONFIG_SCSI_ARCMSR is not set
750# CONFIG_MEGARAID_NEWGEN is not set
751# CONFIG_MEGARAID_LEGACY is not set
752# CONFIG_MEGARAID_SAS is not set
753# CONFIG_SCSI_MPT2SAS is not set
754# CONFIG_SCSI_HPTIOP is not set
755# CONFIG_SCSI_BUSLOGIC is not set
756# CONFIG_LIBFC is not set
757# CONFIG_LIBFCOE is not set
758# CONFIG_FCOE is not set
759# CONFIG_SCSI_DMX3191D is not set
760# CONFIG_SCSI_EATA is not set
761# CONFIG_SCSI_FUTURE_DOMAIN is not set
762# CONFIG_SCSI_GDTH is not set
763# CONFIG_SCSI_IPS is not set
764# CONFIG_SCSI_INITIO is not set
765# CONFIG_SCSI_INIA100 is not set
766# CONFIG_SCSI_STEX is not set
767# CONFIG_SCSI_SYM53C8XX_2 is not set
768# CONFIG_SCSI_IPR is not set
769# CONFIG_SCSI_QLOGIC_1280 is not set
770# CONFIG_SCSI_QLA_FC is not set
771# CONFIG_SCSI_QLA_ISCSI is not set
772# CONFIG_SCSI_LPFC is not set
773# CONFIG_SCSI_DC395x is not set
774# CONFIG_SCSI_DC390T is not set
775# CONFIG_SCSI_NSP32 is not set
776# CONFIG_SCSI_DEBUG is not set
777# CONFIG_SCSI_PMCRAID is not set
778# CONFIG_SCSI_PM8001 is not set
779# CONFIG_SCSI_SRP is not set
780# CONFIG_SCSI_BFA_FC is not set
781# CONFIG_SCSI_DH is not set
782# CONFIG_SCSI_OSD_INITIATOR is not set
783CONFIG_ATA=y
784# CONFIG_ATA_NONSTANDARD is not set
785CONFIG_ATA_VERBOSE_ERROR=y
786CONFIG_SATA_PMP=y
787CONFIG_SATA_AHCI=y
788CONFIG_SATA_SIL24=y
789CONFIG_SATA_FSL=y
790CONFIG_ATA_SFF=y
791# CONFIG_SATA_SVW is not set
792# CONFIG_ATA_PIIX is not set
793# CONFIG_SATA_MV is not set
794# CONFIG_SATA_NV is not set
795# CONFIG_PDC_ADMA is not set
796# CONFIG_SATA_QSTOR is not set
797# CONFIG_SATA_PROMISE is not set
798# CONFIG_SATA_SX4 is not set
799# CONFIG_SATA_SIL is not set
800# CONFIG_SATA_SIS is not set
801# CONFIG_SATA_ULI is not set
802# CONFIG_SATA_VIA is not set
803# CONFIG_SATA_VITESSE is not set
804# CONFIG_SATA_INIC162X is not set
805# CONFIG_PATA_ALI is not set
806# CONFIG_PATA_AMD is not set
807# CONFIG_PATA_ARTOP is not set
808# CONFIG_PATA_ATP867X is not set
809# CONFIG_PATA_ATIIXP is not set
810# CONFIG_PATA_CMD640_PCI is not set
811# CONFIG_PATA_CMD64X is not set
812# CONFIG_PATA_CS5520 is not set
813# CONFIG_PATA_CS5530 is not set
814# CONFIG_PATA_CYPRESS is not set
815# CONFIG_PATA_EFAR is not set
816# CONFIG_ATA_GENERIC is not set
817# CONFIG_PATA_HPT366 is not set
818# CONFIG_PATA_HPT37X is not set
819# CONFIG_PATA_HPT3X2N is not set
820# CONFIG_PATA_HPT3X3 is not set
821# CONFIG_PATA_IT821X is not set
822# CONFIG_PATA_IT8213 is not set
823# CONFIG_PATA_JMICRON is not set
824# CONFIG_PATA_TRIFLEX is not set
825# CONFIG_PATA_MARVELL is not set
826# CONFIG_PATA_MPIIX is not set
827# CONFIG_PATA_OLDPIIX is not set
828# CONFIG_PATA_NETCELL is not set
829# CONFIG_PATA_NINJA32 is not set
830# CONFIG_PATA_NS87410 is not set
831# CONFIG_PATA_NS87415 is not set
832# CONFIG_PATA_OPTI is not set
833# CONFIG_PATA_OPTIDMA is not set
834# CONFIG_PATA_PDC2027X is not set
835# CONFIG_PATA_PDC_OLD is not set
836# CONFIG_PATA_RADISYS is not set
837# CONFIG_PATA_RDC is not set
838# CONFIG_PATA_RZ1000 is not set
839# CONFIG_PATA_SC1200 is not set
840# CONFIG_PATA_SERVERWORKS is not set
841# CONFIG_PATA_SIL680 is not set
842# CONFIG_PATA_SIS is not set
843# CONFIG_PATA_TOSHIBA is not set
844# CONFIG_PATA_VIA is not set
845# CONFIG_PATA_WINBOND is not set
846# CONFIG_PATA_PLATFORM is not set
847# CONFIG_PATA_SCH is not set
848CONFIG_MD=y
849CONFIG_BLK_DEV_MD=y
850# CONFIG_MD_AUTODETECT is not set
851# CONFIG_MD_LINEAR is not set
852# CONFIG_MD_RAID0 is not set
853# CONFIG_MD_RAID1 is not set
854# CONFIG_MD_RAID10 is not set
855CONFIG_MD_RAID456=y
856CONFIG_MD_RAID6_PQ=y
857# CONFIG_ASYNC_RAID6_TEST is not set
858# CONFIG_MD_MULTIPATH is not set
859# CONFIG_MD_FAULTY is not set
860# CONFIG_BLK_DEV_DM is not set
861# CONFIG_FUSION is not set
862
863#
864# IEEE 1394 (FireWire) support
865#
866
867#
868# You can enable one or both FireWire driver stacks.
869#
870
871#
872# The newer stack is recommended.
873#
874# CONFIG_FIREWIRE is not set
875# CONFIG_IEEE1394 is not set
876# CONFIG_I2O is not set
877# CONFIG_MACINTOSH_DRIVERS is not set
878CONFIG_NETDEVICES=y
879# CONFIG_AS_FASTPATH is not set
880CONFIG_DUMMY=y
881# CONFIG_BONDING is not set
882# CONFIG_MACVLAN is not set
883# CONFIG_EQUALIZER is not set
884# CONFIG_TUN is not set
885# CONFIG_VETH is not set
886
887#
888# MPC85xx PCI agent mode driver
889#
890# CONFIG_CARDNET is not set
891
892#
893# MPC85xx board PCI demo driver
894#
895# CONFIG_BOARDNET is not set
896# CONFIG_ARCNET is not set
897CONFIG_PHYLIB=y
898
899#
900# MII PHY device drivers
901#
902# CONFIG_MARVELL_PHY is not set
903# CONFIG_DAVICOM_PHY is not set
904# CONFIG_QSEMI_PHY is not set
905# CONFIG_LXT_PHY is not set
906# CONFIG_CICADA_PHY is not set
907CONFIG_VITESSE_PHY=y
908# CONFIG_SMSC_PHY is not set
909# CONFIG_BROADCOM_PHY is not set
910# CONFIG_ICPLUS_PHY is not set
911# CONFIG_REALTEK_PHY is not set
912# CONFIG_NATIONAL_PHY is not set
913# CONFIG_STE10XP is not set
914# CONFIG_LSI_ET1011C_PHY is not set
915CONFIG_FIXED_PHY=y
916# CONFIG_MDIO_BITBANG is not set
917CONFIG_NET_ETHERNET=y
918CONFIG_MII=y
919# CONFIG_HAPPYMEAL is not set
920# CONFIG_SUNGEM is not set
921# CONFIG_CASSINI is not set
922# CONFIG_NET_VENDOR_3COM is not set
923# CONFIG_ENC28J60 is not set
924# CONFIG_ETHOC is not set
925# CONFIG_DNET is not set
926# CONFIG_NET_TULIP is not set
927# CONFIG_HP100 is not set
928# CONFIG_IBM_NEW_EMAC_ZMII is not set
929# CONFIG_IBM_NEW_EMAC_RGMII is not set
930# CONFIG_IBM_NEW_EMAC_TAH is not set
931# CONFIG_IBM_NEW_EMAC_EMAC4 is not set
932# CONFIG_IBM_NEW_EMAC_NO_FLOW_CTRL is not set
933# CONFIG_IBM_NEW_EMAC_MAL_CLR_ICINTSTAT is not set
934# CONFIG_IBM_NEW_EMAC_MAL_COMMON_ERR is not set
935# CONFIG_NET_PCI is not set
936# CONFIG_B44 is not set
937# CONFIG_KS8842 is not set
938# CONFIG_KS8851 is not set
939# CONFIG_KS8851_MLL is not set
940# CONFIG_ATL2 is not set
941# CONFIG_XILINX_EMACLITE is not set
942CONFIG_NETDEV_1000=y
943# CONFIG_ACENIC is not set
944# CONFIG_DL2K is not set
945# CONFIG_E1000 is not set
946CONFIG_E1000E=y
947# CONFIG_IP1000 is not set
948# CONFIG_IGB is not set
949# CONFIG_IGBVF is not set
950# CONFIG_NS83820 is not set
951# CONFIG_HAMACHI is not set
952# CONFIG_YELLOWFIN is not set
953# CONFIG_R8169 is not set
954# CONFIG_SIS190 is not set
955# CONFIG_SKGE is not set
956# CONFIG_SKY2 is not set
957# CONFIG_VIA_VELOCITY is not set
958# CONFIG_TIGON3 is not set
959# CONFIG_BNX2 is not set
960# CONFIG_CNIC is not set
961CONFIG_FSL_PQ_MDIO=y
962CONFIG_GIANFAR=y
963# CONFIG_TCP_FAST_ACK is not set
964# CONFIG_GFAR_HW_TCP_RECEIVE_OFFLOAD is not set
965CONFIG_GFAR_SKBUFF_RECYCLING=y
966# CONFIG_RX_TX_BD_XNGE is not set
967CONFIG_GIANFAR_TXNAPI=y
968CONFIG_GIANFAR_L2SRAM=y
969# CONFIG_GFAR_SW_VLAN is not set
970# CONFIG_GIANFAR_SG_SUPPORT is not set
971# CONFIG_NET_GIANFAR_FP is not set
972# CONFIG_1588_MUX_eTSEC1 is not set
973# CONFIG_1588_MUX_eTSEC2 is not set
974# CONFIG_GFAR_SW_PKT_STEERING is not set
975# CONFIG_MV643XX_ETH is not set
976# CONFIG_QLA3XXX is not set
977# CONFIG_ATL1 is not set
978# CONFIG_ATL1E is not set
979# CONFIG_ATL1C is not set
980# CONFIG_JME is not set
981# CONFIG_NETDEV_10000 is not set
982# CONFIG_TR is not set
983CONFIG_WLAN=y
984# CONFIG_AIRO is not set
985# CONFIG_ATMEL is not set
986# CONFIG_PRISM54 is not set
987# CONFIG_USB_ZD1201 is not set
988# CONFIG_HOSTAP is not set
989
990#
991# Enable WiMAX (Networking options) to see the WiMAX drivers
992#
993
994#
995# USB Network Adapters
996#
997# CONFIG_USB_CATC is not set
998# CONFIG_USB_KAWETH is not set
999# CONFIG_USB_PEGASUS is not set
1000# CONFIG_USB_RTL8150 is not set
1001# CONFIG_USB_USBNET is not set
1002# CONFIG_WAN is not set
1003# CONFIG_FDDI is not set
1004# CONFIG_HIPPI is not set
1005# CONFIG_PPP is not set
1006# CONFIG_SLIP is not set
1007# CONFIG_NET_FC is not set
1008# CONFIG_NETCONSOLE is not set
1009# CONFIG_NETPOLL is not set
1010# CONFIG_NET_POLL_CONTROLLER is not set
1011# CONFIG_VMXNET3 is not set
1012# CONFIG_ISDN is not set
1013# CONFIG_PHONE is not set
1014
1015#
1016# Input device support
1017#
1018CONFIG_INPUT=y
1019CONFIG_INPUT_FF_MEMLESS=m
1020# CONFIG_INPUT_POLLDEV is not set
1021# CONFIG_INPUT_SPARSEKMAP is not set
1022
1023#
1024# Userland interfaces
1025#
1026# CONFIG_INPUT_MOUSEDEV is not set
1027# CONFIG_INPUT_JOYDEV is not set
1028# CONFIG_INPUT_EVDEV is not set
1029# CONFIG_INPUT_EVBUG is not set
1030
1031#
1032# Input Device Drivers
1033#
1034# CONFIG_INPUT_KEYBOARD is not set
1035# CONFIG_INPUT_MOUSE is not set
1036# CONFIG_INPUT_JOYSTICK is not set
1037# CONFIG_INPUT_TABLET is not set
1038# CONFIG_INPUT_TOUCHSCREEN is not set
1039# CONFIG_INPUT_MISC is not set
1040
1041#
1042# Hardware I/O ports
1043#
1044CONFIG_SERIO=y
1045CONFIG_SERIO_I8042=y
1046CONFIG_SERIO_SERPORT=y
1047# CONFIG_SERIO_PCIPS2 is not set
1048CONFIG_SERIO_LIBPS2=y
1049# CONFIG_SERIO_RAW is not set
1050# CONFIG_SERIO_XILINX_XPS_PS2 is not set
1051# CONFIG_SERIO_ALTERA_PS2 is not set
1052# CONFIG_GAMEPORT is not set
1053
1054#
1055# Character devices
1056#
1057CONFIG_VT=y
1058CONFIG_CONSOLE_TRANSLATIONS=y
1059CONFIG_VT_CONSOLE=y
1060CONFIG_HW_CONSOLE=y
1061# CONFIG_VT_HW_CONSOLE_BINDING is not set
1062CONFIG_DEVKMEM=y
1063# CONFIG_SERIAL_NONSTANDARD is not set
1064# CONFIG_NOZOMI is not set
1065CONFIG_FSL_SIM=y
1066
1067#
1068# Serial drivers
1069#
1070CONFIG_SERIAL_8250=y
1071CONFIG_SERIAL_8250_CONSOLE=y
1072CONFIG_SERIAL_8250_PCI=y
1073CONFIG_SERIAL_8250_NR_UARTS=2
1074CONFIG_SERIAL_8250_RUNTIME_UARTS=2
1075CONFIG_SERIAL_8250_EXTENDED=y
1076CONFIG_SERIAL_8250_MANY_PORTS=y
1077CONFIG_SERIAL_8250_SHARE_IRQ=y
1078CONFIG_SERIAL_8250_DETECT_IRQ=y
1079CONFIG_SERIAL_8250_RSA=y
1080
1081#
1082# Non-8250 serial port support
1083#
1084# CONFIG_SERIAL_MAX3100 is not set
1085# CONFIG_SERIAL_UARTLITE is not set
1086CONFIG_SERIAL_CORE=y
1087CONFIG_SERIAL_CORE_CONSOLE=y
1088# CONFIG_SERIAL_JSM is not set
1089# CONFIG_SERIAL_OF_PLATFORM is not set
1090# CONFIG_SERIAL_GRLIB_GAISLER_APBUART is not set
1091CONFIG_UNIX98_PTYS=y
1092# CONFIG_DEVPTS_MULTIPLE_INSTANCES is not set
1093CONFIG_LEGACY_PTYS=y
1094CONFIG_LEGACY_PTY_COUNT=256
1095# CONFIG_HVC_UDBG is not set
1096# CONFIG_IPMI_HANDLER is not set
1097CONFIG_HW_RANDOM=y
1098# CONFIG_HW_RANDOM_TIMERIOMEM is not set
1099CONFIG_NVRAM=y
1100# CONFIG_R3964 is not set
1101# CONFIG_APPLICOM is not set
1102# CONFIG_RAW_DRIVER is not set
1103# CONFIG_TCG_TPM is not set
1104CONFIG_DEVPORT=y
1105CONFIG_I2C=y
1106CONFIG_I2C_BOARDINFO=y
1107CONFIG_I2C_COMPAT=y
1108CONFIG_I2C_CHARDEV=y
1109CONFIG_I2C_HELPER_AUTO=y
1110
1111#
1112# I2C Hardware Bus support
1113#
1114
1115#
1116# PC SMBus host controller drivers
1117#
1118# CONFIG_I2C_ALI1535 is not set
1119# CONFIG_I2C_ALI1563 is not set
1120# CONFIG_I2C_ALI15X3 is not set
1121# CONFIG_I2C_AMD756 is not set
1122# CONFIG_I2C_AMD8111 is not set
1123# CONFIG_I2C_I801 is not set
1124# CONFIG_I2C_ISCH is not set
1125# CONFIG_I2C_PIIX4 is not set
1126# CONFIG_I2C_NFORCE2 is not set
1127# CONFIG_I2C_SIS5595 is not set
1128# CONFIG_I2C_SIS630 is not set
1129# CONFIG_I2C_SIS96X is not set
1130# CONFIG_I2C_VIA is not set
1131# CONFIG_I2C_VIAPRO is not set
1132
1133#
1134# I2C system bus drivers (mostly embedded / system-on-chip)
1135#
1136# CONFIG_I2C_GPIO is not set
1137CONFIG_I2C_MPC=y
1138# CONFIG_I2C_OCORES is not set
1139# CONFIG_I2C_SIMTEC is not set
1140
1141#
1142# External I2C/SMBus adapter drivers
1143#
1144# CONFIG_I2C_PARPORT_LIGHT is not set
1145# CONFIG_I2C_TAOS_EVM is not set
1146# CONFIG_I2C_TINY_USB is not set
1147
1148#
1149# Other I2C/SMBus bus drivers
1150#
1151# CONFIG_I2C_PCA_PLATFORM is not set
1152# CONFIG_I2C_STUB is not set
1153
1154#
1155# Miscellaneous I2C Chip support
1156#
1157# CONFIG_SENSORS_TSL2550 is not set
1158# CONFIG_I2C_DEBUG_CORE is not set
1159# CONFIG_I2C_DEBUG_ALGO is not set
1160# CONFIG_I2C_DEBUG_BUS is not set
1161# CONFIG_I2C_DEBUG_CHIP is not set
1162CONFIG_SPI=y
1163CONFIG_SPI_MASTER=y
1164
1165#
1166# SPI Master Controller Drivers
1167#
1168CONFIG_SPI_BITBANG=y
1169# CONFIG_SPI_GPIO is not set
1170# CONFIG_SPI_MPC8xxx is not set
1171CONFIG_FSL_ESPI=y
1172# CONFIG_SPI_XILINX is not set
1173# CONFIG_SPI_DESIGNWARE is not set
1174
1175#
1176# SPI Protocol Masters
1177#
1178# CONFIG_SPI_SPIDEV is not set
1179# CONFIG_SPI_TLE62X0 is not set
1180
1181#
1182# PPS support
1183#
1184# CONFIG_PPS is not set
1185CONFIG_ARCH_WANT_OPTIONAL_GPIOLIB=y
1186CONFIG_ARCH_REQUIRE_GPIOLIB=y
1187CONFIG_GPIOLIB=y
1188# CONFIG_GPIO_SYSFS is not set
1189
1190#
1191# Memory mapped GPIO expanders:
1192#
1193# CONFIG_GPIO_XILINX is not set
1194
1195#
1196# I2C GPIO expanders:
1197#
1198# CONFIG_GPIO_MAX732X is not set
1199# CONFIG_GPIO_PCA953X is not set
1200# CONFIG_GPIO_PCF857X is not set
1201# CONFIG_GPIO_ADP5588 is not set
1202
1203#
1204# PCI GPIO expanders:
1205#
1206# CONFIG_GPIO_CS5535 is not set
1207# CONFIG_GPIO_BT8XX is not set
1208# CONFIG_GPIO_LANGWELL is not set
1209
1210#
1211# SPI GPIO expanders:
1212#
1213# CONFIG_GPIO_MAX7301 is not set
1214# CONFIG_GPIO_MCP23S08 is not set
1215# CONFIG_GPIO_MC33880 is not set
1216
1217#
1218# AC97 GPIO expanders:
1219#
1220# CONFIG_W1 is not set
1221# CONFIG_POWER_SUPPLY is not set
1222# CONFIG_HWMON is not set
1223# CONFIG_THERMAL is not set
1224CONFIG_WATCHDOG=y
1225# CONFIG_WATCHDOG_NOWAYOUT is not set
1226
1227#
1228# Watchdog Device Drivers
1229#
1230# CONFIG_SOFT_WATCHDOG is not set
1231# CONFIG_ALIM7101_WDT is not set
1232CONFIG_BOOKE_WDT=y
1233CONFIG_BOOKE_WDT_TESTER=m
1234
1235#
1236# PCI-based Watchdog Cards
1237#
1238# CONFIG_PCIPCWATCHDOG is not set
1239# CONFIG_WDTPCI is not set
1240
1241#
1242# USB-based Watchdog Cards
1243#
1244# CONFIG_USBPCWATCHDOG is not set
1245CONFIG_SSB_POSSIBLE=y
1246
1247#
1248# Sonics Silicon Backplane
1249#
1250# CONFIG_SSB is not set
1251
1252#
1253# Multifunction device drivers
1254#
1255# CONFIG_MFD_CORE is not set
1256# CONFIG_MFD_SM501 is not set
1257# CONFIG_HTC_PASIC3 is not set
1258# CONFIG_TPS65010 is not set
1259# CONFIG_TWL4030_CORE is not set
1260# CONFIG_MFD_TMIO is not set
1261# CONFIG_PMIC_DA903X is not set
1262# CONFIG_PMIC_ADP5520 is not set
1263# CONFIG_MFD_WM8400 is not set
1264# CONFIG_MFD_WM831X is not set
1265# CONFIG_MFD_WM8350_I2C is not set
1266# CONFIG_MFD_PCF50633 is not set
1267# CONFIG_MFD_MC13783 is not set
1268# CONFIG_AB3100_CORE is not set
1269# CONFIG_EZX_PCAP is not set
1270# CONFIG_MFD_88PM8607 is not set
1271# CONFIG_AB4500_CORE is not set
1272# CONFIG_REGULATOR is not set
1273# CONFIG_MEDIA_SUPPORT is not set
1274
1275#
1276# Graphics support
1277#
1278# CONFIG_AGP is not set
1279CONFIG_VGA_ARB=y
1280# CONFIG_DRM is not set
1281# CONFIG_VGASTATE is not set
1282CONFIG_VIDEO_OUTPUT_CONTROL=y
1283# CONFIG_FB is not set
1284# CONFIG_BACKLIGHT_LCD_SUPPORT is not set
1285
1286#
1287# Display device support
1288#
1289# CONFIG_DISPLAY_SUPPORT is not set
1290
1291#
1292# Console display driver support
1293#
1294CONFIG_VGA_CONSOLE=y
1295# CONFIG_VGACON_SOFT_SCROLLBACK is not set
1296CONFIG_DUMMY_CONSOLE=y
1297# CONFIG_SOUND is not set
1298# CONFIG_HID_SUPPORT is not set
1299CONFIG_USB_SUPPORT=y
1300CONFIG_USB_ARCH_HAS_HCD=y
1301CONFIG_USB_ARCH_HAS_OHCI=y
1302CONFIG_USB_ARCH_HAS_EHCI=y
1303CONFIG_USB=y
1304# CONFIG_USB_DEBUG is not set
1305# CONFIG_USB_ANNOUNCE_NEW_DEVICES is not set
1306
1307#
1308# Miscellaneous USB options
1309#
1310CONFIG_USB_DEVICEFS=y
1311# CONFIG_USB_DEVICE_CLASS is not set
1312# CONFIG_USB_DYNAMIC_MINORS is not set
1313# CONFIG_USB_SUSPEND is not set
1314# CONFIG_USB_OTG is not set
1315# CONFIG_USB_OTG_WHITELIST is not set
1316# CONFIG_USB_OTG_BLACKLIST_HUB is not set
1317# CONFIG_USB_MON is not set
1318# CONFIG_USB_WUSB is not set
1319# CONFIG_USB_WUSB_CBAF is not set
1320
1321#
1322# USB Host Controller Drivers
1323#
1324# CONFIG_USB_C67X00_HCD is not set
1325# CONFIG_USB_XHCI_HCD is not set
1326CONFIG_USB_EHCI_HCD=y
1327CONFIG_USB_EHCI_ROOT_HUB_TT=y
1328# CONFIG_USB_EHCI_TT_NEWSCHED is not set
1329# CONFIG_XPS_USB_HCD_XILINX is not set
1330CONFIG_USB_EHCI_FSL=y
1331CONFIG_USB_EHCI_HCD_PPC_OF=y
1332# CONFIG_USB_OXU210HP_HCD is not set
1333# CONFIG_USB_ISP116X_HCD is not set
1334# CONFIG_USB_ISP1760_HCD is not set
1335# CONFIG_USB_ISP1362_HCD is not set
1336CONFIG_USB_OHCI_HCD=y
1337CONFIG_USB_OHCI_HCD_PPC_OF_BE=y
1338CONFIG_USB_OHCI_HCD_PPC_OF_LE=y
1339CONFIG_USB_OHCI_HCD_PPC_OF=y
1340CONFIG_USB_OHCI_HCD_PCI=y
1341CONFIG_USB_OHCI_BIG_ENDIAN_DESC=y
1342CONFIG_USB_OHCI_BIG_ENDIAN_MMIO=y
1343CONFIG_USB_OHCI_LITTLE_ENDIAN=y
1344# CONFIG_USB_UHCI_HCD is not set
1345# CONFIG_USB_SL811_HCD is not set
1346# CONFIG_USB_R8A66597_HCD is not set
1347# CONFIG_USB_WHCI_HCD is not set
1348# CONFIG_USB_HWA_HCD is not set
1349
1350#
1351# USB Device Class drivers
1352#
1353# CONFIG_USB_ACM is not set
1354# CONFIG_USB_PRINTER is not set
1355# CONFIG_USB_WDM is not set
1356# CONFIG_USB_TMC is not set
1357
1358#
1359# NOTE: USB_STORAGE depends on SCSI but BLK_DEV_SD may
1360#
1361
1362#
1363# also be needed; see USB_STORAGE Help for more info
1364#
1365CONFIG_USB_STORAGE=y
1366# CONFIG_USB_STORAGE_DEBUG is not set
1367# CONFIG_USB_STORAGE_DATAFAB is not set
1368# CONFIG_USB_STORAGE_FREECOM is not set
1369# CONFIG_USB_STORAGE_ISD200 is not set
1370# CONFIG_USB_STORAGE_USBAT is not set
1371# CONFIG_USB_STORAGE_SDDR09 is not set
1372# CONFIG_USB_STORAGE_SDDR55 is not set
1373# CONFIG_USB_STORAGE_JUMPSHOT is not set
1374# CONFIG_USB_STORAGE_ALAUDA is not set
1375# CONFIG_USB_STORAGE_ONETOUCH is not set
1376# CONFIG_USB_STORAGE_KARMA is not set
1377# CONFIG_USB_STORAGE_CYPRESS_ATACB is not set
1378# CONFIG_USB_LIBUSUAL is not set
1379
1380#
1381# USB Imaging devices
1382#
1383# CONFIG_USB_MDC800 is not set
1384# CONFIG_USB_MICROTEK is not set
1385
1386#
1387# USB port drivers
1388#
1389# CONFIG_FSL_USB_OTG is not set
1390# CONFIG_USB_SERIAL is not set
1391
1392#
1393# USB Miscellaneous drivers
1394#
1395# CONFIG_USB_EMI62 is not set
1396# CONFIG_USB_EMI26 is not set
1397# CONFIG_USB_ADUTUX is not set
1398# CONFIG_USB_SEVSEG is not set
1399# CONFIG_USB_RIO500 is not set
1400# CONFIG_USB_LEGOTOWER is not set
1401# CONFIG_USB_LCD is not set
1402# CONFIG_USB_BERRY_CHARGE is not set
1403# CONFIG_USB_LED is not set
1404# CONFIG_USB_CYPRESS_CY7C63 is not set
1405# CONFIG_USB_CYTHERM is not set
1406# CONFIG_USB_IDMOUSE is not set
1407# CONFIG_USB_FTDI_ELAN is not set
1408# CONFIG_USB_APPLEDISPLAY is not set
1409# CONFIG_USB_SISUSBVGA is not set
1410# CONFIG_USB_LD is not set
1411# CONFIG_USB_TRANCEVIBRATOR is not set
1412# CONFIG_USB_IOWARRIOR is not set
1413# CONFIG_USB_TEST is not set
1414# CONFIG_USB_ISIGHTFW is not set
1415# CONFIG_USB_VST is not set
1416# CONFIG_USB_GADGET is not set
1417
1418#
1419# OTG and related infrastructure
1420#
1421# CONFIG_USB_GPIO_VBUS is not set
1422# CONFIG_NOP_USB_XCEIV is not set
1423# CONFIG_UWB is not set
1424CONFIG_MMC=y
1425# CONFIG_MMC_DEBUG is not set
1426CONFIG_MMC_UNSAFE_RESUME=y
1427
1428#
1429# MMC/SD/SDIO Card Drivers
1430#
1431CONFIG_MMC_BLOCK=y
1432CONFIG_MMC_BLOCK_BOUNCE=y
1433# CONFIG_SDIO_UART is not set
1434# CONFIG_MMC_TEST is not set
1435
1436#
1437# MMC/SD/SDIO Host Controller Drivers
1438#
1439CONFIG_MMC_SDHCI=y
1440CONFIG_MMC_SDHCI_IO_ACCESSORS=y
1441CONFIG_MMC_SDHCI_BIG_ENDIAN_32BIT_BYTE_SWAPPER=y
1442# CONFIG_MMC_SDHCI_PCI is not set
1443CONFIG_MMC_SDHCI_OF=y
1444CONFIG_MMC_SDHCI_OF_ESDHC=y
1445# CONFIG_MMC_SDHCI_OF_HLWD is not set
1446CONFIG_MMC_SDHCI_PLTFM=y
1447# CONFIG_MMC_WBSD is not set
1448# CONFIG_MMC_AT91 is not set
1449# CONFIG_MMC_ATMELMCI is not set
1450# CONFIG_MMC_TIFM_SD is not set
1451# CONFIG_MMC_CB710 is not set
1452# CONFIG_MMC_VIA_SDMMC is not set
1453# CONFIG_MEMSTICK is not set
1454# CONFIG_NEW_LEDS is not set
1455# CONFIG_ACCESSIBILITY is not set
1456# CONFIG_INFINIBAND is not set
1457# CONFIG_EDAC is not set
1458CONFIG_RTC_LIB=y
1459CONFIG_RTC_CLASS=y
1460CONFIG_RTC_HCTOSYS=y
1461CONFIG_RTC_HCTOSYS_DEVICE="rtc0"
1462# CONFIG_RTC_DEBUG is not set
1463
1464#
1465# RTC interfaces
1466#
1467CONFIG_RTC_INTF_SYSFS=y
1468CONFIG_RTC_INTF_PROC=y
1469CONFIG_RTC_INTF_DEV=y
1470# CONFIG_RTC_INTF_DEV_UIE_EMUL is not set
1471# CONFIG_RTC_DRV_TEST is not set
1472
1473#
1474# I2C RTC drivers
1475#
1476CONFIG_RTC_DRV_DS1307=y
1477# CONFIG_RTC_DRV_DS1374 is not set
1478# CONFIG_RTC_DRV_DS1672 is not set
1479CONFIG_RTC_DRV_DS3232=y
1480# CONFIG_RTC_DRV_MAX6900 is not set
1481# CONFIG_RTC_DRV_RS5C372 is not set
1482# CONFIG_RTC_DRV_ISL1208 is not set
1483# CONFIG_RTC_DRV_X1205 is not set
1484# CONFIG_RTC_DRV_PCF8563 is not set
1485# CONFIG_RTC_DRV_PCF8583 is not set
1486# CONFIG_RTC_DRV_M41T80 is not set
1487# CONFIG_RTC_DRV_BQ32K is not set
1488# CONFIG_RTC_DRV_S35390A is not set
1489# CONFIG_RTC_DRV_FM3130 is not set
1490# CONFIG_RTC_DRV_RX8581 is not set
1491# CONFIG_RTC_DRV_RX8025 is not set
1492CONFIG_RTC_DRV_PT7C4338=y
1493
1494#
1495# SPI RTC drivers
1496#
1497# CONFIG_RTC_DRV_M41T94 is not set
1498# CONFIG_RTC_DRV_DS1305 is not set
1499# CONFIG_RTC_DRV_DS1390 is not set
1500# CONFIG_RTC_DRV_MAX6902 is not set
1501# CONFIG_RTC_DRV_R9701 is not set
1502# CONFIG_RTC_DRV_RS5C348 is not set
1503# CONFIG_RTC_DRV_DS3234 is not set
1504# CONFIG_RTC_DRV_PCF2123 is not set
1505
1506#
1507# Platform RTC drivers
1508#
1509CONFIG_RTC_DRV_CMOS=y
1510# CONFIG_RTC_DRV_DS1286 is not set
1511# CONFIG_RTC_DRV_DS1511 is not set
1512# CONFIG_RTC_DRV_DS1553 is not set
1513# CONFIG_RTC_DRV_DS1742 is not set
1514# CONFIG_RTC_DRV_STK17TA8 is not set
1515# CONFIG_RTC_DRV_M48T86 is not set
1516# CONFIG_RTC_DRV_M48T35 is not set
1517# CONFIG_RTC_DRV_M48T59 is not set
1518# CONFIG_RTC_DRV_MSM6242 is not set
1519# CONFIG_RTC_DRV_BQ4802 is not set
1520# CONFIG_RTC_DRV_RP5C01 is not set
1521# CONFIG_RTC_DRV_V3020 is not set
1522
1523#
1524# on-CPU RTC drivers
1525#
1526# CONFIG_RTC_DRV_GENERIC is not set
1527CONFIG_DMADEVICES=y
1528
1529#
1530# DMA Devices
1531#
1532CONFIG_FSL_DMA=y
1533CONFIG_DMA_ENGINE=y
1534
1535#
1536# DMA Clients
1537#
1538# CONFIG_NET_DMA is not set
1539CONFIG_ASYNC_TX_DMA=y
1540# CONFIG_DMATEST is not set
1541# CONFIG_AUXDISPLAY is not set
1542CONFIG_UIO=y
1543# CONFIG_UIO_CIF is not set
1544# CONFIG_UIO_PDRV is not set
1545# CONFIG_UIO_PDRV_GENIRQ is not set
1546# CONFIG_UIO_SMX is not set
1547# CONFIG_UIO_AEC is not set
1548# CONFIG_UIO_SERCOS3 is not set
1549# CONFIG_UIO_PCI_GENERIC is not set
1550# CONFIG_UIO_NETX is not set
1551
1552#
1553# TI VLYNQ
1554#
1555# CONFIG_STAGING is not set
1556# CONFIG_TDM is not set
1557CONFIG_RFDEVICES=y
1558CONFIG_RFDEV_CORE=y
1559CONFIG_FSL_AIC=y
1560CONFIG_ADI9361=y
1561# CONFIG_FSL_SWIM_EDC is not set
1562
1563#
1564# File systems
1565#
1566CONFIG_EXT2_FS=y
1567# CONFIG_EXT2_FS_XATTR is not set
1568# CONFIG_EXT2_FS_XIP is not set
1569CONFIG_EXT3_FS=y
1570# CONFIG_EXT3_DEFAULTS_TO_ORDERED is not set
1571CONFIG_EXT3_FS_XATTR=y
1572# CONFIG_EXT3_FS_POSIX_ACL is not set
1573# CONFIG_EXT3_FS_SECURITY is not set
1574# CONFIG_EXT4_FS is not set
1575CONFIG_JBD=y
1576CONFIG_FS_MBCACHE=y
1577# CONFIG_REISERFS_FS is not set
1578# CONFIG_JFS_FS is not set
1579CONFIG_FS_POSIX_ACL=y
1580CONFIG_XFS_FS=y
1581# CONFIG_XFS_QUOTA is not set
1582# CONFIG_XFS_POSIX_ACL is not set
1583# CONFIG_XFS_RT is not set
1584# CONFIG_XFS_DEBUG is not set
1585# CONFIG_GFS2_FS is not set
1586# CONFIG_OCFS2_FS is not set
1587# CONFIG_BTRFS_FS is not set
1588# CONFIG_NILFS2_FS is not set
1589CONFIG_FILE_LOCKING=y
1590# CONFIG_OPTIMIZE_SD_PERFORMANCE is not set
1591# CONFIG_DELAY_ASYNC_READAHEAD is not set
1592# CONFIG_SEND_PAGES is not set
1593CONFIG_FSNOTIFY=y
1594CONFIG_DNOTIFY=y
1595CONFIG_INOTIFY=y
1596CONFIG_INOTIFY_USER=y
1597# CONFIG_QUOTA is not set
1598# CONFIG_AUTOFS_FS is not set
1599# CONFIG_AUTOFS4_FS is not set
1600# CONFIG_FUSE_FS is not set
1601
1602#
1603# Caches
1604#
1605# CONFIG_FSCACHE is not set
1606
1607#
1608# CD-ROM/DVD Filesystems
1609#
1610CONFIG_ISO9660_FS=m
1611CONFIG_JOLIET=y
1612CONFIG_ZISOFS=y
1613CONFIG_UDF_FS=m
1614CONFIG_UDF_NLS=y
1615
1616#
1617# DOS/FAT/NT Filesystems
1618#
1619CONFIG_FAT_FS=y
1620CONFIG_MSDOS_FS=m
1621CONFIG_VFAT_FS=y
1622CONFIG_FAT_DEFAULT_CODEPAGE=437
1623CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1"
1624CONFIG_NTFS_FS=y
1625# CONFIG_NTFS_DEBUG is not set
1626# CONFIG_NTFS_RW is not set
1627
1628#
1629# Pseudo filesystems
1630#
1631CONFIG_PROC_FS=y
1632CONFIG_PROC_KCORE=y
1633CONFIG_PROC_SYSCTL=y
1634CONFIG_PROC_PAGE_MONITOR=y
1635CONFIG_SYSFS=y
1636CONFIG_TMPFS=y
1637# CONFIG_TMPFS_POSIX_ACL is not set
1638CONFIG_HUGETLBFS=y
1639CONFIG_HUGETLB_PAGE=y
1640# CONFIG_CONFIGFS_FS is not set
1641CONFIG_MISC_FILESYSTEMS=y
1642# CONFIG_ADFS_FS is not set
1643# CONFIG_AFFS_FS is not set
1644# CONFIG_HFS_FS is not set
1645# CONFIG_HFSPLUS_FS is not set
1646# CONFIG_BEFS_FS is not set
1647# CONFIG_BFS_FS is not set
1648# CONFIG_EFS_FS is not set
1649CONFIG_JFFS2_FS=y
1650CONFIG_JFFS2_FS_DEBUG=1
1651CONFIG_JFFS2_FS_WRITEBUFFER=y
1652CONFIG_JFFS2_FS_WBUF_VERIFY=y
1653CONFIG_JFFS2_SUMMARY=y
1654CONFIG_JFFS2_FS_XATTR=y
1655CONFIG_JFFS2_FS_POSIX_ACL=y
1656CONFIG_JFFS2_FS_SECURITY=y
1657CONFIG_JFFS2_COMPRESSION_OPTIONS=y
1658CONFIG_JFFS2_ZLIB=y
1659CONFIG_JFFS2_LZO=y
1660CONFIG_JFFS2_RTIME=y
1661CONFIG_JFFS2_RUBIN=y
1662# CONFIG_JFFS2_CMODE_NONE is not set
1663CONFIG_JFFS2_CMODE_PRIORITY=y
1664# CONFIG_JFFS2_CMODE_SIZE is not set
1665# CONFIG_JFFS2_CMODE_FAVOURLZO is not set
1666CONFIG_UBIFS_FS=y
1667CONFIG_UBIFS_FS_XATTR=y
1668# CONFIG_UBIFS_FS_ADVANCED_COMPR is not set
1669CONFIG_UBIFS_FS_LZO=y
1670CONFIG_UBIFS_FS_ZLIB=y
1671# CONFIG_UBIFS_FS_DEBUG is not set
1672# CONFIG_CRAMFS is not set
1673# CONFIG_SQUASHFS is not set
1674# CONFIG_VXFS_FS is not set
1675# CONFIG_MINIX_FS is not set
1676# CONFIG_OMFS_FS is not set
1677# CONFIG_HPFS_FS is not set
1678# CONFIG_QNX4FS_FS is not set
1679# CONFIG_ROMFS_FS is not set
1680# CONFIG_SYSV_FS is not set
1681# CONFIG_UFS_FS is not set
1682CONFIG_NETWORK_FILESYSTEMS=y
1683CONFIG_NFS_FS=y
1684CONFIG_NFS_V3=y
1685# CONFIG_NFS_V3_ACL is not set
1686CONFIG_NFS_V4=y
1687# CONFIG_NFS_V4_1 is not set
1688CONFIG_ROOT_NFS=y
1689CONFIG_NFSD=y
1690# CONFIG_NFSD_V3 is not set
1691# CONFIG_NFSD_V4 is not set
1692CONFIG_LOCKD=y
1693CONFIG_LOCKD_V4=y
1694CONFIG_EXPORTFS=y
1695CONFIG_NFS_COMMON=y
1696CONFIG_SUNRPC=y
1697CONFIG_SUNRPC_GSS=y
1698CONFIG_RPCSEC_GSS_KRB5=y
1699# CONFIG_RPCSEC_GSS_SPKM3 is not set
1700# CONFIG_SMB_FS is not set
1701CONFIG_CIFS=y
1702# CONFIG_CIFS_STATS is not set
1703# CONFIG_CIFS_WEAK_PW_HASH is not set
1704# CONFIG_CIFS_XATTR is not set
1705# CONFIG_CIFS_DEBUG2 is not set
1706# CONFIG_CIFS_EXPERIMENTAL is not set
1707# CONFIG_NCP_FS is not set
1708# CONFIG_CODA_FS is not set
1709# CONFIG_AFS_FS is not set
1710
1711#
1712# Partition Types
1713#
1714CONFIG_PARTITION_ADVANCED=y
1715# CONFIG_ACORN_PARTITION is not set
1716# CONFIG_OSF_PARTITION is not set
1717# CONFIG_AMIGA_PARTITION is not set
1718# CONFIG_ATARI_PARTITION is not set
1719CONFIG_MAC_PARTITION=y
1720CONFIG_MSDOS_PARTITION=y
1721# CONFIG_BSD_DISKLABEL is not set
1722# CONFIG_MINIX_SUBPARTITION is not set
1723# CONFIG_SOLARIS_X86_PARTITION is not set
1724# CONFIG_UNIXWARE_DISKLABEL is not set
1725# CONFIG_LDM_PARTITION is not set
1726# CONFIG_SGI_PARTITION is not set
1727# CONFIG_ULTRIX_PARTITION is not set
1728# CONFIG_SUN_PARTITION is not set
1729# CONFIG_KARMA_PARTITION is not set
1730# CONFIG_EFI_PARTITION is not set
1731# CONFIG_SYSV68_PARTITION is not set
1732CONFIG_NLS=y
1733CONFIG_NLS_DEFAULT="iso8859-1"
1734CONFIG_NLS_CODEPAGE_437=y
1735# CONFIG_NLS_CODEPAGE_737 is not set
1736# CONFIG_NLS_CODEPAGE_775 is not set
1737# CONFIG_NLS_CODEPAGE_850 is not set
1738# CONFIG_NLS_CODEPAGE_852 is not set
1739# CONFIG_NLS_CODEPAGE_855 is not set
1740# CONFIG_NLS_CODEPAGE_857 is not set
1741# CONFIG_NLS_CODEPAGE_860 is not set
1742# CONFIG_NLS_CODEPAGE_861 is not set
1743# CONFIG_NLS_CODEPAGE_862 is not set
1744# CONFIG_NLS_CODEPAGE_863 is not set
1745# CONFIG_NLS_CODEPAGE_864 is not set
1746# CONFIG_NLS_CODEPAGE_865 is not set
1747# CONFIG_NLS_CODEPAGE_866 is not set
1748# CONFIG_NLS_CODEPAGE_869 is not set
1749# CONFIG_NLS_CODEPAGE_936 is not set
1750# CONFIG_NLS_CODEPAGE_950 is not set
1751# CONFIG_NLS_CODEPAGE_932 is not set
1752# CONFIG_NLS_CODEPAGE_949 is not set
1753# CONFIG_NLS_CODEPAGE_874 is not set
1754# CONFIG_NLS_ISO8859_8 is not set
1755# CONFIG_NLS_CODEPAGE_1250 is not set
1756# CONFIG_NLS_CODEPAGE_1251 is not set
1757# CONFIG_NLS_ASCII is not set
1758CONFIG_NLS_ISO8859_1=y
1759# CONFIG_NLS_ISO8859_2 is not set
1760# CONFIG_NLS_ISO8859_3 is not set
1761# CONFIG_NLS_ISO8859_4 is not set
1762# CONFIG_NLS_ISO8859_5 is not set
1763# CONFIG_NLS_ISO8859_6 is not set
1764# CONFIG_NLS_ISO8859_7 is not set
1765# CONFIG_NLS_ISO8859_9 is not set
1766# CONFIG_NLS_ISO8859_13 is not set
1767# CONFIG_NLS_ISO8859_14 is not set
1768# CONFIG_NLS_ISO8859_15 is not set
1769# CONFIG_NLS_KOI8_R is not set
1770# CONFIG_NLS_KOI8_U is not set
1771# CONFIG_NLS_UTF8 is not set
1772# CONFIG_DLM is not set
1773# CONFIG_BINARY_PRINTF is not set
1774
1775#
1776# Library routines
1777#
1778CONFIG_BITREVERSE=y
1779CONFIG_GENERIC_FIND_LAST_BIT=y
1780# CONFIG_CRC_CCITT is not set
1781CONFIG_CRC16=y
1782CONFIG_CRC_T10DIF=y
1783CONFIG_CRC_ITU_T=m
1784CONFIG_CRC32=y
1785# CONFIG_CRC7 is not set
1786# CONFIG_LIBCRC32C is not set
1787CONFIG_ZLIB_INFLATE=y
1788CONFIG_ZLIB_DEFLATE=y
1789CONFIG_LZO_COMPRESS=y
1790CONFIG_LZO_DECOMPRESS=y
1791CONFIG_DECOMPRESS_GZIP=y
1792CONFIG_HAS_IOMEM=y
1793CONFIG_HAS_IOPORT=y
1794CONFIG_HAS_DMA=y
1795CONFIG_HAVE_LMB=y
1796CONFIG_NLATTR=y
1797CONFIG_GENERIC_ATOMIC64=y
1798
1799#
1800# Kernel hacking
1801#
1802# CONFIG_PRINTK_TIME is not set
1803CONFIG_ENABLE_WARN_DEPRECATED=y
1804CONFIG_ENABLE_MUST_CHECK=y
1805CONFIG_FRAME_WARN=1024
1806# CONFIG_MAGIC_SYSRQ is not set
1807# CONFIG_STRIP_ASM_SYMS is not set
1808# CONFIG_UNUSED_SYMBOLS is not set
1809# CONFIG_DEBUG_FS is not set
1810# CONFIG_HEADERS_CHECK is not set
1811# CONFIG_DEBUG_KERNEL is not set
1812CONFIG_DEBUG_BUGVERBOSE=y
1813# CONFIG_DEBUG_MEMORY_INIT is not set
1814# CONFIG_RCU_CPU_STALL_DETECTOR is not set
1815# CONFIG_LATENCYTOP is not set
1816# CONFIG_SYSCTL_SYSCALL_CHECK is not set
1817CONFIG_HAVE_FUNCTION_TRACER=y
1818CONFIG_HAVE_FUNCTION_GRAPH_TRACER=y
1819CONFIG_HAVE_DYNAMIC_FTRACE=y
1820CONFIG_HAVE_FTRACE_MCOUNT_RECORD=y
1821CONFIG_TRACING_SUPPORT=y
1822# CONFIG_FTRACE is not set
1823# CONFIG_DMA_API_DEBUG is not set
1824# CONFIG_SAMPLES is not set
1825CONFIG_HAVE_ARCH_KGDB=y
1826# CONFIG_PPC_DISABLE_WERROR is not set
1827CONFIG_PPC_WERROR=y
1828CONFIG_PRINT_STACK_DEPTH=64
1829# CONFIG_IRQSTACKS is not set
1830# CONFIG_PPC_EARLY_DEBUG is not set
1831
1832#
1833# Security options
1834#
1835# CONFIG_KEYS is not set
1836# CONFIG_SECURITY is not set
1837# CONFIG_SECURITYFS is not set
1838# CONFIG_DEFAULT_SECURITY_SELINUX is not set
1839# CONFIG_DEFAULT_SECURITY_SMACK is not set
1840# CONFIG_DEFAULT_SECURITY_TOMOYO is not set
1841CONFIG_DEFAULT_SECURITY_DAC=y
1842CONFIG_DEFAULT_SECURITY=""
1843CONFIG_XOR_BLOCKS=y
1844CONFIG_ASYNC_CORE=y
1845CONFIG_ASYNC_MEMCPY=y
1846CONFIG_ASYNC_XOR=y
1847CONFIG_ASYNC_PQ=y
1848CONFIG_ASYNC_RAID6_RECOV=y
1849CONFIG_CRYPTO=y
1850
1851#
1852# Crypto core or helper
1853#
1854CONFIG_CRYPTO_ALGAPI=y
1855CONFIG_CRYPTO_ALGAPI2=y
1856CONFIG_CRYPTO_AEAD=y
1857CONFIG_CRYPTO_AEAD2=y
1858CONFIG_CRYPTO_BLKCIPHER=y
1859CONFIG_CRYPTO_BLKCIPHER2=y
1860CONFIG_CRYPTO_HASH=y
1861CONFIG_CRYPTO_HASH2=y
1862CONFIG_CRYPTO_RNG2=y
1863CONFIG_CRYPTO_PCOMP=y
1864CONFIG_CRYPTO_MANAGER=y
1865CONFIG_CRYPTO_MANAGER2=y
1866# CONFIG_CRYPTO_GF128MUL is not set
1867# CONFIG_CRYPTO_NULL is not set
1868CONFIG_CRYPTO_WORKQUEUE=y
1869# CONFIG_CRYPTO_CRYPTD is not set
1870CONFIG_CRYPTO_AUTHENC=y
1871# CONFIG_CRYPTO_TEST is not set
1872
1873#
1874# Authenticated Encryption with Associated Data
1875#
1876# CONFIG_CRYPTO_CCM is not set
1877# CONFIG_CRYPTO_GCM is not set
1878# CONFIG_CRYPTO_SEQIV is not set
1879
1880#
1881# Block modes
1882#
1883CONFIG_CRYPTO_CBC=y
1884# CONFIG_CRYPTO_CTR is not set
1885# CONFIG_CRYPTO_CTS is not set
1886CONFIG_CRYPTO_ECB=y
1887# CONFIG_CRYPTO_LRW is not set
1888CONFIG_CRYPTO_PCBC=y
1889# CONFIG_CRYPTO_XTS is not set
1890
1891#
1892# Hash modes
1893#
1894CONFIG_CRYPTO_HMAC=y
1895# CONFIG_CRYPTO_XCBC is not set
1896# CONFIG_CRYPTO_VMAC is not set
1897
1898#
1899# Digest
1900#
1901CONFIG_CRYPTO_CRC32C=y
1902# CONFIG_CRYPTO_GHASH is not set
1903CONFIG_CRYPTO_MD4=y
1904CONFIG_CRYPTO_MD5=y
1905# CONFIG_CRYPTO_MICHAEL_MIC is not set
1906# CONFIG_CRYPTO_RMD128 is not set
1907# CONFIG_CRYPTO_RMD160 is not set
1908# CONFIG_CRYPTO_RMD256 is not set
1909# CONFIG_CRYPTO_RMD320 is not set
1910CONFIG_CRYPTO_SHA1=y
1911# CONFIG_CRYPTO_SHA256 is not set
1912# CONFIG_CRYPTO_SHA512 is not set
1913# CONFIG_CRYPTO_TGR192 is not set
1914# CONFIG_CRYPTO_WP512 is not set
1915
1916#
1917# Ciphers
1918#
1919CONFIG_CRYPTO_AES=y
1920# CONFIG_CRYPTO_ANUBIS is not set
1921# CONFIG_CRYPTO_ARC4 is not set
1922# CONFIG_CRYPTO_BLOWFISH is not set
1923# CONFIG_CRYPTO_CAMELLIA is not set
1924# CONFIG_CRYPTO_CAST5 is not set
1925# CONFIG_CRYPTO_CAST6 is not set
1926CONFIG_CRYPTO_DES=y
1927# CONFIG_CRYPTO_FCRYPT is not set
1928# CONFIG_CRYPTO_KHAZAD is not set
1929# CONFIG_CRYPTO_SALSA20 is not set
1930# CONFIG_CRYPTO_SEED is not set
1931# CONFIG_CRYPTO_SERPENT is not set
1932# CONFIG_CRYPTO_TEA is not set
1933# CONFIG_CRYPTO_TWOFISH is not set
1934
1935#
1936# Compression
1937#
1938CONFIG_CRYPTO_DEFLATE=y
1939# CONFIG_CRYPTO_ZLIB is not set
1940CONFIG_CRYPTO_LZO=y
1941
1942#
1943# Random Number Generation
1944#
1945# CONFIG_CRYPTO_ANSI_CPRNG is not set
1946CONFIG_CRYPTO_HW=y
1947# CONFIG_CRYPTO_DEV_HIFN_795X is not set
1948CONFIG_CRYPTO_DEV_FSL_CAAM=y
1949CONFIG_CRYPTO_DEV_FSL_CAAM_RINGSIZE=9
1950CONFIG_CRYPTO_DEV_FSL_CAAM_INTC=y
1951CONFIG_CRYPTO_DEV_FSL_CAAM_INTC_COUNT_THLD=255
1952CONFIG_CRYPTO_DEV_FSL_CAAM_INTC_TIME_THLD=2048
1953CONFIG_CRYPTO_DEV_FSL_CAAM_CRYPTO_API=y
1954CONFIG_CRYPTO_DEV_FSL_CAAM_UIO=y
1955# CONFIG_CRYPTO_DEV_TALITOS is not set
1956# CONFIG_PPC_CLOCK is not set
1957CONFIG_PPC_LIB_RHEAP=y
1958# CONFIG_VIRTUALIZATION is not set
diff --git a/recipes-kernel/linux/linux-bsc913x/bsc9132qds/linux-bsc9132qds-2.6.33.tar.bz2 b/recipes-kernel/linux/linux-bsc913x/bsc9132qds/linux-bsc9132qds-2.6.33.tar.bz2
new file mode 100644
index 0000000..b81ece1
--- /dev/null
+++ b/recipes-kernel/linux/linux-bsc913x/bsc9132qds/linux-bsc9132qds-2.6.33.tar.bz2
Binary files differ
diff --git a/recipes-kernel/linux/linux-davinci-mainline.bbappend b/recipes-kernel/linux/linux-davinci-mainline.bbappend
new file mode 100644
index 0000000..fd607dc
--- /dev/null
+++ b/recipes-kernel/linux/linux-davinci-mainline.bbappend
@@ -0,0 +1,18 @@
1FILESEXTRAPATHS_prepend := "${THISDIR}/files:"
2
3KERNEL_FEATURES=" \
4 cfg/localversion \
5 cfg/with_modules \
6 cfg/embedded \
7 cfg/preempt \
8 cfg/root_nfs \
9 cfg/devtmpfs \
10 cfg/bootlogd \
11 cfg/mtd_tests \
12 cfg/lttng \
13 cfg/ltp \
14 "
15
16STAGING_KERNEL_FEATURES = "${KERNEL_FEATURES} cfg/debug cfg/kprobes cfg/oprofile cfg/i2c"
17
18require recipes-kernel/linux/staging-kernel.inc
diff --git a/recipes-kernel/linux/linux-kernel-headers_3.0.6.bb b/recipes-kernel/linux/linux-kernel-headers_3.0.6.bb
new file mode 100644
index 0000000..9dfed39
--- /dev/null
+++ b/recipes-kernel/linux/linux-kernel-headers_3.0.6.bb
@@ -0,0 +1,66 @@
1PROVIDES = "linux-libc-headers"
2
3DESCRIPTION = "linux v${PV} kernel headers"
4SECTION = "devel"
5LICENSE = "GPLv2"
6LIC_FILES_CHKSUM = "file://COPYING;md5=d7810fab7487fb0aad327b76f1be7cd7"
7
8PKGSUFFIX = ""
9PKGSUFFIX_virtclass-nativesdk = "-nativesdk"
10
11INHIBIT_DEFAULT_DEPS = "1"
12DEPENDS += "unifdef-native"
13
14RDEPENDS_${PN}-dev = ""
15RPROVIDES_${PN} = "linux-kernel-headers"
16
17RPROVIDES_${PN}-dev += "linux-libc-headers${PKGSUFFIX}-dev"
18RPROVIDES_${PN}-dbg += "linux-libc-headers${PKGSUFFIX}-dbg"
19RRECOMMENDS_${PN}-dbg = "linux-libc-headers${PKGSUFFIX}-dev (= ${EXTENDPKGV})"
20
21require linux-3.0.6.inc
22
23set_arch() {
24 case ${TARGET_ARCH} in
25 arm*) ARCH=arm ;;
26 i*86*) ARCH=i386 ;;
27 ia64*) ARCH=ia64 ;;
28 mips*) ARCH=mips ;;
29 powerpc*) ARCH=powerpc ;;
30 x86_64*) ARCH=x86_64 ;;
31 esac
32}
33
34do_configure () {
35 set_arch
36 oe_runmake allnoconfig ARCH=$ARCH
37}
38
39do_compile () {
40 :
41}
42
43do_install() {
44 set_arch
45 cd ${S}
46 oe_runmake headers_install INSTALL_HDR_PATH=${D}${exec_prefix} ARCH=${ARCH}
47
48 # The ..install.cmd conflicts between various configure runs
49 find ${D}${includedir} -name ..install.cmd | xargs rm -f
50}
51
52BBCLASSEXTEND = "nativesdk"
53
54# The following tasks are not required when we just want
55# headers. So we override and stub them out.
56do_kernel_configme() {
57}
58
59do_compile () {
60}
61
62do_validate_branches () {
63}
64
65do_kernel_configcheck () {
66}
diff --git a/recipes-kernel/linux/linux-keystone_3.8.4.bbappend b/recipes-kernel/linux/linux-keystone_3.8.4.bbappend
new file mode 100644
index 0000000..76d0615
--- /dev/null
+++ b/recipes-kernel/linux/linux-keystone_3.8.4.bbappend
@@ -0,0 +1,24 @@
1FILESEXTRAPATHS_prepend := "${THISDIR}/files:"
2
3SRC_URI += "file://fix_for_CVE-2013-2094.patch \
4 file://disable_hw_checksum_offload.patch \
5 file://set-keystone2-clock-frequency.patch \
6 "
7
8KERNEL_FEATURES = " \
9 cfg/kgdb \
10 cfg/lttng \
11 cfg/perf \
12 cfg/powertop \
13 cfg/systemtap \
14 "
15KERNEL_DEFCONFIG = "${WORKDIR}/defconfig"
16
17require kernel-configure.inc
18
19do_configure_prepend() {
20
21 configure_kernel ${KERNEL_DEFCONFIG} "${KERNEL_FEATURES}"
22
23}
24
diff --git a/recipes-kernel/linux/linux-omap4_3.4.bbappend b/recipes-kernel/linux/linux-omap4_3.4.bbappend
new file mode 100644
index 0000000..4ebd15b
--- /dev/null
+++ b/recipes-kernel/linux/linux-omap4_3.4.bbappend
@@ -0,0 +1,22 @@
1FILESEXTRAPATHS_prepend := "${THISDIR}/files:"
2
3SRC_URI += "file://fix_for_CVE-2013-2094.patch \
4 "
5
6KERNEL_FEATURES = " \
7 cfg/localversion \
8 cfg/with_modules \
9 cfg/embedded \
10 cfg/preempt \
11 cfg/root_nfs \
12 cfg/devtmpfs \
13 cfg/bootlogd \
14 cfg/mtd_tests \
15 cfg/ltp \
16 "
17
18KERNEL_DEFCONFIG = "${WORKDIR}/defconfig"
19
20STAGING_KERNEL_FEATURES = "${KERNEL_FEATURES} cfg/debug cfg/kprobes cfg/oprofile cfg/i2c cfg/lttngcfg/powertop cfg/latencytop cfg/systemtap cfg/kgdb"
21
22require recipes-kernel/linux/staging-kernel.inc
diff --git a/recipes-kernel/linux/linux-qoriq-sdk.bbappend b/recipes-kernel/linux/linux-qoriq-sdk.bbappend
new file mode 100644
index 0000000..cc78946
--- /dev/null
+++ b/recipes-kernel/linux/linux-qoriq-sdk.bbappend
@@ -0,0 +1,27 @@
1FILESEXTRAPATHS_prepend := "${THISDIR}/files:"
2
3
4SRC_URI += "file://add-no-error-uninitialized.patch \
5 "
6
7KERNEL_FEATURES="cfg/localversion \
8 cfg/with_modules \
9 cfg/embedded \
10 cfg/preempt \
11 cfg/root_nfs \
12 cfg/devtmpfs \
13 cfg/bootlogd \
14 cfg/mtd_tests \
15 cfg/latencytop \
16 cfg/ltp \
17 "
18
19KERNEL_FEATURES_append_p4080ds="cfg/dpa"
20KERNEL_FEATURES_append_p2041rdb="cfg/dpa"
21KERNEL_FEATURES_append_p2020rdb="cfg/uio"
22
23STAGING_KERNEL_FEATURES = "${KERNEL_FEATURES} cfg/debug cfg/kprobes cfg/oprofile cfg/i2c cfg/lttng cfg/powertop cfg/systemtap cfg/kgdb"
24STAGING_KERNEL_FEATURES_RT_p4080ds="${STAGING_KERNEL_FEATURES} cfg/rt"
25
26require recipes-kernel/linux/staging-kernel.inc
27require recipes-kernel/linux/pramfs-3.0.inc
diff --git a/recipes-kernel/linux/linux-raspberrypi_3.6.11.bbappend b/recipes-kernel/linux/linux-raspberrypi_3.6.11.bbappend
new file mode 100644
index 0000000..382f5e4
--- /dev/null
+++ b/recipes-kernel/linux/linux-raspberrypi_3.6.11.bbappend
@@ -0,0 +1,16 @@
1FILESEXTRAPATHS_prepend := "${THISDIR}/files:"
2
3KERNEL_FEATURES="cfg/localversion \
4 cfg/with_modules \
5 cfg/embedded \
6 cfg/preempt \
7 cfg/root_nfs \
8 cfg/devtmpfs \
9 cfg/bootlogd \
10 cfg/mtd_tests \
11 cfg/ltp \
12 "
13
14STAGING_KERNEL_FEATURES = "${KERNEL_FEATURES} cfg/debug cfg/kprobes cfg/oprofile cfg/i2c cfg/lttng cfg/perf cfg/powertop cfg/latencytop cfg/systemtap"
15
16require recipes-kernel/linux/staging-kernel.inc
diff --git a/recipes-kernel/linux/linux-xlnx_3.8.bbappend b/recipes-kernel/linux/linux-xlnx_3.8.bbappend
new file mode 100644
index 0000000..a162c49
--- /dev/null
+++ b/recipes-kernel/linux/linux-xlnx_3.8.bbappend
@@ -0,0 +1,11 @@
1FILESEXTRAPATHS_prepend := "${THISDIR}/files:"
2
3SRC_URI += "file://fix_for_CVE-2013-2094.patch \
4 "
5SRC_URI_append = "file://cfg/kgdb.cfg \
6 file://cfg/lttng.cfg \
7 file://cfg/perf.cfg \
8 file://cfg/powertop.cfg \
9 file://cfg/systemtap.cfg \
10 "
11
diff --git a/recipes-kernel/linux/linux-yocto_3.10.bbappend b/recipes-kernel/linux/linux-yocto_3.10.bbappend
new file mode 100644
index 0000000..f96e359
--- /dev/null
+++ b/recipes-kernel/linux/linux-yocto_3.10.bbappend
@@ -0,0 +1,4 @@
1FILESEXTRAPATHS_prepend := "${THISDIR}/files:"
2
3SRC_URI += "file://cfg/kgdb.cfg \
4 "
diff --git a/recipes-kernel/linux/linux-yocto_3.8.bbappend b/recipes-kernel/linux/linux-yocto_3.8.bbappend
new file mode 100644
index 0000000..6faf928
--- /dev/null
+++ b/recipes-kernel/linux/linux-yocto_3.8.bbappend
@@ -0,0 +1,5 @@
1FILESEXTRAPATHS_prepend := "${THISDIR}/files:"
2
3SRC_URI += "file://cfg/igb_drv.cfg \
4 file://cfg/kgdb.cfg \
5 "
diff --git a/recipes-kernel/linux/linux_3.0.6.bb b/recipes-kernel/linux/linux_3.0.6.bb
new file mode 100644
index 0000000..a283f77
--- /dev/null
+++ b/recipes-kernel/linux/linux_3.0.6.bb
@@ -0,0 +1,21 @@
1inherit kernel
2require recipes-kernel/linux/linux-dtb.inc
3
4DESCRIPTION = "linux v${PV} kernel"
5LICENSE = "GPLv2"
6LIC_FILES_CHKSUM = "file://COPYING;md5=d7810fab7487fb0aad327b76f1be7cd7"
7
8# For this kernel, the defconfig is included locally
9KERNEL_DEFCONFIG="${WORKDIR}/defconfig"
10
11KERNEL_FEATURES="cfg/localversion \
12 cfg/uio \
13 "
14
15STAGING_KERNEL_FEATURES="${KERNEL_FEATURES} cfg/debug"
16STAGING_KERNEL_FEATURES_append=" cfg/kprobes cfg/oprofile cfg/lttng"
17#STAGING_KERNEL_FEATURES_append_acp3448v2=""
18
19require linux-3.0.6.inc
20require staging-kernel.inc
21require pramfs-3.0.inc
diff --git a/recipes-kernel/linux/pramfs-2.6.33.inc b/recipes-kernel/linux/pramfs-2.6.33.inc
new file mode 100644
index 0000000..1a4a1be
--- /dev/null
+++ b/recipes-kernel/linux/pramfs-2.6.33.inc
@@ -0,0 +1,16 @@
1RRECOMMENDS_${PN} += "pramfs-init"
2
3SRC_URI += "file://pramfs-2.6.33-1.1.6.tar.gz"
4
5KERNEL_FEATURES_append = " cfg/pramfs-bsc913x"
6
7do_apply_pramfs() {
8 # Apply PRAMFS patch
9
10 cd ${WORKDIR}/linux-2.6.33
11 patch -p1 < ${WORKDIR}/pramfs-2.6.33.patch
12 cd -
13}
14
15do_apply_pramfs[deptask] = "do_unpack"
16addtask apply_pramfs after do_unpack before do_patch
diff --git a/recipes-kernel/linux/pramfs-3.0.inc b/recipes-kernel/linux/pramfs-3.0.inc
new file mode 100644
index 0000000..86d78e3
--- /dev/null
+++ b/recipes-kernel/linux/pramfs-3.0.inc
@@ -0,0 +1,21 @@
1RRECOMMENDS_${PN} += "pramfs-init"
2
3PRAMFS_VERSION = '1.4.2-3.10_patched'
4
5SRC_URI += "file://pramfs-${PRAMFS_VERSION}.tar.gz"
6
7KERNEL_FEATURES_append = " cfg/pramfs"
8STAGING_KERNEL_FEATURES_append = " cfg/pramfs"
9
10do_apply_pramfs() {
11 # Apply PRAMFS patch
12
13 # Already done by bitbake ->
14 # tar xvf ${WORKDIR}/pramfs-${PRAMFS_VERSION}.tar.gz -C ${WORKDIR}
15 cd ${WORKDIR}/pramfs-${PRAMFS_VERSION}/
16 ./patch-ker.sh ${S}
17 cd -
18}
19
20do_apply_pramfs[deptask] = "do_unpack"
21addtask apply_pramfs after do_unpack before do_patch
diff --git a/recipes-kernel/linux/staging-kernel.inc b/recipes-kernel/linux/staging-kernel.inc
new file mode 100644
index 0000000..a8c2ba4
--- /dev/null
+++ b/recipes-kernel/linux/staging-kernel.inc
@@ -0,0 +1,156 @@
1# This .inc file allows building and deploying staging kernel + modules
2# with defconfig + fragment cfgs
3
4require kernel-configure.inc
5
6STAGING_NAME ?= "RELEASE"
7STAGING_KERNEL_FEATURES ?= ""
8KERNEL_FEATURES ?= ""
9MODULES_IMAGE_BASE_NAME = "modules-${PV}-${PR}-${MACHINE}"
10EXTRA_OEMAKE_prepend_task-stagingkernel = "${PARALLEL_MAKE} "
11
12kernel_do_configure_prepend() {
13
14 configure_kernel "${KERNEL_DEFCONFIG}" "${STAGING_KERNEL_FEATURES}"
15
16}
17
18do_stagingkernel () {
19 stagingkernel "${KERNEL_FEATURES}" ${STAGING_NAME}
20 if [ -n "${STAGING_KERNEL_FEATURES_RT}" ]; then
21 cd ${B}
22 stagingkernel "${STAGING_KERNEL_FEATURES_RT}" "rt"
23 fi
24
25}
26
27stagingkernel () {
28
29 configure_kernel "${KERNEL_DEFCONFIG}" "${1}"
30
31 # Copy defconfig to .config if .config does not exist. This allows
32 # recipes to manage the .config themselves in do_configure_prepend().
33 if [ -f "${WORKDIR}/defconfig" ] && [ ! -f "${B}/.config" ]; then
34 cp "${WORKDIR}/defconfig" "${B}/.config"
35 fi
36 yes '' | oe_runmake oldconfig
37
38 if [ ! -z "${INITRAMFS_IMAGE}" ]; then
39 for img in cpio.gz cpio.lzo cpio.lzma cpio.xz; do
40 if [ -e "${DEPLOY_DIR_IMAGE}/${INITRAMFS_IMAGE}-${MACHINE}.$img" ]; then
41 cp "${DEPLOY_DIR_IMAGE}/${INITRAMFS_IMAGE}-${MACHINE}.$img" initramfs.$img
42 fi
43 done
44 fi
45
46 #
47 # Build this alternative kernel
48 #
49
50 kernel_do_compile
51 do_compile_kernelmodules
52
53 #
54 # First install the modules to deploy dir
55 #
56 unset CFLAGS CPPFLAGS CXXFLAGS LDFLAGS MACHINE
57 if (grep -q -i -e '^CONFIG_MODULES=y$' .config); then
58 oe_runmake DEPMOD=echo INSTALL_MOD_PATH="${D}" modules_install
59 else
60 bbnote "no modules to install"
61 fi
62 if [ -d "${D}/lib" ]; then
63 tar -cvzf ${DEPLOY_DIR_IMAGE}/${MODULES_IMAGE_BASE_NAME}-${2}.tgz -C ${D} lib
64 fi
65 rm -fr ${D}/lib
66
67 #
68 # Dont build any dtb:s for the staging kernel
69 #
70
71 #
72 # Drop the resulting images in the deploy dir
73 #
74 cd ${S}
75 install -d ${DEPLOY_DIR_IMAGE}
76 install -m 0644 ${KERNEL_OUTPUT} ${DEPLOY_DIR_IMAGE}/${KERNEL_IMAGE_BASE_NAME}-${2}.bin
77 mv ${KERNEL_OUTPUT} ${KERNEL_OUTPUT}-${2}
78
79 #
80 # Install the final config alongside the images
81 #
82 cd ${S}
83 cp .config ${DEPLOY_DIR_IMAGE}/config-${PV}-${PR}-${MACHINE}-${2}.config
84 rm -f .config
85
86 #
87 # Create symlinks
88 #
89 cd ${DEPLOY_DIR_IMAGE}
90 rm -f ${KERNEL_IMAGE_SYMLINK_NAME}-${2}.bin
91 ln -sf ${KERNEL_IMAGE_BASE_NAME}-${2}.bin ${KERNEL_IMAGE_SYMLINK_NAME}-${2}.bin
92
93 rm -f config-${MACHINE}-${2}.config
94 ln -sf config-${PV}-${PR}-${MACHINE}-${2}.config config-${MACHINE}-${2}.config
95
96}
97
98do_stagingkernel[dirs] = "${DEPLOY_DIR_IMAGE} ${B}"
99
100do_stagingkernel[depends] += "u-boot-mkimage-native:do_populate_sysroot virtual/${TARGET_PREFIX}gcc:do_populate_sysroot virtual/${TARGET_PREFIX}gcc:do_populate_sysroot"
101
102addtask stagingkernel after do_patch before do_configure
103
104#
105# For reference, copy .config to deploy image
106#
107do_deploy_append () {
108
109 install -d ${DEPLOY_DIR_IMAGE}
110
111 #
112 # Drop the regular defconfig along side the others for consistency
113 #
114 cd ${S}
115 cp .config ${DEPLOY_DIR_IMAGE}/config-${PV}-${PR}-${MACHINE}.config
116
117 #
118 # add symlink
119 #
120 cd ${DEPLOY_DIR_IMAGE}
121 rm -f config-${MACHINE}.config
122 ln -s config-${PV}-${PR}-${MACHINE}.config config-${MACHINE}.config
123
124 if [ -n "${STAGING_KERNEL_FEATURES_RT}" ]; then
125 cd ${S}
126 install -m 0644 ${KERNEL_OUTPUT}-rt ${DEPLOYDIR}/${KERNEL_IMAGE_BASE_NAME}-rt.bin
127
128 #
129 # Create symlinks
130 #
131 cd ${DEPLOYDIR}
132 rm -f ${KERNEL_IMAGE_SYMLINK_NAME}-rt.bin
133 ln -sf ${KERNEL_IMAGE_BASE_NAME}-rt.bin ${KERNEL_IMAGE_SYMLINK_NAME}-rt.bin
134 fi
135
136}
137
138#
139# Clean staging kernel related files in deploy dir
140#
141do_cleanstagingkernel () {
142
143 cd ${DEPLOY_DIR_IMAGE}
144 rm -f *-${STAGING_NAME}.*
145
146 rm -f config-${PV}-${PR}-${MACHINE}.config
147 rm -f config-${MACHINE}.config
148
149}
150
151LDFLAGS=""
152
153do_cleanstagingkernel[nostamp] = "1"
154
155addtask cleanstagingkernel after do_cleansstate
156
diff --git a/recipes-kernel/pramfs-init/files/pramfs_init b/recipes-kernel/pramfs-init/files/pramfs_init
new file mode 100644
index 0000000..64c7bc2
--- /dev/null
+++ b/recipes-kernel/pramfs-init/files/pramfs_init
@@ -0,0 +1,80 @@
1#!/bin/sh
2#set -e
3
4echo "Setting up pramfs"
5
6# ensure the required binaries are present
7#[ -x /sbin/modprobe ] || exit 1
8[ -x /bin/mount ] || exit 1
9[ -x /bin/grep ] || exit 1
10[ -x /bin/cat ] || exit 1
11[ -x /bin/sed ] || exit 1
12
13#modprobe pramfs
14mkdir -p /mnt/pram
15
16case "$1" in
17 start)
18 # Figure out RAM for pramfs
19 # This requires a kernel cmdline resevation of PRAMFS physmem
20 # in format memmap=16M$0x7000000
21 grep memmap /proc/cmdline > /dev/null
22 if [ $? -eq 0 ]; then
23 addr=$(sed 's/.*memmap=\([^ ]*\)\$\([^ ]*\).*/\2/' < /proc/cmdline)
24 size=$(sed 's/.*memmap=\([^ ]*\)\$\([^ ]*\).*/\1/' < /proc/cmdline)
25
26 if [ -d /seed ]; then
27 echo "Init new pramfs"
28 mount -t pramfs -o physaddr=$addr,init=$size,bs=1k none /mnt/pram > /dev/null 2>&1
29 cp /seed/* /mnt/pram
30 echo "0" > /mnt/pram/kcount
31 else
32 echo "Mounting old pramfs"
33 mount -t pramfs -o physaddr=$addr,bs=1k none /mnt/pram > /dev/null 2>&1
34 if [ $? -ne 0 ]; then
35 echo "Mounting old pramfs failed, zeroing"
36 mount -t pramfs -o physaddr=$addr,init=$size,bs=1k none /mnt/pram > /dev/null 2>&1
37 if [ $? -ne 0 ]; then
38 echo "All attempts to mount pramfs has failed, exiting"
39 rm -fr /mnt/pram
40 exit 1
41 fi
42 echo "0" > /mnt/pram/kcount
43 fi
44 fi
45
46# echo "* Setting up kexec"
47# kexec -l --reuse-cmdline --initrd=/mnt/pram/initramfs.cpio.gz /mnt/pram/vmlinuz
48
49 # Calculate number of boots
50 export KCOUNT=$(expr $(cat /mnt/pram/kcount) + 1)
51 echo $KCOUNT > /mnt/pram/kcount
52 else
53 KCOUNT="no-mem"
54 echo "Can't find memory area for pram fs"
55 rm -fr /mnt/pram
56 fi
57
58 echo "PRAMFS boot count: $KCOUNT"
59# echo "kexec -e to kexec and keep persistent files in /mnt/pram"
60 ;;
61 stop)
62 echo
63 ;;
64 restart)
65 $0 stop
66 $0 start
67 ;;
68 *)
69 echo "usage: $0 { start | stop | restart }" >&2
70 exit 1
71 ;;
72esac
73
74exit 0
75
76
77
78
79
80
diff --git a/recipes-kernel/pramfs-init/pramfs-init_1.0.bb b/recipes-kernel/pramfs-init/pramfs-init_1.0.bb
new file mode 100644
index 0000000..4252655
--- /dev/null
+++ b/recipes-kernel/pramfs-init/pramfs-init_1.0.bb
@@ -0,0 +1,20 @@
1DESCRIPTION = "Pramfs init scripts"
2SECTION = "init"
3LICENSE = "BSD"
4SRC_URI = "file://pramfs_init"
5PR = "r0"
6
7LIC_FILES_CHKSUM = "file://${COREBASE}/LICENSE;md5=3f40d7994397109285ec7b81fdeb3b58 \
8 file://${COREBASE}/meta/COPYING.MIT;md5=3da9cfbcb788c80a0384361b4de20420"
9
10PACKAGE_ARCH = "all"
11
12do_install() {
13 install -d ${D}${sysconfdir}/init.d/
14 install -m 0755 ${WORKDIR}/pramfs_init ${D}${sysconfdir}/init.d/pramfs_init
15}
16
17inherit update-rc.d
18
19INITSCRIPT_NAME = "pramfs_init"
20INITSCRIPT_PARAMS = "start 99 5 2 . stop 19 0 1 6 ."
diff --git a/recipes-test/ddt-runner/ddt-runner.bb b/recipes-test/ddt-runner/ddt-runner.bb
new file mode 100644
index 0000000..f6d234e
--- /dev/null
+++ b/recipes-test/ddt-runner/ddt-runner.bb
@@ -0,0 +1,24 @@
1LICENSE = "BSD"
2LIC_FILES_CHKSUM = "file://${COREBASE}/LICENSE;md5=3f40d7994397109285ec7b81fdeb3b58"
3INHIBIT_DEFAULT_DEPS = "1"
4
5SRC_URI = "file://ddt-runner \
6 file://scripts"
7
8FILES_${PN} += "${libdir}/${PN}"
9FILES_${PN} += "${bindir}/ddt-runner"
10
11do_install () {
12 install -D ${WORKDIR}/ddt-runner ${D}${bindir}/ddt-runner
13 if [ -d "${WORKDIR}/scripts/${MACHINE}" ]; then
14 install -d ${D}${libdir}/${PN}/scripts
15 for file in ${WORKDIR}/scripts/${MACHINE}/* ; do
16 install $file ${D}${libdir}/${PN}/scripts
17 done
18 fi
19}
20
21do_patch[noexec] = "1"
22do_configure[noexec] = "1"
23do_compile[noexec] = "1"
24do_build[noexec] = "1"
diff --git a/recipes-test/ddt-runner/files/ddt-runner b/recipes-test/ddt-runner/files/ddt-runner
new file mode 100644
index 0000000..5290530
--- /dev/null
+++ b/recipes-test/ddt-runner/files/ddt-runner
@@ -0,0 +1,19 @@
1#!/bin/sh
2
3if [[ ! -d "/usr/lib/ddt-runner/scripts" ]]; then
4 echo "SKIP: No available driver testcase"
5 exit
6fi
7
8cd /usr/lib/ddt-runner/scripts
9
10for x in *
11do
12 if [[ -f $x ]]; then
13 date +%Y-%m-%dT%H:%M
14 echo "BEGIN: $x"
15 ./$x
16 echo "END: $x"
17 date +%Y-%m-%dT%H:%M
18 fi
19done
diff --git a/recipes-test/ddt-runner/files/scripts/acp3448v2/ethernet b/recipes-test/ddt-runner/files/scripts/acp3448v2/ethernet
new file mode 100755
index 0000000..10a16b4
--- /dev/null
+++ b/recipes-test/ddt-runner/files/scripts/acp3448v2/ethernet
@@ -0,0 +1,97 @@
1#!/bin/sh
2#
3# This script is used to test ethernet functionality for acp3448v2.
4#
5
6ethernet_interface="eth0"
7ethernet_ping_ipaddr="172.21.3.22"
8ethernet_ipaddr=$1
9
10IFCONFIG=`which ifconfig`
11
12for((num=0; num<16; num++));
13do
14 ethernet_interface=eth$num
15 $IFCONFIG $ethernet_interface up
16 $IFCONFIG | grep $ethernet_interface
17 if [ $? -eq 0 ]; then
18 echo "PASS: $ethernet_interface is up"
19 break
20 fi
21done
22
23if [ $num -eq 16 ]; then
24 echo "FAIL: $ethernet_interface is not up"
25 exit 1
26fi
27
28if [ "x$ethernet_ipaddr" != "x" ]; then
29 $IFCONFIG $ethernet_interface $ethernet_ipaddr
30fi
31
32$IFCONFIG $ethernet_interface |grep 'inet addr:' |sed -e 's@inet addr:@@' |sed q | awk '{print $1}'
33if [ $? -ne 0 ]; then
34 echo "FAIL: ipaddr of $ethernet_interface setup failed"
35 exit 1
36else
37 echo "PASS: ipaddr of $ethernet_interface setup success"
38fi
39
40mindatasize=56
41maxdatasize=650
42stepsize=100
43iteration=1
44datasize=$mindatasize
45logfile=`/bin/mktemp`
46statistics=`/bin/mktemp`
47error=0
48
49trap cleanup SIGHUP SIGINT SIGTERM
50
51clean_tasks() {
52 echo "Executing clean up tasks"
53 rm -f $logfile $statistics
54}
55
56cleanup() {
57 echo "Aborting script execution"
58 clean_tasks
59 exit 0
60}
61
62echo "start ping test for $ethernet_interface..."
63
64while [ $datasize -le $maxdatasize ]; do
65 for i in `seq 1 $iteration`; do
66 ping -c 1 -s $datasize $ethernet_ping_ipaddr > $statistics
67 ping_err=`echo $?`
68 echo "" && cat $statistics | grep -r "PING"
69 cat $statistics | grep -r "received"
70 [ `echo $?` -eq 0 ] || packets_received=0 && \
71 packets_received=`cat $statistics | \
72 grep -r "received" | awk '{print$4}'`
73
74 # Evaluate possible errors on the ping operation
75 if [ $ping_err -ne 0 ] || [ $packets_received -eq 0 ]; then
76 error=1
77 echo -e `cat $statistics | grep -r PING` >> $logfile
78 echo -e "Size: $datasize Iteration: $i\n" >> $logfile
79 fi
80 done
81 let datasize=$datasize+$stepsize
82done
83
84# Report failures
85if [ $error -eq 1 ]; then
86 echo -e "=================== error report ===================\n"
87 cat $logfile
88 echo -e "====================================================\n"
89 clean_tasks
90 echo -e "FAIL: ping test for $ethernet_interface failed\n"
91 exit 1
92else
93 clean_tasks
94 echo -e "PASS: ping test for $ethernet_interface success\n"
95fi
96
97echo "PASS: $ethernet_interface test passed" exit 0
diff --git a/recipes-test/ddt-runner/files/scripts/acp3448v2/flash b/recipes-test/ddt-runner/files/scripts/acp3448v2/flash
new file mode 100755
index 0000000..30c5d06
--- /dev/null
+++ b/recipes-test/ddt-runner/files/scripts/acp3448v2/flash
@@ -0,0 +1,45 @@
1#!/bin/sh
2#
3# This script is used to test flash driver function.
4
5if part_num=`cat /proc/mtd | grep -c 'mtd'`; then
6 echo "PASS: show $part_num partitions"
7else
8 echo "FAIL: show $part_num partitions"
9fi
10
11for((part=0; part<$part_num-1; part++));
12do
13 if [ $(mtd_debug info /dev/mtd$part | grep -c 'mtd.type') ]; then
14 echo "PASS: show partition $part debug info"
15 else
16 echo "FAIL: show partition $part debug info"
17 fi
18done
19
20let "test_part=part_num-2"
21
22if [ $(flash_erase -j /dev/mtd${test_part} 0 0 | grep -c '100 % complete') ]; then
23 echo "PASS: erase and format partition ${test_part}"
24else
25 echo "FAIL: erase and format partition ${test_part}"
26fi
27
28mkdir -p /mnt/flash
29mount -t jffs2 /dev/mtdblock${test_part} /mnt/flash
30if [ $? -eq 0 ]; then
31 echo "PASS: mount partition ${test_part} as /mnt/flash"
32else
33 echo "FAIL: mount partition ${test_part} as /mnt/flash"
34fi
35
36cd /mnt/flash
37touch test
38if [ $(ls | grep -c 'test') ]; then
39 echo "PASS: touch a file on partition ${test_part}"
40else
41 echo "FAIL: touch a file on partition ${test_part}"
42fi
43
44cd ~
45umount /mnt/flash
diff --git a/recipes-test/ddt-runner/files/scripts/acp3448v2/pci-express b/recipes-test/ddt-runner/files/scripts/acp3448v2/pci-express
new file mode 100755
index 0000000..b04485f
--- /dev/null
+++ b/recipes-test/ddt-runner/files/scripts/acp3448v2/pci-express
@@ -0,0 +1,109 @@
1#!/bin/sh
2
3ethernet_interface="eth0"
4ethernet_ping_ipaddr="172.21.3.22"
5ethernet_ipaddr=$1
6
7#Intel Corporation 82574L Gigabit Network Card (intel e1000e)
8vendor_id="8086"
9product_id="10d3"
10
11#find vendor id & product id
12lspci -nn |grep $vendor_id:$product_id
13if [ $? -ne 0 ]; then
14 echo "FAIL: pci-e ethernet card device does not exist"
15 exit 1
16else
17 echo "PASS: got pci-e ethernet card device"
18fi
19
20setpci -v -d $vendor_id:$product_id latency_timer=b0
21if [ $? -ne 0 ]; then
22 echo "FAIL: parameter changes to pci config space failed"
23 exit 1
24else
25 echo "PASS: parameter changes to pci config space success"
26fi
27
28IFCONFIG=`which ifconfig`
29
30$IFCONFIG $ethernet_interface up
31$IFCONFIG | grep $ethernet_interface
32if [ $? -ne 0 ]; then
33 echo "FAIL: pci-e ethernet card device $ethernet_interface is not up"
34 exit 1
35else
36 echo "PASS: pci-e ethernet card device $ethernet_interface is up"
37fi
38
39if [ "x$ethernet_ipaddr" != "x" ]; then
40 $IFCONFIG $ethernet_interface $ethernet_ipaddr
41fi
42
43$IFCONFIG $ethernet_interface |grep 'inet addr:' |sed -e 's@inet addr:@@' |sed q | awk '{print $1}'
44if [ $? -ne 0 ]; then
45 echo "FAIL: ipaddr of pci-e ethernet card device $ethernet_interface setup failed"
46 exit 1
47else
48 echo "PASS: ipaddr of pci-e ethernet card device $ethernet_interface setup success"
49fi
50
51mindatasize=56
52maxdatasize=650
53stepsize=100
54iteration=1
55datasize=$mindatasize
56logfile=`/bin/mktemp`
57statistics=`/bin/mktemp`
58error=0
59
60trap cleanup SIGHUP SIGINT SIGTERM
61
62clean_tasks() {
63 echo "Executing clean up tasks"
64 rm -f $logfile $statistics
65}
66
67cleanup() {
68 echo "Aborting script execution"
69 clean_tasks
70 exit 0
71}
72
73echo "start ping test for pci-e ethernet card device $ethernet_interface..."
74
75while [ $datasize -le $maxdatasize ]; do
76 for i in `seq 1 $iteration`; do
77 ping -c 1 -s $datasize $ethernet_ping_ipaddr > $statistics
78 ping_err=`echo $?`
79 echo "" && cat $statistics | grep -r "PING"
80 cat $statistics | grep -r "received"
81 [ `echo $?` -eq 0 ] || packets_received=0 && \
82 packets_received=`cat $statistics | \
83 grep -r "received" | awk '{print$4}'`
84
85 # Evaluate possible errors on the ping operation
86 if [ $ping_err -ne 0 ] || [ $packets_received -eq 0 ]; then
87 error=1
88 echo -e `cat $statistics | grep -r PING` >> $logfile
89 echo -e "Size: $datasize Iteration: $i\n" >> $logfile
90 fi
91 done
92 let datasize=$datasize+$stepsize
93done
94
95# Report failures
96if [ $error -eq 1 ]; then
97 echo -e "=================== error report ===================\n"
98 cat $logfile
99 echo -e "====================================================\n"
100 clean_tasks
101 echo -e "FAIL: ping test for pci-e ethernet card device $ethernet_interface failed\n"
102 exit 1
103else
104 clean_tasks
105 echo -e "PASS: ping test for pci-e ethernet card device $ethernet_interface success\n"
106fi
107
108echo "PASS: pci express test passed"
109exit 0
diff --git a/recipes-test/ddt-runner/files/scripts/acp3448v2/usb b/recipes-test/ddt-runner/files/scripts/acp3448v2/usb
new file mode 100755
index 0000000..aad0226
--- /dev/null
+++ b/recipes-test/ddt-runner/files/scripts/acp3448v2/usb
@@ -0,0 +1,100 @@
1#!/bin/sh
2#
3# This script is used to test usb functionality for acp3448v2.
4#
5
6result=0
7devpath=""
8usbinfo=""
9
10usbutils_is_installed=`which lsusb`
11if [ -z $usbutils_is_installed ]; then
12 echo "FAIL: Cannot find lsusb"
13 exit 1
14fi
15
16usbdev_num=`lsusb | grep -v root\ hub | wc -l`
17if [ $usbdev_num -eq 0 ]; then
18 echo "FAIL: USB device is not connected"
19 exit 1
20else
21 echo "$usbdev_num USB device(s) connected"
22fi
23
24sd=`ls -l /dev/sd[^0-9] | awk '{print $5 $6 "," $10}'`
25if [ -z "$sd" ]; then
26 echo "FAIL: find sd device"
27 exit 1
28else
29 echo "PASS: find sd device"
30fi
31
32HDPARM=`which hdparm`
33if [ -z $HDPARM ]; then
34 result=$?
35 echo "FAIL: find hdparm"
36fi
37 echo "PASS: find hdparm"
38
39for s in $sd
40do
41 devpath=`echo "$s" | awk -F "," '{print "/sys/dev/block/" $1 ":" $2}'`
42 usbinfo=`ls -l $devpath | grep usb`
43
44 if [ -z "$usbinfo" ] ; then
45 continue
46 fi
47
48 s=`echo "$s" | awk -F "," '{print $3}'`
49
50 echo "Testing $s"
51 $HDPARM -I $s
52 if [ $? -ne 0 ]; then
53 result=$?
54 echo "FAIL: $HDPARM -I $s Detailed/current information directly from $s"
55 else
56 echo "PASS: $HDPARM -I $s Detailed/current information directly from $s"
57 fi
58
59 $HDPARM -tT $s
60 if [ $? -ne 0 ]; then
61 result=$?
62 echo "FAIL: $HDPARM -tT $s Perform device/cache read timings on $s"
63 else
64 echo "PASS: $HDPARM -tT $s Perform device/cache read timings on $s"
65 fi
66
67 mkdir -p /mnt/usb_tmp
68 for partition in `ls "$s"[1-9]`
69 do
70 echo "Testing $partition"
71
72 mount "$partition" /mnt/usb_tmp
73 if [ $? -ne 0 ]; then
74 result=$?
75 echo "FAIL: mount $s"
76 else
77 echo "PASS: mount $s"
78 dd if=/dev/urandom of=/mnt/usb_tmp/writefile bs=1M count=50
79 if [ $? -ne 0 ]; then
80 result=$?
81 echo "FAIL: write test on $s"
82 else
83 echo "PASS: write test on $s"
84 rm -f /mnt/usb_tmp/writefile
85 fi
86 dd if=$s of=/mnt/usb_tmp/readfile bs=1M count=10
87 if [ $? -ne 0 ]; then
88 result=$?
89 echo "FAIL: read test on $s"
90 else
91 echo "PASS: read test on $s"
92 rm -f /mnt/usb_tmp/readfile
93 fi
94 umount /mnt/usb_tmp
95 fi
96 done
97
98 rm -fr /mnt/usb_tmp
99done
100exit $result
diff --git a/recipes-test/ddt-runner/files/scripts/bsc9131rdb/ethernet b/recipes-test/ddt-runner/files/scripts/bsc9131rdb/ethernet
new file mode 100755
index 0000000..df64e08
--- /dev/null
+++ b/recipes-test/ddt-runner/files/scripts/bsc9131rdb/ethernet
@@ -0,0 +1,89 @@
1#!/bin/sh
2# This script is used to test ethernet interface for bsc9131rdb.
3
4ethernet_interface="eth0"
5ethernet_ping_ipaddr="172.21.3.22"
6ethernet_ipaddr=$1
7
8IFCONFIG=`which ifconfig`
9
10$IFCONFIG $ethernet_interface up
11$IFCONFIG | grep $ethernet_interface
12if [ $? -ne 0 ]; then
13 echo "FAIL: $ethernet_interface is not up"
14 exit 1
15else
16 echo "PASS: $ethernet_interface is up"
17fi
18
19if [ "x$ethernet_ipaddr" != "x" ]; then
20 $IFCONFIG $ethernet_interface $ethernet_ipaddr
21fi
22
23$IFCONFIG $ethernet_interface |grep 'inet addr:' |sed -e 's@inet addr:@@' |sed q | awk '{print $1}'
24if [ $? -ne 0 ]; then
25 echo "FAIL: ipaddr of $ethernet_interface setup failed"
26 exit 1
27else
28 echo "PASS: ipaddr of $ethernet_interface setup success"
29fi
30
31mindatasize=56
32maxdatasize=650
33stepsize=100
34iteration=1
35datasize=$mindatasize
36logfile=`/bin/mktemp`
37statistics=`/bin/mktemp`
38error=0
39
40trap cleanup SIGHUP SIGINT SIGTERM
41
42clean_tasks() {
43 echo "Executing clean up tasks"
44 rm -f $logfile $statistics
45}
46
47cleanup() {
48 echo "Aborting script execution"
49 clean_tasks
50 exit 0
51}
52
53echo "start ping test for $ethernet_interface..."
54
55while [ $datasize -le $maxdatasize ]; do
56 for i in `seq 1 $iteration`; do
57 ping -c 1 -s $datasize $ethernet_ping_ipaddr > $statistics
58 ping_err=`echo $?`
59 echo "" && cat $statistics | grep -r "PING"
60 cat $statistics | grep -r "received"
61 [ `echo $?` -eq 0 ] || packets_received=0 && \
62 packets_received=`cat $statistics | \
63 grep -r "received" | awk '{print$4}'`
64
65 # Evaluate possible errors on the ping operation
66 if [ $ping_err -ne 0 ] || [ $packets_received -eq 0 ]; then
67 error=1
68 echo -e `cat $statistics | grep -r PING` >> $logfile
69 echo -e "Size: $datasize Iteration: $i\n" >> $logfile
70 fi
71 done
72 let datasize=$datasize+$stepsize
73done
74
75# Report failures
76if [ $error -eq 1 ]; then
77 echo -e "=================== error report ===================\n"
78 cat $logfile
79 echo -e "====================================================\n"
80 clean_tasks
81 echo -e "FAIL: ping test for $ethernet_interface failed\n"
82 exit 1
83else
84 clean_tasks
85 echo -e "PASS: ping test for $ethernet_interface success\n"
86fi
87
88echo "PASS: $ethernet_interface test passed"
89exit 0
diff --git a/recipes-test/ddt-runner/files/scripts/bsc9131rdb/flash b/recipes-test/ddt-runner/files/scripts/bsc9131rdb/flash
new file mode 100755
index 0000000..66631ba
--- /dev/null
+++ b/recipes-test/ddt-runner/files/scripts/bsc9131rdb/flash
@@ -0,0 +1,48 @@
1#!/bin/sh
2#
3# This script is used to test flash driver functionality. I removed the tests
4# which include write operations since all partition are in use in bsc9131rdb
5# and there might be possibility of corrupting data even if we backup in test
6# script.
7
8if part_num=`cat /proc/mtd | grep -c 'mtd'`; then
9 echo "PASS: $part_num partitions found"
10else
11 echo "FAIL: $part_num partitions found"
12 exit 1
13fi
14
15for((part=0; part<$part_num; part++));
16do
17 if [ $(mtd_debug info /dev/mtd$part | grep -c 'mtd.type') ]; then
18 echo "PASS: show partition $part debug info"
19 else
20 echo "FAIL: show partition $part debug info"
21 exit 1
22 fi
23done
24
25READ_TEST=`find / -name mtd_readtest.ko -print`
26
27if [ ! -e $READ_TEST ]; then
28 echo "FAIL: $READ_TEST does not exist"
29 exit 1
30else
31 echo "PASS: $READ_TEST exists"
32fi
33
34for((part=0; part<$part_num; part++));
35do
36 dmesg -c > NULL
37
38 modprobe $READ_TEST dev=$part
39
40 bad_num=`dmesg | grep -c 'bad'`
41 if [ $bad_num -eq 0 ]; then
42 echo "PASS: read test for partition $part"
43 else
44 echo "FAIL: read test for partition $part"
45 fi
46
47 rmmod $READ_TEST
48done
diff --git a/recipes-test/ddt-runner/files/scripts/bsc9131rdb/i2c b/recipes-test/ddt-runner/files/scripts/bsc9131rdb/i2c
new file mode 100755
index 0000000..c4acd8e
--- /dev/null
+++ b/recipes-test/ddt-runner/files/scripts/bsc9131rdb/i2c
@@ -0,0 +1,75 @@
1#!/bin/sh
2# This script is used to test i2c interface for bsc9131rdb
3
4I2C_DETECT=`which i2cdetect`
5if [ "x$I2C_DETECT" != "x" ]; then
6 echo "PASS: i2cdetect found"
7else
8 echo "FAIL: i2cdetect not found"
9 exit 1
10fi
11
12I2C_SET=`which i2cset`
13if [ "x$I2C_SET" != "x" ]; then
14 echo "PASS: i2cset found"
15else
16 echo "FAIL: i2cset not found"
17 exit 1
18fi
19
20I2C_GET=`which i2cget`
21if [ "x$I2C_GET" != "x" ]; then
22 echo "PASS: i2cget found"
23else
24 echo "FAIL: i2cget not found"
25 exit 1
26fi
27
28if I2C_ADAPTERS=`$I2C_DETECT -l |wc -l`; then
29 echo "PASS: $I2C_ADAPTERS i2c adapters found"
30else
31 echo "FAIL: no i2c adapters found"
32 exit 1
33fi
34
35adapters=0
36while [ $adapters -lt $I2C_ADAPTERS ]
37do
38 $I2C_DETECT -y $adapters
39 if [ $? -ne 0 ]; then
40 echo "FAIL: detect i2c adapter $adapters fail"
41 else
42 echo "PASS: detect i2c adapter $adapters success"
43 fi
44 adapters=`expr $adapters + 1`
45 sleep 1
46done
47
48# Area of bus:i2c-0 addr:0x52 is free to read and write
49$I2C_SET -y 0 0x52 0 0x55
50if [ $? -eq 0 ]; then
51 echo "PASS: i2c_set -y 0 0x52 0 0x55 success"
52else
53 echo "FAIL: i2c_set -y 0 0x52 0 0x55 fail"
54fi
55
56num=`$I2C_GET -y 0 0x52 0 | grep -c '0x55'`
57if [ $num -eq 1 ]; then
58 echo "PASS: i2c_get -y 0 0x52 0 success"
59else
60 echo "FAIL: i2c_get -y 0 0x52 0 fail"
61fi
62
63$I2C_SET -y 0 0x52 0 0xaa
64if [ $? -eq 0 ]; then
65 echo "PASS: i2c_set -y 0 0x52 0 0xaa success"
66else
67 echo "FAIL: i2c_set -y 0 0x52 0 0xaa fail"
68fi
69
70num=`$I2C_GET -y 0 0x52 0 | grep -c '0xaa'`
71if [ $num -eq 1 ]; then
72 echo "PASS: i2c_get -y 0 0x52 0 success"
73else
74 echo "FAIL: i2c_get -y 0 0x52 0 fail"
75fi
diff --git a/recipes-test/ddt-runner/files/scripts/bsc9131rdb/preempt_rt b/recipes-test/ddt-runner/files/scripts/bsc9131rdb/preempt_rt
new file mode 100755
index 0000000..111cfa2
--- /dev/null
+++ b/recipes-test/ddt-runner/files/scripts/bsc9131rdb/preempt_rt
@@ -0,0 +1,33 @@
1#!/bin/sh
2#
3#This script is to test PREEMPT RT on target
4#
5
6uname -a | grep "PREEMPT RT"
7if [ $? -ne 0 ]; then
8 echo "FAIL: The kernel include real-time patch"
9 echo 1
10fi
11 echo "PASS: The kernel include real-time patch"
12
13ps | grep '\(\[irq/\)'
14if [ $? -ne 0 ]; then
15 echo "FAIL: The IRQ handlers are treated by a patched kernel in kernel thread context."
16 exit 1
17fi
18 echo "PASS: The IRQ handlers are treated by a patched kernel in kernel thread context."
19
20cyclictest -t5 -p 80 -i 10000 -l 100
21if [ $? -ne 0 ]; then
22 echo "FAIL: Test case: POSIX interval timer, Interval 10000 micro seconds,. 100 loops."
23 exit 1
24fi
25 echo "PASS: Test case: POSIX interval timer, Interval 10000 micro seconds,. 100 loops."
26
27cyclictest -t5 -p 80 -n -i 10000 -l 100
28if [ $? -ne 0 ]; then
29 echo "FAIL: Test case: clock_nanosleep(TIME_ABSTIME), Interval 10000 micro seconds,. 100 loops."
30 exit 1
31fi
32 echo "PASS: Test case: clock_nanosleep(TIME_ABSTIME), Interval 10000 micro seconds,. 100 loops."
33
diff --git a/recipes-test/ddt-runner/files/scripts/bsc9131rdb/spi b/recipes-test/ddt-runner/files/scripts/bsc9131rdb/spi
new file mode 100755
index 0000000..3386d6c
--- /dev/null
+++ b/recipes-test/ddt-runner/files/scripts/bsc9131rdb/spi
@@ -0,0 +1,56 @@
1#!/bin/sh
2# This script is used to test spi flash functionality for bsc9131rdb. An spi
3# flash M25P80 connect to bsc9131 cpu by spi bus, so the method is to read/write
4# spi flash to verify whether the spi bus driver worked or not.
5
6MTD_CHAR_DEVICE="/dev/mtd8"
7MTD_BLOCK_DEVICE="/dev/mtdblock8"
8
9FLASH_ERASE=`which flash_erase`
10if [ "x$FLASH_ERASE" != "x" ]; then
11 echo "PASS: flash_erase found"
12else
13 echo "FAIL: flash_erase not found"
14 exit 1
15fi
16
17if [ ! -e $MTD_CHAR_DEVICE ]; then
18 echo "FAIL: spi flash device $MTD_CHAR_DEVICE does not exist"
19 exit 1
20else
21 echo "PASS: spi flash device $MTD_CHAR_DEVICE exists"
22fi
23
24if [ ! -e $MTD_BLOCK_DEVICE ]; then
25 echo "FAIL: spi flash device $MTD_BLOCK_DEVICE does not exist"
26 exit 1
27else
28 echo "PASS: spi flash device $MTD_BLOCK_DEVICE exists"
29fi
30
31$FLASH_ERASE -j $MTD_CHAR_DEVICE 0 0
32if [ $? -ne 0 ]; then
33 echo "FAIL: format spi flash device $MTD_BLOCK_DEVICE fail"
34 exit 1
35else
36 mkdir -p /mnt/spi
37 mount -t jffs2 $MTD_BLOCK_DEVICE /mnt/spi
38 if [ $? -ne 0 ]; then
39 echo "FAIL: mount spi flash device $MTD_BLOCK_DEVICE fail"
40 exit 1
41 else
42 cp /bin/busybox /mnt/spi
43 file_num=`ls /mnt/spi |grep -c 'busybox'`
44 if [ $file_num -eq 1 ]; then
45 rm /mnt/spi/busybox
46 umount $MTD_BLOCK_DEVICE
47 echo "PASS: read or write spi flash device $MTD_BLOCK_DEVICE success"
48 else
49 echo "FAIL: read or write spi flash device $MTD_BLOCK_DEVICE fail"
50 exit 1
51 fi
52 fi
53fi
54
55echo "PASS: spi bus test passed"
56exit 0
diff --git a/recipes-test/ddt-runner/files/scripts/bsc9131rdb/watchdog b/recipes-test/ddt-runner/files/scripts/bsc9131rdb/watchdog
new file mode 100755
index 0000000..71429fc
--- /dev/null
+++ b/recipes-test/ddt-runner/files/scripts/bsc9131rdb/watchdog
@@ -0,0 +1,64 @@
1#!/bin/sh
2#
3# This script is used to test watchdog functionality for bsc9131rdb.
4
5WATCHDOG=`which watchdog`
6if [ "x$WATCHDOG" != "x" ]; then
7 echo "PASS: watchdog found"
8else
9 echo "FAIL: watchdog not found"
10 exit 1
11fi
12
13WATCHDOG_CONF=/etc/watchdog.conf
14if [ -f $WATCHDOG_CONF ]; then
15 echo "PASS: watchdog config file found"
16 sed -i '23,23 s/#//' $WATCHDOG_CONF
17else
18 echo "FAIL: watchdog config file not found"
19 exit 1
20fi
21
22$WATCHDOG -v /dev/watchdog
23watchdog_thread=`ps | grep -c 'watchdog -v /dev/watchdog'`
24if [ $watchdog_thread -eq 2 ]; then
25 echo "PASS: Watchdog daemon started successfully"
26else
27 echo "FAIL: Failed to start watchdog daemon"
28 exit 1
29fi
30
31sleep 5s
32
33killall watchdog
34
35retry=0
36while [ $retry -lt 10 ]
37do
38 watchdog_thread=`ps | grep -c 'watchdog -v /dev/watchdog'`
39 if [ $watchdog_thread -eq 1 ]; then
40 echo "PASS: Watchdog daemon stopped successfully"
41 break;
42 fi
43 sleep 1s
44 retry=`expr $retry + 1`
45done
46
47if [ $retry -eq 10 ]; then
48 echo "FAIL: Failed to stop watchdog daemon"
49fi
50
51found=0
52while read line
53do
54 result=`echo $line | grep -c 'still alive after 1 interval'`
55 if [ $result -eq 1 ]; then
56 echo "PASS: Watchdog is still alive after 1 interval"
57 found=1
58 fi
59done < /var/log/messages
60
61if [ $found -eq 0 ]; then
62 echo "FAIL: Watchdog is not alive after 1 interval"
63fi
64
diff --git a/recipes-test/ddt-runner/files/scripts/bsc9132qds/ethernet b/recipes-test/ddt-runner/files/scripts/bsc9132qds/ethernet
new file mode 100755
index 0000000..df64e08
--- /dev/null
+++ b/recipes-test/ddt-runner/files/scripts/bsc9132qds/ethernet
@@ -0,0 +1,89 @@
1#!/bin/sh
2# This script is used to test ethernet interface for bsc9131rdb.
3
4ethernet_interface="eth0"
5ethernet_ping_ipaddr="172.21.3.22"
6ethernet_ipaddr=$1
7
8IFCONFIG=`which ifconfig`
9
10$IFCONFIG $ethernet_interface up
11$IFCONFIG | grep $ethernet_interface
12if [ $? -ne 0 ]; then
13 echo "FAIL: $ethernet_interface is not up"
14 exit 1
15else
16 echo "PASS: $ethernet_interface is up"
17fi
18
19if [ "x$ethernet_ipaddr" != "x" ]; then
20 $IFCONFIG $ethernet_interface $ethernet_ipaddr
21fi
22
23$IFCONFIG $ethernet_interface |grep 'inet addr:' |sed -e 's@inet addr:@@' |sed q | awk '{print $1}'
24if [ $? -ne 0 ]; then
25 echo "FAIL: ipaddr of $ethernet_interface setup failed"
26 exit 1
27else
28 echo "PASS: ipaddr of $ethernet_interface setup success"
29fi
30
31mindatasize=56
32maxdatasize=650
33stepsize=100
34iteration=1
35datasize=$mindatasize
36logfile=`/bin/mktemp`
37statistics=`/bin/mktemp`
38error=0
39
40trap cleanup SIGHUP SIGINT SIGTERM
41
42clean_tasks() {
43 echo "Executing clean up tasks"
44 rm -f $logfile $statistics
45}
46
47cleanup() {
48 echo "Aborting script execution"
49 clean_tasks
50 exit 0
51}
52
53echo "start ping test for $ethernet_interface..."
54
55while [ $datasize -le $maxdatasize ]; do
56 for i in `seq 1 $iteration`; do
57 ping -c 1 -s $datasize $ethernet_ping_ipaddr > $statistics
58 ping_err=`echo $?`
59 echo "" && cat $statistics | grep -r "PING"
60 cat $statistics | grep -r "received"
61 [ `echo $?` -eq 0 ] || packets_received=0 && \
62 packets_received=`cat $statistics | \
63 grep -r "received" | awk '{print$4}'`
64
65 # Evaluate possible errors on the ping operation
66 if [ $ping_err -ne 0 ] || [ $packets_received -eq 0 ]; then
67 error=1
68 echo -e `cat $statistics | grep -r PING` >> $logfile
69 echo -e "Size: $datasize Iteration: $i\n" >> $logfile
70 fi
71 done
72 let datasize=$datasize+$stepsize
73done
74
75# Report failures
76if [ $error -eq 1 ]; then
77 echo -e "=================== error report ===================\n"
78 cat $logfile
79 echo -e "====================================================\n"
80 clean_tasks
81 echo -e "FAIL: ping test for $ethernet_interface failed\n"
82 exit 1
83else
84 clean_tasks
85 echo -e "PASS: ping test for $ethernet_interface success\n"
86fi
87
88echo "PASS: $ethernet_interface test passed"
89exit 0
diff --git a/recipes-test/ddt-runner/files/scripts/bsc9132qds/flash b/recipes-test/ddt-runner/files/scripts/bsc9132qds/flash
new file mode 100755
index 0000000..66631ba
--- /dev/null
+++ b/recipes-test/ddt-runner/files/scripts/bsc9132qds/flash
@@ -0,0 +1,48 @@
1#!/bin/sh
2#
3# This script is used to test flash driver functionality. I removed the tests
4# which include write operations since all partition are in use in bsc9131rdb
5# and there might be possibility of corrupting data even if we backup in test
6# script.
7
8if part_num=`cat /proc/mtd | grep -c 'mtd'`; then
9 echo "PASS: $part_num partitions found"
10else
11 echo "FAIL: $part_num partitions found"
12 exit 1
13fi
14
15for((part=0; part<$part_num; part++));
16do
17 if [ $(mtd_debug info /dev/mtd$part | grep -c 'mtd.type') ]; then
18 echo "PASS: show partition $part debug info"
19 else
20 echo "FAIL: show partition $part debug info"
21 exit 1
22 fi
23done
24
25READ_TEST=`find / -name mtd_readtest.ko -print`
26
27if [ ! -e $READ_TEST ]; then
28 echo "FAIL: $READ_TEST does not exist"
29 exit 1
30else
31 echo "PASS: $READ_TEST exists"
32fi
33
34for((part=0; part<$part_num; part++));
35do
36 dmesg -c > NULL
37
38 modprobe $READ_TEST dev=$part
39
40 bad_num=`dmesg | grep -c 'bad'`
41 if [ $bad_num -eq 0 ]; then
42 echo "PASS: read test for partition $part"
43 else
44 echo "FAIL: read test for partition $part"
45 fi
46
47 rmmod $READ_TEST
48done
diff --git a/recipes-test/ddt-runner/files/scripts/bsc9132qds/i2c b/recipes-test/ddt-runner/files/scripts/bsc9132qds/i2c
new file mode 100755
index 0000000..c4acd8e
--- /dev/null
+++ b/recipes-test/ddt-runner/files/scripts/bsc9132qds/i2c
@@ -0,0 +1,75 @@
1#!/bin/sh
2# This script is used to test i2c interface for bsc9131rdb
3
4I2C_DETECT=`which i2cdetect`
5if [ "x$I2C_DETECT" != "x" ]; then
6 echo "PASS: i2cdetect found"
7else
8 echo "FAIL: i2cdetect not found"
9 exit 1
10fi
11
12I2C_SET=`which i2cset`
13if [ "x$I2C_SET" != "x" ]; then
14 echo "PASS: i2cset found"
15else
16 echo "FAIL: i2cset not found"
17 exit 1
18fi
19
20I2C_GET=`which i2cget`
21if [ "x$I2C_GET" != "x" ]; then
22 echo "PASS: i2cget found"
23else
24 echo "FAIL: i2cget not found"
25 exit 1
26fi
27
28if I2C_ADAPTERS=`$I2C_DETECT -l |wc -l`; then
29 echo "PASS: $I2C_ADAPTERS i2c adapters found"
30else
31 echo "FAIL: no i2c adapters found"
32 exit 1
33fi
34
35adapters=0
36while [ $adapters -lt $I2C_ADAPTERS ]
37do
38 $I2C_DETECT -y $adapters
39 if [ $? -ne 0 ]; then
40 echo "FAIL: detect i2c adapter $adapters fail"
41 else
42 echo "PASS: detect i2c adapter $adapters success"
43 fi
44 adapters=`expr $adapters + 1`
45 sleep 1
46done
47
48# Area of bus:i2c-0 addr:0x52 is free to read and write
49$I2C_SET -y 0 0x52 0 0x55
50if [ $? -eq 0 ]; then
51 echo "PASS: i2c_set -y 0 0x52 0 0x55 success"
52else
53 echo "FAIL: i2c_set -y 0 0x52 0 0x55 fail"
54fi
55
56num=`$I2C_GET -y 0 0x52 0 | grep -c '0x55'`
57if [ $num -eq 1 ]; then
58 echo "PASS: i2c_get -y 0 0x52 0 success"
59else
60 echo "FAIL: i2c_get -y 0 0x52 0 fail"
61fi
62
63$I2C_SET -y 0 0x52 0 0xaa
64if [ $? -eq 0 ]; then
65 echo "PASS: i2c_set -y 0 0x52 0 0xaa success"
66else
67 echo "FAIL: i2c_set -y 0 0x52 0 0xaa fail"
68fi
69
70num=`$I2C_GET -y 0 0x52 0 | grep -c '0xaa'`
71if [ $num -eq 1 ]; then
72 echo "PASS: i2c_get -y 0 0x52 0 success"
73else
74 echo "FAIL: i2c_get -y 0 0x52 0 fail"
75fi
diff --git a/recipes-test/ddt-runner/files/scripts/bsc9132qds/preempt_rt b/recipes-test/ddt-runner/files/scripts/bsc9132qds/preempt_rt
new file mode 100755
index 0000000..111cfa2
--- /dev/null
+++ b/recipes-test/ddt-runner/files/scripts/bsc9132qds/preempt_rt
@@ -0,0 +1,33 @@
1#!/bin/sh
2#
3#This script is to test PREEMPT RT on target
4#
5
6uname -a | grep "PREEMPT RT"
7if [ $? -ne 0 ]; then
8 echo "FAIL: The kernel include real-time patch"
9 echo 1
10fi
11 echo "PASS: The kernel include real-time patch"
12
13ps | grep '\(\[irq/\)'
14if [ $? -ne 0 ]; then
15 echo "FAIL: The IRQ handlers are treated by a patched kernel in kernel thread context."
16 exit 1
17fi
18 echo "PASS: The IRQ handlers are treated by a patched kernel in kernel thread context."
19
20cyclictest -t5 -p 80 -i 10000 -l 100
21if [ $? -ne 0 ]; then
22 echo "FAIL: Test case: POSIX interval timer, Interval 10000 micro seconds,. 100 loops."
23 exit 1
24fi
25 echo "PASS: Test case: POSIX interval timer, Interval 10000 micro seconds,. 100 loops."
26
27cyclictest -t5 -p 80 -n -i 10000 -l 100
28if [ $? -ne 0 ]; then
29 echo "FAIL: Test case: clock_nanosleep(TIME_ABSTIME), Interval 10000 micro seconds,. 100 loops."
30 exit 1
31fi
32 echo "PASS: Test case: clock_nanosleep(TIME_ABSTIME), Interval 10000 micro seconds,. 100 loops."
33
diff --git a/recipes-test/ddt-runner/files/scripts/bsc9132qds/sdhc b/recipes-test/ddt-runner/files/scripts/bsc9132qds/sdhc
new file mode 100644
index 0000000..1530c64
--- /dev/null
+++ b/recipes-test/ddt-runner/files/scripts/bsc9132qds/sdhc
@@ -0,0 +1,77 @@
1#!/bin/sh
2# This script is used to test SDHC card functionality for bsc9132rdb
3
4DEV="mmc0:e624"
5
6if [ -f /sys/bus/mmc/drivers/mmcblk/bind ]; then
7 echo "PASS: /sys/bus/mmc/drivers/mmcblk/bind found"
8else
9 echo "FAIL: /sys/bus/mmc/drivers/mmcblk/bind not found"
10 exit 1
11fi
12
13if [ -f /sys/bus/mmc/drivers/mmcblk/unbind ]; then
14 echo "PASS: /sys/bus/mmc/drivers/mmcblk/unbind found"
15else
16 echo "FAIL: /sys/bus/mmc/drivers/mmcblk/unbind not found"
17 exit 1
18fi
19
20if [ -f /sys/bus/mmc/drivers/mmc_test/bind ]; then
21 echo "PASS: /sys/bus/mmc/drivers/mmc_test/bind found"
22else
23 echo "FAIL: /sys/bus/mmc/drivers/mmc_test/bind not found"
24 exit 1
25fi
26
27if [ -f /sys/bus/mmc/drivers/mmc_test/unbind ]; then
28 echo "PASS: /sys/bus/mmc/drivers/mmc_test/unbind found"
29else
30 echo "FAIL: /sys/bus/mmc/drivers/mmc_test/unbind not found"
31 exit 1
32fi
33
34mount -t debugfs none /sys/kernel/debug
35if [ $? -eq 0 ]; then
36 echo "PASS: successfully mount /sys/kernel/debug"
37else
38 echo "FAIL: failed to mount /sys/kernel/debug"
39fi
40
41echo $DEV > /sys/bus/mmc/drivers/mmcblk/unbind
42if [ $? -eq 0 ]; then
43 echo "PASS: successfully unbind mmcblk driver"
44else
45 echo "FAIL: failed to unbind mmcblk driver"
46fi
47
48echo $DEV > /sys/bus/mmc/drivers/mmc_test/bind
49if [ $? -eq 0 ]; then
50 echo "PASS: successfully bind mmc_test driver"
51else
52 echo "FAIL: failed to bind mmc_test driver"
53fi
54
55# echo 0 means test all supported test cases
56fail_num=`echo 0 > /sys/kernel/debug/mmc0/mmc0\:e624/test | grep -E -c 'FAILED|ERROR'`
57if [ $fail_num -eq 0 ]; then
58 echo "PASS: all test cases passed"
59else
60 echo "FAIL: some test cases failed"
61fi
62
63cat /sys/kernel/debug/mmc0/mmc0\:e624/test
64
65echo $DEV > /sys/bus/mmc/drivers/mmc_test/unbind
66if [ $? -eq 0 ]; then
67 echo "PASS: successfully unbind mmc_test driver"
68else
69 echo "FAIL: failed to unbind mmc_test driver"
70fi
71
72echo $DEV > /sys/bus/mmc/drivers/mmcblk/bind
73if [ $? -eq 0 ]; then
74 echo "PASS: successfully bind mmcblk driver"
75else
76 echo "FAIL: failed to bind mmcblk driver"
77fi
diff --git a/recipes-test/ddt-runner/files/scripts/bsc9132qds/spi b/recipes-test/ddt-runner/files/scripts/bsc9132qds/spi
new file mode 100755
index 0000000..3386d6c
--- /dev/null
+++ b/recipes-test/ddt-runner/files/scripts/bsc9132qds/spi
@@ -0,0 +1,56 @@
1#!/bin/sh
2# This script is used to test spi flash functionality for bsc9131rdb. An spi
3# flash M25P80 connect to bsc9131 cpu by spi bus, so the method is to read/write
4# spi flash to verify whether the spi bus driver worked or not.
5
6MTD_CHAR_DEVICE="/dev/mtd8"
7MTD_BLOCK_DEVICE="/dev/mtdblock8"
8
9FLASH_ERASE=`which flash_erase`
10if [ "x$FLASH_ERASE" != "x" ]; then
11 echo "PASS: flash_erase found"
12else
13 echo "FAIL: flash_erase not found"
14 exit 1
15fi
16
17if [ ! -e $MTD_CHAR_DEVICE ]; then
18 echo "FAIL: spi flash device $MTD_CHAR_DEVICE does not exist"
19 exit 1
20else
21 echo "PASS: spi flash device $MTD_CHAR_DEVICE exists"
22fi
23
24if [ ! -e $MTD_BLOCK_DEVICE ]; then
25 echo "FAIL: spi flash device $MTD_BLOCK_DEVICE does not exist"
26 exit 1
27else
28 echo "PASS: spi flash device $MTD_BLOCK_DEVICE exists"
29fi
30
31$FLASH_ERASE -j $MTD_CHAR_DEVICE 0 0
32if [ $? -ne 0 ]; then
33 echo "FAIL: format spi flash device $MTD_BLOCK_DEVICE fail"
34 exit 1
35else
36 mkdir -p /mnt/spi
37 mount -t jffs2 $MTD_BLOCK_DEVICE /mnt/spi
38 if [ $? -ne 0 ]; then
39 echo "FAIL: mount spi flash device $MTD_BLOCK_DEVICE fail"
40 exit 1
41 else
42 cp /bin/busybox /mnt/spi
43 file_num=`ls /mnt/spi |grep -c 'busybox'`
44 if [ $file_num -eq 1 ]; then
45 rm /mnt/spi/busybox
46 umount $MTD_BLOCK_DEVICE
47 echo "PASS: read or write spi flash device $MTD_BLOCK_DEVICE success"
48 else
49 echo "FAIL: read or write spi flash device $MTD_BLOCK_DEVICE fail"
50 exit 1
51 fi
52 fi
53fi
54
55echo "PASS: spi bus test passed"
56exit 0
diff --git a/recipes-test/ddt-runner/files/scripts/bsc9132qds/watchdog b/recipes-test/ddt-runner/files/scripts/bsc9132qds/watchdog
new file mode 100755
index 0000000..2beb8a6
--- /dev/null
+++ b/recipes-test/ddt-runner/files/scripts/bsc9132qds/watchdog
@@ -0,0 +1,64 @@
1#!/bin/sh
2#
3# This script is used to test watchdog functionality for bsc9132qds.
4
5WATCHDOG=`which watchdog`
6if [ "x$WATCHDOG" != "x" ]; then
7 echo "PASS: watchdog found"
8else
9 echo "FAIL: watchdog not found"
10 exit 1
11fi
12
13WATCHDOG_CONF=/etc/watchdog.conf
14if [ -f $WATCHDOG_CONF ]; then
15 echo "PASS: watchdog config file found"
16 sed -i '23,23 s/#//' $WATCHDOG_CONF
17else
18 echo "FAIL: watchdog config file not found"
19 exit 1
20fi
21
22$WATCHDOG -v /dev/watchdog
23watchdog_thread=`ps | grep -c 'watchdog -v /dev/watchdog'`
24if [ $watchdog_thread -eq 2 ]; then
25 echo "PASS: Watchdog daemon started successfully"
26else
27 echo "FAIL: Failed to start watchdog daemon"
28 exit 1
29fi
30
31sleep 5s
32
33killall watchdog
34
35retry=0
36while [ $retry -lt 10 ]
37do
38 watchdog_thread=`ps | grep -c 'watchdog -v /dev/watchdog'`
39 if [ $watchdog_thread -eq 1 ]; then
40 echo "PASS: Watchdog daemon stopped successfully"
41 break;
42 fi
43 sleep 1s
44 retry=`expr $retry + 1`
45done
46
47if [ $retry -eq 10 ]; then
48 echo "FAIL: Failed to stop watchdog daemon"
49fi
50
51found=0
52while read line
53do
54 result=`echo $line | grep -c 'still alive after 1 interval'`
55 if [ $result -eq 1 ]; then
56 echo "PASS: Watchdog is still alive after 1 interval"
57 found=1
58 fi
59done < /var/log/messages
60
61if [ $found -eq 0 ]; then
62 echo "FAIL: Watchdog is not alive after 1 interval"
63fi
64
diff --git a/recipes-test/ddt-runner/files/scripts/p2020rdb/ethernet b/recipes-test/ddt-runner/files/scripts/p2020rdb/ethernet
new file mode 100755
index 0000000..5355f10
--- /dev/null
+++ b/recipes-test/ddt-runner/files/scripts/p2020rdb/ethernet
@@ -0,0 +1,88 @@
1#!/bin/sh
2
3ethernet_interface="eth1"
4ethernet_ping_ipaddr="172.21.3.22"
5ethernet_ipaddr=$1
6
7IFCONFIG=`which ifconfig`
8
9$IFCONFIG $ethernet_interface up
10$IFCONFIG | grep $ethernet_interface
11if [ $? -ne 0 ]; then
12 echo "FAIL: $ethernet_interface is not up"
13 exit 1
14else
15 echo "PASS: $ethernet_interface is up"
16fi
17
18if [ "x$ethernet_ipaddr" != "x" ]; then
19 $IFCONFIG $ethernet_interface $ethernet_ipaddr
20fi
21
22$IFCONFIG $ethernet_interface |grep 'inet addr:' |sed -e 's@inet addr:@@' |sed q | awk '{print $1}'
23if [ $? -ne 0 ]; then
24 echo "FAIL: ipaddr of $ethernet_interface setup failed"
25 exit 1
26else
27 echo "PASS: ipaddr of $ethernet_interface setup success"
28fi
29
30mindatasize=56
31maxdatasize=650
32stepsize=100
33iteration=1
34datasize=$mindatasize
35logfile=`/bin/mktemp`
36statistics=`/bin/mktemp`
37error=0
38
39trap cleanup SIGHUP SIGINT SIGTERM
40
41clean_tasks() {
42 echo "Executing clean up tasks"
43 rm -f $logfile $statistics
44}
45
46cleanup() {
47 echo "Aborting script execution"
48 clean_tasks
49 exit 0
50}
51
52echo "start ping test for $ethernet_interface..."
53
54while [ $datasize -le $maxdatasize ]; do
55 for i in `seq 1 $iteration`; do
56 ping -c 1 -s $datasize $ethernet_ping_ipaddr > $statistics
57 ping_err=`echo $?`
58 echo "" && cat $statistics | grep -r "PING"
59 cat $statistics | grep -r "received"
60 [ `echo $?` -eq 0 ] || packets_received=0 && \
61 packets_received=`cat $statistics | \
62 grep -r "received" | awk '{print$4}'`
63
64 # Evaluate possible errors on the ping operation
65 if [ $ping_err -ne 0 ] || [ $packets_received -eq 0 ]; then
66 error=1
67 echo -e `cat $statistics | grep -r PING` >> $logfile
68 echo -e "Size: $datasize Iteration: $i\n" >> $logfile
69 fi
70 done
71 let datasize=$datasize+$stepsize
72done
73
74# Report failures
75if [ $error -eq 1 ]; then
76 echo -e "=================== error report ===================\n"
77 cat $logfile
78 echo -e "====================================================\n"
79 clean_tasks
80 echo -e "FAIL: ping test for $ethernet_interface failed\n"
81 exit 1
82else
83 clean_tasks
84 echo -e "PASS: ping test for $ethernet_interface success\n"
85fi
86
87echo "PASS: $ethernet_interface test passed"
88exit 0
diff --git a/recipes-test/ddt-runner/files/scripts/p2041rdb/ethernet b/recipes-test/ddt-runner/files/scripts/p2041rdb/ethernet
new file mode 100755
index 0000000..10a74fa
--- /dev/null
+++ b/recipes-test/ddt-runner/files/scripts/p2041rdb/ethernet
@@ -0,0 +1,88 @@
1#!/bin/sh
2
3ethernet_interface="eth1"
4#sestord02 ip address
5ethernet_ping_ipaddr="172.21.3.22"
6ethernet_ipaddr=$1
7
8IFCONFIG=`which ifconfig`
9
10$IFCONFIG $ethernet_interface up
11$IFCONFIG | grep $ethernet_interface
12if [ $? -ne 0 ]; then
13 echo "FAIL: $ethernet_interface is not up"
14 exit 1
15else
16 echo "PASS: $ethernet_interface is up"
17fi
18
19if [ "x$ethernet_ipaddr" != "x" ]; then
20 $IFCONFIG $ethernet_interface $ethernet_ipaddr
21fi
22
23$IFCONFIG $ethernet_interface |grep 'inet addr:' |sed -e 's@inet addr:@@' |sed q | awk '{print $1}'
24if [ $? -ne 0 ]; then
25 echo "FAIL: ipaddr of $ethernet_interface setup failed"
26 exit 1
27else
28 echo "PASS: ipaddr of $ethernet_interface setup success"
29fi
30
31mindatasize=56
32maxdatasize=650
33stepsize=100
34iteration=1
35datasize=$mindatasize
36logfile=`/bin/mktemp`
37statistics=`/bin/mktemp`
38error=0
39
40trap cleanup SIGHUP SIGINT SIGTERM
41
42clean_tasks() {
43 echo "Executing clean up tasks"
44 rm -f $logfile $statistics
45}
46
47cleanup() {
48 echo "Aborting script execution"
49 clean_tasks
50 exit 0
51}
52
53echo "start ping test for $ethernet_interface..."
54
55while [ $datasize -le $maxdatasize ]; do
56 for i in `seq 1 $iteration`; do
57 ping -c 1 -s $datasize $ethernet_ping_ipaddr > $statistics
58 ping_err=`echo $?`
59 echo "" && cat $statistics | grep -r "PING"
60 cat $statistics | grep -r "received"
61 [ `echo $?` -eq 0 ] || packets_received=0 && \
62 packets_received=`cat $statistics | \
63 grep -r "received" | awk '{print$4}'`
64
65 # Evaluate possible errors on the ping operation
66 if [ $ping_err -ne 0 ] || [ $packets_received -eq 0 ]; then
67 error=1
68 echo -e `cat $statistics | grep -r PING` >> $logfile
69 echo -e "Size: $datasize Iteration: $i\n" >> $logfile
70 fi
71 done
72 let datasize=$datasize+$stepsize
73done
74
75# Report failures
76if [ $error -eq 1 ]; then
77 echo -e "=================== error report ===================\n"
78 cat $logfile
79 echo -e "====================================================\n"
80 clean_tasks
81 echo -e "FAIL: ping test for $ethernet_interface failed\n"
82 exit 1
83else
84 clean_tasks
85 echo -e "PASS: ping test for $ethernet_interface success\n"
86fi
87
88exit 0
diff --git a/recipes-test/ddt-runner/files/scripts/p2041rdb/flash b/recipes-test/ddt-runner/files/scripts/p2041rdb/flash
new file mode 100755
index 0000000..2d10600
--- /dev/null
+++ b/recipes-test/ddt-runner/files/scripts/p2041rdb/flash
@@ -0,0 +1,49 @@
1#!/bin/sh
2#
3# This script is used to test flash driver functionality. I removed the write
4# operations since all partition are in use in p2041rdb and there might be
5# possibility of corrupting data even if we backup in test script.
6
7if part_num=`cat /proc/mtd | grep -c 'mtd'`; then
8 echo "PASS: show $part_num partitions"
9else
10 echo "FAIL: show $part_num partitions"
11 exit 1
12fi
13
14for((part=0; part<$part_num; part++));
15do
16 if [ $(mtd_debug info /dev/mtd$part | grep -c 'mtd.type') ]; then
17 echo "PASS: show partition $part debug info"
18 else
19 echo "FAIL: show partition $part debug info"
20 exit 1
21 fi
22done
23
24READ_TEST=`find / -name mtd_readtest.ko -print`
25
26if [ ! -e $READ_TEST ]; then
27 echo "FAIL: $READ_TEST does not exist"
28 exit 1
29else
30 echo "PASS: $READ_TEST exists"
31fi
32
33for((part=0; part<$part_num; part++));
34do
35 dmesg -c
36
37 insmod $READ_TEST dev=$part
38
39 finish=`dmesg | grep -c 'mtd_readtest: finished'`
40 if [ $finish -eq 1 ]; then
41 echo "PASS: read test $part"
42 else
43 echo "FAIL: read test $part"
44 rmmod $READ_TEST
45 exit 1
46 fi
47
48 rmmod $READ_TEST
49done
diff --git a/recipes-test/ddt-runner/files/scripts/p2041rdb/i2c b/recipes-test/ddt-runner/files/scripts/p2041rdb/i2c
new file mode 100755
index 0000000..58800ce
--- /dev/null
+++ b/recipes-test/ddt-runner/files/scripts/p2041rdb/i2c
@@ -0,0 +1,44 @@
1#!/bin/sh
2# This script is used to test i2c bus functionality for p2041rdb board.
3
4if I2C_ADAPTERS=$(i2cdetect -l |wc -l); then
5 echo "PASS: found $I2C_ADAPTERS i2c adapters"
6else
7 echo "FAIL: no i2c adapters found"
8 exit 1
9fi
10
11if [ -z "$adapters" ]; then
12 adapters=0
13fi
14
15while [ $adapters -lt $I2C_ADAPTERS ]
16do
17 i2cdetect -y $adapters
18 if [ $? -ne 0 ]; then
19 echo "FAIL: detect i2c adapter $adapters failed"
20 else
21 echo "PASS: detect i2c adapter $adapters success"
22 fi
23 adapters=`expr $adapters + 1`
24 sleep 1
25done
26
27i2cdetect -y 0
28if [ $? -ne 0 ]; then
29 echo "FAIL: detect i2c bus 0 fail"
30 exit 1
31else
32 echo "PASS: detect i2c bus 0 success"
33fi
34
35#i2c bus 0, device address 0x52, DDR3 DIMM Socket 1, SPD EEPROM
36i2cdump -f -y 0 0x52 |grep UG51U6400N8SU
37if [ $? -ne 0 ]; then
38 echo "FAIL: read SPD EEPROM on i2c bus 0 fail"
39 exit 1
40else
41 echo "PASS: read SPD EEPROM on i2c bus 0 success"
42fi
43
44
diff --git a/recipes-test/ddt-runner/files/scripts/p2041rdb/pci-express b/recipes-test/ddt-runner/files/scripts/p2041rdb/pci-express
new file mode 100755
index 0000000..91db286
--- /dev/null
+++ b/recipes-test/ddt-runner/files/scripts/p2041rdb/pci-express
@@ -0,0 +1,109 @@
1#!/bin/sh
2
3ethernet_interface="eth0"
4#sestord02 ip address
5ethernet_ping_ipaddr="172.21.3.22"
6ethernet_ipaddr=$1
7
8#Intel Corporation 82574L Gigabit Network Card (intel e1000e)
9vendor_id="8086"
10product_id="10d3"
11
12#find vendor id & product id
13lspci -nn |grep $vendor_id:$product_id
14if [ $? -ne 0 ]; then
15 echo "FAIL: pci-e ethernet card device does not exist"
16 exit 1
17else
18 echo "PASS: got pci-e ethernet card device"
19fi
20
21setpci -v -d $vendor_id:$product_id latency_timer=b0
22if [ $? -ne 0 ]; then
23 echo "FAIL: parameter changes to pci config space failed"
24 exit 1
25else
26 echo "PASS: parameter changes to pci config space success"
27fi
28
29IFCONFIG=`which ifconfig`
30
31$IFCONFIG $ethernet_interface up
32$IFCONFIG | grep $ethernet_interface
33if [ $? -ne 0 ]; then
34 echo "FAIL: pci-e ethernet card device $ethernet_interface is not up"
35 exit 1
36else
37 echo "PASS: pci-e ethernet card device $ethernet_interface is up"
38fi
39
40if [ "x$ethernet_ipaddr" != "x" ]; then
41 $IFCONFIG $ethernet_interface $ethernet_ipaddr
42fi
43
44$IFCONFIG $ethernet_interface |grep 'inet addr:' |sed -e 's@inet addr:@@' |sed q | awk '{print $1}'
45if [ $? -ne 0 ]; then
46 echo "FAIL: ipaddr of pci-e ethernet card device $ethernet_interface setup failed"
47 exit 1
48else
49 echo "PASS: ipaddr of pci-e ethernet card device $ethernet_interface setup success"
50fi
51
52mindatasize=56
53maxdatasize=650
54stepsize=100
55iteration=1
56datasize=$mindatasize
57logfile=`/bin/mktemp`
58statistics=`/bin/mktemp`
59error=0
60
61trap cleanup SIGHUP SIGINT SIGTERM
62
63clean_tasks() {
64 echo "Executing clean up tasks"
65 rm -f $logfile $statistics
66}
67
68cleanup() {
69 echo "Aborting script execution"
70 clean_tasks
71 exit 0
72}
73
74echo "start ping test for pci-e ethernet card device $ethernet_interface..."
75
76while [ $datasize -le $maxdatasize ]; do
77 for i in `seq 1 $iteration`; do
78 ping -c 1 -s $datasize $ethernet_ping_ipaddr > $statistics
79 ping_err=`echo $?`
80 echo "" && cat $statistics | grep -r "PING"
81 cat $statistics | grep -r "received"
82 [ `echo $?` -eq 0 ] || packets_received=0 && \
83 packets_received=`cat $statistics | \
84 grep -r "received" | awk '{print$4}'`
85
86 # Evaluate possible errors on the ping operation
87 if [ $ping_err -ne 0 ] || [ $packets_received -eq 0 ]; then
88 error=1
89 echo -e `cat $statistics | grep -r PING` >> $logfile
90 echo -e "Size: $datasize Iteration: $i\n" >> $logfile
91 fi
92 done
93 let datasize=$datasize+$stepsize
94done
95
96# Report failures
97if [ $error -eq 1 ]; then
98 echo -e "=================== error report ===================\n"
99 cat $logfile
100 echo -e "====================================================\n"
101 clean_tasks
102 echo -e "FAIL: ping test for pci-e ethernet card device $ethernet_interface failed\n"
103 exit 1
104else
105 clean_tasks
106 echo -e "PASS: ping test for pci-e ethernet card device $ethernet_interface success\n"
107fi
108
109exit 0
diff --git a/recipes-test/ddt-runner/files/scripts/p2041rdb/sata b/recipes-test/ddt-runner/files/scripts/p2041rdb/sata
new file mode 100755
index 0000000..b7f1fab
--- /dev/null
+++ b/recipes-test/ddt-runner/files/scripts/p2041rdb/sata
@@ -0,0 +1,81 @@
1#!/bin/sh
2#
3#This script is to test sata devices on target
4#
5result=0
6devpath=""
7satainfo=""
8SD=`ls -l /dev/sd[^0-9] | awk '{print $5 $6 "," $10}'`
9if [ -z "$SD" ]; then
10 echo "FAIL: find sata device"
11 exit 1
12else
13 echo "PASS: find sata device"
14fi
15HDPARM=`which hdparm`
16if [ -z $HDPARM ]; then
17 result=$?
18 echo "FAIL: find hdparm"
19fi
20 echo "PASS: find hdparm"
21
22
23for s in $SD
24 do
25 devpath=`echo "$s" | awk -F "," '{print "/sys/dev/block/" $1 ":" $2}'`
26 satainfo=`ls -l $devpath | grep sata`
27
28 if [ -z "$satainfo" ] ; then
29 continue
30 fi
31 s=`echo "$s" | awk -F "," '{print $3}'`
32
33 echo "testing $s"
34 $HDPARM -I $s
35 if [ $? -ne 0 ]; then
36 result=$?
37 echo "FAIL: $HDPARM -I $s Detailed/current information directly from $s"
38 else
39 echo "PASS: $HDPARM -I $s Detailed/current information directly from $s"
40 fi
41 $HDPARM -tT $s
42 if [ $? -ne 0 ]; then
43 result=$?
44 echo "FAIL: $HDPARM -tT $s Perform device/cache read timings on $s"
45 else
46 echo "PASS: $HDPARM -tT $s Perform device/cache read timings on $s"
47 fi
48
49
50 mkdir -p /mnt/sata_tmp
51 for partition in `ls "$s"[1-9]`
52 do
53 mount "$partition" /mnt/sata_tmp
54 if [ $? -ne 0 ]; then
55 result=$?
56 echo "FAIL: Mount $s"
57 else
58 echo "PASS: Mount $s"
59 dd if=/dev/urandom of=/mnt/sata_tmp/writefile bs=1M count=50
60 if [ $? -ne 0 ]; then
61 result=$?
62 echo "FAIL: write test on $s"
63 else
64 echo "PASS: write test on $s"
65 rm -f /mnt/sata_tmp/writefile
66 fi
67 dd if=$s of=/mnt/sata_tmp/readfile bs=1M count=10
68 if [ $? -ne 0 ]; then
69 result=$?
70 echo "FAIL: read test on $s"
71 else
72 echo "PASS: read test on $s"
73 rm -f /mnt/sata_tmp/readfile
74 fi
75 umount /mnt/sata_tmp
76 fi
77 done
78
79 rm -fr /mnt/sata_tmp
80done
81exit $result
diff --git a/recipes-test/ddt-runner/files/scripts/p2041rdb/sdhc b/recipes-test/ddt-runner/files/scripts/p2041rdb/sdhc
new file mode 100755
index 0000000..bc3026b
--- /dev/null
+++ b/recipes-test/ddt-runner/files/scripts/p2041rdb/sdhc
@@ -0,0 +1,41 @@
1#!/bin/sh
2
3#the content of SD will be lost by running this test case.
4
5SDHC_DEVICE="/dev/mmcblk0p1"
6
7if [ ! -e $SDHC_DEVICE ]; then
8 echo "FAIL: $SDHC_DEVICE does not exist"
9 exit 1
10else
11 echo "PASS: $SDHC_DEVICE device exists"
12fi
13
14mount |grep mmcblk0p1
15if [ $? -eq 0 ]; then
16 umount $SDHC_DEVICE
17fi
18
19/sbin/mkfs.ext2 $SDHC_DEVICE
20if [ $? -ne 0 ]; then
21 echo "FAIL: format $SDHC_DEVICE fail"
22 exit 1
23else
24 mkdir -p /mnt/sdhc
25 mount $SDHC_DEVICE /mnt/sdhc
26 if [ $? -ne 0 ]; then
27 echo "FAIL: mount $SDHC_DEVICE fail"
28 exit 1
29 else
30 cp /bin/busybox /mnt/sdhc
31 ls /mnt/sdhc |grep busybox
32 if [ $? -ne 0 ]; then
33 echo "FAIL: read or write $SDHC_DEVICE fail"
34 exit 1
35 else
36 umount $SDHC_DEVICE
37 echo "PASS: read or write $SDHC_DEVICE success"
38 fi
39 fi
40fi
41
diff --git a/recipes-test/ddt-runner/files/scripts/p2041rdb/usb b/recipes-test/ddt-runner/files/scripts/p2041rdb/usb
new file mode 100755
index 0000000..017287f
--- /dev/null
+++ b/recipes-test/ddt-runner/files/scripts/p2041rdb/usb
@@ -0,0 +1,48 @@
1#!/bin/sh
2#
3#This script is to test usb devices on p2041rdb target
4#
5
6USB_DISK=`ls /dev/sd*[1-9] | sort | tail -n 1`
7
8usbutils_is_installed=`which lsusb`
9if [ -z $usbutils_is_installed ]; then
10 echo "FAIL: Cannot find lsusb"
11 exit 1
12else
13 echo "PASS: usbutils found"
14fi
15
16usbdev_num=`lsusb | grep -v root\ hub | wc -l`
17if [ $usbdev_num -eq 0 ]; then
18 echo "FAIL: USB device is not connected"
19 exit 1
20else
21 echo "PASS: $usbdev_num USB device(s) connected"
22fi
23
24lsusb | grep -v root\ hub
25mkdir -p /mnt/usb_ehci
26mount $USB_DISK /mnt/usb_ehci
27if [ $? -ne 0 ]; then
28 echo "FAIL: Mount USB device failed"
29 exit 1
30else
31 echo "PASS: Mount USB device succeed"
32fi
33
34echo "Begin test usb device..."
35dd if=/dev/urandom of=/mnt/usb_ehci/testfile bs=1M count=50
36if [ $? -ne 0 ]; then
37 echo "FAIL: test failed"
38 rm -f /mnt/usb_ehci_testfile
39 umount /mnt/usb_ehci
40 rm -fr /mnt/usb_ehci
41 exit 1
42fi
43
44echo "PASS: test succeed"
45rm -f /mnt/usb_ehci_testfile
46umount /mnt/usb_ehci
47rm -fr /mnt/usb_ehci
48exit 0
diff --git a/recipes-test/ddt-runner/files/scripts/p4080ds/ethernet b/recipes-test/ddt-runner/files/scripts/p4080ds/ethernet
new file mode 100755
index 0000000..5355f10
--- /dev/null
+++ b/recipes-test/ddt-runner/files/scripts/p4080ds/ethernet
@@ -0,0 +1,88 @@
1#!/bin/sh
2
3ethernet_interface="eth1"
4ethernet_ping_ipaddr="172.21.3.22"
5ethernet_ipaddr=$1
6
7IFCONFIG=`which ifconfig`
8
9$IFCONFIG $ethernet_interface up
10$IFCONFIG | grep $ethernet_interface
11if [ $? -ne 0 ]; then
12 echo "FAIL: $ethernet_interface is not up"
13 exit 1
14else
15 echo "PASS: $ethernet_interface is up"
16fi
17
18if [ "x$ethernet_ipaddr" != "x" ]; then
19 $IFCONFIG $ethernet_interface $ethernet_ipaddr
20fi
21
22$IFCONFIG $ethernet_interface |grep 'inet addr:' |sed -e 's@inet addr:@@' |sed q | awk '{print $1}'
23if [ $? -ne 0 ]; then
24 echo "FAIL: ipaddr of $ethernet_interface setup failed"
25 exit 1
26else
27 echo "PASS: ipaddr of $ethernet_interface setup success"
28fi
29
30mindatasize=56
31maxdatasize=650
32stepsize=100
33iteration=1
34datasize=$mindatasize
35logfile=`/bin/mktemp`
36statistics=`/bin/mktemp`
37error=0
38
39trap cleanup SIGHUP SIGINT SIGTERM
40
41clean_tasks() {
42 echo "Executing clean up tasks"
43 rm -f $logfile $statistics
44}
45
46cleanup() {
47 echo "Aborting script execution"
48 clean_tasks
49 exit 0
50}
51
52echo "start ping test for $ethernet_interface..."
53
54while [ $datasize -le $maxdatasize ]; do
55 for i in `seq 1 $iteration`; do
56 ping -c 1 -s $datasize $ethernet_ping_ipaddr > $statistics
57 ping_err=`echo $?`
58 echo "" && cat $statistics | grep -r "PING"
59 cat $statistics | grep -r "received"
60 [ `echo $?` -eq 0 ] || packets_received=0 && \
61 packets_received=`cat $statistics | \
62 grep -r "received" | awk '{print$4}'`
63
64 # Evaluate possible errors on the ping operation
65 if [ $ping_err -ne 0 ] || [ $packets_received -eq 0 ]; then
66 error=1
67 echo -e `cat $statistics | grep -r PING` >> $logfile
68 echo -e "Size: $datasize Iteration: $i\n" >> $logfile
69 fi
70 done
71 let datasize=$datasize+$stepsize
72done
73
74# Report failures
75if [ $error -eq 1 ]; then
76 echo -e "=================== error report ===================\n"
77 cat $logfile
78 echo -e "====================================================\n"
79 clean_tasks
80 echo -e "FAIL: ping test for $ethernet_interface failed\n"
81 exit 1
82else
83 clean_tasks
84 echo -e "PASS: ping test for $ethernet_interface success\n"
85fi
86
87echo "PASS: $ethernet_interface test passed"
88exit 0
diff --git a/recipes-test/ddt-runner/files/scripts/p4080ds/flash b/recipes-test/ddt-runner/files/scripts/p4080ds/flash
new file mode 100755
index 0000000..19f95aa
--- /dev/null
+++ b/recipes-test/ddt-runner/files/scripts/p4080ds/flash
@@ -0,0 +1,20 @@
1#!/bin/sh
2#
3# This script is used to test flash driver functionality. I removed the write
4# operations since all partition are in use in p4080ds and there might be
5# possibility of corrupting data even if we backup in test script.
6
7if part_num=`cat /proc/mtd | grep -c 'mtd'`; then
8 echo "PASS: show $part_num partitions"
9else
10 echo "FAIL: show $part_num partitions"
11fi
12
13for((part=0; part<$part_num-1; part++));
14do
15 if [ $(mtd_debug info /dev/mtd$part | grep -c 'mtd.type') ]; then
16 echo "PASS: show partition $part debug info"
17 else
18 echo "FAIL: show partition $part debug info"
19 fi
20done
diff --git a/recipes-test/ddt-runner/files/scripts/p4080ds/i2c b/recipes-test/ddt-runner/files/scripts/p4080ds/i2c
new file mode 100755
index 0000000..5b312b9
--- /dev/null
+++ b/recipes-test/ddt-runner/files/scripts/p4080ds/i2c
@@ -0,0 +1,24 @@
1#!/bin/sh
2
3if I2C_ADAPTERS=$(i2cdetect -l |wc -l); then
4 echo "PASS: found $I2C_ADAPTERS i2c adapters"
5else
6 echo "FAIL: no i2c adapters found"
7 exit 1
8fi
9
10if [ -z "$adapters" ]; then
11 adapters=0
12fi
13
14while [ $adapters -lt $I2C_ADAPTERS ]
15do
16 i2cdetect -y $adapters
17 if [ $? -ne 0 ]; then
18 echo "FAIL: detect i2c adapter $adapters failed"
19 else
20 echo "PASS: detect i2c adapter $adapters success"
21 fi
22 adapters=`expr $adapters + 1`
23 sleep 1
24done
diff --git a/recipes-test/ddt-runner/files/scripts/p4080ds/rtc b/recipes-test/ddt-runner/files/scripts/p4080ds/rtc
new file mode 100755
index 0000000..0d38293
--- /dev/null
+++ b/recipes-test/ddt-runner/files/scripts/p4080ds/rtc
@@ -0,0 +1,42 @@
1#!/bin/sh
2
3RTC_DEVICE="/dev/rtc"
4
5if [ ! -e $RTC_DEVICE ]; then
6 echo "FAIL: rtc device does not exist"
7 exit 1
8else
9 echo "PASS: rtc device exists"
10fi
11
12/sbin/hwclock -f $RTC_DEVICE
13if [ $? -ne 0 ]; then
14 echo "FAIL: rtc device open failed"
15 exit 1
16else
17 echo "PASS: rtc device open success"
18fi
19
20
21/sbin/hwclock --systohc
22if [ $? -ne 0 ]; then
23 echo "FAIL: sync system clock and hardware clock failed"
24 exit 1
25else
26 echo "PASS: sync system clock and hardware clock success"
27fi
28
29RTC_TIME=$(/sbin/hwclock -r |awk '{print $4}')
30echo $RTC_TIME
31SYS_TIME=$(date +%m/%d/%Y-%X |awk '{print $1}' |awk -F- '{print $2}')
32echo $SYS_TIME
33
34if [ "$RTC_TIME" = "$SYS_TIME" ] ; then
35 echo "PASS: system time same with hardware time"
36else
37 echo "FAIL: system time different with hardware time"
38 exit 1
39fi
40
41echo "PASS: rtc test successful"
42exit 0
diff --git a/recipes-test/ddt-runner/files/scripts/p4080ds/sdhc b/recipes-test/ddt-runner/files/scripts/p4080ds/sdhc
new file mode 100755
index 0000000..31a7c2f
--- /dev/null
+++ b/recipes-test/ddt-runner/files/scripts/p4080ds/sdhc
@@ -0,0 +1,65 @@
1#!/bin/sh
2# This script is used to test sdhc functionality for p4080ds.
3# The content of SD will be lost by running this test case.
4
5SDHC_DEVICE="/dev/mmcblk0"
6SDHC_DEVICE_PART="/dev/mmcblk0p1"
7SFDISK=`which sfdisk`
8
9if [ -e $SDHC_DEVICE ]; then
10 echo "PASS: $SDHC_DEVICE device exists"
11else
12 echo "FAIL: $SDHC_DEVICE does not exist"
13 exit 1
14fi
15
16if [ -e $SDHC_DEVICE_PART ]; then
17 echo "PASS: $SDHC_DEVICE_PART device exists"
18elif [ ! -z $SFDISK ]; then
19
20 echo "Try to create a partition"
21
22$SFDISK $SDHC_DEVICE << EOF
23,,L
24EOF
25
26 if [ -e $SDHC_DEVICE_PART ]; then
27 echo "PASS: $SDHC_DEVICE_PART device exists"
28 else
29 echo "FAIL: $SDHC_DEVICE_PART does not exist"
30 exit 1
31 fi
32
33else
34 echo "FAIL: $SDHC_DEVICE_PART does not exist"
35 exit 1
36fi
37
38mount |grep mmcblk0p1
39if [ $? -eq 0 ]; then
40 umount $SDHC_DEVICE_PART
41fi
42
43/sbin/mkfs.ext2 $SDHC_DEVICE_PART
44if [ $? -ne 0 ]; then
45 echo "FAIL: format $SDHC_DEVICE_PART fail"
46 exit 1
47else
48 mkdir -p /mnt/sdhc
49 mount $SDHC_DEVICE_PART /mnt/sdhc
50 if [ $? -ne 0 ]; then
51 echo "FAIL: mount $SDHC_DEVICE_PART fail"
52 exit 1
53 else
54 cp /bin/busybox /mnt/sdhc
55 ls /mnt/sdhc |grep busybox
56 if [ $? -ne 0 ]; then
57 echo "FAIL: read or write $SDHC_DEVICE_PART fail"
58 exit 1
59 else
60 umount $SDHC_DEVICE_PART
61 echo "PASS: read or write $SDHC_DEVICE_PART success"
62 fi
63 fi
64fi
65
diff --git a/recipes-test/ddt-runner/files/scripts/p4080ds/spi b/recipes-test/ddt-runner/files/scripts/p4080ds/spi
new file mode 100755
index 0000000..b4df851
--- /dev/null
+++ b/recipes-test/ddt-runner/files/scripts/p4080ds/spi
@@ -0,0 +1,48 @@
1#!/bin/sh
2
3#An spi flash M25P80 connect to p4080 cpu by spi bus, so the method
4#is to read/write spi flash to verify whether the spi bus driver worked
5#or not.
6
7MTD_CHAR_DEVICE="/dev/mtd4"
8MTD_BLOCK_DEVICE="/dev/mtdblock4"
9
10if [ ! -e $MTD_CHAR_DEVICE ]; then
11 echo "FAIL: spi flash device $MTD_CHAR_DEVICE does not exist"
12 exit 1
13else
14 echo "PASS: spi flash device $MTD_CHAR_DEVICE exists"
15fi
16
17if [ ! -e $MTD_BLOCK_DEVICE ]; then
18 echo "FAIL: spi flash device $MTD_BLOCK_DEVICE does not exist"
19 exit 1
20else
21 echo "PASS: spi flash device $MTD_BLOCK_DEVICE exists"
22fi
23
24/usr/sbin/flash_erase -j $MTD_CHAR_DEVICE 0 0
25if [ $? -ne 0 ]; then
26 echo "FAIL: format spi flash device $MTD_BLOCK_DEVICE fail"
27 exit 1
28else
29 mkdir -p /mnt/spi
30 mount -t jffs2 $MTD_BLOCK_DEVICE /mnt/spi
31 if [ $? -ne 0 ]; then
32 echo "FAIL: mount spi flash device $MTD_BLOCK_DEVICE fail"
33 exit 1
34 else
35 cp /bin/busybox /mnt/spi
36 ls /mnt/spi |grep busybox
37 if [ $? -ne 0 ]; then
38 echo "FAIL: read or write spi flash device $MTD_BLOCK_DEVICE fail"
39 exit 1
40 else
41 umount $MTD_BLOCK_DEVICE
42 echo "PASS: read or write spi flash device $MTD_BLOCK_DEVICE success"
43 fi
44 fi
45fi
46
47echo "PASS: spi bus test passed"
48exit 0
diff --git a/recipes-test/ddt-runner/files/scripts/p4080ds/usb b/recipes-test/ddt-runner/files/scripts/p4080ds/usb
new file mode 100755
index 0000000..970e913
--- /dev/null
+++ b/recipes-test/ddt-runner/files/scripts/p4080ds/usb
@@ -0,0 +1,100 @@
1#!/bin/sh
2#
3# This script is used to test usb functionality for p4080ds.
4#
5
6result=0
7devpath=""
8usbinfo=""
9
10usbutils_is_installed=`which lsusb`
11if [ -z $usbutils_is_installed ]; then
12 echo "FAIL: Cannot find lsusb"
13 exit 1
14fi
15
16usbdev_num=`lsusb | grep -v root\ hub | wc -l`
17if [ $usbdev_num -eq 0 ]; then
18 echo "FAIL: USB device is not connected"
19 exit 1
20else
21 echo "$usbdev_num USB device(s) connected"
22fi
23
24sd=`ls -l /dev/sd[^0-9] | awk '{print $5 $6 "," $10}'`
25if [ -z "$sd" ]; then
26 echo "FAIL: find sd device"
27 exit 1
28else
29 echo "PASS: find sd device"
30fi
31
32HDPARM=`which hdparm`
33if [ -z $HDPARM ]; then
34 result=$?
35 echo "FAIL: find hdparm"
36fi
37 echo "PASS: find hdparm"
38
39for s in $sd
40do
41 devpath=`echo "$s" | awk -F "," '{print "/sys/dev/block/" $1 ":" $2}'`
42 usbinfo=`ls -l $devpath | grep usb`
43
44 if [ -z "$usbinfo" ] ; then
45 continue
46 fi
47
48 s=`echo "$s" | awk -F "," '{print $3}'`
49
50 echo "Testing $s"
51 $HDPARM -I $s
52 if [ $? -ne 0 ]; then
53 result=$?
54 echo "FAIL: $HDPARM -I $s Detailed/current information directly from $s"
55 else
56 echo "PASS: $HDPARM -I $s Detailed/current information directly from $s"
57 fi
58
59 $HDPARM -tT $s
60 if [ $? -ne 0 ]; then
61 result=$?
62 echo "FAIL: $HDPARM -tT $s Perform device/cache read timings on $s"
63 else
64 echo "PASS: $HDPARM -tT $s Perform device/cache read timings on $s"
65 fi
66
67 mkdir -p /mnt/usb_tmp
68 for partition in `ls "$s"[1-9]`
69 do
70 echo "Testing $partition"
71
72 mount "$partition" /mnt/usb_tmp
73 if [ $? -ne 0 ]; then
74 result=$?
75 echo "FAIL: mount $s"
76 else
77 echo "PASS: mount $s"
78 dd if=/dev/urandom of=/mnt/usb_tmp/writefile bs=1M count=50
79 if [ $? -ne 0 ]; then
80 result=$?
81 echo "FAIL: write test on $s"
82 else
83 echo "PASS: write test on $s"
84 rm -f /mnt/usb_tmp/writefile
85 fi
86 dd if=$s of=/mnt/usb_tmp/readfile bs=1M count=10
87 if [ $? -ne 0 ]; then
88 result=$?
89 echo "FAIL: read test on $s"
90 else
91 echo "PASS: read test on $s"
92 rm -f /mnt/usb_tmp/readfile
93 fi
94 umount /mnt/usb_tmp
95 fi
96 done
97
98 rm -fr /mnt/usb_tmp
99done
100exit $result
diff --git a/recipes-test/perf-networking/files/perf-networking b/recipes-test/perf-networking/files/perf-networking
new file mode 100755
index 0000000..f865374
--- /dev/null
+++ b/recipes-test/perf-networking/files/perf-networking
@@ -0,0 +1,14 @@
1#!/bin/sh
2server_ip="172.24.0.50"
3
4if ping -c1 $server_ip > /dev/null
5then
6netperf -H $server_ip -t TCP_STREAM
7netperf -H $server_ip -t TCP_MAERTS
8netperf -H $server_ip -t TCP_RR
9netperf -H $server_ip -t TCP_CRR
10netperf -H $server_ip -t UDP_STREAM
11netperf -H $server_ip -t UDP_RR
12else
13echo "Error: Server is down!"
14fi
diff --git a/recipes-test/perf-networking/perf-networking_1.0.bb b/recipes-test/perf-networking/perf-networking_1.0.bb
new file mode 100644
index 0000000..aa32a7d
--- /dev/null
+++ b/recipes-test/perf-networking/perf-networking_1.0.bb
@@ -0,0 +1,19 @@
1SUMMARY = "A simple shell script to run network performance tests"
2DESCRIPTION = "The perf-networking package installs the perf-networking \
3shell script which runs tests using the netperf package"
4SRC_URI += "file://perf-networking"
5
6LICENSE = "MIT"
7LIC_FILES_CHKSUM = "file://${COREBASE}/LICENSE;md5=3f40d7994397109285ec7b81fdeb3b58 \
8 file://${COREBASE}/meta/COPYING.MIT;md5=3da9cfbcb788c80a0384361b4de20420"
9
10RDEPENDS_${PN}= "netperf"
11
12do_install () {
13 install -D ${WORKDIR}/perf-networking ${D}${bindir}/perf-networking
14}
15
16do_patch[noexec] = "1"
17do_configure[noexec] = "1"
18do_compile[noexec] = "1"
19do_build[noexec] = "1"
diff --git a/recipes-test/systest-runner/files/systest-runner b/recipes-test/systest-runner/files/systest-runner
new file mode 100644
index 0000000..f549954
--- /dev/null
+++ b/recipes-test/systest-runner/files/systest-runner
@@ -0,0 +1,16 @@
1#!/bin/sh
2
3cd /usr/lib/systest-runner/tests >/dev/null
4
5for x in *
6do
7 echo $x
8 if [[ -f $x ]]; then
9 date +%Y-%m-%dT%H:%M
10 echo "BEGIN: $x"
11 ./$x
12 echo "END: $x"
13 date +%Y-%m-%dT%H:%M
14 fi
15done
16
diff --git a/recipes-test/systest-runner/files/tests/ltp b/recipes-test/systest-runner/files/tests/ltp
new file mode 100755
index 0000000..ebdc32f
--- /dev/null
+++ b/recipes-test/systest-runner/files/tests/ltp
@@ -0,0 +1,23 @@
1#!/bin/sh
2
3cd /opt/ltp >/dev/null
4addgroup nobody
5sed -i -e "/mounts | sort -b$/s/$/ | grep -v deleted/" ./testscripts/test_fs_bind.sh
6
7logname=`date +"%Y_%m_%d_%H_%M_%S"`".log"
8./runltp -p -d /tmp -l $logname
9
10if [ ! -d ./results ]; then
11 echo "FAIL: no result found"
12 exit 1
13fi
14
15cat ./results/$logname | while read line
16do
17 resultLine=`echo $line | grep -c -E "PASS|FAIL"`
18 if [ $resultLine -eq 1 ]; then
19 testcase=`echo $line | awk '{print $1}'`
20 result=`echo $line | awk '{print $2}'`
21 echo "$result: $testcase"
22 fi
23done
diff --git a/recipes-test/systest-runner/files/tests/perf-network b/recipes-test/systest-runner/files/tests/perf-network
new file mode 100755
index 0000000..28d88d5
--- /dev/null
+++ b/recipes-test/systest-runner/files/tests/perf-network
@@ -0,0 +1,13 @@
1#!/bin/sh
2
3logname=`date +"%Y_%m_%d_%H_%M_%S"`".log"
4perf-networking |tee /tmp/$logname
5
6if grep -Fq "Error:" /tmp/$logname
7then
8 echo "FAIL: Test failed"
9 exit 1
10else
11 echo "PASS: Performed the netperf tests"
12 exit 0
13fi
diff --git a/recipes-test/systest-runner/files/tests/posixtest b/recipes-test/systest-runner/files/tests/posixtest
new file mode 100755
index 0000000..8da0193
--- /dev/null
+++ b/recipes-test/systest-runner/files/tests/posixtest
@@ -0,0 +1,40 @@
1#!/bin/sh
2
3printit() {
4 echo ""
5 sed -i -e "s|FAILED:|FAIL:|g" -e "s|UNRESOLVED:|FAIL:|g" -e "s|UNSUPPORTED:|SKIP:|g" -e "s|UNTESTED:|SKIP:|g" $1
6 cat $1 | while read line
7 do
8 resultLine=`echo $line | grep -c -E "PASS|FAIL"`
9 if [ $resultLine -eq 1 ]; then
10 testcase=`echo $line | awk -F: '{print $1}'`
11 result=`echo $line | awk -F: '{print $3}'`
12 if [ -n "$testcase" ] && [ -n "$result" ]; then
13 echo "$result: $testcase"
14 fi
15 fi
16 done
17}
18
19cd /opt/ltp/testcases/open_posix_testsuite >/dev/null
20
21make test
22
23FILES=$(find . -name "logfile.*-test")
24for f in $FILES
25do
26 printit $f
27done
28
29printf "\n\nRunning POSIX Option Group Feature Tests"
30printf "----------------------------------------"
31
32./bin/run-all-posix-option-group-tests.sh
33
34FILES=$(find . -name "logfile")
35for f in $FILES
36do
37 printit $f
38done
39
40
diff --git a/recipes-test/systest-runner/systest-runner.bb b/recipes-test/systest-runner/systest-runner.bb
new file mode 100644
index 0000000..01fe054
--- /dev/null
+++ b/recipes-test/systest-runner/systest-runner.bb
@@ -0,0 +1,28 @@
1
2LICENSE = "BSD"
3LIC_FILES_CHKSUM = "file://${COREBASE}/LICENSE;md5=3f40d7994397109285ec7b81fdeb3b58"
4INHIBIT_DEFAULT_DEPS = "1"
5
6SRC_URI = "file://systest-runner \
7 file://tests/ltp \
8 file://tests/perf-network \
9 file://tests/posixtest \
10 "
11
12STEST_PATH="${libdir}/${PN}"
13
14FILES_${PN} +="${STEST_PATH}"
15FILES_${PN} += "${bindir}/systest-runner"
16
17do_install () {
18 install -D ${WORKDIR}/systest-runner ${D}${bindir}/systest-runner
19 install -d ${D}${STEST_PATH}/tests
20 for file in ${WORKDIR}/tests/* ; do
21 install $file ${D}${STEST_PATH}/tests
22 done
23}
24
25do_patch[noexec] = "1"
26do_configure[noexec] = "1"
27do_compile[noexec] = "1"
28do_build[noexec] = "1"