summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorTudor Florea <tudor.florea@enea.com>2014-10-16 02:06:17 +0200
committerTudor Florea <tudor.florea@enea.com>2014-10-16 02:06:17 +0200
commit54eecdabe0cdfdc47d77b3e182fda5899702ded7 (patch)
tree8e28d750773f0aa38f0d2de83109b190faf0b425
downloadmeta-fsl-arm-extra-54eecdabe0cdfdc47d77b3e182fda5899702ded7.tar.gz
initial commit for Enea Linux 4.0-140929daisy-140929
Migrated from the internal git server on the daisy-enea-point-release branch Signed-off-by: Tudor Florea <tudor.florea@enea.com>
-rw-r--r--.gitignore1
-rw-r--r--README37
-rw-r--r--conf/layer.conf12
-rw-r--r--conf/machine/cfa10036.conf7
-rw-r--r--conf/machine/cfa10037.conf10
-rw-r--r--conf/machine/cfa10049.conf12
-rw-r--r--conf/machine/cfa10055.conf12
-rw-r--r--conf/machine/cfa10056.conf12
-rw-r--r--conf/machine/cfa10057.conf12
-rw-r--r--conf/machine/cfa10058.conf12
-rw-r--r--conf/machine/cgtqmx6.conf23
-rw-r--r--conf/machine/cubox-i.conf33
-rw-r--r--conf/machine/imx233-olinuxino-maxi.conf8
-rw-r--r--conf/machine/imx233-olinuxino-micro.conf6
-rw-r--r--conf/machine/imx233-olinuxino-mini.conf6
-rw-r--r--conf/machine/imx233-olinuxino-nano.conf6
-rw-r--r--conf/machine/imx6qsabrelite.conf13
-rw-r--r--conf/machine/include/cfa10036.inc29
-rw-r--r--conf/machine/include/imx233-olinuxino.inc17
-rw-r--r--conf/machine/include/wandboard.inc13
-rw-r--r--conf/machine/m28evk.conf27
-rw-r--r--conf/machine/m53evk.conf28
-rw-r--r--conf/machine/nitrogen6x-lite.conf32
-rw-r--r--conf/machine/nitrogen6x.conf57
-rw-r--r--conf/machine/pcl052.conf22
-rw-r--r--conf/machine/pcm052.conf22
-rw-r--r--conf/machine/quartz.conf23
-rw-r--r--conf/machine/wandboard-dual.conf17
-rw-r--r--conf/machine/wandboard-quad.conf17
-rw-r--r--conf/machine/wandboard-solo.conf13
-rw-r--r--recipes-bsp/barebox/barebox-2013.08.0/cfa10036/defconfig44
-rw-r--r--recipes-bsp/barebox/barebox_2013.08.0.bbappend3
-rw-r--r--recipes-bsp/broadcom-nvram-config/broadcom-nvram-config.bb31
-rw-r--r--recipes-bsp/broadcom-nvram-config/files/LICENCE.broadcom_bcm43xx65
-rw-r--r--recipes-bsp/broadcom-nvram-config/files/nitrogen6x-lite/nvram.txt80
-rw-r--r--recipes-bsp/broadcom-nvram-config/files/wandboard/nvram.txt70
-rw-r--r--recipes-bsp/formfactor/formfactor/cfa10057/machconfig2
-rw-r--r--recipes-bsp/formfactor/formfactor/cfa10058/machconfig2
-rw-r--r--recipes-bsp/formfactor/formfactor_0.0.bbappend1
-rw-r--r--recipes-bsp/imx-bootlets/imx-bootlets/cfa10036-support.patch271
-rw-r--r--recipes-bsp/imx-bootlets/imx-bootlets_10.12.01.bbappend4
-rw-r--r--recipes-bsp/u-boot/u-boot-boundary_git.bb17
-rw-r--r--recipes-bsp/u-boot/u-boot-cubox-i/uEnv.txt1
-rw-r--r--recipes-bsp/u-boot/u-boot-cubox-i_2013.10.bb27
-rw-r--r--recipes-bsp/u-boot/u-boot-imx/cgtqmx6/0001-Add-uboot-support-for-congatec-qmx6-board.patch3932
-rw-r--r--recipes-bsp/u-boot/u-boot-imx_2009.08.bbappend7
-rw-r--r--recipes-bsp/u-boot/u-boot-script-boundary_git.bb68
-rw-r--r--recipes-bsp/u-boot/u-boot-timesys_2011.12.bb24
-rw-r--r--recipes-core/init-ifupdown/init-ifupdown/imx233-olinuxino-maxi/interfaces22
-rw-r--r--recipes-core/init-ifupdown/init-ifupdown_1.0.bbappend1
-rw-r--r--recipes-core/net-persistent-mac/net-persistent-mac.bb23
-rw-r--r--recipes-core/net-persistent-mac/net-persistent-mac/default1
-rw-r--r--recipes-core/net-persistent-mac/net-persistent-mac/imx233-olinuxino-maxi/default1
-rw-r--r--recipes-core/net-persistent-mac/net-persistent-mac/init42
-rw-r--r--recipes-kernel/linux/linux-boundary-3.0.35/0003-ENGR00261814-4-gpu-use-new-PU-power-on-off-interface.patch53
-rw-r--r--recipes-kernel/linux/linux-boundary-3.0.35/ENGR00278350-gpu-viante-4.6.9p13-kernel-part-integra.patch6261
-rw-r--r--recipes-kernel/linux/linux-boundary-3.0.35/drm-vivante-Add-00-sufix-in-returned-bus-Id.patch31
-rw-r--r--recipes-kernel/linux/linux-boundary-3.0.35/nitrogen6x-lite/defconfig262
-rw-r--r--recipes-kernel/linux/linux-boundary-3.0.35/nitrogen6x/defconfig281
-rw-r--r--recipes-kernel/linux/linux-boundary-3.10.17/Fix-imx6qsabrelite-perftop-crash.patch21
-rw-r--r--recipes-kernel/linux/linux-boundary-3.10.17/nitrogen6x-lite/defconfig312
-rw-r--r--recipes-kernel/linux/linux-boundary-3.10.17/nitrogen6x/defconfig325
-rw-r--r--recipes-kernel/linux/linux-boundary_3.0.35.bb17
-rw-r--r--recipes-kernel/linux/linux-boundary_3.10.17.bb19
-rw-r--r--recipes-kernel/linux/linux-cfa-3.10/defconfig170
-rw-r--r--recipes-kernel/linux/linux-cfa-3.12/defconfig169
-rw-r--r--recipes-kernel/linux/linux-cfa.inc29
-rw-r--r--recipes-kernel/linux/linux-cfa_3.10.bb7
-rw-r--r--recipes-kernel/linux/linux-cfa_3.12.bb6
-rw-r--r--recipes-kernel/linux/linux-congatec-3.0.35/0001-Add-linux-support-for-congatec-evaluation-board-qmx6q.patch7213
-rw-r--r--recipes-kernel/linux/linux-congatec-3.0.35/0001-perf-tools-Fix-getrusage-related-build-failure-on-gl.patch43
-rw-r--r--recipes-kernel/linux/linux-congatec-3.0.35/0002-ARM-7668-1-fix-memset-related-crashes-caused-by-rece.patch259
-rw-r--r--recipes-kernel/linux/linux-congatec-3.0.35/0003-ARM-7670-1-fix-the-memset-fix.patch87
-rw-r--r--recipes-kernel/linux/linux-congatec-3.0.35/0004-ENGR00271136-Fix-build-break-when-CONFIG_CLK_DEBUG-i.patch43
-rw-r--r--recipes-kernel/linux/linux-congatec-3.0.35/0005-ENGR00271359-Add-Multi-touch-support.patch98
-rw-r--r--recipes-kernel/linux/linux-congatec-3.0.35/0006-Add-support-for-DVI-monitors.patch227
-rw-r--r--recipes-kernel/linux/linux-congatec-3.0.35/ENGR00278350-gpu-viante-4.6.9p13-kernel-part-integra.patch6261
-rw-r--r--recipes-kernel/linux/linux-congatec-3.0.35/defconfig2684
-rw-r--r--recipes-kernel/linux/linux-congatec-3.0.35/drm-vivante-Add-00-sufix-in-returned-bus-Id.patch31
-rw-r--r--recipes-kernel/linux/linux-congatec-3.0.35/epdc-Rename-mxcfb_epdc_kernel.h-to-mxc_epdc.h.patch143
-rw-r--r--recipes-kernel/linux/linux-congatec_3.0.35.bb26
-rw-r--r--recipes-kernel/linux/linux-cubox-i-3.0.35/0004-ENGR00271136-Fix-build-break-when-CONFIG_CLK_DEBUG-i.patch43
-rw-r--r--recipes-kernel/linux/linux-cubox-i-3.0.35/0005-ENGR00271359-Add-Multi-touch-support.patch98
-rw-r--r--recipes-kernel/linux/linux-cubox-i-3.0.35/0006-Add-support-for-DVI-monitors.patch227
-rw-r--r--recipes-kernel/linux/linux-cubox-i-3.0.35/0007-ARM-mach-mx6-board-mx6q_sabresd-Register-SDHC3-first.patch38
-rw-r--r--recipes-kernel/linux/linux-cubox-i-3.0.35/ENGR00278350-gpu-viante-4.6.9p13-kernel-part-integra.patch6261
-rw-r--r--recipes-kernel/linux/linux-cubox-i-3.0.35/defconfig366
-rw-r--r--recipes-kernel/linux/linux-cubox-i-3.0.35/epdc-Rename-mxcfb_epdc_kernel.h-to-mxc_epdc.h.patch143
-rw-r--r--recipes-kernel/linux/linux-cubox-i-3.0.35/fix-install-breakage-for-fw-images.patch32
-rw-r--r--recipes-kernel/linux/linux-cubox-i-3.0.35/mxc_hdmi-dont-require-cea-mode.patch25
-rw-r--r--recipes-kernel/linux/linux-cubox-i_3.0.35.bb25
-rw-r--r--recipes-kernel/linux/linux-denx.inc22
-rw-r--r--recipes-kernel/linux/linux-denx/m53evk/defconfig290
-rw-r--r--recipes-kernel/linux/linux-denx_3.9.bb10
-rw-r--r--recipes-kernel/linux/linux-timesys-3.0.15/pcl052/defconfig167
-rw-r--r--recipes-kernel/linux/linux-timesys-3.0.15/pcm052/defconfig163
-rw-r--r--recipes-kernel/linux/linux-timesys-3.0.15/quartz/defconfig175
-rw-r--r--recipes-kernel/linux/linux-timesys_3.0.15.bbappend11
-rw-r--r--recipes-kernel/linux/linux-wandboard-3.0.35/0001-ENGR00255688-4.6.9p11.1-gpu-GPU-Kernel-driver-integr.patch1040
-rw-r--r--recipes-kernel/linux/linux-wandboard-3.0.35/0002-ENGR00265465-gpu-Add-global-value-for-minimum-3D-clo.patch62
-rw-r--r--recipes-kernel/linux/linux-wandboard-3.0.35/0003-ENGR00261814-4-gpu-use-new-PU-power-on-off-interface.patch53
-rw-r--r--recipes-kernel/linux/linux-wandboard-3.0.35/0004-ENGR00264288-1-GPU-Integrate-4.6.9p12-release-kernel.patch2006
-rw-r--r--recipes-kernel/linux/linux-wandboard-3.0.35/0005-ENGR00264275-GPU-Correct-suspend-resume-calling-afte.patch61
-rw-r--r--recipes-kernel/linux/linux-wandboard-3.0.35/0006-ENGR00265130-gpu-Correct-section-mismatch-in-gpu-ker.patch60
-rw-r--r--recipes-kernel/linux/linux-wandboard-3.0.35/defconfig242
-rw-r--r--recipes-kernel/linux/linux-wandboard-3.0.35/drm-vivante-Add-00-sufix-in-returned-bus-Id.patch31
-rw-r--r--recipes-kernel/linux/linux-wandboard-3.10.17/defconfig359
-rw-r--r--recipes-kernel/linux/linux-wandboard.inc24
-rw-r--r--recipes-kernel/linux/linux-wandboard_3.0.35.bb20
-rw-r--r--recipes-kernel/linux/linux-wandboard_3.10.17.bb15
110 files changed, 42425 insertions, 0 deletions
diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..b25c15b
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1 @@
*~
diff --git a/README b/README
new file mode 100644
index 0000000..ef42212
--- /dev/null
+++ b/README
@@ -0,0 +1,37 @@
1OpenEmbedded/Yocto BSP layer for Freescale's ARM based platforms
2================================================================
3
4This layer provides support for Freescale's ARM based platforms for
5use with OpenEmbedded and/or Yocto Freescale's BSP layer.
6
7This layer depends on:
8
9URI: git://git.openembedded.org/openembedded-core
10branch: danny
11revision: HEAD
12
13URI: git://git.yoctoproject.org/meta-fsl-arm
14branch: danny
15revision: HEAD
16
17Contributing
18------------
19
20To contribute to this layer you should the patches for review to the
21mailing list.
22
23Mailing list:
24
25 https://lists.yoctoproject.org/listinfo/meta-freescale
26
27Source code:
28
29 https://github.com/Freescale/meta-fsl-arm-extra
30
31When creating a patch of the last commit, use
32
33 git format-patch -s --subject-prefix='meta-fsl-arm-extra][PATCH' -1
34
35To send it to the community, use
36
37 git send-email --to meta-freescale@yoctoproject.org <generated patch>
diff --git a/conf/layer.conf b/conf/layer.conf
new file mode 100644
index 0000000..f581bac
--- /dev/null
+++ b/conf/layer.conf
@@ -0,0 +1,12 @@
1# We have a conf and classes directory, add to BBPATH
2BBPATH .= ":${LAYERDIR}"
3
4# We have a packages directory, add to BBFILES
5BBFILES += "${LAYERDIR}/recipes-*/*/*.bb \
6 ${LAYERDIR}/recipes-*/*/*.bbappend"
7
8BBFILE_COLLECTIONS += "fsl-arm-extra"
9BBFILE_PATTERN_fsl-arm-extra := "^${LAYERDIR}/"
10BBFILE_PRIORITY_fsl-arm-extra = "4"
11
12LAYERDEPENDS_fsl-arm-extra = "core fsl-arm"
diff --git a/conf/machine/cfa10036.conf b/conf/machine/cfa10036.conf
new file mode 100644
index 0000000..c3dc461
--- /dev/null
+++ b/conf/machine/cfa10036.conf
@@ -0,0 +1,7 @@
1#@TYPE: Machine
2#@NAME: Crystalfontz CFA-10036
3#@SOC: i.MX28
4#@DESCRIPTION: Machine configuration for CFA-10036
5#@MAINTAINER: Alexandre Belloni <alexandre.belloni@free-electrons.com>
6
7include conf/machine/include/cfa10036.inc
diff --git a/conf/machine/cfa10037.conf b/conf/machine/cfa10037.conf
new file mode 100644
index 0000000..c453ac5
--- /dev/null
+++ b/conf/machine/cfa10037.conf
@@ -0,0 +1,10 @@
1#@TYPE: Machine
2#@NAME: Crystalfontz CFA-10037
3#@SOC: i.MX28
4#@DESCRIPTION: Machine configuration for CFA-10037
5#@MAINTAINER: Alexandre Belloni <alexandre.belloni@free-electrons.com>
6
7include conf/machine/include/cfa10036.inc
8
9KERNEL_DEVICETREE += "imx28-cfa10037.dtb"
10
diff --git a/conf/machine/cfa10049.conf b/conf/machine/cfa10049.conf
new file mode 100644
index 0000000..7beee20
--- /dev/null
+++ b/conf/machine/cfa10049.conf
@@ -0,0 +1,12 @@
1#@TYPE: Machine
2#@NAME: Crystalfontz CFA-10049
3#@SOC: i.MX28
4#@DESCRIPTION: Machine configuration for CFA-10049
5#@MAINTAINER: Alexandre Belloni <alexandre.belloni@free-electrons.com>
6
7include conf/machine/include/cfa10036.inc
8
9KERNEL_DEVICETREE += "imx28-cfa10049.dtb"
10
11MACHINE_FEATURES += "touchscreen"
12
diff --git a/conf/machine/cfa10055.conf b/conf/machine/cfa10055.conf
new file mode 100644
index 0000000..8aa3d5b
--- /dev/null
+++ b/conf/machine/cfa10055.conf
@@ -0,0 +1,12 @@
1#@TYPE: Machine
2#@NAME: Crystalfontz CFA-10055
3#@SOC: i.MX28
4#@DESCRIPTION: Machine configuration for CFA-10055
5#@MAINTAINER: Alexandre Belloni <alexandre.belloni@free-electrons.com>
6
7include conf/machine/include/cfa10036.inc
8
9KERNEL_DEVICETREE += "imx28-cfa10055.dtb"
10
11MACHINE_FEATURES += "touchscreen"
12
diff --git a/conf/machine/cfa10056.conf b/conf/machine/cfa10056.conf
new file mode 100644
index 0000000..5988db8
--- /dev/null
+++ b/conf/machine/cfa10056.conf
@@ -0,0 +1,12 @@
1#@TYPE: Machine
2#@NAME: Crystalfontz CFA-10056
3#@SOC: i.MX28
4#@DESCRIPTION: Machine configuration for CFA-10056
5#@MAINTAINER: Alexandre Belloni <alexandre.belloni@free-electrons.com>
6
7include conf/machine/include/cfa10036.inc
8
9KERNEL_DEVICETREE += "imx28-cfa10056.dtb"
10
11MACHINE_FEATURES += "screen"
12
diff --git a/conf/machine/cfa10057.conf b/conf/machine/cfa10057.conf
new file mode 100644
index 0000000..f7b8694
--- /dev/null
+++ b/conf/machine/cfa10057.conf
@@ -0,0 +1,12 @@
1#@TYPE: Machine
2#@NAME: Crystalfontz CFA-10057
3#@SOC: i.MX28
4#@DESCRIPTION: Machine configuration for CFA-10057, also called CFA-920
5#@MAINTAINER: Alexandre Belloni <alexandre.belloni@free-electrons.com>
6
7include conf/machine/include/cfa10036.inc
8
9KERNEL_DEVICETREE += "imx28-cfa10057.dtb"
10
11MACHINE_FEATURES += "touchscreen"
12
diff --git a/conf/machine/cfa10058.conf b/conf/machine/cfa10058.conf
new file mode 100644
index 0000000..0a89805
--- /dev/null
+++ b/conf/machine/cfa10058.conf
@@ -0,0 +1,12 @@
1#@TYPE: Machine
2#@NAME: Crystalfontz CFA-10058
3#@SOC: i.MX28
4#@DESCRIPTION: Machine configuration for CFA-10058, also called CFA-921
5#@MAINTAINER: Alexandre Belloni <alexandre.belloni@free-electrons.com>
6
7include conf/machine/include/cfa10036.inc
8
9KERNEL_DEVICETREE += "imx28-cfa10058.dtb"
10
11MACHINE_FEATURES += "touchscreen"
12
diff --git a/conf/machine/cgtqmx6.conf b/conf/machine/cgtqmx6.conf
new file mode 100644
index 0000000..467379a
--- /dev/null
+++ b/conf/machine/cgtqmx6.conf
@@ -0,0 +1,23 @@
1#@TYPE: Machine
2#@NAME: Congatec Qmx6
3#@SOC: i.MX6Q
4#@DESCRIPTION: Machine configuration for Congatec Qmx6 board
5
6include conf/machine/include/imx-base.inc
7include conf/machine/include/tune-cortexa9.inc
8
9SOC_FAMILY = "mx6:mx6q"
10
11# Use u-boot imx
12UBOOT_SUFFIX = "bin"
13UBOOT_PADDING = "2"
14PREFERRED_PROVIDER_u-boot = "u-boot-imx"
15PREFERRED_VERSION_u-boot-imx = "2009.08"
16
17PREFERRED_PROVIDER_virtual/kernel ?= "linux-congatec"
18
19UBOOT_MACHINE = "cgtqmx6_config"
20
21SERIAL_CONSOLE = "115200 ttymxc1"
22
23MACHINE_FEATURES += " pci"
diff --git a/conf/machine/cubox-i.conf b/conf/machine/cubox-i.conf
new file mode 100644
index 0000000..99416c1
--- /dev/null
+++ b/conf/machine/cubox-i.conf
@@ -0,0 +1,33 @@
1#@TYPE: Machine
2#@NAME: SolidRun CuBox-i
3#@SOC: i.MX6 Q/DL
4#@DESCRIPTION: Machine configuration for SolidRun CuBox-i and HummingBoard machines
5#@MAINTAINER: Carlos Rafael Giani <dv@pseudoterminal.org>
6
7# Machine config for the SolidRun CuBox-i and HummingBoard machines.
8# They all use the same machine config, since the u-boot SPL autodetects the
9# machine type upon booting. SOC_FAMILY includes all SoCs from all of these machines
10# to let recipes include firmware etc. for all of these SoCs.
11
12require conf/machine/include/imx-base.inc
13require conf/machine/include/tune-cortexa9.inc
14
15SOC_FAMILY = "mx6:mx6dl:mx6q"
16
17PREFERRED_PROVIDER_u-boot = "u-boot-cubox-i"
18PREFERRED_PROVIDER_virtual/kernel = "linux-cubox-i"
19
20UBOOT_MAKE_TARGET = ""
21UBOOT_SUFFIX = "img"
22UBOOT_ENTRYPOINT = "0x10800000"
23UBOOT_CONFIG ??= "sd"
24UBOOT_CONFIG[sd] = "mx6_cubox-i_config,sdcard"
25UENV_FILENAME = "uEnv-${MACHINE}.txt"
26SPL_BINARY = "SPL"
27
28BOOT_SCRIPTS = "${UENV_FILENAME}:uEnv.txt"
29
30MACHINE_FEATURES += "pci wifi bluetooth alsa bluetooth irda serial usbhost wifi"
31MACHINE_FIRMWARE_append_mx6 = " linux-firmware-ath6k"
32
33SERIAL_CONSOLE = "115200 ttymxc0"
diff --git a/conf/machine/imx233-olinuxino-maxi.conf b/conf/machine/imx233-olinuxino-maxi.conf
new file mode 100644
index 0000000..9f9d42c
--- /dev/null
+++ b/conf/machine/imx233-olinuxino-maxi.conf
@@ -0,0 +1,8 @@
1#@TYPE: Machine
2#@NAME: OLIMEX iMX233-OLinuXino-Maxi
3#@SOC: i.MX23
4#@DESCRIPTION: Machine configuration for OLIMEX iMX233-OLinuXino-Maxi
5
6include conf/machine/include/imx233-olinuxino.inc
7
8MACHINE_ESSENTIAL_EXTRA_RDEPENDS += "net-persistent-mac"
diff --git a/conf/machine/imx233-olinuxino-micro.conf b/conf/machine/imx233-olinuxino-micro.conf
new file mode 100644
index 0000000..01677cc
--- /dev/null
+++ b/conf/machine/imx233-olinuxino-micro.conf
@@ -0,0 +1,6 @@
1#@TYPE: Machine
2#@NAME: OLIMEX iMX233-OLinuXino-Micro
3#@SOC: i.MX23
4#@DESCRIPTION: Machine configuration for OLIMEX iMX233-OLinuXino-Micro
5
6include conf/machine/include/imx233-olinuxino.inc
diff --git a/conf/machine/imx233-olinuxino-mini.conf b/conf/machine/imx233-olinuxino-mini.conf
new file mode 100644
index 0000000..ad06263
--- /dev/null
+++ b/conf/machine/imx233-olinuxino-mini.conf
@@ -0,0 +1,6 @@
1#@TYPE: Machine
2#@NAME: OLIMEX iMX233-OLinuXino-Mini
3#@SOC: i.MX23
4#@DESCRIPTION: Machine configuration for OLIMEX iMX233-OLinuXino-Mini
5
6include conf/machine/include/imx233-olinuxino.inc
diff --git a/conf/machine/imx233-olinuxino-nano.conf b/conf/machine/imx233-olinuxino-nano.conf
new file mode 100644
index 0000000..0627899
--- /dev/null
+++ b/conf/machine/imx233-olinuxino-nano.conf
@@ -0,0 +1,6 @@
1#@TYPE: Machine
2#@NAME: OLIMEX iMX233-OLinuXino-Nano
3#@SOC: i.MX23
4#@DESCRIPTION: Machine configuration for OLIMEX iMX233-OLinuXino-Nano
5
6include conf/machine/include/imx233-olinuxino.inc
diff --git a/conf/machine/imx6qsabrelite.conf b/conf/machine/imx6qsabrelite.conf
new file mode 100644
index 0000000..c6bd735
--- /dev/null
+++ b/conf/machine/imx6qsabrelite.conf
@@ -0,0 +1,13 @@
1#@TYPE: Machine
2#@NAME: Boundary Devices i.MX6Q SABRE Lite
3#@SOC: i.MX6Q
4#@DESCRIPTION: Machine configuration for Boundary Devices i.MX6Q SABRE Lite
5#@MAINTAINER: Eric Nelson <eric.nelson@boundarydevices.com>
6
7# WARNING: This board now use the *same* code as Nitrogen6X and it
8# boots from internal SPI NOR memory. If you did change it to boot
9# from the MMC (SD3 or SD4) please check the Boundary's blog post
10# at: http://boundarydevices.com/u-boot-on-i-mx6/#unbricking
11
12MACHINEOVERRIDES = "nitrogen6x:${MACHINE}"
13include conf/machine/nitrogen6x.conf
diff --git a/conf/machine/include/cfa10036.inc b/conf/machine/include/cfa10036.inc
new file mode 100644
index 0000000..535b07c
--- /dev/null
+++ b/conf/machine/include/cfa10036.inc
@@ -0,0 +1,29 @@
1# Common definitions for cfa-10036 boards
2
3include conf/machine/include/mxs-base.inc
4
5SOC_FAMILY = "mxs:mx28:cfa10036"
6
7PREFERRED_PROVIDER_virtual/kernel ?= "linux-cfa"
8
9IMAGE_BOOTLOADER = "barebox"
10BAREBOX_BINARY = "barebox"
11
12IMXBOOTLETS_MACHINE = "cfa10036"
13
14KERNEL_IMAGETYPE = "zImage"
15KERNEL_DEVICETREE = "imx28-cfa10036.dtb"
16
17# we need the kernel to be installed in the final image
18IMAGE_INSTALL_append = " kernel-image kernel-devicetree"
19
20SDCARD_ROOTFS ?= "${DEPLOY_DIR_IMAGE}/${IMAGE_NAME}.rootfs.ext3"
21IMAGE_FSTYPES ?= "tar.bz2 ext3 barebox.mxsboot-sdcard sdcard"
22
23SERIAL_CONSOLE = "115200 ttyAMA0"
24
25MACHINE_FEATURES = "usbgadget usbhost vfat"
26
27# Overrides due use of non-FSL kernel
28PREFERRED_VERSION_imx-test = "00.00.00"
29MACHINE_GSTREAMER_PLUGIN_cfa10036 = ""
diff --git a/conf/machine/include/imx233-olinuxino.inc b/conf/machine/include/imx233-olinuxino.inc
new file mode 100644
index 0000000..c0b400b
--- /dev/null
+++ b/conf/machine/include/imx233-olinuxino.inc
@@ -0,0 +1,17 @@
1# Common definitions to all iMX233-OlinuXino variants
2
3include conf/machine/include/mxs-base.inc
4
5IMXBOOTLETS_MACHINE = "stmp378x_dev"
6UBOOT_MACHINE = "mx23_olinuxino_config"
7
8# Add a override for all iMX233-OLinuXino variants
9SOC_FAMILY = "mxs:mx23:imx233-olinuxino"
10
11KERNEL_IMAGETYPE = "uImage"
12KERNEL_DEVICETREE = "imx23-olinuxino.dtb"
13
14SDCARD_ROOTFS ?= "${DEPLOY_DIR_IMAGE}/${IMAGE_NAME}.rootfs.ext3"
15IMAGE_FSTYPES ?= "tar.bz2 ext3 uboot.mxsboot-sdcard sdcard"
16
17MACHINE_FEATURES = "apm usbgadget usbhost vfat alsa"
diff --git a/conf/machine/include/wandboard.inc b/conf/machine/include/wandboard.inc
new file mode 100644
index 0000000..d8a0348
--- /dev/null
+++ b/conf/machine/include/wandboard.inc
@@ -0,0 +1,13 @@
1# Common settings for wandboard boards
2
3include conf/machine/include/imx-base.inc
4include conf/machine/include/tune-cortexa9.inc
5
6PREFERRED_PROVIDER_virtual/kernel ?= "linux-wandboard"
7PREFERRED_VERSION_linux-wandboard ?= "3.10.17"
8
9SERIAL_CONSOLE = "115200 ttymxc0"
10
11MACHINE_FEATURES += "pci touchscreen"
12
13KERNEL_IMAGETYPE = "zImage"
diff --git a/conf/machine/m28evk.conf b/conf/machine/m28evk.conf
new file mode 100644
index 0000000..014be18
--- /dev/null
+++ b/conf/machine/m28evk.conf
@@ -0,0 +1,27 @@
1#@TYPE: Machine
2#@NAME: DENX M28 SoM Evaluation Kit
3#@SOC: i.MX28
4#@DESCRIPTION: Machine configuration for DENX M28 SoM Evaluation Kit
5
6include conf/machine/include/mxs-base.inc
7
8SOC_FAMILY = "mxs:mx28"
9
10UBOOT_MACHINE = "m28evk_config"
11
12PREFERRED_PROVIDER_virtual/kernel ?= "linux-fslc"
13KERNEL_IMAGETYPE = "uImage"
14KERNEL_DEVICETREE = "imx28-m28evk.dtb"
15
16SDCARD_ROOTFS ?= "${DEPLOY_DIR_IMAGE}/${IMAGE_NAME}.rootfs.ext3"
17IMAGE_FSTYPES ?= "tar.bz2 ext3 uboot.mxsboot-sdcard sdcard"
18
19SERIAL_CONSOLE = "115200 ttyAMA0"
20
21KERNEL_IMAGETYPE = "uImage"
22
23MACHINE_FEATURES = "apm usbgadget usbhost vfat alsa touchscreen"
24
25# Overrides due use of non-FSL kernel
26PREFERRED_VERSION_imx-test = "00.00.00"
27MACHINE_GSTREAMER_PLUGIN_m28evk = ""
diff --git a/conf/machine/m53evk.conf b/conf/machine/m53evk.conf
new file mode 100644
index 0000000..e49a157
--- /dev/null
+++ b/conf/machine/m53evk.conf
@@ -0,0 +1,28 @@
1#@TYPE: Machine
2#@NAME: DENX M53 SoM Evaluation Kit
3#@SOC: i.MX53
4#@DESCRIPTION: Machine configuration for DENX M53 SoM Evaluation Kit
5
6include conf/machine/include/imx-base.inc
7include conf/machine/include/tune-cortexa8.inc
8
9SOC_FAMILY = "mx5:mx53"
10
11UBOOT_MACHINE = "m53evk_config"
12
13PREFERRED_PROVIDER_virtual/kernel ?= "linux-denx"
14
15KERNEL_IMAGETYPE = "uImage"
16KERNEL_DEVICETREE = "imx53-m53evk.dtb"
17
18SDCARD_ROOTFS ?= "${DEPLOY_DIR_IMAGE}/${IMAGE_NAME}.rootfs.ext3"
19IMAGE_FSTYPES ?= "tar.bz2 ext3 sdcard"
20
21SERIAL_CONSOLE = "115200 ttymxc1"
22
23MACHINE_FEATURES = "apm usbgadget usbhost vfat alsa touchscreen"
24
25# Overrides due use of non-FSL kernel
26PREFERRED_VERSION_imx-test = "00.00.00"
27MACHINE_GSTREAMER_PLUGIN_m53evk = ""
28XSERVER_DRIVER_m53evk = "xf86-video-fbdev"
diff --git a/conf/machine/nitrogen6x-lite.conf b/conf/machine/nitrogen6x-lite.conf
new file mode 100644
index 0000000..de98f39
--- /dev/null
+++ b/conf/machine/nitrogen6x-lite.conf
@@ -0,0 +1,32 @@
1#@TYPE: Machine
2#@NAME: Boundary Devices Nitrogen6X Lite
3#@SOC: i.MX6 Solo
4#@DESCRIPTION: Machine configuration for Boundary Devices Nitrogen6X Lite
5#@MAINTAINER: Eric Nelson <eric.nelson@boundarydevices.com>
6
7include conf/machine/include/imx-base.inc
8include conf/machine/include/tune-cortexa9.inc
9
10SOC_FAMILY = "mx6:mx6dl"
11
12KERNEL_DEVICETREE = "imx6dl-nit6xlite.dtb"
13
14PREFERRED_PROVIDER_u-boot = "u-boot-boundary"
15PREFERRED_PROVIDER_virtual/kernel ?= "linux-boundary"
16PREFERRED_VERSION_linux-boundary ?= "3.10.17"
17
18# Use SPI NOR U-Boot by default
19IMAGE_BOOTLOADER ?= ""
20
21# Ensure boot scripts will be available at rootfs time
22do_rootfs[depends] += "u-boot-script-boundary:do_deploy"
23
24# Boot scripts to install
25BOOT_SCRIPTS = "6x_bootscript-${MACHINE}:6x_bootscript"
26
27UBOOT_MACHINE ?= "nit6xlite_config"
28
29SERIAL_CONSOLE = "115200 ttymxc1"
30
31MACHINE_EXTRA_RRECOMMENDS += " broadcom-nvram-config"
32MACHINE_FEATURES += " pci wifi bluetooth"
diff --git a/conf/machine/nitrogen6x.conf b/conf/machine/nitrogen6x.conf
new file mode 100644
index 0000000..bd18995
--- /dev/null
+++ b/conf/machine/nitrogen6x.conf
@@ -0,0 +1,57 @@
1#@TYPE: Machine
2#@NAME: Boundary Devices Nitrogen6X
3#@SOC: i.MX6Q
4#@DESCRIPTION: Machine configuration for Boundary Devices Nitrogen6X
5#@MAINTAINER: Eric Nelson <eric.nelson@boundarydevices.com>
6#
7# Note that this machine configuration also supports the SABRE Lite
8# reference design and the Nitrogen6X-SOM.
9#
10# By default, this machine will build for the standard Quad-Core, 1GB
11# option.
12#
13# To build U-Boot for other CPU or memory combinations, you can set
14# the UBOOT_MACHINE variable in your local.conf according to the
15# following table:
16#
17# Processor Memory Configuration
18# -------------- ------ --------------------
19# i.MX6Quad/Dual 1GB nitrogen6q_config
20# i.MX6Quad/Dual 2GB nitrogen6q2g_config
21# i.MX6Dual-Lite 1GB nitrogen6dl_config
22# i.MX6Dual-Lite 2GB nitrogen6dl2g_config
23# i.MX6Solo 512MB nitrogen6s_config
24# i.MX6Solo 1GB nitrogen6s1g_config
25#
26# See this blog post for details:
27# http://boundarydevices.com/u-boot-updates-for-i-mx6-single
28#
29#
30
31include conf/machine/include/imx-base.inc
32include conf/machine/include/tune-cortexa9.inc
33
34SOC_FAMILY = "mx6:mx6dl:mx6q"
35
36KERNEL_DEVICETREE = "imx6q-sabrelite.dtb imx6q-nitrogen6x.dtb imx6dl-nitrogen6x.dtb"
37
38PREFERRED_PROVIDER_u-boot = "u-boot-boundary"
39PREFERRED_PROVIDER_virtual/kernel ?= "linux-boundary"
40PREFERRED_VERSION_linux-boundary ?= "3.10.17"
41
42# Use SPI NOR U-Boot by default
43IMAGE_BOOTLOADER ?= ""
44
45# Ensure boot scripts will be available at rootfs time
46do_rootfs[depends] += "u-boot-script-boundary:do_deploy"
47
48# Boot scripts to install
49BOOT_SCRIPTS = "6x_bootscript-${MACHINE}:6x_bootscript"
50
51UBOOT_MACHINE ?= "nitrogen6q_config"
52
53SERIAL_CONSOLE = "115200 ttymxc1"
54
55MACHINE_EXTRA_RRECOMMENDS += "linux-firmware-wl12xx"
56
57MACHINE_FEATURES += " pci wifi bluetooth"
diff --git a/conf/machine/pcl052.conf b/conf/machine/pcl052.conf
new file mode 100644
index 0000000..611e93d
--- /dev/null
+++ b/conf/machine/pcl052.conf
@@ -0,0 +1,22 @@
1#@TYPE: Machine
2#@NAME: Phytec Cosmic Vybrid Development Kit
3#@SOC: vf60
4#@DESCRIPTION: Machine configuration for Phytec Cosmic Vybrid Development Kit
5#@MAINTAINER: Anthony Felice <tony.felice@timesys.com>
6
7include conf/machine/include/imx-base.inc
8include conf/machine/include/tune-cortexa5.inc
9
10SOC_FAMILY = "vf60"
11
12PREFERRED_PROVIDER_virtual/kernel = "linux-timesys"
13PREFERRED_PROVIDER_u-boot = "u-boot-timesys"
14
15UBOOT_MACHINE = "pcl052_config"
16
17SDCARD_ROOTFS ?= "${DEPLOY_DIR_IMAGE}/${IMAGE_NAME}.rootfs.ext3"
18IMAGE_FSTYPES ?= "tar.bz2 ext3 sdcard"
19
20SERIAL_CONSOLE = "115200 ttymxc1"
21
22MACHINE_FEATURES = "apm usbgadget usbhost vfat alsa"
diff --git a/conf/machine/pcm052.conf b/conf/machine/pcm052.conf
new file mode 100644
index 0000000..d86fdb0
--- /dev/null
+++ b/conf/machine/pcm052.conf
@@ -0,0 +1,22 @@
1#@TYPE: Machine
2#@NAME: Phytec phyCORE Vybrid Development Kit
3#@SOC: vf60
4#@DESCRIPTION: Machine configuration for Phytec phyCORE Vybrid Development Kit
5#@MAINTAINER: Anthony Felice <tony.felice@timesys.com>
6
7include conf/machine/include/imx-base.inc
8include conf/machine/include/tune-cortexa5.inc
9
10SOC_FAMILY = "vf60"
11
12PREFERRED_PROVIDER_virtual/kernel = "linux-timesys"
13PREFERRED_PROVIDER_u-boot = "u-boot-timesys"
14
15UBOOT_MACHINE = "pcm052_config"
16
17SDCARD_ROOTFS ?= "${DEPLOY_DIR_IMAGE}/${IMAGE_NAME}.rootfs.ext3"
18IMAGE_FSTYPES ?= "tar.bz2 ext3 sdcard"
19
20SERIAL_CONSOLE = "115200 ttymxc1"
21
22MACHINE_FEATURES = "apm usbgadget usbhost vfat alsa touchscreen"
diff --git a/conf/machine/quartz.conf b/conf/machine/quartz.conf
new file mode 100644
index 0000000..55bd47a
--- /dev/null
+++ b/conf/machine/quartz.conf
@@ -0,0 +1,23 @@
1#@TYPE: Machine
2#@NAME: Device Solutions Quartz Vybrid Development Kit
3#@SOC: vf60
4#@DESCRIPTION: Machine configuration for Device Solutions Quartz Vybrid Development Kit
5#@MAINTAINER: Anthony Felice <tony.felice@timesys.com>
6
7include conf/machine/include/imx-base.inc
8include conf/machine/include/tune-cortexa5.inc
9
10SOC_FAMILY = "vf60"
11
12PREFERRED_PROVIDER_virtual/kernel = "linux-timesys"
13PREFERRED_PROVIDER_u-boot = "u-boot-timesys"
14
15# The quartz_nand_config target supports both SD and NAND boot.
16UBOOT_MACHINE = "quartz_nand_config"
17
18SDCARD_ROOTFS ?= "${DEPLOY_DIR_IMAGE}/${IMAGE_NAME}.rootfs.ext3"
19IMAGE_FSTYPES ?= "tar.bz2 ext3 sdcard"
20
21SERIAL_CONSOLE = "115200 ttymxc0"
22
23MACHINE_FEATURES = "apm usbgadget usbhost vfat alsa touchscreen"
diff --git a/conf/machine/wandboard-dual.conf b/conf/machine/wandboard-dual.conf
new file mode 100644
index 0000000..4f81a2f
--- /dev/null
+++ b/conf/machine/wandboard-dual.conf
@@ -0,0 +1,17 @@
1#@TYPE: Machine
2#@NAME: Wandboard i.MX6 Wandboard Duallite
3#@SOC: i.MX6DL
4#@DESCRIPTION: Machine configuration for i.MX6 Wandboard Duallite
5#@MAINTAINER: John Weber <rjohnweber@gmail.com>
6
7include include/wandboard.inc
8
9SOC_FAMILY = "mx6:mx6dl:wandboard"
10
11UBOOT_MACHINE = "wandboard_dl_config"
12
13KERNEL_DEVICETREE = "imx6dl-wandboard.dtb"
14
15MACHINE_FEATURES += "bluetooth wifi"
16
17MACHINE_EXTRA_RRECOMMENDS += " broadcom-nvram-config"
diff --git a/conf/machine/wandboard-quad.conf b/conf/machine/wandboard-quad.conf
new file mode 100644
index 0000000..133f907
--- /dev/null
+++ b/conf/machine/wandboard-quad.conf
@@ -0,0 +1,17 @@
1#@TYPE: Machine
2#@NAME: Wandboard i.MX6 Wandboard Quad
3#@SOC: i.MX6Q
4#@DESCRIPTION: Machine configuration for i.MX6 Wandboard Quad
5#@MAINTAINER: John Weber <rjohnweber@gmail.com>
6
7include include/wandboard.inc
8
9SOC_FAMILY = "mx6:mx6q:wandboard"
10
11UBOOT_MACHINE = "wandboard_quad_config"
12
13KERNEL_DEVICETREE = "imx6q-wandboard.dtb"
14
15MACHINE_FEATURES += "bluetooth wifi"
16
17MACHINE_EXTRA_RRECOMMENDS += " broadcom-nvram-config"
diff --git a/conf/machine/wandboard-solo.conf b/conf/machine/wandboard-solo.conf
new file mode 100644
index 0000000..c2780bf
--- /dev/null
+++ b/conf/machine/wandboard-solo.conf
@@ -0,0 +1,13 @@
1#@TYPE: Machine
2#@NAME: Wandboard i.MX6 Wandboard Solo
3#@SOC: i.MX6S
4#@DESCRIPTION: Machine configuration for i.MX6 Wandboard Solo
5#@MAINTAINER: John Weber <rjohnweber@gmail.com>
6
7include include/wandboard.inc
8
9SOC_FAMILY = "mx6:mx6dl:wandboard"
10
11UBOOT_MACHINE = "wandboard_solo_config"
12
13KERNEL_DEVICETREE = "imx6dl-wandboard.dtb"
diff --git a/recipes-bsp/barebox/barebox-2013.08.0/cfa10036/defconfig b/recipes-bsp/barebox/barebox-2013.08.0/cfa10036/defconfig
new file mode 100644
index 0000000..277a3ec
--- /dev/null
+++ b/recipes-bsp/barebox/barebox-2013.08.0/cfa10036/defconfig
@@ -0,0 +1,44 @@
1CONFIG_ARCH_MXS=y
2CONFIG_ARCH_IMX28=y
3CONFIG_MACH_CFA10036=y
4CONFIG_AEABI=y
5CONFIG_ARM_OPTIMZED_STRING_FUNCTIONS=y
6CONFIG_MMU=y
7CONFIG_TEXT_BASE=0x43000000
8CONFIG_MALLOC_SIZE=0x800000
9CONFIG_BROKEN=y
10CONFIG_LONGHELP=y
11CONFIG_HUSH_FANCY_PROMPT=y
12CONFIG_CMDLINE_EDITING=y
13CONFIG_AUTO_COMPLETE=y
14CONFIG_CONSOLE_ACTIVATE_ALL=y
15CONFIG_DEFAULT_ENVIRONMENT_GENERIC_NEW=y
16CONFIG_DEFAULT_ENVIRONMENT_PATH="arch/arm/boards/crystalfontz-cfa10036/env"
17CONFIG_DEBUG_INFO=y
18CONFIG_CMD_EDIT=y
19CONFIG_CMD_SLEEP=y
20CONFIG_CMD_SAVEENV=y
21CONFIG_CMD_EXPORT=y
22CONFIG_CMD_PRINTENV=y
23CONFIG_CMD_READLINE=y
24CONFIG_CMD_MENU=y
25CONFIG_CMD_MENU_MANAGEMENT=y
26CONFIG_CMD_ECHO_E=y
27CONFIG_CMD_MTEST=y
28CONFIG_CMD_MTEST_ALTERNATIVE=y
29CONFIG_CMD_BOOTM_SHOW_TYPE=y
30CONFIG_CMD_BOOTM_OFTREE=y
31CONFIG_CMD_RESET=y
32CONFIG_CMD_GO=y
33CONFIG_CMD_OFTREE=y
34CONFIG_CMD_TIMEOUT=y
35CONFIG_CMD_PARTITION=y
36CONFIG_CMD_GPIO=y
37# CONFIG_SPI is not set
38CONFIG_I2C=y
39CONFIG_MCI=y
40CONFIG_MCI_STARTUP=y
41CONFIG_MCI_MXS=y
42CONFIG_FS_EXT4=y
43CONFIG_FS_FAT=y
44CONFIG_FS_FAT_LFN=y
diff --git a/recipes-bsp/barebox/barebox_2013.08.0.bbappend b/recipes-bsp/barebox/barebox_2013.08.0.bbappend
new file mode 100644
index 0000000..fe82579
--- /dev/null
+++ b/recipes-bsp/barebox/barebox_2013.08.0.bbappend
@@ -0,0 +1,3 @@
1FILESEXTRAPATHS_prepend := "${THISDIR}/${PN}-${PV}:"
2
3COMPATIBLE_MACHINE_cfa10036 = "cfa10036"
diff --git a/recipes-bsp/broadcom-nvram-config/broadcom-nvram-config.bb b/recipes-bsp/broadcom-nvram-config/broadcom-nvram-config.bb
new file mode 100644
index 0000000..501cc20
--- /dev/null
+++ b/recipes-bsp/broadcom-nvram-config/broadcom-nvram-config.bb
@@ -0,0 +1,31 @@
1DESCRIPTION = "Nvram support for Broadcom wifi chips"
2SECTION = "kernel"
3
4LICENSE = "Proprietary"
5LIC_FILES_CHKSUM = "file://LICENCE.broadcom_bcm43xx;md5=3160c14df7228891b868060e1951dfbc"
6
7SRC_URI = " \
8 file://nvram.txt \
9 file://LICENCE.broadcom_bcm43xx \
10"
11
12S="${WORKDIR}"
13
14do_install() {
15 install -d ${D}/lib/firmware/brcm
16
17 cp -r ${WORKDIR}/nvram.txt \
18 ${D}/lib/firmware/brcm/brcmfmac-sdio.txt
19}
20
21FILES_${PN} = " \
22 /lib/firmware/brcm/brcmfmac-sdio.txt \
23"
24BROADCOM_FIRMWARE = "INVALID"
25BROADCOM_FIRMWARE_nitrogen6x-lite = "bcm4330"
26BROADCOM_FIRMWARE_wandboard-dual = "bcm4329"
27BROADCOM_FIRMWARE_wandboard-quad = "bcm4329"
28
29RDEPENDS_${PN} = "linux-firmware-${BROADCOM_FIRMWARE}"
30
31COMPATIBLE_MACHINE = "(nitrogen6x-lite|wandboard-dual|wandboard-quad)"
diff --git a/recipes-bsp/broadcom-nvram-config/files/LICENCE.broadcom_bcm43xx b/recipes-bsp/broadcom-nvram-config/files/LICENCE.broadcom_bcm43xx
new file mode 100644
index 0000000..ff26fdd
--- /dev/null
+++ b/recipes-bsp/broadcom-nvram-config/files/LICENCE.broadcom_bcm43xx
@@ -0,0 +1,65 @@
1SOFTWARE LICENSE AGREEMENT
2
3The accompanying software in binary code form (“Software”), is licensed to you,
4or, if you are accepting on behalf of an entity, the entity and its affiliates
5exercising rights hereunder (“Licensee”) subject to the terms of this software
6license agreement (“Agreement”), unless Licensee and Broadcom Corporation
7(“Broadcom”) execute a separate written software license agreement governing
8use of the Software. ANY USE, REPRODUCTION, OR DISTRIBUTION OF THE SOFTWARE
9CONSTITUTES LICENSEE’S ACCEPTANCE OF THIS AGREEMENT.
10
111. License. Subject to the terms and conditions of this Agreement,
12Broadcom hereby grants to Licensee a limited, non-exclusive, non-transferable,
13royalty-free license: (i) to use and integrate the Software with any other
14software; and (ii) to reproduce and distribute the Software complete,
15unmodified, and as provided by Broadcom, solely for use with Broadcom
16proprietary integrated circuit product(s) sold by Broadcom with which the
17Software was designed to be used, or their successors.
18
192. Restrictions. Licensee shall distribute Software with a copy of this
20Agreement. Licensee shall not remove, efface or obscure any copyright or
21trademark notices from the Software. Reproductions of the Broadcom copyright
22notice shall be included with each copy of the Software, except where such
23Software is embedded in a manner not readily accessible to the end user.
24Licensee shall not: (i) use, license, sell or otherwise distribute the Software
25except as provided in this Agreement; (ii) attempt to modify in any way,
26reverse engineer, decompile or disassemble any portion of the Software; or
27(iii) use the Software or other material in violation of any applicable law or
28regulation, including but not limited to any regulatory agency. This Agreement
29shall automatically terminate upon Licensee’s failure to comply with any of the
30terms of this Agreement. In such event, Licensee will destroy all copies of the
31Software and its component parts.
32
333. Ownership. The Software is licensed and not sold. Title to and
34ownership of the Software, including all intellectual property rights thereto,
35and any portion thereof remain with Broadcom or its licensors. Licensee hereby
36covenants that it will not assert any claim that the Software created by or for
37Broadcom infringe any intellectual property right owned or controlled by
38Licensee.
39
404. Disclaimer. THE SOFTWARE IS OFFERED “AS IS,” AND BROADCOM PROVIDES AND
41GRANTS AND LICENSEE RECEIVES NO SUPPORT AND NO WARRANTIES OF ANY KIND, EXPRESS
42OR IMPLIED, BY STATUTE, COMMUNICATION OR CONDUCT WITH LICENSEE, OR OTHERWISE.
43BROADCOM SPECIFICALLY DISCLAIMS ANY IMPLIED WARRANTIES OF MERCHANTABILITY,
44FITNESS FOR A SPECIFIC PURPOSE, OR NONINFRINGEMENT CONCERNING THE SOFTWARE OR
45ANY UPGRADES TO OR DOCUMENTATION FOR THE SOFTWARE. WITHOUT LIMITATION OF THE
46ABOVE, BROADCOM GRANTS NO WARRANTY THAT THE SOFTWARE IS ERROR-FREE OR WILL
47OPERATE WITHOUT INTERRUPTION, AND GRANTS NO WARRANTY REGARDING ITS USE OR THE
48RESULTS THEREFROM INCLUDING, WITHOUT LIMITATION, ITS CORRECTNESS, ACCURACY, OR
49RELIABILITY. TO THE MAXIMUM EXTENT PERMITTED BY LAW, IN NO EVENT SHALL BROADCOM
50OR ANY OF ITS LICENSORS HAVE ANY LIABILITY FOR ANY DIRECT, INDIRECT,
51INCIDENTAL, SPECIAL, OR CONSEQUENTIAL DAMAGES, HOWEVER CAUSED AND ON ANY THEORY
52OF LIABILITY, WHETHER FOR BREACH OF CONTRACT, TORT (INCLUDING NEGLIGENCE) OR
53OTHERWISE, ARISING OUT OF THIS AGREEMENT OR USE, REPRODUCTION, OR DISTRIBUTION
54OF THE SOFTWARE, INCLUDING BUT NOT LIMITED TO LOSS OF DATA AND LOSS OF PROFITS,
55EVEN IF SUCH PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. THESE
56LIMITATIONS SHALL APPLY NOTWITHSTANDING ANY FAILURE OF ESSENTIAL PURPOSE OF ANY
57LIMITED REMEDY.
58
595. Export Laws. LICENSEE UNDERSTANDS AND AGREES THAT THE SOFTWARE IS
60SUBJECT TO UNITED STATES AND OTHER APPLICABLE EXPORT-RELATED LAWS AND
61REGULATIONS AND THAT LICENSEE MAY NOT EXPORT, RE-EXPORT OR TRANSFER THE
62SOFTWARE OR ANY DIRECT PRODUCT OF THE SOFTWARE EXCEPT AS PERMITTED UNDER THOSE
63LAWS. WITHOUT LIMITING THE FOREGOING, EXPORT, RE-EXPORT, OR TRANSFER OF THE
64SOFTWARE TO CUBA, IRAN, NORTH KOREA, SUDAN, AND SYRIA IS PROHIBITED.
65
diff --git a/recipes-bsp/broadcom-nvram-config/files/nitrogen6x-lite/nvram.txt b/recipes-bsp/broadcom-nvram-config/files/nitrogen6x-lite/nvram.txt
new file mode 100644
index 0000000..6183cca
--- /dev/null
+++ b/recipes-bsp/broadcom-nvram-config/files/nitrogen6x-lite/nvram.txt
@@ -0,0 +1,80 @@
1#
2# Board configuration for Boundary Devices Nitrogen6-Lite
3#
4manfid=0x2d0
5prodid=0x0547
6vendid=0x14e4
7devid=0x4360
8boardtype=0x05e1
9boardrev=0x1202
10boardflags=0x0080200
11nocrc=1
12xtalfreq=37400
13boardnum=22
14ag0=254
15aa2g=1
16ccode=ALL
17pa0itssit=0x20
18pa0b0=5367
19pa0b1=-633
20pa0b2=-158
21rssismf2g=0xa
22rssismc2g=0x3
23rssisav2g=0x7
24#rssi params for 5GHz
25rssismf5g=0x4
26rssismc5g=0x3
27rssisav5g=0x7
28#PA parameters for lower a-band
29pa1lob0=4378
30pa1lob1=-596
31pa1lob2=-180
32#PA parameters for midband
33pa1b0=4672
34pa1b1=-603
35pa1b2=-172
36#PA parameters for high band
37pa1hib0=4752
38pa1hib1=-609
39pa1hib2=-173
40rxpo5g=0
41maxp2ga0=76
42maxp5ga0=0x42
43maxp5gla0=0x42
44maxp5gha0=0x42
45# 2.4G Tx Power offsets
46cck2gpo=0x4444
47ofdm2gpo=0x66666666
48mcs2gpo0=0x8888
49mcs2gpo1=0x8888
50# 5G Tx Power offsets
51ofdm5gpo=0x44444444
52ofdm5glpo=0x44444444
53ofdm5ghpo=0x44444444
54mcs5gpo0=0x6666
55mcs5gpo1=0x6666
56mcs5glpo0=0x6666
57mcs5glpo1=0x6666
58mcs5ghpo0=0x6666
59mcs5ghpo1=0x46666
60sromrev=3
61# il0macaddr=00:90:4c:c5:12:38
62wl0id=0x431b
63cckPwrOffset=4
64swctrlmap_2g=0x44844484,0x42824282,0x40804484,0x18282,0x1ff
65triso5g=0
66swctrlmap_5g=0x00100010,0x20202020,0x20202020,0x14202,0x0f0
67rfreg033=0x19
68rfreg033_cck=0x1f
69dacrate2g=160
70dacrate5g=160
71txalpfbyp2g=1
72bphyscale=17
73cckPwrIdxCorr=-15
74pacalidx2g=50
75#pacalidx5g=20
76noise_cal_ref_2g=53
77noise_cal_po_2g=0
78noise_cal_ref_5g=52
79noise_cal_po_5g=5,0,0
80
diff --git a/recipes-bsp/broadcom-nvram-config/files/wandboard/nvram.txt b/recipes-bsp/broadcom-nvram-config/files/wandboard/nvram.txt
new file mode 100644
index 0000000..53e4bba
--- /dev/null
+++ b/recipes-bsp/broadcom-nvram-config/files/wandboard/nvram.txt
@@ -0,0 +1,70 @@
1# bcm4329 NVRAM file for Wandboard Dual
2# $Copyright (C) 2008 Broadcom Corporation$
3# $id$
4
5sromrev=3
6vendid=0x14e4
7devid=0x432f
8boardtype=0x53e
9
10boardrev=0x41
11
12#boardflags=0x1200
13boardflags=0x200
14
15# Specify the xtalfreq if it is otherthan 38.4MHz
16xtalfreq=37400
17
18aa2g=3
19aa5g=0
20
21ag0=255
22#tri2g=0x64
23
24# 11g paparams
25pa0b0=5542,5542,5542
26pa0b1=64244,64244,64244
27pa0b2=65202,65202,65202
28
29pa0itssit=62
30pa0maxpwr=74
31opo=0
32mcs2gpo0=0x6666
33mcs2gpo1=0x6666
34
35# 11g rssi params
36rssismf2g=0xa,0xa,0xa
37rssismc2g=0xb,0xb,0xb
38rssisav2g=0x3,0x3,0x3
39bxa2g=0
40
41# country code
42ccode=ALL
43cctl=0x0
44cckdigfilttype=0
45ofdmdigfilttype=1
46
47rxpo2g=0
48
49boardnum=1
50macaddr=00:90:4c:c5:00:34
51
52# xtal pu and pd time control variable
53# pu time is driver default (0x1501)
54#r13t=0x1501
55
56#######
57nocrc=1
58
59#for mfgc
60otpimagesize=182
61
62# sdio extra configs
63hwhdr=0x05ffff031030031003100000
64
65#This generates empty F1, F2 and F3 tuple chains, and may be used if the host SDIO stack does not require the standard tuples.
66#RAW1=80 02 fe ff
67
68#This includes the standard FUNCID and FUNCE tuples in the F1, F2, F3 and common CIS.
69RAW1=80 32 fe 21 02 0c 00 22 2a 01 01 00 00 c5 0 e6 00 00 00 00 00 40 00 00 ff ff 80 00 00 00 00 00 00 00 00 00 00 c8 00 00 00 00 00 00 00 00 00 00 00 00 00 ff 20 04 D0 2 29 43 21 02 0c 00 22 04 00 20 00 5A
70nvramver=4.218.214.0
diff --git a/recipes-bsp/formfactor/formfactor/cfa10057/machconfig b/recipes-bsp/formfactor/formfactor/cfa10057/machconfig
new file mode 100644
index 0000000..b69ddd2
--- /dev/null
+++ b/recipes-bsp/formfactor/formfactor/cfa10057/machconfig
@@ -0,0 +1,2 @@
1# Display options
2HAVE_TOUCHSCREEN=1
diff --git a/recipes-bsp/formfactor/formfactor/cfa10058/machconfig b/recipes-bsp/formfactor/formfactor/cfa10058/machconfig
new file mode 100644
index 0000000..b69ddd2
--- /dev/null
+++ b/recipes-bsp/formfactor/formfactor/cfa10058/machconfig
@@ -0,0 +1,2 @@
1# Display options
2HAVE_TOUCHSCREEN=1
diff --git a/recipes-bsp/formfactor/formfactor_0.0.bbappend b/recipes-bsp/formfactor/formfactor_0.0.bbappend
new file mode 100644
index 0000000..72d991c
--- /dev/null
+++ b/recipes-bsp/formfactor/formfactor_0.0.bbappend
@@ -0,0 +1 @@
FILESEXTRAPATHS_prepend := "${THISDIR}/${PN}:"
diff --git a/recipes-bsp/imx-bootlets/imx-bootlets/cfa10036-support.patch b/recipes-bsp/imx-bootlets/imx-bootlets/cfa10036-support.patch
new file mode 100644
index 0000000..9483af4
--- /dev/null
+++ b/recipes-bsp/imx-bootlets/imx-bootlets/cfa10036-support.patch
@@ -0,0 +1,271 @@
1Add cfa10036 support
2
3Signed-off-by: Alexandre Belloni <alexandre.belloni@free-electrons.com>
4
5diff --git a/Makefile b/Makefile
6index 367738c..a9c5d21 100644
7--- a/Makefile
8+++ b/Makefile
9@@ -16,6 +16,9 @@ endif
10 ifeq ($(BOARD), iMX28_EVK)
11 ARCH = mx28
12 endif
13+ifeq ($(BOARD), cfa10036)
14+ARCH = mx28
15+endif
16
17 all: build_prep gen_bootstream
18
19diff --git a/boot_prep/Makefile b/boot_prep/Makefile
20index 0267ede..86570fc 100644
21--- a/boot_prep/Makefile
22+++ b/boot_prep/Makefile
23@@ -23,6 +23,30 @@ MEM_TYPE ?= MEM_DDR1
24 CFLAGS = -g -Wall -I$(INCLUDEDIR) -I$(INCLUDEDIR)/mach -I./ -O -D$(MEM_TYPE)
25 LDFLAGS = -static -nostdlib -T $(BOOT_LAYOUT)
26
27+# The board defines STMP CPU family and peripherial components
28+# So, set ARCH and HW_OBJS variables for each supported board
29+# separately.
30+ifeq ($(BOARD), stmp37xx_dev)
31+ARCH = 37xx
32+HW_OBJS = $(LRADC_OBJS)
33+CFLAGS += -DSTMP37XX -DBOARD_STMP37XX_DEV
34+endif
35+ifeq ($(BOARD), stmp378x_dev)
36+ARCH = mx23
37+HW_OBJS = $(LRADC_OBJS)
38+CFLAGS += -DSTMP378X -DBOARD_STMP378X_DEV
39+endif
40+ifeq ($(BOARD), iMX28_EVK)
41+ARCH = mx28
42+HW_OBJS = $(LRADC_OBJS)
43+CFLAGS += -DMX28 -DBOARD_MX28_EVK
44+endif
45+ifeq ($(BOARD), cfa10036)
46+ARCH = mx28
47+HW_OBJS = $(LRADC_OBJS)
48+CFLAGS += -DMX28 -DBOARD_CFA10036
49+endif
50+
51 # Generic code
52 CORE_OBJS = init-$(ARCH).o debug.o
53
54diff --git a/boot_prep/init-mx28.c b/boot_prep/init-mx28.c
55index a1e4752..480a1c2 100644
56--- a/boot_prep/init-mx28.c
57+++ b/boot_prep/init-mx28.c
58@@ -752,17 +752,17 @@ void DDR2EmiController_EDE1116_200MHz(void)
59 DRAM_REG[24] = 0x00000000;
60 DRAM_REG[25] = 0x00000000;
61 DRAM_REG[26] = 0x00010101;
62- DRAM_REG[27] = 0x01010101;
63+ DRAM_REG[27] = 0x01010101; // 0000000 1 0000000 1 0000000 1 0000000 1
64 DRAM_REG[28] = 0x000f0f01;
65- DRAM_REG[29] = 0x0f02020a;
66+ DRAM_REG[29] = 0x0f02010a; // 0000 1111 00000 010 00000 001 0000 1010
67 DRAM_REG[30] = 0x00000000;
68- DRAM_REG[31] = 0x00010101;
69- DRAM_REG[32] = 0x00000100;
70+ DRAM_REG[31] = 0x00010101; // 000000000000000 1(8 banks) 0000000 1 0000000 1
71+ DRAM_REG[32] = 0x00000100; // 0000000000000000 0000000 1(REDUC) 0000000 0(REG_DIMM_ENABLE)
72 DRAM_REG[33] = 0x00000100;
73 DRAM_REG[34] = 0x00000000;
74- DRAM_REG[35] = 0x00000002;
75+ DRAM_REG[35] = 0x00000002; // 000000000000000 0 0000000 0 0000 0010
76 DRAM_REG[36] = 0x01010000;
77- DRAM_REG[37] = 0x07080403;
78+ DRAM_REG[37] = 0x07080503; // 0000 0111 0000 1000 00000 101(CAS5) 0000 0011
79 DRAM_REG[38] = 0x06005003;
80 DRAM_REG[39] = 0x0a0000c8;
81 DRAM_REG[40] = 0x02009c40;
82@@ -1300,12 +1300,54 @@ void poweron_vdda()
83 HW_POWER_VDDACTRL_WR( BF_POWER_VDDACTRL_TRG(0xC) | BF_POWER_VDDACTRL_BO_OFFSET(7)
84 | BF_POWER_VDDACTRL_LINREG_OFFSET(2) );
85 }
86+
87+/*
88+ * Check memory range for valid RAM. A simple memory test determines
89+ * the actually available RAM size between addresses `base' and
90+ * `base + maxsize'.
91+ * Copied and pasted from barebox common/memsize.c file
92+ */
93+long get_ram_size(long *base, long maxsize)
94+{
95+ volatile long *addr;
96+ long cnt;
97+ long val;
98+ long size;
99+ int i = 0;
100+
101+ for (cnt = (maxsize / sizeof (long)) >> 1; cnt > 0; cnt >>= 1) {
102+ addr = base + cnt; /* pointer arith! */
103+ *addr = ~cnt;
104+ }
105+
106+ addr = base;
107+ *addr = 0;
108+
109+ for (cnt = 1; cnt < maxsize / sizeof (long); cnt <<= 1) {
110+ addr = base + cnt; /* pointer arith! */
111+ val = *addr;
112+ if (val != ~cnt) {
113+ size = cnt * sizeof (long);
114+ return (size);
115+ }
116+ }
117+
118+ return (maxsize);
119+}
120+
121 int _start(int arg)
122 {
123 unsigned int value;
124- volatile int *pTest = 0x40000000;
125- int i;
126-
127+ int memsize;
128+
129+#ifdef BOARD_CFA10036
130+ /* Remove all the previous DUART muxing */
131+ HW_PINCTRL_MUXSEL6_CLR((3 << 4) | (3 << 6));
132+ HW_PINCTRL_MUXSEL7_CLR((3 << 0) | (3 << 2));
133+ HW_PINCTRL_MUXSEL7_CLR((3 << 16) | (3 << 18));
134+ /* Mux only the DUART to pins actually used for this function */
135+ HW_PINCTRL_MUXSEL6_SET((2 << 4) | (2 << 6));
136+#else
137 //boot rom wrong use debug uart port.
138 //If fuse burned, the below two line can be removed.
139 HW_PINCTRL_MUXSEL7_CLR(0xF);
140@@ -1315,6 +1357,7 @@ int _start(int arg)
141 * which cause uboot can't input
142 */
143 HW_PINCTRL_MUXSEL7_SET(0x30000);
144+#endif
145
146 #ifdef MEM_MDDR
147 /* set to mddr mode*/
148@@ -1374,28 +1417,8 @@ int _start(int arg)
149
150 change_cpu_freq();
151
152-#if 0
153- for (i = 0; i <= 40; i++) {
154- printf("mem %x - 0x%x\r\n",
155- i, *(volatile int*)(0x800E0000 + i * 4));
156- }
157-#endif
158-
159- /*Test Memory;*/
160- printf("start test memory accress\r\n");
161- printf("ddr2 0x%x\r\n", pTest);
162- for (i = 0; i < 1000; i++)
163- *pTest++ = i;
164-
165- pTest = (volatile int *)0x40000000;
166-
167- for (i = 0; i < 1000; i++) {
168- if (*pTest != (i)) {
169- printf("0x%x error value 0x%x\r\n", i, *pTest);
170- }
171- pTest++;
172- }
173- printf("finish simple test\r\n");
174+ memsize = get_ram_size((long *)0x40000000, 0x10000000);
175+ printf("finish simple test memory size = 0x%xMB\r\n", memsize >> 20);
176 return 0;
177 }
178
179diff --git a/linux_prep/Makefile b/linux_prep/Makefile
180index 19b02a9..b33e4c1 100644
181--- a/linux_prep/Makefile
182+++ b/linux_prep/Makefile
183@@ -69,6 +69,11 @@ ARCH = mx28
184 HW_OBJS = $(LRADC_OBJS)
185 CFLAGS += -DMX28 -DBOARD_MX28_EVK
186 endif
187+ifeq ($(BOARD), cfa10036)
188+ARCH = mx28
189+HW_OBJS = $(LRADC_OBJS)
190+CFLAGS += -DMX28 -DBOARD_CFA10036
191+endif
192
193 # Generic code
194 CORE_OBJS = entry.o resume.o cmdlines.o setup.o keys.o
195diff --git a/linux_prep/board/cfa10036.c b/linux_prep/board/cfa10036.c
196new file mode 100644
197index 0000000..b084ed4
198--- /dev/null
199+++ b/linux_prep/board/cfa10036.c
200@@ -0,0 +1,51 @@
201+/*
202+ * Platform specific data for the STMP37XX development board
203+ *
204+ * Vladislav Buzov <vbuzov@embeddedalley.com>
205+ *
206+ * Copyright 2008 SigmaTel, Inc
207+ * Copyright 2008 Embedded Alley Solutions, Inc
208+ * Copyright 2008-2010 Freescale Semiconductor, Inc. All Rights Reserved.
209+ *
210+ * This file is licensed under the terms of the GNU General Public License
211+ * version 2. This program is licensed "as is" without any warranty of any
212+ * kind, whether express or implied.
213+ */
214+#include <setup.h>
215+#include <keys.h>
216+#include <lradc_buttons.h>
217+
218+/************************************************
219+ * LRADC keyboard data *
220+ ************************************************/
221+int lradc_keypad_ch = LRADC_CH1;
222+int lradc_vddio_ch = LRADC_CH10;
223+
224+struct lradc_keycode lradc_keycodes[] = {
225+ { 100, KEY4 },
226+ { 306, KEY5 },
227+ { 626, KEY6 },
228+ { 932, KEY7 },
229+ { 1260, KEY8 },
230+ { 1584, KEY9 },
231+ { 1757, KEY10 },
232+ { 2207, KEY11 },
233+ { 2525, KEY12 },
234+ { 2831, KEY13 },
235+ { 3134, KEY14 },
236+ { -1, 0 },
237+};
238+
239+/************************************************
240+ * Magic key combinations for Armadillo *
241+ ************************************************/
242+u32 magic_keys[MAGIC_KEY_NR] = {
243+ [MAGIC_KEY1] = KEY4,
244+ [MAGIC_KEY2] = KEY6,
245+ [MAGIC_KEY3] = KEY10,
246+};
247+
248+/************************************************
249+ * Default command line *
250+ ************************************************/
251+char cmdline_def[] = "console=ttyAMA0,115200";
252diff --git a/linux_prep/cmdlines/cfa10036.txt b/linux_prep/cmdlines/cfa10036.txt
253new file mode 100644
254index 0000000..486ffe8
255--- /dev/null
256+++ b/linux_prep/cmdlines/cfa10036.txt
257@@ -0,0 +1 @@
258+console=ttyAMA0,115200 root=/dev/mmcblk0p3 rw rootwait
259diff --git a/linux_prep/include/mx28/platform.h b/linux_prep/include/mx28/platform.h
260index d4063f8..3d1f1d7 100644
261--- a/linux_prep/include/mx28/platform.h
262+++ b/linux_prep/include/mx28/platform.h
263@@ -19,6 +19,8 @@
264
265 #if defined (BOARD_MX28_EVK)
266 #define MACHINE_ID 2531
267+#elif defined (BOARD_CFA10036)
268+#define MACHINE_ID 4142
269 #else
270 #error "Allocate a machine ID for your board"
271 #endif
diff --git a/recipes-bsp/imx-bootlets/imx-bootlets_10.12.01.bbappend b/recipes-bsp/imx-bootlets/imx-bootlets_10.12.01.bbappend
new file mode 100644
index 0000000..1908032
--- /dev/null
+++ b/recipes-bsp/imx-bootlets/imx-bootlets_10.12.01.bbappend
@@ -0,0 +1,4 @@
1FILESEXTRAPATHS_prepend := "${THISDIR}/${PN}:"
2
3SRC_URI_append_cfa10036 = " file://cfa10036-support.patch"
4
diff --git a/recipes-bsp/u-boot/u-boot-boundary_git.bb b/recipes-bsp/u-boot/u-boot-boundary_git.bb
new file mode 100644
index 0000000..382cb4b
--- /dev/null
+++ b/recipes-bsp/u-boot/u-boot-boundary_git.bb
@@ -0,0 +1,17 @@
1require recipes-bsp/u-boot/u-boot.inc
2
3LICENSE = "GPLv2+"
4LIC_FILES_CHKSUM = "file://Licenses/README;md5=025bf9f768cbcb1a165dbe1a110babfb"
5COMPATIBLE_MACHINE = "(imx6qsabrelite|nitrogen6x)"
6
7PROVIDES = "u-boot"
8
9PV = "v2014.04+git${SRCPV}"
10
11SRCREV = "aed9475361820a65e37ed936c833322cbbc0f2b5"
12SRCBRANCH = "v2014.04-20140419"
13SRC_URI = "git://github.com/boundarydevices/u-boot-imx6.git;branch=${SRCBRANCH}"
14
15S = "${WORKDIR}/git"
16
17PACKAGE_ARCH = "${MACHINE_ARCH}"
diff --git a/recipes-bsp/u-boot/u-boot-cubox-i/uEnv.txt b/recipes-bsp/u-boot/u-boot-cubox-i/uEnv.txt
new file mode 100644
index 0000000..3ae0863
--- /dev/null
+++ b/recipes-bsp/u-boot/u-boot-cubox-i/uEnv.txt
@@ -0,0 +1 @@
mmcargs=setenv bootargs console=${console},${baudrate} root=${mmcroot} video=mxcfb0:dev=hdmi,1920x1080M@60,if=RGB24,bpp=32
diff --git a/recipes-bsp/u-boot/u-boot-cubox-i_2013.10.bb b/recipes-bsp/u-boot/u-boot-cubox-i_2013.10.bb
new file mode 100644
index 0000000..1a4593c
--- /dev/null
+++ b/recipes-bsp/u-boot/u-boot-cubox-i_2013.10.bb
@@ -0,0 +1,27 @@
1require recipes-bsp/u-boot/u-boot.inc
2
3LICENSE = "GPLv2+"
4LIC_FILES_CHKSUM = "file://Licenses/README;md5=bc069111b5e5b1ed8bed98ae73b596ec"
5
6PROVIDES += "u-boot"
7
8PV = "v2013.10+git${SRCPV}"
9
10SRCREV = "e313a3a86ee97d5e3c3d9667c951775159f595b8"
11SRC_URI = " \
12 git://github.com/SolidRun/u-boot-imx6.git;branch=imx6 \
13 file://uEnv.txt \
14 "
15
16S = "${WORKDIR}/git"
17
18UENV_FILENAME ?= "uEnv-${MACHINE}.txt"
19
20deploy_uenv () {
21 install ${WORKDIR}/uEnv.txt ${DEPLOYDIR}/${UENV_FILENAME}
22}
23
24do_deploy[postfuncs] += "deploy_uenv"
25
26PACKAGE_ARCH = "${MACHINE_ARCH}"
27COMPATIBLE_MACHINE = "cubox-i"
diff --git a/recipes-bsp/u-boot/u-boot-imx/cgtqmx6/0001-Add-uboot-support-for-congatec-qmx6-board.patch b/recipes-bsp/u-boot/u-boot-imx/cgtqmx6/0001-Add-uboot-support-for-congatec-qmx6-board.patch
new file mode 100644
index 0000000..c8dceb2
--- /dev/null
+++ b/recipes-bsp/u-boot/u-boot-imx/cgtqmx6/0001-Add-uboot-support-for-congatec-qmx6-board.patch
@@ -0,0 +1,3932 @@
1From a58f89ba75334edcb1759fa174a4d56afe1b55ce Mon Sep 17 00:00:00 2001
2From: Leo Sartre <lsartre@adeneo-embedded.com>
3Date: Wed, 29 May 2013 11:03:07 +0200
4Subject: [PATCH] Add support for congatec qmx6 board
5
6Add support for the Congatec Qseven evaluation board, the patch was
7originally written by Congatec Team, some minor changes and cleanup
8were applied to make it work with the new Freescale BSP 4.0.
9---
10 Makefile | 10 +
11 board/freescale/cgt_qmx6/Makefile | 51 +
12 board/freescale/cgt_qmx6/cgt_qmx6.c | 1726 ++++++++++++++++++++++
13 board/freescale/cgt_qmx6/config.mk | 7 +
14 board/freescale/cgt_qmx6/flash_header.S | 202 +++
15 board/freescale/cgt_qmx6/flash_header_pn016101.S | 202 +++
16 board/freescale/cgt_qmx6/flash_header_pn016104.S | 202 +++
17 board/freescale/cgt_qmx6/lowlevel_init.S | 167 +++
18 board/freescale/cgt_qmx6/u-boot.lds | 74 +
19 common/cmd_mii.c | 17 +
20 drivers/mtd/spi/imx_spi_nor_sst.c | 24 +-
21 include/asm-arm/mach-types.h | 13 +
22 include/configs/cgt_qmx6.h | 364 +++++
23 include/configs/cgt_qmx6_android.h | 360 +++++
24 include/configs/cgt_qmx6_mfg.h | 320 ++++
25 localversion-qmx6 | 1 +
26 16 files changed, 3737 insertions(+), 3 deletions(-)
27 create mode 100644 board/freescale/cgt_qmx6/Makefile
28 create mode 100644 board/freescale/cgt_qmx6/cgt_qmx6.c
29 create mode 100644 board/freescale/cgt_qmx6/config.mk
30 create mode 100644 board/freescale/cgt_qmx6/flash_header.S
31 create mode 100644 board/freescale/cgt_qmx6/flash_header_pn016101.S
32 create mode 100644 board/freescale/cgt_qmx6/flash_header_pn016104.S
33 create mode 100644 board/freescale/cgt_qmx6/lowlevel_init.S
34 create mode 100644 board/freescale/cgt_qmx6/u-boot.lds
35 create mode 100644 include/configs/cgt_qmx6.h
36 create mode 100644 include/configs/cgt_qmx6_android.h
37 create mode 100644 include/configs/cgt_qmx6_mfg.h
38 create mode 100644 localversion-qmx6
39
40diff --git a/Makefile b/Makefile
41index 17c21cd..47e6cbe 100644
42--- a/Makefile
43+++ b/Makefile
44@@ -3205,6 +3205,15 @@ apollon_config : unconfig
45 @$(MKCONFIG) $(@:_config=) arm arm1136 apollon NULL omap24xx
46 @echo "CONFIG_ONENAND_U_BOOT = y" >> $(obj)include/config.mk
47
48+cgt_qmx6_android_config \
49+cgt_qmx6_mfg_config \
50+cgt_qmx6_config : unconfig
51+ @$(MKCONFIG) $(@:_config=) arm arm_cortexa8 cgt_qmx6 freescale mx6
52+ @if [ ! "$(shell sed -n '/^#define CONFIG_QMX6_PN0161/p' include/configs/$(@:_config=).h)" ] ; then \
53+ echo "ERROR: No CONFIG_QMX6_PN0161xx entry found." ; \
54+ echo "Please enable product specific configuration in configuration file!" ; \
55+ fi
56+
57 mx23_evk_config : unconfig
58 @$(MKCONFIG) $(@:_config=) arm arm926ejs mx23_evk freescale mx23
59
60@@ -3838,6 +3847,7 @@ grsim_leon2_config : unconfig
61 #########################################################################
62
63 clean:
64+ @rm -f $(obj)board/freescale/cgt_qmx6/flash_header.S
65 @rm -f $(obj)examples/standalone/82559_eeprom \
66 $(obj)examples/standalone/eepro100_eeprom \
67 $(obj)examples/standalone/hello_world \
68diff --git a/board/freescale/cgt_qmx6/Makefile b/board/freescale/cgt_qmx6/Makefile
69new file mode 100644
70index 0000000..fa5e709
71--- /dev/null
72+++ b/board/freescale/cgt_qmx6/Makefile
73@@ -0,0 +1,51 @@
74+#
75+# (C) Copyright 2011 Freescale Semiconductor, Inc.
76+#
77+# This program is free software; you can redistribute it and/or
78+# modify it under the terms of the GNU General Public License as
79+# published by the Free Software Foundation; either version 2 of
80+# the License, or (at your option) any later version.
81+#
82+# This program is distributed in the hope that it will be useful,
83+# but WITHOUT ANY WARRANTY; without even the implied warranty of
84+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
85+# GNU General Public License for more details.
86+#
87+# You should have received a copy of the GNU General Public License
88+# along with this program; if not, write to the Free Software
89+# Foundation, Inc., 59 Temple Place, Suite 330, Boston,
90+# MA 02111-1307 USA
91+#
92+
93+include $(TOPDIR)/config.mk
94+
95+LIB = $(obj)lib$(BOARD).a
96+
97+COBJS := $(BOARD).o
98+SOBJS := lowlevel_init.o flash_header.o
99+
100+
101+SRCS := $(SOBJS:.o=.S) $(COBJS:.o=.c)
102+OBJS := $(addprefix $(obj),$(COBJS))
103+SOBJS := $(addprefix $(obj),$(SOBJS))
104+
105+$(LIB): $(obj).depend $(OBJS) $(SOBJS)
106+ $(AR) $(ARFLAGS) $@ $(OBJS) $(SOBJS)
107+
108+flash_header.S: flash_header_pn$(CONFIG_QMX6_PN).S
109+ cp flash_header_pn$(CONFIG_QMX6_PN).S flash_header.S
110+
111+clean:
112+ rm -f $(SOBJS) $(OBJS) flash_header.S
113+
114+distclean: clean
115+ rm -f $(LIB) core *.bak .depend
116+
117+#########################################################################
118+
119+# defines $(obj).depend target
120+include $(SRCTREE)/rules.mk
121+
122+sinclude $(obj).depend
123+
124+#########################################################################
125diff --git a/board/freescale/cgt_qmx6/cgt_qmx6.c b/board/freescale/cgt_qmx6/cgt_qmx6.c
126new file mode 100644
127index 0000000..2f47e7e
128--- /dev/null
129+++ b/board/freescale/cgt_qmx6/cgt_qmx6.c
130@@ -0,0 +1,1726 @@
131+/*
132+ * Copyright (C) 2011-2012 Freescale Semiconductor, Inc.
133+ *
134+ * See file CREDITS for list of people who contributed to this
135+ * project.
136+ *
137+ * This program is free software; you can redistribute it and/or
138+ * modify it under the terms of the GNU General Public License as
139+ * published by the Free Software Foundation; either version 2 of
140+ * the License, or (at your option) any later version.
141+ *
142+ * This program is distributed in the hope that it will be useful,
143+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
144+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
145+ * GNU General Public License for more details.
146+ *
147+ * You should have received a copy of the GNU General Public License
148+ * along with this program; if not, write to the Free Software
149+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
150+ * MA 02111-1307 USA
151+ */
152+
153+#include <common.h>
154+#include <asm/io.h>
155+#include <asm/arch/mx6.h>
156+#include <asm/arch/mx6_pins.h>
157+
158+#if defined(CONFIG_SECURE_BOOT)
159+#include <asm/arch/mx6_secure.h>
160+#endif
161+#include <asm/arch/mx6dl_pins.h>
162+#include <asm/arch/iomux-v3.h>
163+#include <asm/arch/regs-anadig.h>
164+#include <asm/errno.h>
165+#ifdef CONFIG_MXC_FEC
166+#include <miiphy.h>
167+#endif
168+#if defined(CONFIG_VIDEO_MX5)
169+#include <asm/imx_pwm.h>
170+#include <linux/list.h>
171+#include <linux/fb.h>
172+#include <linux/mxcfb.h>
173+#include <ipu.h>
174+#include <lcd.h>
175+#endif
176+
177+#ifdef CONFIG_IMX_ECSPI
178+#include <imx_spi.h>
179+#endif
180+
181+#if CONFIG_I2C_MXC
182+#include <i2c.h>
183+#endif
184+
185+#ifdef CONFIG_CMD_MMC
186+#include <mmc.h>
187+#include <fsl_esdhc.h>
188+#endif
189+
190+#ifdef CONFIG_ARCH_MMU
191+#include <asm/mmu.h>
192+#include <asm/arch/mmu.h>
193+#endif
194+
195+#ifdef CONFIG_CMD_CLOCK
196+#include <asm/clock.h>
197+#endif
198+
199+#ifdef CONFIG_CMD_IMXOTP
200+#include <imx_otp.h>
201+#endif
202+
203+#ifdef CONFIG_MXC_GPIO
204+#include <asm/gpio.h>
205+#include <asm/arch/gpio.h>
206+#endif
207+#ifdef CONFIG_ANDROID_RECOVERY
208+#include <recovery.h>
209+#endif
210+
211+#ifdef CONFIG_DWC_AHSATA
212+#include <ahci.h>
213+#endif
214+DECLARE_GLOBAL_DATA_PTR;
215+
216+static enum boot_device boot_dev;
217+
218+void set_gpio_output_val(unsigned base, unsigned mask, unsigned val)
219+{
220+ unsigned reg = readl(base + GPIO_DR);
221+ if (val & 1)
222+ reg |= mask; /* set high */
223+ else
224+ reg &= ~mask; /* clear low */
225+ writel(reg, base + GPIO_DR);
226+
227+ reg = readl(base + GPIO_GDIR);
228+ reg |= mask; /* configure GPIO line as output */
229+ writel(reg, base + GPIO_GDIR);
230+}
231+
232+extern int sata_curr_device;
233+
234+#ifdef CONFIG_VIDEO_MX5
235+extern unsigned char fsl_bmp_reversed_600x400[];
236+extern int fsl_bmp_reversed_600x400_size;
237+extern int g_ipu_hw_rev;
238+
239+#if defined(CONFIG_BMP_8BPP)
240+unsigned short colormap[256];
241+#elif defined(CONFIG_BMP_16BPP)
242+unsigned short colormap[65536];
243+#else
244+unsigned short colormap[16777216];
245+#endif
246+
247+static struct pwm_device pwm0 = {
248+ .pwm_id = 3,
249+ .pwmo_invert = 0,
250+};
251+
252+static int di = 1;
253+
254+extern int ipuv3_fb_init(struct fb_videomode *mode, int di,
255+ int interface_pix_fmt,
256+ ipu_di_clk_parent_t di_clk_parent,
257+ int di_clk_val);
258+
259+static struct fb_videomode lvds_xga = {
260+ "XGA", 60, 1024, 768, 15385, 220, 40, 21, 7, 60, 10,
261+ FB_SYNC_EXT,
262+ FB_VMODE_NONINTERLACED,
263+ 0,
264+};
265+
266+vidinfo_t panel_info;
267+#endif
268+
269+static inline void setup_boot_device(void)
270+{
271+ uint soc_sbmr = readl(SRC_BASE_ADDR + 0x4);
272+ uint bt_mem_ctl = (soc_sbmr & 0x000000FF) >> 4 ;
273+ uint bt_mem_type = (soc_sbmr & 0x00000008) >> 3;
274+
275+ switch (bt_mem_ctl) {
276+ case 0x0:
277+ if (bt_mem_type)
278+ boot_dev = ONE_NAND_BOOT;
279+ else
280+ boot_dev = WEIM_NOR_BOOT;
281+ break;
282+ case 0x2:
283+ boot_dev = SATA_BOOT;
284+ break;
285+ case 0x3:
286+ if (bt_mem_type)
287+ boot_dev = I2C_BOOT;
288+ else
289+ boot_dev = SPI_NOR_BOOT;
290+ break;
291+ case 0x4:
292+ case 0x5:
293+ boot_dev = SD_BOOT;
294+ break;
295+ case 0x6:
296+ case 0x7:
297+ boot_dev = MMC_BOOT;
298+ break;
299+ case 0x8 ... 0xf:
300+ boot_dev = NAND_BOOT;
301+ break;
302+ default:
303+ boot_dev = UNKNOWN_BOOT;
304+ break;
305+ }
306+}
307+
308+enum boot_device get_boot_device(void)
309+{
310+ return boot_dev;
311+}
312+
313+u32 get_board_rev(void)
314+{
315+ return fsl_system_rev;
316+}
317+
318+#ifdef CONFIG_ARCH_MMU
319+void board_mmu_init(void)
320+{
321+ unsigned long ttb_base = PHYS_SDRAM_1 + 0x4000;
322+ unsigned long i;
323+
324+ /*
325+ * Set the TTB register
326+ */
327+ asm volatile ("mcr p15,0,%0,c2,c0,0" : : "r"(ttb_base) /*:*/);
328+
329+ /*
330+ * Set the Domain Access Control Register
331+ */
332+ i = ARM_ACCESS_DACR_DEFAULT;
333+ asm volatile ("mcr p15,0,%0,c3,c0,0" : : "r"(i) /*:*/);
334+
335+ /*
336+ * First clear all TT entries - ie Set them to Faulting
337+ */
338+ memset((void *)ttb_base, 0, ARM_FIRST_LEVEL_PAGE_TABLE_SIZE);
339+ /* Actual Virtual Size Attributes Function */
340+ /* Base Base MB cached? buffered? access permissions */
341+ /* xxx00000 xxx00000 */
342+ X_ARM_MMU_SECTION(0x000, 0x000, 0x001,
343+ ARM_UNCACHEABLE, ARM_UNBUFFERABLE,
344+ ARM_ACCESS_PERM_RW_RW); /* ROM, 1M */
345+ X_ARM_MMU_SECTION(0x001, 0x001, 0x008,
346+ ARM_UNCACHEABLE, ARM_UNBUFFERABLE,
347+ ARM_ACCESS_PERM_RW_RW); /* 8M */
348+ X_ARM_MMU_SECTION(0x009, 0x009, 0x001,
349+ ARM_UNCACHEABLE, ARM_UNBUFFERABLE,
350+ ARM_ACCESS_PERM_RW_RW); /* IRAM */
351+ X_ARM_MMU_SECTION(0x00A, 0x00A, 0x0F6,
352+ ARM_UNCACHEABLE, ARM_UNBUFFERABLE,
353+ ARM_ACCESS_PERM_RW_RW); /* 246M */
354+
355+ #ifdef CONFIG_QMX6_PN016104
356+ /* 2 GB memory starting at 0x10000000, only map 1.875 GB */
357+ X_ARM_MMU_SECTION(0x100, 0x100, 0x780,
358+ ARM_CACHEABLE, ARM_BUFFERABLE,
359+ ARM_ACCESS_PERM_RW_RW);
360+ /* uncached alias of the same 1.875 GB memory */
361+ X_ARM_MMU_SECTION(0x100, 0x880, 0x780,
362+ ARM_UNCACHEABLE, ARM_UNBUFFERABLE,
363+ ARM_ACCESS_PERM_RW_RW);
364+ #endif
365+
366+ #ifdef CONFIG_QMX6_PN016101
367+ /* 1 GB memory starting at 0x10000000, only map 0.875 GB */
368+ X_ARM_MMU_SECTION(0x100, 0x100, 0x380,
369+ ARM_CACHEABLE, ARM_BUFFERABLE,
370+ ARM_ACCESS_PERM_RW_RW);
371+ /* uncached alias of the same 0.875 GB memory */
372+ X_ARM_MMU_SECTION(0x100, 0x880, 0x380,
373+ ARM_UNCACHEABLE, ARM_UNBUFFERABLE,
374+ ARM_ACCESS_PERM_RW_RW);
375+ #endif
376+
377+ /* Enable MMU */
378+ MMU_ON();
379+}
380+#endif
381+
382+#ifdef CONFIG_DWC_AHSATA
383+
384+#define ANATOP_PLL_LOCK 0x80000000
385+#define ANATOP_PLL_ENABLE_MASK 0x00002000
386+#define ANATOP_PLL_BYPASS_MASK 0x00010000
387+#define ANATOP_PLL_LOCK 0x80000000
388+#define ANATOP_PLL_PWDN_MASK 0x00001000
389+#define ANATOP_PLL_HOLD_RING_OFF_MASK 0x00000800
390+#define ANATOP_SATA_CLK_ENABLE_MASK 0x00100000
391+
392+/* Staggered Spin-up */
393+#define HOST_CAP_SSS (1 << 27)
394+/* host version register*/
395+#define HOST_VERSIONR 0xfc
396+#define PORT_SATA_SR 0x128
397+#define PORT_PHY_CTL 0x178
398+#define PORT_PHY_CTL_PDDQ_LOC 0x100000
399+
400+int sata_initialize(void)
401+{
402+ u32 reg = 0;
403+ u32 iterations = 1000000;
404+
405+ if (sata_curr_device == -1) {
406+ /* Make sure that the PDDQ mode is disabled. */
407+ reg = readl(SATA_ARB_BASE_ADDR + PORT_PHY_CTL);
408+ writel(reg & (~PORT_PHY_CTL_PDDQ_LOC),
409+ SATA_ARB_BASE_ADDR + PORT_PHY_CTL);
410+
411+ /* Reset HBA */
412+ writel(HOST_RESET, SATA_ARB_BASE_ADDR + HOST_CTL);
413+
414+ reg = 0;
415+ while (readl(SATA_ARB_BASE_ADDR + HOST_VERSIONR) == 0) {
416+ reg++;
417+ if (reg > 1000000)
418+ break;
419+ }
420+
421+ reg = readl(SATA_ARB_BASE_ADDR + HOST_CAP);
422+ if (!(reg & HOST_CAP_SSS)) {
423+ reg |= HOST_CAP_SSS;
424+ writel(reg, SATA_ARB_BASE_ADDR + HOST_CAP);
425+ }
426+
427+ reg = readl(SATA_ARB_BASE_ADDR + HOST_PORTS_IMPL);
428+ if (!(reg & 0x1))
429+ writel((reg | 0x1),
430+ SATA_ARB_BASE_ADDR + HOST_PORTS_IMPL);
431+
432+ /* Release resources when there is no device on the port */
433+ do {
434+ reg = readl(SATA_ARB_BASE_ADDR + PORT_SATA_SR) & 0xF;
435+ if ((reg & 0xF) == 0)
436+ iterations--;
437+ else
438+ break;
439+
440+ } while (iterations > 0);
441+ }
442+
443+ return __sata_initialize();
444+}
445+
446+int setup_sata(void)
447+{
448+ u32 reg = 0;
449+ s32 timeout = 100000;
450+
451+ /* Enable sata clock */
452+ reg = readl(CCM_BASE_ADDR + 0x7c); /* CCGR5 */
453+ reg |= 0x30;
454+ writel(reg, CCM_BASE_ADDR + 0x7c);
455+
456+ /* Enable PLLs */
457+ reg = readl(ANATOP_BASE_ADDR + 0xe0); /* ENET PLL */
458+ reg &= ~ANATOP_PLL_PWDN_MASK;
459+ writel(reg, ANATOP_BASE_ADDR + 0xe0);
460+ reg |= ANATOP_PLL_ENABLE_MASK;
461+ while (timeout--) {
462+ if (readl(ANATOP_BASE_ADDR + 0xe0) & ANATOP_PLL_LOCK)
463+ break;
464+ }
465+ if (timeout <= 0)
466+ return -1;
467+ reg &= ~ANATOP_PLL_BYPASS_MASK;
468+ writel(reg, ANATOP_BASE_ADDR + 0xe0);
469+ reg |= ANATOP_SATA_CLK_ENABLE_MASK;
470+ writel(reg, ANATOP_BASE_ADDR + 0xe0);
471+
472+ /* Enable sata phy */
473+ reg = readl(IOMUXC_BASE_ADDR + 0x34); /* GPR13 */
474+
475+ reg &= ~0x07ffffff;
476+ /*
477+ * rx_eq_val_0 = 5 [26:24]
478+ * los_lvl = 0x12 [23:19]
479+ * rx_dpll_mode_0 = 0x3 [18:16]
480+ * mpll_ss_en = 0x0 [14]
481+ * tx_atten_0 = 0x4 [13:11]
482+ * tx_boost_0 = 0x0 [10:7]
483+ * tx_lvl = 0x11 [6:2]
484+ * mpll_ck_off_b = 0x1 [1]
485+ * tx_edgerate_0 = 0x0 [0]
486+ * */
487+ reg |= 0x59124c6;
488+ writel(reg, IOMUXC_BASE_ADDR + 0x34);
489+
490+ if (sata_curr_device == -1) {
491+
492+ reg = readl(SATA_ARB_BASE_ADDR + PORT_PHY_CTL);
493+ writel(reg | PORT_PHY_CTL_PDDQ_LOC,
494+ SATA_ARB_BASE_ADDR + PORT_PHY_CTL);
495+ }
496+
497+ return 0;
498+}
499+#endif
500+
501+int dram_init(void)
502+{
503+ /*
504+ * Switch PL301_FAST2 to DDR Dual-channel mapping
505+ * however this block the boot up, temperory redraw
506+ */
507+ /*
508+ * u32 reg = 1;
509+ * writel(reg, GPV0_BASE_ADDR);
510+ */
511+
512+ gd->bd->bi_dram[0].start = PHYS_SDRAM_1;
513+ gd->bd->bi_dram[0].size = PHYS_SDRAM_1_SIZE;
514+
515+ return 0;
516+}
517+
518+static void setup_uart(void)
519+{
520+ /* UART1 & UART2 */
521+#if defined CONFIG_MX6Q
522+#ifndef CONFIG_QMX6_TRACE
523+ mxc_iomux_v3_setup_pad(MX6Q_PAD_CSI0_DAT10__UART1_TXD);
524+ mxc_iomux_v3_setup_pad(MX6Q_PAD_CSI0_DAT11__UART1_RXD);
525+#endif
526+ mxc_iomux_v3_setup_pad(MX6Q_PAD_EIM_D26__UART2_TXD);
527+ mxc_iomux_v3_setup_pad(MX6Q_PAD_EIM_D27__UART2_RXD);
528+#elif defined CONFIG_MX6DL
529+#ifndef CONFIG_QMX6_TRACE
530+ mxc_iomux_v3_setup_pad(MX6DL_PAD_CSI0_DAT10__UART1_TXD);
531+ mxc_iomux_v3_setup_pad(MX6DL_PAD_CSI0_DAT11__UART1_RXD);
532+#endif
533+ mxc_iomux_v3_setup_pad(MX6DL_PAD_EIM_D26__UART2_TXD);
534+ mxc_iomux_v3_setup_pad(MX6DL_PAD_EIM_D27__UART2_RXD);
535+#endif
536+}
537+
538+#ifdef CONFIG_VIDEO_MX5
539+void setup_lvds_poweron(void)
540+{
541+ int reg;
542+ /* enable LVDS VDD */
543+#if defined CONFIG_MX6Q
544+ mxc_iomux_v3_setup_pad(MX6Q_PAD_GPIO_7__GPIO_1_7);
545+#elif defined CONFIG_MX6DL
546+ mxc_iomux_v3_setup_pad(MX6DL_PAD_GPIO_7__GPIO_1_7);
547+#endif
548+ set_gpio_output_val(GPIO1_BASE_ADDR, (1 << 7), 1);
549+}
550+#endif
551+
552+#ifdef CONFIG_I2C_MXC
553+#define I2C1_SDA_GPIO3_28_BIT_MASK (1 << 28)
554+#define I2C1_SCL_GPIO3_21_BIT_MASK (1 << 21)
555+#define I2C2_SCL_GPIO4_12_BIT_MASK (1 << 12)
556+#define I2C2_SDA_GPIO4_13_BIT_MASK (1 << 13)
557+#define I2C3_SCL_GPIO1_3_BIT_MASK (1 << 3)
558+#define I2C3_SDA_GPIO1_6_BIT_MASK (1 << 6)
559+
560+
561+static void setup_i2c(unsigned int module_base)
562+{
563+ unsigned int reg;
564+
565+ switch (module_base) {
566+ case I2C1_BASE_ADDR:
567+ /* i2c1 SDA & CLK */
568+#if defined CONFIG_MX6Q
569+ mxc_iomux_v3_setup_pad(MX6Q_PAD_EIM_D28__I2C1_SDA);
570+ mxc_iomux_v3_setup_pad(MX6Q_PAD_EIM_D21__I2C1_SCL);
571+#elif defined CONFIG_MX6DL
572+ mxc_iomux_v3_setup_pad(MX6DL_PAD_EIM_D28__I2C1_SDA);
573+ mxc_iomux_v3_setup_pad(MX6DL_PAD_EIM_D21__I2C1_SCL);
574+#endif
575+
576+ /* Enable i2c clock */
577+ reg = readl(CCM_BASE_ADDR + CLKCTL_CCGR2);
578+ reg |= 0xC0;
579+ writel(reg, CCM_BASE_ADDR + CLKCTL_CCGR2);
580+ break;
581+
582+ case I2C2_BASE_ADDR:
583+ /* i2c2 SDA & CLK */
584+#if defined CONFIG_MX6Q
585+ mxc_iomux_v3_setup_pad(MX6Q_PAD_KEY_ROW3__I2C2_SDA);
586+ mxc_iomux_v3_setup_pad(MX6Q_PAD_KEY_COL3__I2C2_SCL);
587+#elif defined CONFIG_MX6DL
588+ mxc_iomux_v3_setup_pad(MX6DL_PAD_KEY_ROW3__I2C2_SDA);
589+ mxc_iomux_v3_setup_pad(MX6DL_PAD_KEY_COL3__I2C2_SCL);
590+#endif
591+
592+ /* Enable i2c clock */
593+ reg = readl(CCM_BASE_ADDR + CLKCTL_CCGR2);
594+ reg |= 0x300;
595+ writel(reg, CCM_BASE_ADDR + CLKCTL_CCGR2);
596+ break;
597+
598+ case I2C3_BASE_ADDR:
599+ /* i2c3 SDA & CLK */
600+#if defined CONFIG_MX6Q
601+ mxc_iomux_v3_setup_pad(MX6Q_PAD_GPIO_3__I2C3_SCL);
602+ mxc_iomux_v3_setup_pad(MX6Q_PAD_GPIO_6__I2C3_SDA);
603+#elif defined CONFIG_MX6DL
604+ mxc_iomux_v3_setup_pad(MX6DL_PAD_GPIO_3__I2C3_SCL);
605+ mxc_iomux_v3_setup_pad(MX6DL_PAD_GPIO_6__I2C3_SDA);
606+#endif
607+
608+ /* Enable i2c clock */
609+ reg = readl(CCM_BASE_ADDR + CLKCTL_CCGR2);
610+ reg |= 0xC00;
611+ writel(reg, CCM_BASE_ADDR + CLKCTL_CCGR2);
612+ break;
613+
614+ default:
615+ printf("Invalid I2C base: 0x%x\n", module_base);
616+ break;
617+ }
618+}
619+/* Note: udelay() is not accurate for i2c timing */
620+static void __udelay(int time)
621+{
622+ int i, j;
623+
624+ for (i = 0; i < time; i++) {
625+ for (j = 0; j < 200; j++) {
626+ asm("nop");
627+ asm("nop");
628+ }
629+ }
630+}
631+static void mx6q_i2c_gpio_scl_direction(int bus, int output)
632+{
633+ u32 reg;
634+
635+ switch (bus) {
636+ case 1:
637+#if defined CONFIG_MX6Q
638+ mxc_iomux_v3_setup_pad(MX6Q_PAD_EIM_D21__GPIO_3_21);
639+#elif defined CONFIG_MX6DL
640+ mxc_iomux_v3_setup_pad(MX6DL_PAD_EIM_D21__GPIO_3_21);
641+#endif
642+ reg = readl(GPIO3_BASE_ADDR + GPIO_GDIR);
643+ if (output)
644+ reg |= I2C1_SCL_GPIO3_21_BIT_MASK;
645+ else
646+ reg &= ~I2C1_SCL_GPIO3_21_BIT_MASK;
647+ writel(reg, GPIO3_BASE_ADDR + GPIO_GDIR);
648+ break;
649+
650+ case 2:
651+#if defined CONFIG_MX6Q
652+ mxc_iomux_v3_setup_pad(MX6Q_PAD_KEY_COL3__GPIO_4_12);
653+#elif defined CONFIG_MX6DL
654+ mxc_iomux_v3_setup_pad(MX6DL_PAD_KEY_COL3__GPIO_4_12);
655+#endif
656+ reg = readl(GPIO4_BASE_ADDR + GPIO_GDIR);
657+ if (output)
658+ reg |= I2C2_SCL_GPIO4_12_BIT_MASK;
659+ else
660+ reg &= ~I2C2_SCL_GPIO4_12_BIT_MASK;
661+ writel(reg, GPIO4_BASE_ADDR + GPIO_GDIR);
662+ break;
663+
664+ case 3:
665+#if defined CONFIG_MX6Q
666+ mxc_iomux_v3_setup_pad(MX6Q_PAD_GPIO_3__GPIO_1_3);
667+#elif defined CONFIG_MX6DL
668+ mxc_iomux_v3_setup_pad(MX6DL_PAD_GPIO_3__GPIO_1_3);
669+#endif
670+ reg = readl(GPIO1_BASE_ADDR + GPIO_GDIR);
671+ if (output)
672+ reg |= I2C3_SCL_GPIO1_3_BIT_MASK;
673+ else
674+ reg &= I2C3_SCL_GPIO1_3_BIT_MASK;
675+ writel(reg, GPIO1_BASE_ADDR + GPIO_GDIR);
676+ break;
677+ }
678+}
679+
680+/* set 1 to output, sent 0 to input */
681+static void mx6q_i2c_gpio_sda_direction(int bus, int output)
682+{
683+ u32 reg;
684+
685+ switch (bus) {
686+ case 1:
687+#if defined CONFIG_MX6Q
688+ mxc_iomux_v3_setup_pad(MX6Q_PAD_EIM_D28__GPIO_3_28);
689+#elif defined CONFIG_MX6DL
690+ mxc_iomux_v3_setup_pad(MX6DL_PAD_EIM_D28__GPIO_3_28);
691+#endif
692+ reg = readl(GPIO3_BASE_ADDR + GPIO_GDIR);
693+ if (output)
694+ reg |= I2C1_SDA_GPIO3_28_BIT_MASK;
695+ else
696+ reg &= ~I2C1_SDA_GPIO3_28_BIT_MASK;
697+ writel(reg, GPIO3_BASE_ADDR + GPIO_GDIR);
698+ break;
699+
700+ case 2:
701+#if defined CONFIG_MX6Q
702+ mxc_iomux_v3_setup_pad(MX6Q_PAD_KEY_ROW3__GPIO_4_13);
703+#elif defined CONFIG_MX6DL
704+ mxc_iomux_v3_setup_pad(MX6DL_PAD_KEY_ROW3__GPIO_4_13);
705+#endif
706+ reg = readl(GPIO4_BASE_ADDR + GPIO_GDIR);
707+ if (output)
708+ reg |= I2C2_SDA_GPIO4_13_BIT_MASK;
709+ else
710+ reg &= ~I2C2_SDA_GPIO4_13_BIT_MASK;
711+ writel(reg, GPIO4_BASE_ADDR + GPIO_GDIR);
712+ break;
713+
714+ case 3:
715+#if defined CONFIG_MX6Q
716+ mxc_iomux_v3_setup_pad(MX6Q_PAD_GPIO_6__GPIO_1_6);
717+#elif defined CONFIG_MX6DL
718+ mxc_iomux_v3_setup_pad(MX6DL_PAD_GPIO_6__GPIO_1_6);
719+#endif
720+ reg = readl(GPIO1_BASE_ADDR + GPIO_GDIR);
721+ if (output)
722+ reg |= I2C3_SDA_GPIO1_6_BIT_MASK;
723+ else
724+ reg &= ~I2C3_SDA_GPIO1_6_BIT_MASK;
725+ writel(reg, GPIO1_BASE_ADDR + GPIO_GDIR);
726+ break;
727+
728+ default:
729+ break;
730+ }
731+}
732+
733+/* set 1 to high 0 to low */
734+static void mx6q_i2c_gpio_scl_set_level(int bus, int high)
735+{
736+ u32 reg;
737+
738+ switch (bus) {
739+ case 1:
740+ reg = readl(GPIO3_BASE_ADDR + GPIO_DR);
741+ if (high)
742+ reg |= I2C1_SCL_GPIO3_21_BIT_MASK;
743+ else
744+ reg &= ~I2C1_SCL_GPIO3_21_BIT_MASK;
745+ writel(reg, GPIO3_BASE_ADDR + GPIO_DR);
746+ break;
747+ case 2:
748+ reg = readl(GPIO4_BASE_ADDR + GPIO_DR);
749+ if (high)
750+ reg |= I2C2_SCL_GPIO4_12_BIT_MASK;
751+ else
752+ reg &= ~I2C2_SCL_GPIO4_12_BIT_MASK;
753+ writel(reg, GPIO4_BASE_ADDR + GPIO_DR);
754+ break;
755+ case 3:
756+ reg = readl(GPIO1_BASE_ADDR + GPIO_DR);
757+ if (high)
758+ reg |= I2C3_SCL_GPIO1_3_BIT_MASK;
759+ else
760+ reg &= ~I2C3_SCL_GPIO1_3_BIT_MASK;
761+ writel(reg, GPIO1_BASE_ADDR + GPIO_DR);
762+ break;
763+ }
764+}
765+
766+/* set 1 to high 0 to low */
767+static void mx6q_i2c_gpio_sda_set_level(int bus, int high)
768+{
769+ u32 reg;
770+
771+ switch (bus) {
772+ case 1:
773+ reg = readl(GPIO3_BASE_ADDR + GPIO_DR);
774+ if (high)
775+ reg |= I2C1_SDA_GPIO3_28_BIT_MASK;
776+ else
777+ reg &= ~I2C1_SDA_GPIO3_28_BIT_MASK;
778+ writel(reg, GPIO3_BASE_ADDR + GPIO_DR);
779+ break;
780+ case 2:
781+ reg = readl(GPIO4_BASE_ADDR + GPIO_DR);
782+ if (high)
783+ reg |= I2C2_SDA_GPIO4_13_BIT_MASK;
784+ else
785+ reg &= ~I2C2_SDA_GPIO4_13_BIT_MASK;
786+ writel(reg, GPIO4_BASE_ADDR + GPIO_DR);
787+ break;
788+ case 3:
789+ reg = readl(GPIO1_BASE_ADDR + GPIO_DR);
790+ if (high)
791+ reg |= I2C3_SDA_GPIO1_6_BIT_MASK;
792+ else
793+ reg &= ~I2C3_SDA_GPIO1_6_BIT_MASK;
794+ writel(reg, GPIO1_BASE_ADDR + GPIO_DR);
795+ break;
796+ }
797+}
798+
799+static int mx6q_i2c_gpio_check_sda(int bus)
800+{
801+ u32 reg;
802+ int result = 0;
803+
804+ switch (bus) {
805+ case 1:
806+ reg = readl(GPIO3_BASE_ADDR + GPIO_PSR);
807+ result = !!(reg & I2C1_SDA_GPIO3_28_BIT_MASK);
808+ break;
809+ case 2:
810+ reg = readl(GPIO4_BASE_ADDR + GPIO_PSR);
811+ result = !!(reg & I2C2_SDA_GPIO4_13_BIT_MASK);
812+ break;
813+ case 3:
814+ reg = readl(GPIO1_BASE_ADDR + GPIO_PSR);
815+ result = !!(reg & I2C3_SDA_GPIO1_6_BIT_MASK);
816+ break;
817+ }
818+
819+ return result;
820+}
821+
822+ /* Random reboot cause i2c SDA low issue:
823+ * the i2c bus busy because some device pull down the I2C SDA
824+ * line. This happens when Host is reading some byte from slave, and
825+ * then host is reset/reboot. Since in this case, device is
826+ * controlling i2c SDA line, the only thing host can do this give the
827+ * clock on SCL and sending NAK, and STOP to finish this
828+ * transaction.
829+ *
830+ * How to fix this issue:
831+ * detect if the SDA was low on bus send 8 dummy clock, and 1
832+ * clock + NAK, and STOP to finish i2c transaction the pending
833+ * transfer.
834+ */
835+int i2c_bus_recovery(void)
836+{
837+ int i, bus, result = 0;
838+
839+ for (bus = 1; bus <= 3; bus++) {
840+ mx6q_i2c_gpio_sda_direction(bus, 0);
841+
842+ if (mx6q_i2c_gpio_check_sda(bus) == 0) {
843+ printf("i2c: I2C%d SDA is low, start i2c recovery...\n", bus);
844+ mx6q_i2c_gpio_scl_direction(bus, 1);
845+ mx6q_i2c_gpio_scl_set_level(bus, 1);
846+ __udelay(10000);
847+
848+ for (i = 0; i < 9; i++) {
849+ mx6q_i2c_gpio_scl_set_level(bus, 1);
850+ __udelay(5);
851+ mx6q_i2c_gpio_scl_set_level(bus, 0);
852+ __udelay(5);
853+ }
854+
855+ /* 9th clock here, the slave should already
856+ release the SDA, we can set SDA as high to
857+ a NAK.*/
858+ mx6q_i2c_gpio_sda_direction(bus, 1);
859+ mx6q_i2c_gpio_sda_set_level(bus, 1);
860+ __udelay(1); /* Pull up SDA first */
861+ mx6q_i2c_gpio_scl_set_level(bus, 1);
862+ __udelay(5); /* plus pervious 1 us */
863+ mx6q_i2c_gpio_scl_set_level(bus, 0);
864+ __udelay(5);
865+ mx6q_i2c_gpio_sda_set_level(bus, 0);
866+ __udelay(5);
867+ mx6q_i2c_gpio_scl_set_level(bus, 1);
868+ __udelay(5);
869+ /* Here: SCL is high, and SDA from low to high, it's a
870+ * stop condition */
871+ mx6q_i2c_gpio_sda_set_level(bus, 1);
872+ __udelay(5);
873+
874+ mx6q_i2c_gpio_sda_direction(bus, 0);
875+ if (mx6q_i2c_gpio_check_sda(bus) == 1)
876+ printf("I2C%d Recovery success\n", bus);
877+ else {
878+ printf("I2C%d Recovery failed, I2C1 SDA still low!!!\n", bus);
879+ result |= 1 << bus;
880+ }
881+ }
882+
883+ /* configure back to i2c */
884+ switch (bus) {
885+ case 1:
886+ setup_i2c(I2C1_BASE_ADDR);
887+ break;
888+ case 2:
889+ setup_i2c(I2C2_BASE_ADDR);
890+ break;
891+ case 3:
892+ setup_i2c(I2C3_BASE_ADDR);
893+ break;
894+ }
895+ }
896+
897+ return result;
898+}
899+
900+/* check and set PMIC value */
901+static int setup_pmic_reg(uint addr, uchar val)
902+{
903+ uchar rdval;
904+
905+ if (i2c_read(0x8, addr, 1, &rdval, 1)) {
906+ printf("%s:i2c_read:error\n", __func__);
907+ return -1;
908+ }
909+ else
910+ {
911+ if (rdval != val)
912+ {
913+ printf("Warning: adjusted PFUZE value reg: 0x%02x old: 0x%02x new:0x%02x\n",addr,rdval,val);
914+ if (i2c_write(0x8, addr, 1, &val, 1)) {
915+ printf("%s:i2c_write:error\n",__func__);
916+ return -1;
917+ }
918+ }
919+ }
920+ return 0;
921+}
922+
923+static int setup_pmic_voltages(void)
924+{
925+ unsigned char id1 = 0, id2 = 0, value = 0 ;
926+ i2c_init(CONFIG_SYS_I2C_SPEED, CONFIG_SYS_I2C_SLAVE);
927+ if (!i2c_probe(0x8)) {
928+ if (i2c_read(0x8, 0, 1, &id1, 1)) {
929+ printf("%s:i2c_read:error\n", __func__);
930+ return -1;
931+ }
932+ if (i2c_read(0x8, 3, 1, &id2, 1)) {
933+ printf("%s:i2c_read:error\n", __func__);
934+ return -1;
935+ }
936+ #if CONFIG_MX6_INTER_LDO_BYPASS
937+ /*VDDCORE 1.1V@800Mhz: SW1AB*/
938+ value = 0x20;
939+ if (i2c_write(0x8, 0x20, 1, &value, 1)) {
940+ printf("%s:i2c_write:error SW1AB\n",__func__);
941+ return -1;
942+ }
943+ /*VDDSOC 1.2V : SW1C*/
944+ value = 0x24;
945+ if (i2c_write(0x8, 0x2e, 1, &value, 1)) {
946+ printf("%s:i2c_write:error SW1C\n",__func__);
947+ return -1;
948+ }
949+ /* Bypass the VDDSOC from Anatop */
950+ val = REG_RD(ANATOP_BASE_ADDR, HW_ANADIG_REG_CORE);
951+ val &= ~BM_ANADIG_REG_CORE_REG2_TRG;
952+ val |= BF_ANADIG_REG_CORE_REG2_TRG(0x1f);
953+ REG_WR(ANATOP_BASE_ADDR, HW_ANADIG_REG_CORE, val);
954+
955+ /* Bypass the VDDCORE from Anatop */
956+ val = REG_RD(ANATOP_BASE_ADDR, HW_ANADIG_REG_CORE);
957+ val &= ~BM_ANADIG_REG_CORE_REG0_TRG;
958+ val |= BF_ANADIG_REG_CORE_REG0_TRG(0x1f);
959+ REG_WR(ANATOP_BASE_ADDR, HW_ANADIG_REG_CORE, val);
960+
961+ /* Bypass the VDDPU from Anatop */
962+ val = REG_RD(ANATOP_BASE_ADDR, HW_ANADIG_REG_CORE);
963+ val &= ~BM_ANADIG_REG_CORE_REG1_TRG;
964+ val |= BF_ANADIG_REG_CORE_REG1_TRG(0x1f);
965+ REG_WR(ANATOP_BASE_ADDR, HW_ANADIG_REG_CORE, val);
966+
967+ /*clear PowerDown Enable bit of WDOG1_WMCR*/
968+ writew(0, WDOG1_BASE_ADDR + 0x08);
969+ printf("hw_anadig_reg_core=%x\n",
970+ REG_RD(ANATOP_BASE_ADDR, HW_ANADIG_REG_CORE));
971+ #endif
972+
973+ switch (id2)
974+ {
975+ case 0x01:
976+ /* GEN1 PMIC (default programming), set correct values for PHY, EMMC, DDR VTT */
977+ printf("PFUZE100 1st Gen detected (0x%x/0x%x)\n", id1, id2);
978+
979+ /* VGEN5, 1.8V phy power supply */
980+ value = 0x10;
981+ if (i2c_write(0x8, 0x70, 1, &value, 1)) {
982+ printf("%s:i2c_write:error VGEN5\n",__func__);
983+ return -1;
984+ }
985+ /* VGEN6, 1.8V emmc vccio power supply */
986+ value = 0x10;
987+ if (i2c_write(0x8, 0x71, 1, &value, 1)) {
988+ printf("%s:i2c_write:error VGEN6\n",__func__);
989+ return -1;
990+ }
991+ /* SW4, 0.75V DDR VTT */
992+ value = 0x0e;
993+ if (i2c_write(0x8, 0x4a, 1, &value, 1)) {
994+ printf("%s:i2c_write:error SW4\n",__func__);
995+ return -1;
996+ }
997+ break;
998+
999+ case 0x10:
1000+ case 0x11:
1001+ /* GEN2 PMIC (OTP programmed) - check correct settings */
1002+ printf("PFUZE100 2nd Gen (OTP) detected (0x%x/0x%x)\n", id1, id2);
1003+
1004+ if (setup_pmic_reg(0x70, 0x10))
1005+ return -1;
1006+ if (setup_pmic_reg(0x71, 0x10))
1007+ return -1;
1008+ if (setup_pmic_reg(0x4a, 0x0e))
1009+ return -1;
1010+ break;
1011+
1012+ default:
1013+ /* unknown PMIC */
1014+ printf("unknown PFUZE100 detected (0x%x/0x%x)\n", id1, id2);
1015+
1016+ if (setup_pmic_reg(0x70, 0x10))
1017+ return -1;
1018+ if (setup_pmic_reg(0x71, 0x10))
1019+ return -1;
1020+ if (setup_pmic_reg(0x4a, 0x0e))
1021+ return -1;
1022+ break;
1023+ }
1024+ }
1025+ return 0;
1026+}
1027+#endif
1028+
1029+#ifdef CONFIG_IMX_ECSPI
1030+s32 spi_get_cfg(struct imx_spi_dev_t *dev)
1031+{
1032+ switch (dev->slave.cs) {
1033+ case 0:
1034+ /* SPI-NOR */
1035+ dev->base = ECSPI1_BASE_ADDR;
1036+ dev->freq = 25000000;
1037+ dev->ss_pol = IMX_SPI_ACTIVE_LOW;
1038+ dev->ss = 0;
1039+ dev->fifo_sz = 64 * 4;
1040+ dev->us_delay = 0;
1041+ break;
1042+ case 1:
1043+ /* SPI-NOR */
1044+ dev->base = ECSPI1_BASE_ADDR;
1045+ dev->freq = 25000000;
1046+ dev->ss_pol = IMX_SPI_ACTIVE_LOW;
1047+ dev->ss = 1;
1048+ dev->fifo_sz = 64 * 4;
1049+ dev->us_delay = 0;
1050+ break;
1051+ default:
1052+ printf("Invalid Bus ID!\n");
1053+ }
1054+
1055+ return 0;
1056+}
1057+
1058+void spi_io_init(struct imx_spi_dev_t *dev)
1059+{
1060+ u32 reg;
1061+
1062+ switch (dev->base) {
1063+ case ECSPI1_BASE_ADDR:
1064+ /* Enable clock */
1065+ reg = readl(CCM_BASE_ADDR + CLKCTL_CCGR1);
1066+ reg |= 0x3;
1067+ writel(reg, CCM_BASE_ADDR + CLKCTL_CCGR1);
1068+
1069+ /* SCLK, MISO, MOSI */
1070+#if defined CONFIG_MX6Q
1071+ mxc_iomux_v3_setup_pad(MX6Q_PAD_EIM_D16__ECSPI1_SCLK);
1072+ mxc_iomux_v3_setup_pad(MX6Q_PAD_EIM_D17__ECSPI1_MISO);
1073+ mxc_iomux_v3_setup_pad(MX6Q_PAD_EIM_D18__ECSPI1_MOSI);
1074+ if (dev->ss == 1)
1075+ mxc_iomux_v3_setup_pad(MX6Q_PAD_EIM_D19__ECSPI1_SS1);
1076+#elif defined CONFIG_MX6DL
1077+ mxc_iomux_v3_setup_pad(MX6DL_PAD_EIM_D16__ECSPI1_SCLK);
1078+ mxc_iomux_v3_setup_pad(MX6DL_PAD_EIM_D17__ECSPI1_MISO);
1079+ mxc_iomux_v3_setup_pad(MX6DL_PAD_EIM_D18__ECSPI1_MOSI);
1080+ if (dev->ss == 1)
1081+ mxc_iomux_v3_setup_pad(MX6DL_PAD_EIM_D19__ECSPI1_SS1);
1082+#endif
1083+ break;
1084+ case ECSPI2_BASE_ADDR:
1085+ case ECSPI3_BASE_ADDR:
1086+ /* ecspi2-3 fall through */
1087+ break;
1088+ default:
1089+ break;
1090+ }
1091+}
1092+#endif
1093+
1094+#ifdef CONFIG_NET_MULTI
1095+int board_eth_init(bd_t *bis)
1096+{
1097+ int rc = -ENODEV;
1098+ return rc;
1099+}
1100+#endif
1101+
1102+#ifdef CONFIG_CMD_MMC
1103+
1104+struct fsl_esdhc_cfg usdhc_cfg[4] = {
1105+ {USDHC2_BASE_ADDR, 1, 1, 1, 0},
1106+ {USDHC3_BASE_ADDR, 1, 1, 1, 0},
1107+ {USDHC4_BASE_ADDR, 1, 1, 1, 0},
1108+};
1109+
1110+#if defined CONFIG_MX6Q
1111+iomux_v3_cfg_t usdhc1_pads[] = {
1112+ MX6Q_PAD_SD1_CLK__USDHC1_CLK,
1113+ MX6Q_PAD_SD1_CMD__USDHC1_CMD,
1114+ MX6Q_PAD_SD1_DAT0__USDHC1_DAT0,
1115+ MX6Q_PAD_SD1_DAT1__USDHC1_DAT1,
1116+ MX6Q_PAD_SD1_DAT2__USDHC1_DAT2,
1117+ MX6Q_PAD_SD1_DAT3__USDHC1_DAT3,
1118+};
1119+
1120+iomux_v3_cfg_t usdhc2_pads[] = {
1121+ MX6Q_PAD_SD2_CLK__USDHC2_CLK,
1122+ MX6Q_PAD_SD2_CMD__USDHC2_CMD,
1123+ MX6Q_PAD_SD2_DAT0__USDHC2_DAT0,
1124+ MX6Q_PAD_SD2_DAT1__USDHC2_DAT1,
1125+ MX6Q_PAD_SD2_DAT2__USDHC2_DAT2,
1126+ MX6Q_PAD_SD2_DAT3__USDHC2_DAT3,
1127+};
1128+
1129+iomux_v3_cfg_t usdhc3_pads[] = {
1130+ MX6Q_PAD_SD3_CLK__USDHC3_CLK,
1131+ MX6Q_PAD_SD3_CMD__USDHC3_CMD,
1132+ MX6Q_PAD_SD3_DAT0__USDHC3_DAT0,
1133+ MX6Q_PAD_SD3_DAT1__USDHC3_DAT1,
1134+ MX6Q_PAD_SD3_DAT2__USDHC3_DAT2,
1135+ MX6Q_PAD_SD3_DAT3__USDHC3_DAT3,
1136+ MX6Q_PAD_SD3_DAT4__USDHC3_DAT4,
1137+ MX6Q_PAD_SD3_DAT5__USDHC3_DAT5,
1138+ MX6Q_PAD_SD3_DAT6__USDHC3_DAT6,
1139+ MX6Q_PAD_SD3_DAT7__USDHC3_DAT7,
1140+ MX6Q_PAD_SD3_RST__USDHC3_RST,
1141+};
1142+
1143+iomux_v3_cfg_t usdhc4_pads[] = {
1144+ MX6Q_PAD_SD4_CLK__USDHC4_CLK,
1145+ MX6Q_PAD_SD4_CMD__USDHC4_CMD,
1146+ MX6Q_PAD_SD4_DAT0__USDHC4_DAT0,
1147+ MX6Q_PAD_SD4_DAT1__USDHC4_DAT1,
1148+ MX6Q_PAD_SD4_DAT2__USDHC4_DAT2,
1149+ MX6Q_PAD_SD4_DAT3__USDHC4_DAT3,
1150+ MX6Q_PAD_SD4_DAT4__USDHC4_DAT4,
1151+ MX6Q_PAD_SD4_DAT5__USDHC4_DAT5,
1152+ MX6Q_PAD_SD4_DAT6__USDHC4_DAT6,
1153+ MX6Q_PAD_SD4_DAT7__USDHC4_DAT7,
1154+};
1155+#elif defined CONFIG_MX6DL
1156+iomux_v3_cfg_t usdhc1_pads[] = {
1157+ MX6DL_PAD_SD1_CLK__USDHC1_CLK,
1158+ MX6DL_PAD_SD1_CMD__USDHC1_CMD,
1159+ MX6DL_PAD_SD1_DAT0__USDHC1_DAT0,
1160+ MX6DL_PAD_SD1_DAT1__USDHC1_DAT1,
1161+ MX6DL_PAD_SD1_DAT2__USDHC1_DAT2,
1162+ MX6DL_PAD_SD1_DAT3__USDHC1_DAT3,
1163+};
1164+
1165+iomux_v3_cfg_t usdhc2_pads[] = {
1166+ MX6DL_PAD_SD2_CLK__USDHC2_CLK,
1167+ MX6DL_PAD_SD2_CMD__USDHC2_CMD,
1168+ MX6DL_PAD_SD2_DAT0__USDHC2_DAT0,
1169+ MX6DL_PAD_SD2_DAT1__USDHC2_DAT1,
1170+ MX6DL_PAD_SD2_DAT2__USDHC2_DAT2,
1171+ MX6DL_PAD_SD2_DAT3__USDHC2_DAT3,
1172+};
1173+
1174+iomux_v3_cfg_t usdhc3_pads[] = {
1175+ MX6DL_PAD_SD3_CLK__USDHC3_CLK,
1176+ MX6DL_PAD_SD3_CMD__USDHC3_CMD,
1177+ MX6DL_PAD_SD3_DAT0__USDHC3_DAT0,
1178+ MX6DL_PAD_SD3_DAT1__USDHC3_DAT1,
1179+ MX6DL_PAD_SD3_DAT2__USDHC3_DAT2,
1180+ MX6DL_PAD_SD3_DAT3__USDHC3_DAT3,
1181+ MX6DL_PAD_SD3_DAT4__USDHC3_DAT4,
1182+ MX6DL_PAD_SD3_DAT5__USDHC3_DAT5,
1183+ MX6DL_PAD_SD3_DAT6__USDHC3_DAT6,
1184+ MX6DL_PAD_SD3_DAT7__USDHC3_DAT7,
1185+ MX6DL_PAD_SD3_RST__USDHC3_RST,
1186+};
1187+
1188+iomux_v3_cfg_t usdhc4_pads[] = {
1189+ MX6DL_PAD_SD4_CLK__USDHC4_CLK,
1190+ MX6DL_PAD_SD4_CMD__USDHC4_CMD,
1191+ MX6DL_PAD_SD4_DAT0__USDHC4_DAT0,
1192+ MX6DL_PAD_SD4_DAT1__USDHC4_DAT1,
1193+ MX6DL_PAD_SD4_DAT2__USDHC4_DAT2,
1194+ MX6DL_PAD_SD4_DAT3__USDHC4_DAT3,
1195+ MX6DL_PAD_SD4_DAT4__USDHC4_DAT4,
1196+ MX6DL_PAD_SD4_DAT5__USDHC4_DAT5,
1197+ MX6DL_PAD_SD4_DAT6__USDHC4_DAT6,
1198+ MX6DL_PAD_SD4_DAT7__USDHC4_DAT7,
1199+};
1200+#endif
1201+
1202+int usdhc_gpio_init(bd_t *bis)
1203+{
1204+ s32 status = 0;
1205+ u32 index = 0;
1206+
1207+ for (index = 0; index < CONFIG_SYS_FSL_USDHC_NUM;
1208+ ++index) {
1209+ switch (index) {
1210+ case 0:
1211+ mxc_iomux_v3_setup_multiple_pads(usdhc3_pads,
1212+ sizeof(usdhc3_pads) /
1213+ sizeof(usdhc3_pads[0]));
1214+ break;
1215+ case 1:
1216+ mxc_iomux_v3_setup_multiple_pads(usdhc4_pads,
1217+ sizeof(usdhc4_pads) /
1218+ sizeof(usdhc4_pads[0]));
1219+ break;
1220+ case 2:
1221+ mxc_iomux_v3_setup_multiple_pads(usdhc2_pads,
1222+ sizeof(usdhc2_pads) /
1223+ sizeof(usdhc2_pads[0]));
1224+ break;
1225+ default:
1226+ printf("Warning: you configured more USDHC controllers"
1227+ "(%d) then supported by the board (%d)\n",
1228+ index+1, CONFIG_SYS_FSL_USDHC_NUM);
1229+ return status;
1230+ }
1231+ status |= fsl_esdhc_initialize(bis, &usdhc_cfg[index]);
1232+ }
1233+
1234+ return status;
1235+}
1236+
1237+int board_mmc_init(bd_t *bis)
1238+{
1239+ if (!usdhc_gpio_init(bis))
1240+ return 0;
1241+ else
1242+ return -1;
1243+}
1244+
1245+/* For DDR mode operation, provide target delay parameter for each SD port.
1246+ * Use cfg->esdhc_base to distinguish the SD port #. The delay for each port
1247+ * is dependent on signal layout for that particular port. If the following
1248+ * CONFIG is not defined, then the default target delay value will be used.
1249+ */
1250+#ifdef CONFIG_GET_DDR_TARGET_DELAY
1251+u32 get_ddr_delay(struct fsl_esdhc_cfg *cfg)
1252+{
1253+ /* No delay required */
1254+ return 0;
1255+}
1256+#endif
1257+
1258+#endif
1259+
1260+#ifdef CONFIG_LCD
1261+void lcd_enable(void)
1262+{
1263+ char *s;
1264+ int ret;
1265+ unsigned int reg;
1266+
1267+ s = getenv("lvds_num");
1268+ di = simple_strtol(s, NULL, 10);
1269+
1270+ /*
1271+ * hw_rev 2: IPUV3DEX
1272+ * hw_rev 3: IPUV3M
1273+ * hw_rev 4: IPUV3H
1274+ */
1275+ g_ipu_hw_rev = IPUV3_HW_REV_IPUV3H;
1276+
1277+ imx_pwm_config(pwm0, 25000, 50000);
1278+ imx_pwm_enable(pwm0);
1279+
1280+ /* GPIO & PWM backlight */
1281+#if defined CONFIG_MX6Q
1282+ mxc_iomux_v3_setup_pad(MX6Q_PAD_SD1_DAT3__PWM1_PWMO);
1283+ mxc_iomux_v3_setup_pad(MX6Q_PAD_GPIO_9__GPIO_1_9);
1284+#elif defined CONFIG_MX6DL
1285+ mxc_iomux_v3_setup_pad(MX6DL_PAD_SD1_DAT3__PWM1_PWMO);
1286+ mxc_iomux_v3_setup_pad(MX6DL_PAD_GPIO_9__GPIO_1_9);
1287+#endif
1288+
1289+ set_gpio_output_val(GPIO1_BASE_ADDR, (1 << 9), 1);
1290+
1291+#if defined CONFIG_MX6Q
1292+ /*
1293+ * Align IPU1 HSP clock and IPU1 DIx pixel clock
1294+ * with kernel setting to avoid screen flick when
1295+ * booting into kernel. Developer should change
1296+ * the relevant setting if kernel setting changes.
1297+ * IPU1 HSP clock tree:
1298+ * osc_clk(24M)->pll2_528_bus_main_clk(528M)->
1299+ * periph_clk(528M)->mmdc_ch0_axi_clk(528M)->
1300+ * ipu1_clk(264M)
1301+ */
1302+ /* pll2_528_bus_main_clk */
1303+ /* divider */
1304+ writel(0x1, ANATOP_BASE_ADDR + 0x34);
1305+
1306+ /* periph_clk */
1307+ /* source */
1308+ reg = readl(CCM_BASE_ADDR + CLKCTL_CBCMR);
1309+ reg &= ~(0x3 << 18);
1310+ writel(reg, CCM_BASE_ADDR + CLKCTL_CBCMR);
1311+
1312+ reg = readl(CCM_BASE_ADDR + CLKCTL_CBCDR);
1313+ reg &= ~(0x1 << 25);
1314+ writel(reg, CCM_BASE_ADDR + CLKCTL_CBCDR);
1315+
1316+ /*
1317+ * Check PERIPH_CLK_SEL_BUSY in
1318+ * MXC_CCM_CDHIPR register.
1319+ */
1320+ do {
1321+ udelay(5);
1322+ reg = readl(CCM_BASE_ADDR + CLKCTL_CDHIPR);
1323+ } while (reg & (0x1 << 5));
1324+
1325+ /* mmdc_ch0_axi_clk */
1326+ /* divider */
1327+ reg = readl(CCM_BASE_ADDR + CLKCTL_CBCDR);
1328+ reg &= ~(0x7 << 19);
1329+ writel(reg, CCM_BASE_ADDR + CLKCTL_CBCDR);
1330+
1331+ /*
1332+ * Check MMDC_CH0PODF_BUSY in
1333+ * MXC_CCM_CDHIPR register.
1334+ */
1335+ do {
1336+ udelay(5);
1337+ reg = readl(CCM_BASE_ADDR + CLKCTL_CDHIPR);
1338+ } while (reg & (0x1 << 4));
1339+
1340+ /* ipu1_clk */
1341+ reg = readl(CCM_BASE_ADDR + CLKCTL_CSCDR3);
1342+ /* source */
1343+ reg &= ~(0x3 << 9);
1344+ /* divider */
1345+ reg &= ~(0x7 << 11);
1346+ reg |= (0x1 << 11);
1347+ writel(reg, CCM_BASE_ADDR + CLKCTL_CSCDR3);
1348+
1349+ /*
1350+ * ipu1_pixel_clk_x clock tree:
1351+ * osc_clk(24M)->pll2_528_bus_main_clk(528M)->
1352+ * pll2_pfd_352M(452.57M)->ldb_dix_clk(64.65M)->
1353+ * ipu1_di_clk_x(64.65M)->ipu1_pixel_clk_x(64.65M)
1354+ */
1355+ /* pll2_pfd_352M */
1356+ /* disable */
1357+ writel(0x1 << 7, ANATOP_BASE_ADDR + 0x104);
1358+ /* divider */
1359+ writel(0x3F, ANATOP_BASE_ADDR + 0x108);
1360+ writel(0x15, ANATOP_BASE_ADDR + 0x104);
1361+
1362+ /* ldb_dix_clk */
1363+ /* source */
1364+ reg = readl(CCM_BASE_ADDR + CLKCTL_CS2CDR);
1365+ reg &= ~(0x3F << 9);
1366+ reg |= (0x9 << 9);
1367+ writel(reg, CCM_BASE_ADDR + CLKCTL_CS2CDR);
1368+ /* divider */
1369+ reg = readl(CCM_BASE_ADDR + CLKCTL_CSCMR2);
1370+ reg |= (0x3 << 10);
1371+ writel(reg, CCM_BASE_ADDR + CLKCTL_CSCMR2);
1372+
1373+ /* pll2_pfd_352M */
1374+ /* enable after ldb_dix_clk source is set */
1375+ writel(0x1 << 7, ANATOP_BASE_ADDR + 0x108);
1376+
1377+ /* ipu1_di_clk_x */
1378+ /* source */
1379+ reg = readl(CCM_BASE_ADDR + CLKCTL_CHSCCDR);
1380+ reg &= ~0xE07;
1381+ reg |= 0x803;
1382+ writel(reg, CCM_BASE_ADDR + CLKCTL_CHSCCDR);
1383+#elif defined CONFIG_MX6DL /* CONFIG_MX6Q */
1384+ /*
1385+ * IPU1 HSP clock tree:
1386+ * osc_clk(24M)->pll3_usb_otg_main_clk(480M)->
1387+ * pll3_pfd_540M(540M)->ipu1_clk(270M)
1388+ */
1389+ /* pll3_usb_otg_main_clk */
1390+ /* divider */
1391+ writel(0x3, ANATOP_BASE_ADDR + 0x18);
1392+
1393+ /* pll3_pfd_540M */
1394+ /* divider */
1395+ writel(0x3F << 8, ANATOP_BASE_ADDR + 0xF8);
1396+ writel(0x10 << 8, ANATOP_BASE_ADDR + 0xF4);
1397+ /* enable */
1398+ writel(0x1 << 15, ANATOP_BASE_ADDR + 0xF8);
1399+
1400+ /* ipu1_clk */
1401+ reg = readl(CCM_BASE_ADDR + CLKCTL_CSCDR3);
1402+ /* source */
1403+ reg |= (0x3 << 9);
1404+ /* divider */
1405+ reg &= ~(0x7 << 11);
1406+ reg |= (0x1 << 11);
1407+ writel(reg, CCM_BASE_ADDR + CLKCTL_CSCDR3);
1408+
1409+ /*
1410+ * ipu1_pixel_clk_x clock tree:
1411+ * osc_clk(24M)->pll2_528_bus_main_clk(528M)->
1412+ * pll2_pfd_352M(452.57M)->ldb_dix_clk(64.65M)->
1413+ * ipu1_di_clk_x(64.65M)->ipu1_pixel_clk_x(64.65M)
1414+ */
1415+ /* pll2_528_bus_main_clk */
1416+ /* divider */
1417+ writel(0x1, ANATOP_BASE_ADDR + 0x34);
1418+
1419+ /* pll2_pfd_352M */
1420+ /* disable */
1421+ writel(0x1 << 7, ANATOP_BASE_ADDR + 0x104);
1422+ /* divider */
1423+ writel(0x3F, ANATOP_BASE_ADDR + 0x108);
1424+ writel(0x15, ANATOP_BASE_ADDR + 0x104);
1425+
1426+ /* ldb_dix_clk */
1427+ /* source */
1428+ reg = readl(CCM_BASE_ADDR + CLKCTL_CS2CDR);
1429+ reg &= ~(0x3F << 9);
1430+ reg |= (0x9 << 9);
1431+ writel(reg, CCM_BASE_ADDR + CLKCTL_CS2CDR);
1432+ /* divider */
1433+ reg = readl(CCM_BASE_ADDR + CLKCTL_CSCMR2);
1434+ reg |= (0x3 << 10);
1435+ writel(reg, CCM_BASE_ADDR + CLKCTL_CSCMR2);
1436+
1437+ /* pll2_pfd_352M */
1438+ /* enable after ldb_dix_clk source is set */
1439+ writel(0x1 << 7, ANATOP_BASE_ADDR + 0x108);
1440+
1441+ /* ipu1_di_clk_x */
1442+ /* source */
1443+ reg = readl(CCM_BASE_ADDR + CLKCTL_CHSCCDR);
1444+ reg &= ~0xE07;
1445+ reg |= 0x803;
1446+ writel(reg, CCM_BASE_ADDR + CLKCTL_CHSCCDR);
1447+#endif /* CONFIG_MX6DL */
1448+ if (di == 1) {
1449+ reg = readl(CCM_BASE_ADDR + CLKCTL_CCGR3);
1450+ reg |= 0xC033;
1451+ writel(reg, CCM_BASE_ADDR + CLKCTL_CCGR3);
1452+ } else {
1453+ reg = readl(CCM_BASE_ADDR + CLKCTL_CCGR3);
1454+ reg |= 0x300F;
1455+ writel(reg, CCM_BASE_ADDR + CLKCTL_CCGR3);
1456+ }
1457+
1458+ ret = ipuv3_fb_init(&lvds_xga, di, IPU_PIX_FMT_RGB666,
1459+ DI_PCLK_LDB, 65000000);
1460+ if (ret)
1461+ puts("LCD cannot be configured\n");
1462+
1463+ /*
1464+ * LVDS0 mux to IPU1 DI0.
1465+ * LVDS1 mux to IPU1 DI1.
1466+ */
1467+ reg = readl(IOMUXC_BASE_ADDR + 0xC);
1468+ reg &= ~(0x000003C0);
1469+ reg |= 0x00000100;
1470+ writel(reg, IOMUXC_BASE_ADDR + 0xC);
1471+
1472+ if (di == 1)
1473+ writel(0x40C, IOMUXC_BASE_ADDR + 0x8);
1474+ else
1475+ writel(0x201, IOMUXC_BASE_ADDR + 0x8);
1476+}
1477+#endif
1478+
1479+#ifdef CONFIG_VIDEO_MX5
1480+void panel_info_init(void)
1481+{
1482+ panel_info.vl_bpix = LCD_BPP;
1483+ panel_info.vl_col = lvds_xga.xres;
1484+ panel_info.vl_row = lvds_xga.yres;
1485+ panel_info.cmap = colormap;
1486+}
1487+#endif
1488+
1489+#ifdef CONFIG_SPLASH_SCREEN
1490+void setup_splash_image(void)
1491+{
1492+ char *s;
1493+ ulong addr;
1494+
1495+ s = getenv("splashimage");
1496+
1497+ if (s != NULL) {
1498+ addr = simple_strtoul(s, NULL, 16);
1499+
1500+#if defined(CONFIG_ARCH_MMU)
1501+ addr = ioremap_nocache(iomem_to_phys(addr),
1502+ fsl_bmp_reversed_600x400_size);
1503+#endif
1504+ memcpy((char *)addr, (char *)fsl_bmp_reversed_600x400,
1505+ fsl_bmp_reversed_600x400_size);
1506+ }
1507+}
1508+#endif
1509+
1510+int board_init(void)
1511+{
1512+/* need set Power Supply Glitch to 0x41736166
1513+*and need clear Power supply Glitch Detect bit
1514+* when POR or reboot or power on Otherwise system
1515+*could not be power off anymore*/
1516+ u32 reg;
1517+ writel(0x41736166, SNVS_BASE_ADDR + 0x64);/*set LPPGDR*/
1518+ udelay(10);
1519+ reg = readl(SNVS_BASE_ADDR + 0x4c);
1520+ reg |= (1 << 3);
1521+ writel(reg, SNVS_BASE_ADDR + 0x4c);/*clear LPSR*/
1522+
1523+ mxc_iomux_v3_init((void *)IOMUXC_BASE_ADDR);
1524+ setup_boot_device();
1525+ fsl_set_system_rev();
1526+
1527+ /* board id for linux */
1528+ gd->bd->bi_arch_number = MACH_TYPE_CGT_QMX6;
1529+
1530+ /* address of boot parameters */
1531+ gd->bd->bi_boot_params = PHYS_SDRAM_1 + 0x100;
1532+
1533+ /* turn off backlight */
1534+#if defined CONFIG_MX6Q
1535+ mxc_iomux_v3_setup_pad(MX6Q_PAD_GPIO_9__GPIO_1_9);
1536+#elif defined CONFIG_MX6DL
1537+ mxc_iomux_v3_setup_pad(MX6DL_PAD_GPIO_9__GPIO_1_9);
1538+#endif
1539+ set_gpio_output_val(GPIO1_BASE_ADDR, (1 << 9), 0);
1540+
1541+ setup_uart();
1542+
1543+#ifdef CONFIG_DWC_AHSATA
1544+ setup_sata();
1545+#endif
1546+
1547+#ifdef CONFIG_VIDEO_MX5
1548+ /* Enable lvds power */
1549+ setup_lvds_poweron();
1550+
1551+ panel_info_init();
1552+
1553+ gd->fb_base = CONFIG_FB_BASE;
1554+#ifdef CONFIG_ARCH_MMU
1555+ gd->fb_base = ioremap_nocache(iomem_to_phys(gd->fb_base), 0);
1556+#endif
1557+#endif
1558+
1559+ return 0;
1560+}
1561+
1562+
1563+#ifdef CONFIG_ANDROID_RECOVERY
1564+
1565+int check_recovery_cmd_file(void)
1566+{
1567+ int button_pressed = 0;
1568+ int recovery_mode = 0;
1569+
1570+ recovery_mode = check_and_clean_recovery_flag();
1571+
1572+ /* Check Recovery Combo Button press or not. */
1573+#if defined CONFIG_MX6Q
1574+ mxc_iomux_v3_setup_pad(MX6Q_PAD_GPIO_19__GPIO_4_5);
1575+#elif defined CONFIG_MX6DL
1576+ mxc_iomux_v3_setup_pad(MX6DL_PAD_GPIO_19__GPIO_4_5);
1577+#endif
1578+ reg = readl(GPIO4_BASE_ADDR + GPIO_GDIR);
1579+ reg &= ~(1<<5);
1580+ writel(reg, GPIO4_BASE_ADDR + GPIO_GDIR);
1581+ reg = readl(GPIO4_BASE_ADDR + GPIO_PSR);
1582+ if (!(reg & (1 << 5))) { /* VOL_DN key is low assert */
1583+ button_pressed = 1;
1584+ printf("Recovery key pressed\n");
1585+ }
1586+ return recovery_mode || button_pressed;
1587+}
1588+#endif
1589+
1590+int board_late_init(void)
1591+{
1592+ int ret = 0;
1593+ #ifdef CONFIG_I2C_MXC
1594+ setup_i2c(CONFIG_SYS_I2C_PORT);
1595+ i2c_bus_recovery();
1596+ ret = setup_pmic_voltages();
1597+ if (ret)
1598+ return -1;
1599+ #endif
1600+ return 0;
1601+}
1602+
1603+#ifdef CONFIG_MXC_FEC
1604+static int phy_read(char *devname, unsigned char addr, unsigned char reg,
1605+ unsigned short *pdata)
1606+{
1607+ int ret = miiphy_read(devname, addr, reg, pdata);
1608+ if (ret)
1609+ printf("Error reading from %s PHY addr=%02x reg=%02x\n",
1610+ devname, addr, reg);
1611+ return ret;
1612+}
1613+
1614+static int phy_write(char *devname, unsigned char addr, unsigned char reg,
1615+ unsigned short value)
1616+{
1617+ int ret = miiphy_write(devname, addr, reg, value);
1618+ if (ret)
1619+ printf("Error writing to %s PHY addr=%02x reg=%02x\n", devname,
1620+ addr, reg);
1621+ return ret;
1622+}
1623+
1624+int mx6_rgmii_rework(char *devname, int phy_addr)
1625+{
1626+ /* KSZ9031RN ethernet phy on rev. Y.0+ */
1627+
1628+ phy_write(devname, phy_addr, 0x0d, 2);
1629+ phy_write(devname, phy_addr, 0x0e, 4);
1630+ phy_write(devname, phy_addr, 0x0d, 0xc002);
1631+ phy_write(devname, phy_addr, 0x0e, 0x0000);
1632+
1633+ phy_write(devname, phy_addr, 0x0d, 2);
1634+ phy_write(devname, phy_addr, 0x0e, 5);
1635+ phy_write(devname, phy_addr, 0x0d, 0xc002);
1636+ phy_write(devname, phy_addr, 0x0e, 0x0000);
1637+
1638+ phy_write(devname, phy_addr, 0x0d, 2);
1639+ phy_write(devname, phy_addr, 0x0e, 6);
1640+ phy_write(devname, phy_addr, 0x0d, 0xc002);
1641+ phy_write(devname, phy_addr, 0x0e, 0xFFFF);
1642+
1643+ phy_write(devname, phy_addr, 0x0d, 2);
1644+ phy_write(devname, phy_addr, 0x0e, 8);
1645+ phy_write(devname, phy_addr, 0x0d, 0xc002);
1646+ phy_write(devname, phy_addr, 0x0e, 0x3FFF);
1647+
1648+ phy_write(devname, phy_addr, 0x0d, 0x0);
1649+
1650+ return 0;
1651+}
1652+#if defined CONFIG_MX6Q
1653+iomux_v3_cfg_t enet_pads[] = {
1654+ MX6Q_PAD_ENET_MDIO__ENET_MDIO,
1655+ MX6Q_PAD_ENET_MDC__ENET_MDC,
1656+ MX6Q_PAD_RGMII_TXC__ENET_RGMII_TXC,
1657+ MX6Q_PAD_RGMII_TD0__ENET_RGMII_TD0,
1658+ MX6Q_PAD_RGMII_TD1__ENET_RGMII_TD1,
1659+ MX6Q_PAD_RGMII_TD2__ENET_RGMII_TD2,
1660+ MX6Q_PAD_RGMII_TD3__ENET_RGMII_TD3,
1661+ MX6Q_PAD_RGMII_TX_CTL__ENET_RGMII_TX_CTL,
1662+ /* pin 35 - 1 (PHY_AD2) on reset */
1663+ MX6Q_PAD_RGMII_RXC__GPIO_6_30,
1664+ /* pin 32 - 1 - (MODE0) all */
1665+ MX6Q_PAD_RGMII_RD0__GPIO_6_25,
1666+ /* pin 31 - 1 - (MODE1) all */
1667+ MX6Q_PAD_RGMII_RD1__GPIO_6_27,
1668+ /* pin 28 - 1 - (MODE2) all */
1669+ MX6Q_PAD_RGMII_RD2__GPIO_6_28,
1670+ /* pin 27 - 1 - (MODE3) all */
1671+ MX6Q_PAD_RGMII_RD3__GPIO_6_29,
1672+ /* pin 33 - 1 - (CLK125_EN) 125Mhz clockout enabled */
1673+ MX6Q_PAD_RGMII_RX_CTL__GPIO_6_24,
1674+ MX6Q_PAD_GPIO_0__CCM_CLKO,
1675+ MX6Q_PAD_GPIO_3__CCM_CLKO2,
1676+ MX6Q_PAD_ENET_REF_CLK__ENET_TX_CLK,
1677+};
1678+
1679+iomux_v3_cfg_t enet_pads_final[] = {
1680+ MX6Q_PAD_RGMII_RXC__ENET_RGMII_RXC,
1681+ MX6Q_PAD_RGMII_RD0__ENET_RGMII_RD0,
1682+ MX6Q_PAD_RGMII_RD1__ENET_RGMII_RD1,
1683+ MX6Q_PAD_RGMII_RD2__ENET_RGMII_RD2,
1684+ MX6Q_PAD_RGMII_RD3__ENET_RGMII_RD3,
1685+ MX6Q_PAD_RGMII_RX_CTL__ENET_RGMII_RX_CTL,
1686+};
1687+#elif defined CONFIG_MX6DL
1688+iomux_v3_cfg_t enet_pads[] = {
1689+ MX6DL_PAD_ENET_MDIO__ENET_MDIO,
1690+ MX6DL_PAD_ENET_MDC__ENET_MDC,
1691+ MX6DL_PAD_RGMII_TXC__ENET_RGMII_TXC,
1692+ MX6DL_PAD_RGMII_TD0__ENET_RGMII_TD0,
1693+ MX6DL_PAD_RGMII_TD1__ENET_RGMII_TD1,
1694+ MX6DL_PAD_RGMII_TD2__ENET_RGMII_TD2,
1695+ MX6DL_PAD_RGMII_TD3__ENET_RGMII_TD3,
1696+ MX6DL_PAD_RGMII_TX_CTL__ENET_RGMII_TX_CTL,
1697+ /* pin 35 - 1 (PHY_AD2) on reset */
1698+ MX6DL_PAD_RGMII_RXC__GPIO_6_30,
1699+ /* pin 32 - 1 - (MODE0) all */
1700+ MX6DL_PAD_RGMII_RD0__GPIO_6_25,
1701+ /* pin 31 - 1 - (MODE1) all */
1702+ MX6DL_PAD_RGMII_RD1__GPIO_6_27,
1703+ /* pin 28 - 1 - (MODE2) all */
1704+ MX6DL_PAD_RGMII_RD2__GPIO_6_28,
1705+ /* pin 27 - 1 - (MODE3) all */
1706+ MX6DL_PAD_RGMII_RD3__GPIO_6_29,
1707+ /* pin 33 - 1 - (CLK125_EN) 125Mhz clockout enabled */
1708+ MX6DL_PAD_RGMII_RX_CTL__GPIO_6_24,
1709+ MX6DL_PAD_GPIO_0__CCM_CLKO,
1710+ MX6DL_PAD_GPIO_3__CCM_CLKO2,
1711+ MX6DL_PAD_ENET_REF_CLK__ENET_TX_CLK,
1712+};
1713+
1714+iomux_v3_cfg_t enet_pads_final[] = {
1715+ MX6DL_PAD_RGMII_RXC__ENET_RGMII_RXC,
1716+ MX6DL_PAD_RGMII_RD0__ENET_RGMII_RD0,
1717+ MX6DL_PAD_RGMII_RD1__ENET_RGMII_RD1,
1718+ MX6DL_PAD_RGMII_RD2__ENET_RGMII_RD2,
1719+ MX6DL_PAD_RGMII_RD3__ENET_RGMII_RD3,
1720+ MX6DL_PAD_RGMII_RX_CTL__ENET_RGMII_RX_CTL,
1721+};
1722+#endif
1723+
1724+void enet_board_init(void)
1725+{
1726+ unsigned int reg;
1727+#if defined CONFIG_MX6Q
1728+ iomux_v3_cfg_t enet_reset =
1729+ (MX6Q_PAD_EIM_D23__GPIO_3_23 &
1730+ ~MUX_PAD_CTRL_MASK) | MUX_PAD_CTRL(0x48);
1731+#elif defined CONFIG_MX6DL
1732+ iomux_v3_cfg_t enet_reset =
1733+ (MX6DL_PAD_EIM_D23__GPIO_3_23 &
1734+ ~MUX_PAD_CTRL_MASK) | MUX_PAD_CTRL(0x48);
1735+#endif
1736+
1737+ /* phy reset: gpio3-23 */
1738+ set_gpio_output_val(GPIO3_BASE_ADDR, (1 << 23), 0);
1739+ set_gpio_output_val(GPIO6_BASE_ADDR, (1 << 30),
1740+ (CONFIG_FEC0_PHY_ADDR >> 2));
1741+ set_gpio_output_val(GPIO6_BASE_ADDR, (1 << 25), 1);
1742+ set_gpio_output_val(GPIO6_BASE_ADDR, (1 << 27), 1);
1743+ set_gpio_output_val(GPIO6_BASE_ADDR, (1 << 28), 1);
1744+ set_gpio_output_val(GPIO6_BASE_ADDR, (1 << 29), 1);
1745+ mxc_iomux_v3_setup_multiple_pads(enet_pads,
1746+ ARRAY_SIZE(enet_pads));
1747+ mxc_iomux_v3_setup_pad(enet_reset);
1748+ set_gpio_output_val(GPIO6_BASE_ADDR, (1 << 24), 1);
1749+
1750+ udelay(500);
1751+ set_gpio_output_val(GPIO3_BASE_ADDR, (1 << 23), 1);
1752+ mxc_iomux_v3_setup_multiple_pads(enet_pads_final,
1753+ ARRAY_SIZE(enet_pads_final));
1754+}
1755+#endif
1756+
1757+int checkboard(void)
1758+{
1759+ printf("Board: %s-QMX6: Board: 0x%x [",
1760+ mx6_chip_name(),
1761+ fsl_system_rev);
1762+
1763+ switch (__REG(SRC_BASE_ADDR + 0x8)) {
1764+ case 0x0001:
1765+ printf("POR");
1766+ break;
1767+ case 0x0009:
1768+ printf("RST");
1769+ break;
1770+ case 0x0010:
1771+ case 0x0011:
1772+ printf("WDOG");
1773+ break;
1774+ default:
1775+ printf("unknown");
1776+ }
1777+ printf(" ]\n");
1778+
1779+ printf("Boot Device: ");
1780+ switch (get_boot_device()) {
1781+ case WEIM_NOR_BOOT:
1782+ printf("NOR\n");
1783+ break;
1784+ case ONE_NAND_BOOT:
1785+ printf("ONE NAND\n");
1786+ break;
1787+ case PATA_BOOT:
1788+ printf("PATA\n");
1789+ break;
1790+ case SATA_BOOT:
1791+ printf("SATA\n");
1792+ break;
1793+ case I2C_BOOT:
1794+ printf("I2C\n");
1795+ break;
1796+ case SPI_NOR_BOOT:
1797+ printf("SPI NOR\n");
1798+ break;
1799+ case SD_BOOT:
1800+ printf("SD\n");
1801+ break;
1802+ case MMC_BOOT:
1803+ printf("MMC\n");
1804+ break;
1805+ case NAND_BOOT:
1806+ printf("NAND\n");
1807+ break;
1808+ case UNKNOWN_BOOT:
1809+ default:
1810+ printf("UNKNOWN\n");
1811+ break;
1812+ }
1813+
1814+#ifdef CONFIG_SECURE_BOOT
1815+ if (check_hab_enable() == 1)
1816+ get_hab_status();
1817+#endif
1818+
1819+ return 0;
1820+}
1821+
1822+
1823+#ifdef CONFIG_IMX_UDC
1824+void udc_pins_setting(void)
1825+{
1826+
1827+#define GPIO_3_22_BIT_MASK (1<<22)
1828+ u32 reg;
1829+#if defined CONFIG_MX6Q
1830+ mxc_iomux_v3_setup_pad(MX6Q_PAD_GPIO_1__USBOTG_ID);
1831+#elif defined CONFIG_MX6DL
1832+ mxc_iomux_v3_setup_pad(MX6DL_PAD_GPIO_1__USBOTG_ID);
1833+#endif
1834+
1835+#ifdef CONFIG_USB_OTG_PWR
1836+ /* USB_OTG_PWR */
1837+#if defined CONFIG_MX6Q
1838+ mxc_iomux_v3_setup_pad(MX6Q_PAD_EIM_D22__GPIO_3_22);
1839+#elif defined CONFIG_MX6DL
1840+ mxc_iomux_v3_setup_pad(MX6DL_PAD_EIM_D22__GPIO_3_22);
1841+#endif
1842+
1843+ reg = readl(GPIO3_BASE_ADDR + GPIO_GDIR);
1844+ /* set gpio_3_22 as output */
1845+ reg |= GPIO_3_22_BIT_MASK;
1846+ writel(reg, GPIO3_BASE_ADDR + GPIO_GDIR);
1847+
1848+ /* set USB_OTG_PWR to 0 */
1849+ reg = readl(GPIO3_BASE_ADDR + GPIO_DR);
1850+ reg &= ~GPIO_3_22_BIT_MASK;
1851+ writel(reg, GPIO3_BASE_ADDR + GPIO_DR);
1852+#endif
1853+ /* USB_ID via GPIO_1 */
1854+ mxc_iomux_set_gpr_register(1, 13, 1, 1);
1855+}
1856+#endif
1857diff --git a/board/freescale/cgt_qmx6/config.mk b/board/freescale/cgt_qmx6/config.mk
1858new file mode 100644
1859index 0000000..a0ce2a1
1860--- /dev/null
1861+++ b/board/freescale/cgt_qmx6/config.mk
1862@@ -0,0 +1,7 @@
1863+LDSCRIPT := $(SRCTREE)/board/$(VENDOR)/$(BOARD)/u-boot.lds
1864+
1865+sinclude $(OBJTREE)/board/$(VENDOR)/$(BOARD)/config.tmp
1866+
1867+ifndef TEXT_BASE
1868+ TEXT_BASE = 0x27800000
1869+endif
1870diff --git a/board/freescale/cgt_qmx6/flash_header.S b/board/freescale/cgt_qmx6/flash_header.S
1871new file mode 100644
1872index 0000000..8bbef35
1873--- /dev/null
1874+++ b/board/freescale/cgt_qmx6/flash_header.S
1875@@ -0,0 +1,202 @@
1876+/*
1877+ * Copyright (C) 2011 Freescale Semiconductor, Inc.
1878+ *
1879+ * This program is free software; you can redistribute it and/or
1880+ * modify it under the terms of the GNU General Public License as
1881+ * published by the Free Software Foundation; either version 2 of
1882+ * the License, or (at your option) any later version.
1883+ *
1884+ * This program is distributed in the hope that it will be useful,
1885+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
1886+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
1887+ * GNU General Public License for more details.
1888+ *
1889+ * You should have received a copy of the GNU General Public License
1890+ * along with this program; if not, write to the Free Software
1891+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
1892+ * MA 02111-1307 USA
1893+ */
1894+
1895+#include <config.h>
1896+#include <asm/arch/mx6.h>
1897+
1898+#ifdef CONFIG_FLASH_HEADER
1899+#ifndef CONFIG_FLASH_HEADER_OFFSET
1900+# error "Must define the offset of flash header"
1901+#endif
1902+
1903+#define CPU_2_BE_32(l) \
1904+ ((((l) & 0x000000FF) << 24) | \
1905+ (((l) & 0x0000FF00) << 8) | \
1906+ (((l) & 0x00FF0000) >> 8) | \
1907+ (((l) & 0xFF000000) >> 24))
1908+
1909+#define MXC_DCD_ITEM(i, addr, val) \
1910+dcd_node_##i: \
1911+ .word CPU_2_BE_32(addr) ; \
1912+ .word CPU_2_BE_32(val) ; \
1913+
1914+.section ".text.flasheader", "x"
1915+ b _start
1916+ .org CONFIG_FLASH_HEADER_OFFSET
1917+
1918+ivt_header: .word 0x402000D1 /* Tag=0xD1, Len=0x0020, Ver=0x40 */
1919+app_code_jump_v: .word _start
1920+reserv1: .word 0x0
1921+dcd_ptr: .word dcd_hdr
1922+boot_data_ptr: .word boot_data
1923+self_ptr: .word ivt_header
1924+app_code_csf: .word 0x0
1925+reserv2: .word 0x0
1926+
1927+boot_data: .word TEXT_BASE
1928+image_len: .word _end_of_copy - TEXT_BASE + CONFIG_FLASH_HEADER_OFFSET
1929+plugin: .word 0x0
1930+
1931+dcd_hdr: .word 0x40F802D2 /* Tag=0xD2, Len=94*8 + 4 + 4, Ver=0x40 */
1932+write_dcd_cmd: .word 0x04F402CC /* Tag=0xCC, Len=94*8 + 4, Param=0x04 */
1933+
1934+/* DCD */
1935+
1936+/* DDR IO TYPE */
1937+MXC_DCD_ITEM(1, IOMUXC_BASE_ADDR + 0x798, 0x000C0000)
1938+MXC_DCD_ITEM(2, IOMUXC_BASE_ADDR + 0x758, 0x00000000)
1939+
1940+/* clock */
1941+MXC_DCD_ITEM(3, IOMUXC_BASE_ADDR + 0x588, 0x00000030)
1942+MXC_DCD_ITEM(4, IOMUXC_BASE_ADDR + 0x594, 0x00000030)
1943+
1944+/* address */
1945+MXC_DCD_ITEM(5, IOMUXC_BASE_ADDR + 0x56c, 0x00000030)
1946+MXC_DCD_ITEM(6, IOMUXC_BASE_ADDR + 0x578, 0x00000030)
1947+MXC_DCD_ITEM(7, IOMUXC_BASE_ADDR + 0x74c, 0x00000030)
1948+
1949+/* control */
1950+MXC_DCD_ITEM(8, IOMUXC_BASE_ADDR + 0x57c, 0x00000030)
1951+MXC_DCD_ITEM(9, IOMUXC_BASE_ADDR + 0x590, 0x00003000)
1952+MXC_DCD_ITEM(10, IOMUXC_BASE_ADDR + 0x598, 0x00003000)
1953+MXC_DCD_ITEM(11, IOMUXC_BASE_ADDR + 0x58c, 0x00000000)
1954+MXC_DCD_ITEM(12, IOMUXC_BASE_ADDR + 0x59c, 0x00003030)
1955+MXC_DCD_ITEM(13, IOMUXC_BASE_ADDR + 0x5a0, 0x00003030)
1956+MXC_DCD_ITEM(14, IOMUXC_BASE_ADDR + 0x78c, 0x00000030)
1957+
1958+/* data strobe */
1959+MXC_DCD_ITEM(15, IOMUXC_BASE_ADDR + 0x750, 0x00020000)
1960+
1961+MXC_DCD_ITEM(16, IOMUXC_BASE_ADDR + 0x5a8, 0x00000030)
1962+MXC_DCD_ITEM(17, IOMUXC_BASE_ADDR + 0x5b0, 0x00000030)
1963+MXC_DCD_ITEM(18, IOMUXC_BASE_ADDR + 0x524, 0x00000030)
1964+MXC_DCD_ITEM(19, IOMUXC_BASE_ADDR + 0x51c, 0x00000030)
1965+MXC_DCD_ITEM(20, IOMUXC_BASE_ADDR + 0x518, 0x00000030)
1966+MXC_DCD_ITEM(21, IOMUXC_BASE_ADDR + 0x50c, 0x00000030)
1967+MXC_DCD_ITEM(22, IOMUXC_BASE_ADDR + 0x5b8, 0x00000030)
1968+MXC_DCD_ITEM(23, IOMUXC_BASE_ADDR + 0x5c0, 0x00000030)
1969+
1970+/* data */
1971+MXC_DCD_ITEM(24, IOMUXC_BASE_ADDR + 0x774, 0x00020000)
1972+
1973+MXC_DCD_ITEM(25, IOMUXC_BASE_ADDR + 0x784, 0x00000030)
1974+MXC_DCD_ITEM(26, IOMUXC_BASE_ADDR + 0x788, 0x00000030)
1975+MXC_DCD_ITEM(27, IOMUXC_BASE_ADDR + 0x794, 0x00000030)
1976+MXC_DCD_ITEM(28, IOMUXC_BASE_ADDR + 0x79c, 0x00000030)
1977+MXC_DCD_ITEM(29, IOMUXC_BASE_ADDR + 0x7a0, 0x00000030)
1978+MXC_DCD_ITEM(30, IOMUXC_BASE_ADDR + 0x7a4, 0x00000030)
1979+MXC_DCD_ITEM(31, IOMUXC_BASE_ADDR + 0x7a8, 0x00000030)
1980+MXC_DCD_ITEM(32, IOMUXC_BASE_ADDR + 0x748, 0x00000030)
1981+
1982+MXC_DCD_ITEM(33, IOMUXC_BASE_ADDR + 0x5ac, 0x00000030)
1983+MXC_DCD_ITEM(34, IOMUXC_BASE_ADDR + 0x5b4, 0x00000030)
1984+MXC_DCD_ITEM(35, IOMUXC_BASE_ADDR + 0x528, 0x00000030)
1985+MXC_DCD_ITEM(36, IOMUXC_BASE_ADDR + 0x520, 0x00000030)
1986+MXC_DCD_ITEM(37, IOMUXC_BASE_ADDR + 0x514, 0x00000030)
1987+MXC_DCD_ITEM(38, IOMUXC_BASE_ADDR + 0x510, 0x00000030)
1988+MXC_DCD_ITEM(39, IOMUXC_BASE_ADDR + 0x5bc, 0x00000030)
1989+MXC_DCD_ITEM(40, IOMUXC_BASE_ADDR + 0x5c4, 0x00000030)
1990+
1991+/* calibrations */
1992+/* ZQ */
1993+MXC_DCD_ITEM(41, MMDC_P0_BASE_ADDR + 0x800, 0xA1390003)
1994+MXC_DCD_ITEM(42, MMDC_P1_BASE_ADDR + 0x800, 0xA1390003)
1995+
1996+/* write leveling */
1997+MXC_DCD_ITEM(43, MMDC_P0_BASE_ADDR + 0x80c, 0x001C001C)
1998+MXC_DCD_ITEM(44, MMDC_P0_BASE_ADDR + 0x810, 0x0024001F)
1999+
2000+MXC_DCD_ITEM(45, MMDC_P1_BASE_ADDR + 0x80c, 0x001A0037)
2001+MXC_DCD_ITEM(46, MMDC_P1_BASE_ADDR + 0x810, 0x001A002F)
2002+
2003+/* DQS gating, read delay, write delay calibration values based on calibration compare of 0x00ffff00 */
2004+MXC_DCD_ITEM(47, MMDC_P0_BASE_ADDR + 0x83c, 0x43050315)
2005+MXC_DCD_ITEM(48, MMDC_P0_BASE_ADDR + 0x840, 0x02720272)
2006+MXC_DCD_ITEM(49, MMDC_P1_BASE_ADDR + 0x83c, 0x03220325)
2007+MXC_DCD_ITEM(50, MMDC_P1_BASE_ADDR + 0x840, 0x0312026B)
2008+
2009+/* read calibration */
2010+MXC_DCD_ITEM(51, MMDC_P0_BASE_ADDR + 0x848, 0x43393A3B)
2011+MXC_DCD_ITEM(52, MMDC_P1_BASE_ADDR + 0x848, 0x3E433A43)
2012+
2013+/* write calibration */
2014+MXC_DCD_ITEM(53, MMDC_P0_BASE_ADDR + 0x850, 0x47444C47)
2015+MXC_DCD_ITEM(54, MMDC_P1_BASE_ADDR + 0x850, 0x4D334F46)
2016+
2017+/* read data bit delay: (3 is the recommended default value, although out of reset value is 0) */
2018+MXC_DCD_ITEM(55, MMDC_P0_BASE_ADDR + 0x81c, 0x33333333)
2019+MXC_DCD_ITEM(56, MMDC_P0_BASE_ADDR + 0x820, 0x33333333)
2020+MXC_DCD_ITEM(57, MMDC_P0_BASE_ADDR + 0x824, 0x33333333)
2021+MXC_DCD_ITEM(58, MMDC_P0_BASE_ADDR + 0x828, 0x33333333)
2022+MXC_DCD_ITEM(59, MMDC_P1_BASE_ADDR + 0x81c, 0x33333333)
2023+MXC_DCD_ITEM(60, MMDC_P1_BASE_ADDR + 0x820, 0x33333333)
2024+MXC_DCD_ITEM(61, MMDC_P1_BASE_ADDR + 0x824, 0x33333333)
2025+MXC_DCD_ITEM(62, MMDC_P1_BASE_ADDR + 0x828, 0x33333333)
2026+
2027+/* complete calibration by forced measurment */
2028+MXC_DCD_ITEM(63, MMDC_P0_BASE_ADDR + 0x8b8, 0x00000800)
2029+MXC_DCD_ITEM(64, MMDC_P1_BASE_ADDR + 0x8b8, 0x00000800)
2030+
2031+/* MMDC init */
2032+/* in DDR3, 64-bit mode, only MMDC0 is initiated */
2033+MXC_DCD_ITEM(65, MMDC_P0_BASE_ADDR + 0x004, 0x00020036)
2034+MXC_DCD_ITEM(66, MMDC_P0_BASE_ADDR + 0x008, 0x09444040)
2035+MXC_DCD_ITEM(67, MMDC_P0_BASE_ADDR + 0x00c, 0x40445323)
2036+MXC_DCD_ITEM(68, MMDC_P0_BASE_ADDR + 0x010, 0xB66E8C63)
2037+MXC_DCD_ITEM(69, MMDC_P0_BASE_ADDR + 0x014, 0x01ff00db)
2038+MXC_DCD_ITEM(70, MMDC_P0_BASE_ADDR + 0x018, 0x00091740)
2039+
2040+MXC_DCD_ITEM(71, MMDC_P0_BASE_ADDR + 0x01c, 0x00008000)
2041+
2042+MXC_DCD_ITEM(72, MMDC_P0_BASE_ADDR + 0x02c, 0x000026d2)
2043+MXC_DCD_ITEM(73, MMDC_P0_BASE_ADDR + 0x030, 0x005b0e21)
2044+MXC_DCD_ITEM(74, MMDC_P0_BASE_ADDR + 0x040, 0x00000047)
2045+
2046+MXC_DCD_ITEM(75, MMDC_P0_BASE_ADDR + 0x000, 0x841A0000)
2047+
2048+/* Initialize 2GB DDR3 - Micron MT41J128M */
2049+MXC_DCD_ITEM(76, MMDC_P0_BASE_ADDR + 0x01c, 0x04008032)
2050+MXC_DCD_ITEM(77, MMDC_P0_BASE_ADDR + 0x01c, 0x0400803a)
2051+MXC_DCD_ITEM(78, MMDC_P0_BASE_ADDR + 0x01c, 0x00008033)
2052+MXC_DCD_ITEM(79, MMDC_P0_BASE_ADDR + 0x01c, 0x0000803b)
2053+MXC_DCD_ITEM(80, MMDC_P0_BASE_ADDR + 0x01c, 0x00428031)
2054+MXC_DCD_ITEM(81, MMDC_P0_BASE_ADDR + 0x01c, 0x00428039)
2055+MXC_DCD_ITEM(82, MMDC_P0_BASE_ADDR + 0x01c, 0x07208030)
2056+MXC_DCD_ITEM(83, MMDC_P0_BASE_ADDR + 0x01c, 0x07208038)
2057+
2058+/* DDR device ZQ calibration */
2059+MXC_DCD_ITEM(84, MMDC_P0_BASE_ADDR + 0x01c, 0x04008040)
2060+MXC_DCD_ITEM(85, MMDC_P0_BASE_ADDR + 0x01c, 0x04008048)
2061+
2062+/* final DDR setup, before operation start */
2063+MXC_DCD_ITEM(86, MMDC_P0_BASE_ADDR + 0x020, 0x00005800)
2064+MXC_DCD_ITEM(87, MMDC_P0_BASE_ADDR + 0x818, 0x00011117)
2065+MXC_DCD_ITEM(88, MMDC_P1_BASE_ADDR + 0x818, 0x00011117)
2066+
2067+MXC_DCD_ITEM(89, MMDC_P0_BASE_ADDR + 0x004, 0x00025576)
2068+MXC_DCD_ITEM(90, MMDC_P0_BASE_ADDR + 0x404, 0x00011006)
2069+MXC_DCD_ITEM(91, MMDC_P0_BASE_ADDR + 0x01c, 0x00000000)
2070+
2071+/* enable AXI cache for VDOA/VPU/IPU */
2072+MXC_DCD_ITEM(92, IOMUXC_BASE_ADDR + 0x010, 0xf00000ff)
2073+/* set IPU AXI-id0 Qos=0xf(bypass) AXI-id1 Qos=0x7 */
2074+MXC_DCD_ITEM(93, IOMUXC_BASE_ADDR + 0x018, 0x007f007f)
2075+MXC_DCD_ITEM(94, IOMUXC_BASE_ADDR + 0x01c, 0x007f007f)
2076+
2077+#endif
2078diff --git a/board/freescale/cgt_qmx6/flash_header_pn016101.S b/board/freescale/cgt_qmx6/flash_header_pn016101.S
2079new file mode 100644
2080index 0000000..1528d67
2081--- /dev/null
2082+++ b/board/freescale/cgt_qmx6/flash_header_pn016101.S
2083@@ -0,0 +1,202 @@
2084+/*
2085+ * Copyright (C) 2011 Freescale Semiconductor, Inc.
2086+ *
2087+ * This program is free software; you can redistribute it and/or
2088+ * modify it under the terms of the GNU General Public License as
2089+ * published by the Free Software Foundation; either version 2 of
2090+ * the License, or (at your option) any later version.
2091+ *
2092+ * This program is distributed in the hope that it will be useful,
2093+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
2094+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
2095+ * GNU General Public License for more details.
2096+ *
2097+ * You should have received a copy of the GNU General Public License
2098+ * along with this program; if not, write to the Free Software
2099+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
2100+ * MA 02111-1307 USA
2101+ */
2102+
2103+#include <config.h>
2104+#include <asm/arch/mx6.h>
2105+
2106+#ifdef CONFIG_FLASH_HEADER
2107+#ifndef CONFIG_FLASH_HEADER_OFFSET
2108+# error "Must define the offset of flash header"
2109+#endif
2110+
2111+#define CPU_2_BE_32(l) \
2112+ ((((l) & 0x000000FF) << 24) | \
2113+ (((l) & 0x0000FF00) << 8) | \
2114+ (((l) & 0x00FF0000) >> 8) | \
2115+ (((l) & 0xFF000000) >> 24))
2116+
2117+#define MXC_DCD_ITEM(i, addr, val) \
2118+dcd_node_##i: \
2119+ .word CPU_2_BE_32(addr) ; \
2120+ .word CPU_2_BE_32(val) ; \
2121+
2122+.section ".text.flasheader", "x"
2123+ b _start
2124+ .org CONFIG_FLASH_HEADER_OFFSET
2125+
2126+ivt_header: .word 0x402000D1 /* Tag=0xD1, Len=0x0020, Ver=0x40 */
2127+app_code_jump_v: .word _start
2128+reserv1: .word 0x0
2129+dcd_ptr: .word dcd_hdr
2130+boot_data_ptr: .word boot_data
2131+self_ptr: .word ivt_header
2132+app_code_csf: .word 0x0
2133+reserv2: .word 0x0
2134+
2135+boot_data: .word TEXT_BASE
2136+image_len: .word _end_of_copy - TEXT_BASE + CONFIG_FLASH_HEADER_OFFSET
2137+plugin: .word 0x0
2138+
2139+dcd_hdr: .word 0x40F802D2 /* Tag=0xD2, Len=94*8 + 4 + 4, Ver=0x40 */
2140+write_dcd_cmd: .word 0x04F402CC /* Tag=0xCC, Len=94*8 + 4, Param=0x04 */
2141+
2142+/* DCD */
2143+
2144+/* DDR IO TYPE */
2145+MXC_DCD_ITEM(1, IOMUXC_BASE_ADDR + 0x798, 0x000C0000)
2146+MXC_DCD_ITEM(2, IOMUXC_BASE_ADDR + 0x758, 0x00000000)
2147+
2148+/* clock */
2149+MXC_DCD_ITEM(3, IOMUXC_BASE_ADDR + 0x588, 0x00000030)
2150+MXC_DCD_ITEM(4, IOMUXC_BASE_ADDR + 0x594, 0x00000030)
2151+
2152+/* address */
2153+MXC_DCD_ITEM(5, IOMUXC_BASE_ADDR + 0x56c, 0x00000030)
2154+MXC_DCD_ITEM(6, IOMUXC_BASE_ADDR + 0x578, 0x00000030)
2155+MXC_DCD_ITEM(7, IOMUXC_BASE_ADDR + 0x74c, 0x00000030)
2156+
2157+/* control */
2158+MXC_DCD_ITEM(8, IOMUXC_BASE_ADDR + 0x57c, 0x00000030)
2159+MXC_DCD_ITEM(9, IOMUXC_BASE_ADDR + 0x590, 0x00003000)
2160+MXC_DCD_ITEM(10, IOMUXC_BASE_ADDR + 0x598, 0x00003000)
2161+MXC_DCD_ITEM(11, IOMUXC_BASE_ADDR + 0x58c, 0x00000000)
2162+MXC_DCD_ITEM(12, IOMUXC_BASE_ADDR + 0x59c, 0x00003030)
2163+MXC_DCD_ITEM(13, IOMUXC_BASE_ADDR + 0x5a0, 0x00003030)
2164+MXC_DCD_ITEM(14, IOMUXC_BASE_ADDR + 0x78c, 0x00000030)
2165+
2166+/* data strobe */
2167+MXC_DCD_ITEM(15, IOMUXC_BASE_ADDR + 0x750, 0x00020000)
2168+
2169+MXC_DCD_ITEM(16, IOMUXC_BASE_ADDR + 0x5a8, 0x00000030)
2170+MXC_DCD_ITEM(17, IOMUXC_BASE_ADDR + 0x5b0, 0x00000030)
2171+MXC_DCD_ITEM(18, IOMUXC_BASE_ADDR + 0x524, 0x00000030)
2172+MXC_DCD_ITEM(19, IOMUXC_BASE_ADDR + 0x51c, 0x00000030)
2173+MXC_DCD_ITEM(20, IOMUXC_BASE_ADDR + 0x518, 0x00000030)
2174+MXC_DCD_ITEM(21, IOMUXC_BASE_ADDR + 0x50c, 0x00000030)
2175+MXC_DCD_ITEM(22, IOMUXC_BASE_ADDR + 0x5b8, 0x00000030)
2176+MXC_DCD_ITEM(23, IOMUXC_BASE_ADDR + 0x5c0, 0x00000030)
2177+
2178+/* data */
2179+MXC_DCD_ITEM(24, IOMUXC_BASE_ADDR + 0x774, 0x00020000)
2180+
2181+MXC_DCD_ITEM(25, IOMUXC_BASE_ADDR + 0x784, 0x00000030)
2182+MXC_DCD_ITEM(26, IOMUXC_BASE_ADDR + 0x788, 0x00000030)
2183+MXC_DCD_ITEM(27, IOMUXC_BASE_ADDR + 0x794, 0x00000030)
2184+MXC_DCD_ITEM(28, IOMUXC_BASE_ADDR + 0x79c, 0x00000030)
2185+MXC_DCD_ITEM(29, IOMUXC_BASE_ADDR + 0x7a0, 0x00000030)
2186+MXC_DCD_ITEM(30, IOMUXC_BASE_ADDR + 0x7a4, 0x00000030)
2187+MXC_DCD_ITEM(31, IOMUXC_BASE_ADDR + 0x7a8, 0x00000030)
2188+MXC_DCD_ITEM(32, IOMUXC_BASE_ADDR + 0x748, 0x00000030)
2189+
2190+MXC_DCD_ITEM(33, IOMUXC_BASE_ADDR + 0x5ac, 0x00000030)
2191+MXC_DCD_ITEM(34, IOMUXC_BASE_ADDR + 0x5b4, 0x00000030)
2192+MXC_DCD_ITEM(35, IOMUXC_BASE_ADDR + 0x528, 0x00000030)
2193+MXC_DCD_ITEM(36, IOMUXC_BASE_ADDR + 0x520, 0x00000030)
2194+MXC_DCD_ITEM(37, IOMUXC_BASE_ADDR + 0x514, 0x00000030)
2195+MXC_DCD_ITEM(38, IOMUXC_BASE_ADDR + 0x510, 0x00000030)
2196+MXC_DCD_ITEM(39, IOMUXC_BASE_ADDR + 0x5bc, 0x00000030)
2197+MXC_DCD_ITEM(40, IOMUXC_BASE_ADDR + 0x5c4, 0x00000030)
2198+
2199+/* calibrations */
2200+/* ZQ */
2201+MXC_DCD_ITEM(41, MMDC_P0_BASE_ADDR + 0x800, 0xA1390003)
2202+MXC_DCD_ITEM(42, MMDC_P1_BASE_ADDR + 0x800, 0xA1390003)
2203+
2204+/* write leveling */
2205+MXC_DCD_ITEM(43, MMDC_P0_BASE_ADDR + 0x80c, 0x002C0030)
2206+MXC_DCD_ITEM(44, MMDC_P0_BASE_ADDR + 0x810, 0x001C0022)
2207+
2208+MXC_DCD_ITEM(45, MMDC_P1_BASE_ADDR + 0x80c, 0x002E0031)
2209+MXC_DCD_ITEM(46, MMDC_P1_BASE_ADDR + 0x810, 0x003A004A)
2210+
2211+/* DQS gating, read delay, write delay calibration values based on calibration compare of 0x00ffff00 */
2212+MXC_DCD_ITEM(47, MMDC_P0_BASE_ADDR + 0x83c, 0x420A0207)
2213+MXC_DCD_ITEM(48, MMDC_P0_BASE_ADDR + 0x840, 0x01710177)
2214+MXC_DCD_ITEM(49, MMDC_P1_BASE_ADDR + 0x83c, 0x42160222)
2215+MXC_DCD_ITEM(50, MMDC_P1_BASE_ADDR + 0x840, 0x02010213)
2216+
2217+/* read calibration */
2218+MXC_DCD_ITEM(51, MMDC_P0_BASE_ADDR + 0x848, 0x484B4A48)
2219+MXC_DCD_ITEM(52, MMDC_P1_BASE_ADDR + 0x848, 0x4B4F4C49)
2220+
2221+/* write calibration */
2222+MXC_DCD_ITEM(53, MMDC_P0_BASE_ADDR + 0x850, 0x412A262B)
2223+MXC_DCD_ITEM(54, MMDC_P1_BASE_ADDR + 0x850, 0x2E2F2F2C)
2224+
2225+/* read data bit delay: (3 is the recommended default value, although out of reset value is 0) */
2226+MXC_DCD_ITEM(55, MMDC_P0_BASE_ADDR + 0x81c, 0x33333333)
2227+MXC_DCD_ITEM(56, MMDC_P0_BASE_ADDR + 0x820, 0x33333333)
2228+MXC_DCD_ITEM(57, MMDC_P0_BASE_ADDR + 0x824, 0x33333333)
2229+MXC_DCD_ITEM(58, MMDC_P0_BASE_ADDR + 0x828, 0x33333333)
2230+MXC_DCD_ITEM(59, MMDC_P1_BASE_ADDR + 0x81c, 0x33333333)
2231+MXC_DCD_ITEM(60, MMDC_P1_BASE_ADDR + 0x820, 0x33333333)
2232+MXC_DCD_ITEM(61, MMDC_P1_BASE_ADDR + 0x824, 0x33333333)
2233+MXC_DCD_ITEM(62, MMDC_P1_BASE_ADDR + 0x828, 0x33333333)
2234+
2235+/* complete calibration by forced measurment */
2236+MXC_DCD_ITEM(63, MMDC_P0_BASE_ADDR + 0x8b8, 0x00000800)
2237+MXC_DCD_ITEM(64, MMDC_P1_BASE_ADDR + 0x8b8, 0x00000800)
2238+
2239+/* MMDC init */
2240+/* in DDR3, 64-bit mode, only MMDC0 is initiated */
2241+MXC_DCD_ITEM(65, MMDC_P0_BASE_ADDR + 0x004, 0x00020036)
2242+MXC_DCD_ITEM(66, MMDC_P0_BASE_ADDR + 0x008, 0x09444040)
2243+MXC_DCD_ITEM(67, MMDC_P0_BASE_ADDR + 0x00c, 0x40445323)
2244+MXC_DCD_ITEM(68, MMDC_P0_BASE_ADDR + 0x010, 0xB66E8C63)
2245+MXC_DCD_ITEM(69, MMDC_P0_BASE_ADDR + 0x014, 0x01ff00db)
2246+MXC_DCD_ITEM(70, MMDC_P0_BASE_ADDR + 0x018, 0x00081740)
2247+
2248+MXC_DCD_ITEM(71, MMDC_P0_BASE_ADDR + 0x01c, 0x00008000)
2249+
2250+MXC_DCD_ITEM(72, MMDC_P0_BASE_ADDR + 0x02c, 0x000026d2)
2251+MXC_DCD_ITEM(73, MMDC_P0_BASE_ADDR + 0x030, 0x005b0e21)
2252+MXC_DCD_ITEM(74, MMDC_P0_BASE_ADDR + 0x040, 0x00000027)
2253+
2254+MXC_DCD_ITEM(75, MMDC_P0_BASE_ADDR + 0x000, 0x831A0000)
2255+
2256+/* Initialize 1GB DDR3 - Micron MT41J128M */
2257+MXC_DCD_ITEM(76, MMDC_P0_BASE_ADDR + 0x01c, 0x04008032)
2258+MXC_DCD_ITEM(77, MMDC_P0_BASE_ADDR + 0x01c, 0x0400803a)
2259+MXC_DCD_ITEM(78, MMDC_P0_BASE_ADDR + 0x01c, 0x00008033)
2260+MXC_DCD_ITEM(79, MMDC_P0_BASE_ADDR + 0x01c, 0x0000803b)
2261+MXC_DCD_ITEM(80, MMDC_P0_BASE_ADDR + 0x01c, 0x00428031)
2262+MXC_DCD_ITEM(81, MMDC_P0_BASE_ADDR + 0x01c, 0x00428039)
2263+MXC_DCD_ITEM(82, MMDC_P0_BASE_ADDR + 0x01c, 0x09208030)
2264+MXC_DCD_ITEM(83, MMDC_P0_BASE_ADDR + 0x01c, 0x09208038)
2265+
2266+/* DDR device ZQ calibration */
2267+MXC_DCD_ITEM(84, MMDC_P0_BASE_ADDR + 0x01c, 0x04008040)
2268+MXC_DCD_ITEM(85, MMDC_P0_BASE_ADDR + 0x01c, 0x04008048)
2269+
2270+/* final DDR setup, before operation start */
2271+MXC_DCD_ITEM(86, MMDC_P0_BASE_ADDR + 0x020, 0x00005800)
2272+MXC_DCD_ITEM(87, MMDC_P0_BASE_ADDR + 0x818, 0x00011117)
2273+MXC_DCD_ITEM(88, MMDC_P1_BASE_ADDR + 0x818, 0x00011117)
2274+
2275+MXC_DCD_ITEM(89, MMDC_P0_BASE_ADDR + 0x004, 0x00025576)
2276+MXC_DCD_ITEM(90, MMDC_P0_BASE_ADDR + 0x404, 0x00011006)
2277+MXC_DCD_ITEM(91, MMDC_P0_BASE_ADDR + 0x01c, 0x00000000)
2278+
2279+/* enable AXI cache for VDOA/VPU/IPU */
2280+MXC_DCD_ITEM(92, IOMUXC_BASE_ADDR + 0x010, 0xf00000ff)
2281+/* set IPU AXI-id0 Qos=0xf(bypass) AXI-id1 Qos=0x7 */
2282+MXC_DCD_ITEM(93, IOMUXC_BASE_ADDR + 0x018, 0x007f007f)
2283+MXC_DCD_ITEM(94, IOMUXC_BASE_ADDR + 0x01c, 0x007f007f)
2284+
2285+#endif
2286diff --git a/board/freescale/cgt_qmx6/flash_header_pn016104.S b/board/freescale/cgt_qmx6/flash_header_pn016104.S
2287new file mode 100644
2288index 0000000..8bbef35
2289--- /dev/null
2290+++ b/board/freescale/cgt_qmx6/flash_header_pn016104.S
2291@@ -0,0 +1,202 @@
2292+/*
2293+ * Copyright (C) 2011 Freescale Semiconductor, Inc.
2294+ *
2295+ * This program is free software; you can redistribute it and/or
2296+ * modify it under the terms of the GNU General Public License as
2297+ * published by the Free Software Foundation; either version 2 of
2298+ * the License, or (at your option) any later version.
2299+ *
2300+ * This program is distributed in the hope that it will be useful,
2301+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
2302+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
2303+ * GNU General Public License for more details.
2304+ *
2305+ * You should have received a copy of the GNU General Public License
2306+ * along with this program; if not, write to the Free Software
2307+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
2308+ * MA 02111-1307 USA
2309+ */
2310+
2311+#include <config.h>
2312+#include <asm/arch/mx6.h>
2313+
2314+#ifdef CONFIG_FLASH_HEADER
2315+#ifndef CONFIG_FLASH_HEADER_OFFSET
2316+# error "Must define the offset of flash header"
2317+#endif
2318+
2319+#define CPU_2_BE_32(l) \
2320+ ((((l) & 0x000000FF) << 24) | \
2321+ (((l) & 0x0000FF00) << 8) | \
2322+ (((l) & 0x00FF0000) >> 8) | \
2323+ (((l) & 0xFF000000) >> 24))
2324+
2325+#define MXC_DCD_ITEM(i, addr, val) \
2326+dcd_node_##i: \
2327+ .word CPU_2_BE_32(addr) ; \
2328+ .word CPU_2_BE_32(val) ; \
2329+
2330+.section ".text.flasheader", "x"
2331+ b _start
2332+ .org CONFIG_FLASH_HEADER_OFFSET
2333+
2334+ivt_header: .word 0x402000D1 /* Tag=0xD1, Len=0x0020, Ver=0x40 */
2335+app_code_jump_v: .word _start
2336+reserv1: .word 0x0
2337+dcd_ptr: .word dcd_hdr
2338+boot_data_ptr: .word boot_data
2339+self_ptr: .word ivt_header
2340+app_code_csf: .word 0x0
2341+reserv2: .word 0x0
2342+
2343+boot_data: .word TEXT_BASE
2344+image_len: .word _end_of_copy - TEXT_BASE + CONFIG_FLASH_HEADER_OFFSET
2345+plugin: .word 0x0
2346+
2347+dcd_hdr: .word 0x40F802D2 /* Tag=0xD2, Len=94*8 + 4 + 4, Ver=0x40 */
2348+write_dcd_cmd: .word 0x04F402CC /* Tag=0xCC, Len=94*8 + 4, Param=0x04 */
2349+
2350+/* DCD */
2351+
2352+/* DDR IO TYPE */
2353+MXC_DCD_ITEM(1, IOMUXC_BASE_ADDR + 0x798, 0x000C0000)
2354+MXC_DCD_ITEM(2, IOMUXC_BASE_ADDR + 0x758, 0x00000000)
2355+
2356+/* clock */
2357+MXC_DCD_ITEM(3, IOMUXC_BASE_ADDR + 0x588, 0x00000030)
2358+MXC_DCD_ITEM(4, IOMUXC_BASE_ADDR + 0x594, 0x00000030)
2359+
2360+/* address */
2361+MXC_DCD_ITEM(5, IOMUXC_BASE_ADDR + 0x56c, 0x00000030)
2362+MXC_DCD_ITEM(6, IOMUXC_BASE_ADDR + 0x578, 0x00000030)
2363+MXC_DCD_ITEM(7, IOMUXC_BASE_ADDR + 0x74c, 0x00000030)
2364+
2365+/* control */
2366+MXC_DCD_ITEM(8, IOMUXC_BASE_ADDR + 0x57c, 0x00000030)
2367+MXC_DCD_ITEM(9, IOMUXC_BASE_ADDR + 0x590, 0x00003000)
2368+MXC_DCD_ITEM(10, IOMUXC_BASE_ADDR + 0x598, 0x00003000)
2369+MXC_DCD_ITEM(11, IOMUXC_BASE_ADDR + 0x58c, 0x00000000)
2370+MXC_DCD_ITEM(12, IOMUXC_BASE_ADDR + 0x59c, 0x00003030)
2371+MXC_DCD_ITEM(13, IOMUXC_BASE_ADDR + 0x5a0, 0x00003030)
2372+MXC_DCD_ITEM(14, IOMUXC_BASE_ADDR + 0x78c, 0x00000030)
2373+
2374+/* data strobe */
2375+MXC_DCD_ITEM(15, IOMUXC_BASE_ADDR + 0x750, 0x00020000)
2376+
2377+MXC_DCD_ITEM(16, IOMUXC_BASE_ADDR + 0x5a8, 0x00000030)
2378+MXC_DCD_ITEM(17, IOMUXC_BASE_ADDR + 0x5b0, 0x00000030)
2379+MXC_DCD_ITEM(18, IOMUXC_BASE_ADDR + 0x524, 0x00000030)
2380+MXC_DCD_ITEM(19, IOMUXC_BASE_ADDR + 0x51c, 0x00000030)
2381+MXC_DCD_ITEM(20, IOMUXC_BASE_ADDR + 0x518, 0x00000030)
2382+MXC_DCD_ITEM(21, IOMUXC_BASE_ADDR + 0x50c, 0x00000030)
2383+MXC_DCD_ITEM(22, IOMUXC_BASE_ADDR + 0x5b8, 0x00000030)
2384+MXC_DCD_ITEM(23, IOMUXC_BASE_ADDR + 0x5c0, 0x00000030)
2385+
2386+/* data */
2387+MXC_DCD_ITEM(24, IOMUXC_BASE_ADDR + 0x774, 0x00020000)
2388+
2389+MXC_DCD_ITEM(25, IOMUXC_BASE_ADDR + 0x784, 0x00000030)
2390+MXC_DCD_ITEM(26, IOMUXC_BASE_ADDR + 0x788, 0x00000030)
2391+MXC_DCD_ITEM(27, IOMUXC_BASE_ADDR + 0x794, 0x00000030)
2392+MXC_DCD_ITEM(28, IOMUXC_BASE_ADDR + 0x79c, 0x00000030)
2393+MXC_DCD_ITEM(29, IOMUXC_BASE_ADDR + 0x7a0, 0x00000030)
2394+MXC_DCD_ITEM(30, IOMUXC_BASE_ADDR + 0x7a4, 0x00000030)
2395+MXC_DCD_ITEM(31, IOMUXC_BASE_ADDR + 0x7a8, 0x00000030)
2396+MXC_DCD_ITEM(32, IOMUXC_BASE_ADDR + 0x748, 0x00000030)
2397+
2398+MXC_DCD_ITEM(33, IOMUXC_BASE_ADDR + 0x5ac, 0x00000030)
2399+MXC_DCD_ITEM(34, IOMUXC_BASE_ADDR + 0x5b4, 0x00000030)
2400+MXC_DCD_ITEM(35, IOMUXC_BASE_ADDR + 0x528, 0x00000030)
2401+MXC_DCD_ITEM(36, IOMUXC_BASE_ADDR + 0x520, 0x00000030)
2402+MXC_DCD_ITEM(37, IOMUXC_BASE_ADDR + 0x514, 0x00000030)
2403+MXC_DCD_ITEM(38, IOMUXC_BASE_ADDR + 0x510, 0x00000030)
2404+MXC_DCD_ITEM(39, IOMUXC_BASE_ADDR + 0x5bc, 0x00000030)
2405+MXC_DCD_ITEM(40, IOMUXC_BASE_ADDR + 0x5c4, 0x00000030)
2406+
2407+/* calibrations */
2408+/* ZQ */
2409+MXC_DCD_ITEM(41, MMDC_P0_BASE_ADDR + 0x800, 0xA1390003)
2410+MXC_DCD_ITEM(42, MMDC_P1_BASE_ADDR + 0x800, 0xA1390003)
2411+
2412+/* write leveling */
2413+MXC_DCD_ITEM(43, MMDC_P0_BASE_ADDR + 0x80c, 0x001C001C)
2414+MXC_DCD_ITEM(44, MMDC_P0_BASE_ADDR + 0x810, 0x0024001F)
2415+
2416+MXC_DCD_ITEM(45, MMDC_P1_BASE_ADDR + 0x80c, 0x001A0037)
2417+MXC_DCD_ITEM(46, MMDC_P1_BASE_ADDR + 0x810, 0x001A002F)
2418+
2419+/* DQS gating, read delay, write delay calibration values based on calibration compare of 0x00ffff00 */
2420+MXC_DCD_ITEM(47, MMDC_P0_BASE_ADDR + 0x83c, 0x43050315)
2421+MXC_DCD_ITEM(48, MMDC_P0_BASE_ADDR + 0x840, 0x02720272)
2422+MXC_DCD_ITEM(49, MMDC_P1_BASE_ADDR + 0x83c, 0x03220325)
2423+MXC_DCD_ITEM(50, MMDC_P1_BASE_ADDR + 0x840, 0x0312026B)
2424+
2425+/* read calibration */
2426+MXC_DCD_ITEM(51, MMDC_P0_BASE_ADDR + 0x848, 0x43393A3B)
2427+MXC_DCD_ITEM(52, MMDC_P1_BASE_ADDR + 0x848, 0x3E433A43)
2428+
2429+/* write calibration */
2430+MXC_DCD_ITEM(53, MMDC_P0_BASE_ADDR + 0x850, 0x47444C47)
2431+MXC_DCD_ITEM(54, MMDC_P1_BASE_ADDR + 0x850, 0x4D334F46)
2432+
2433+/* read data bit delay: (3 is the recommended default value, although out of reset value is 0) */
2434+MXC_DCD_ITEM(55, MMDC_P0_BASE_ADDR + 0x81c, 0x33333333)
2435+MXC_DCD_ITEM(56, MMDC_P0_BASE_ADDR + 0x820, 0x33333333)
2436+MXC_DCD_ITEM(57, MMDC_P0_BASE_ADDR + 0x824, 0x33333333)
2437+MXC_DCD_ITEM(58, MMDC_P0_BASE_ADDR + 0x828, 0x33333333)
2438+MXC_DCD_ITEM(59, MMDC_P1_BASE_ADDR + 0x81c, 0x33333333)
2439+MXC_DCD_ITEM(60, MMDC_P1_BASE_ADDR + 0x820, 0x33333333)
2440+MXC_DCD_ITEM(61, MMDC_P1_BASE_ADDR + 0x824, 0x33333333)
2441+MXC_DCD_ITEM(62, MMDC_P1_BASE_ADDR + 0x828, 0x33333333)
2442+
2443+/* complete calibration by forced measurment */
2444+MXC_DCD_ITEM(63, MMDC_P0_BASE_ADDR + 0x8b8, 0x00000800)
2445+MXC_DCD_ITEM(64, MMDC_P1_BASE_ADDR + 0x8b8, 0x00000800)
2446+
2447+/* MMDC init */
2448+/* in DDR3, 64-bit mode, only MMDC0 is initiated */
2449+MXC_DCD_ITEM(65, MMDC_P0_BASE_ADDR + 0x004, 0x00020036)
2450+MXC_DCD_ITEM(66, MMDC_P0_BASE_ADDR + 0x008, 0x09444040)
2451+MXC_DCD_ITEM(67, MMDC_P0_BASE_ADDR + 0x00c, 0x40445323)
2452+MXC_DCD_ITEM(68, MMDC_P0_BASE_ADDR + 0x010, 0xB66E8C63)
2453+MXC_DCD_ITEM(69, MMDC_P0_BASE_ADDR + 0x014, 0x01ff00db)
2454+MXC_DCD_ITEM(70, MMDC_P0_BASE_ADDR + 0x018, 0x00091740)
2455+
2456+MXC_DCD_ITEM(71, MMDC_P0_BASE_ADDR + 0x01c, 0x00008000)
2457+
2458+MXC_DCD_ITEM(72, MMDC_P0_BASE_ADDR + 0x02c, 0x000026d2)
2459+MXC_DCD_ITEM(73, MMDC_P0_BASE_ADDR + 0x030, 0x005b0e21)
2460+MXC_DCD_ITEM(74, MMDC_P0_BASE_ADDR + 0x040, 0x00000047)
2461+
2462+MXC_DCD_ITEM(75, MMDC_P0_BASE_ADDR + 0x000, 0x841A0000)
2463+
2464+/* Initialize 2GB DDR3 - Micron MT41J128M */
2465+MXC_DCD_ITEM(76, MMDC_P0_BASE_ADDR + 0x01c, 0x04008032)
2466+MXC_DCD_ITEM(77, MMDC_P0_BASE_ADDR + 0x01c, 0x0400803a)
2467+MXC_DCD_ITEM(78, MMDC_P0_BASE_ADDR + 0x01c, 0x00008033)
2468+MXC_DCD_ITEM(79, MMDC_P0_BASE_ADDR + 0x01c, 0x0000803b)
2469+MXC_DCD_ITEM(80, MMDC_P0_BASE_ADDR + 0x01c, 0x00428031)
2470+MXC_DCD_ITEM(81, MMDC_P0_BASE_ADDR + 0x01c, 0x00428039)
2471+MXC_DCD_ITEM(82, MMDC_P0_BASE_ADDR + 0x01c, 0x07208030)
2472+MXC_DCD_ITEM(83, MMDC_P0_BASE_ADDR + 0x01c, 0x07208038)
2473+
2474+/* DDR device ZQ calibration */
2475+MXC_DCD_ITEM(84, MMDC_P0_BASE_ADDR + 0x01c, 0x04008040)
2476+MXC_DCD_ITEM(85, MMDC_P0_BASE_ADDR + 0x01c, 0x04008048)
2477+
2478+/* final DDR setup, before operation start */
2479+MXC_DCD_ITEM(86, MMDC_P0_BASE_ADDR + 0x020, 0x00005800)
2480+MXC_DCD_ITEM(87, MMDC_P0_BASE_ADDR + 0x818, 0x00011117)
2481+MXC_DCD_ITEM(88, MMDC_P1_BASE_ADDR + 0x818, 0x00011117)
2482+
2483+MXC_DCD_ITEM(89, MMDC_P0_BASE_ADDR + 0x004, 0x00025576)
2484+MXC_DCD_ITEM(90, MMDC_P0_BASE_ADDR + 0x404, 0x00011006)
2485+MXC_DCD_ITEM(91, MMDC_P0_BASE_ADDR + 0x01c, 0x00000000)
2486+
2487+/* enable AXI cache for VDOA/VPU/IPU */
2488+MXC_DCD_ITEM(92, IOMUXC_BASE_ADDR + 0x010, 0xf00000ff)
2489+/* set IPU AXI-id0 Qos=0xf(bypass) AXI-id1 Qos=0x7 */
2490+MXC_DCD_ITEM(93, IOMUXC_BASE_ADDR + 0x018, 0x007f007f)
2491+MXC_DCD_ITEM(94, IOMUXC_BASE_ADDR + 0x01c, 0x007f007f)
2492+
2493+#endif
2494diff --git a/board/freescale/cgt_qmx6/lowlevel_init.S b/board/freescale/cgt_qmx6/lowlevel_init.S
2495new file mode 100644
2496index 0000000..4a31cb0
2497--- /dev/null
2498+++ b/board/freescale/cgt_qmx6/lowlevel_init.S
2499@@ -0,0 +1,167 @@
2500+/*
2501+ * Copyright (C) 2011 Freescale Semiconductor, Inc.
2502+ *
2503+ * This program is free software; you can redistribute it and/or
2504+ * modify it under the terms of the GNU General Public License as
2505+ * published by the Free Software Foundation; either version 2 of
2506+ * the License, or (at your option) any later version.
2507+ *
2508+ * This program is distributed in the hope that it will be useful,
2509+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
2510+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
2511+ * GNU General Public License for more details.
2512+ *
2513+ * You should have received a copy of the GNU General Public License
2514+ * along with this program; if not, write to the Free Software
2515+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
2516+ * MA 02111-1307 USA
2517+ */
2518+
2519+#include <config.h>
2520+#include <asm/arch/mx6.h>
2521+
2522+/*
2523+ Disable L2Cache because ROM turn it on when uboot use plug-in.
2524+ If L2Cache is on default, there are cache coherence problem if kernel have
2525+ not config L2Cache.
2526+*/
2527+.macro init_l2cc
2528+ ldr r1, =0xa02000
2529+ ldr r0, =0x0
2530+ str r0, [r1, #0x100]
2531+.endm /* init_l2cc */
2532+
2533+/* invalidate the D-CACHE */
2534+.macro inv_dcache
2535+ mov r0,#0
2536+ mcr p15,2,r0,c0,c0,0 /* cache size selection register, select dcache */
2537+ mrc p15,1,r0,c0,c0,0 /* cache size ID register */
2538+ mov r0,r0,ASR #13
2539+ ldr r3,=0xfff
2540+ and r0,r0,r3
2541+ cmp r0,#0x7f
2542+ moveq r6,#0x1000
2543+ beq size_done
2544+ cmp r0,#0xff
2545+ moveq r6,#0x2000
2546+ movne r6,#0x4000
2547+
2548+size_done:
2549+ mov r2,#0
2550+ mov r3,#0x40000000
2551+ mov r4,#0x80000000
2552+ mov r5,#0xc0000000
2553+
2554+d_inv_loop:
2555+ mcr p15,0,r2,c7,c6,2 /* invalidate dcache by set / way */
2556+ mcr p15,0,r3,c7,c6,2 /* invalidate dcache by set / way */
2557+ mcr p15,0,r4,c7,c6,2 /* invalidate dcache by set / way */
2558+ mcr p15,0,r5,c7,c6,2 /* invalidate dcache by set / way */
2559+ add r2,r2,#0x20
2560+ add r3,r3,#0x20
2561+ add r4,r4,#0x20
2562+ add r5,r5,#0x20
2563+
2564+ cmp r2,r6
2565+ bne d_inv_loop
2566+.endm
2567+
2568+/* AIPS setup - Only setup MPROTx registers.
2569+ * The PACR default values are good.*/
2570+.macro init_aips
2571+ /*
2572+ * Set all MPROTx to be non-bufferable, trusted for R/W,
2573+ * not forced to user-mode.
2574+ */
2575+ ldr r0, =AIPS1_ON_BASE_ADDR
2576+ ldr r1, =0x77777777
2577+ str r1, [r0, #0x0]
2578+ str r1, [r0, #0x4]
2579+ ldr r1, =0x0
2580+ str r1, [r0, #0x40]
2581+ str r1, [r0, #0x44]
2582+ str r1, [r0, #0x48]
2583+ str r1, [r0, #0x4C]
2584+ str r1, [r0, #0x50]
2585+
2586+ ldr r0, =AIPS2_ON_BASE_ADDR
2587+ ldr r1, =0x77777777
2588+ str r1, [r0, #0x0]
2589+ str r1, [r0, #0x4]
2590+ ldr r1, =0x0
2591+ str r1, [r0, #0x40]
2592+ str r1, [r0, #0x44]
2593+ str r1, [r0, #0x48]
2594+ str r1, [r0, #0x4C]
2595+ str r1, [r0, #0x50]
2596+.endm /* init_aips */
2597+
2598+.macro setup_pll pll, freq
2599+.endm
2600+
2601+.macro init_clock
2602+
2603+/* PLL1, PLL2, and PLL3 are enabled by ROM */
2604+#ifdef CONFIG_PLL3
2605+ /* enable PLL3 for UART */
2606+ ldr r0, ANATOP_BASE_ADDR_W
2607+
2608+ /* power up PLL */
2609+ ldr r1, [r0, #ANATOP_USB1]
2610+ orr r1, r1, #0x1000
2611+ str r1, [r0, #ANATOP_USB1]
2612+
2613+ /* enable PLL */
2614+ ldr r1, [r0, #ANATOP_USB1]
2615+ orr r1, r1, #0x2000
2616+ str r1, [r0, #ANATOP_USB1]
2617+
2618+ /* wait PLL lock */
2619+100:
2620+ ldr r1, [r0, #ANATOP_USB1]
2621+ mov r1, r1, lsr #31
2622+ cmp r1, #0x1
2623+ bne 100b
2624+
2625+ /* clear bypass bit */
2626+ ldr r1, [r0, #ANATOP_USB1]
2627+ and r1, r1, #0xfffeffff
2628+ str r1, [r0, #ANATOP_USB1]
2629+#endif
2630+
2631+ /* Restore the default values in the Gate registers */
2632+ ldr r0, CCM_BASE_ADDR_W
2633+ ldr r1, =0xC0003F
2634+ str r1, [r0, #CLKCTL_CCGR0]
2635+ ldr r1, =0x30FC00
2636+ str r1, [r0, #CLKCTL_CCGR1]
2637+ ldr r1, =0xFFFC000
2638+ str r1, [r0, #CLKCTL_CCGR2]
2639+ ldr r1, =0x3FF00000
2640+ str r1, [r0, #CLKCTL_CCGR3]
2641+ ldr r1, =0xFFF300
2642+ str r1, [r0, #CLKCTL_CCGR4]
2643+ ldr r1, =0xF0000C3
2644+ str r1, [r0, #CLKCTL_CCGR5]
2645+ ldr r1, =0x03FF
2646+ str r1, [r0, #CLKCTL_CCGR6]
2647+.endm
2648+
2649+.section ".text.init", "x"
2650+
2651+.globl lowlevel_init
2652+lowlevel_init:
2653+
2654+ inv_dcache
2655+
2656+ init_l2cc
2657+
2658+ init_aips
2659+
2660+ init_clock
2661+
2662+ mov pc, lr
2663+
2664+/* Board level setting value */
2665+ANATOP_BASE_ADDR_W: .word ANATOP_BASE_ADDR
2666+CCM_BASE_ADDR_W: .word CCM_BASE_ADDR
2667diff --git a/board/freescale/cgt_qmx6/u-boot.lds b/board/freescale/cgt_qmx6/u-boot.lds
2668new file mode 100644
2669index 0000000..28ee8e0
2670--- /dev/null
2671+++ b/board/freescale/cgt_qmx6/u-boot.lds
2672@@ -0,0 +1,74 @@
2673+/*
2674+ * January 2004 - Changed to support H4 device
2675+ * Copyright (c) 2004 Texas Instruments
2676+ *
2677+ * (C) Copyright 2002
2678+ * Gary Jennejohn, DENX Software Engineering, <gj@denx.de>
2679+ *
2680+ * (C) Copyright 2011 Freescale Semiconductor, Inc.
2681+ *
2682+ * See file CREDITS for list of people who contributed to this
2683+ * project.
2684+ *
2685+ * This program is free software; you can redistribute it and/or
2686+ * modify it under the terms of the GNU General Public License as
2687+ * published by the Free Software Foundation; either version 2 of
2688+ * the License, or (at your option) any later version.
2689+ *
2690+ * This program is distributed in the hope that it will be useful,
2691+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
2692+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
2693+ * GNU General Public License for more details.
2694+ *
2695+ * You should have received a copy of the GNU General Public License
2696+ * along with this program; if not, write to the Free Software
2697+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
2698+ * MA 02111-1307 USA
2699+ */
2700+
2701+OUTPUT_FORMAT("elf32-littlearm", "elf32-littlearm", "elf32-littlearm")
2702+OUTPUT_ARCH(arm)
2703+ENTRY(_start)
2704+SECTIONS
2705+{
2706+ . = 0x00000000;
2707+
2708+ . = ALIGN(4);
2709+ .text :
2710+ {
2711+ /* WARNING - the following is hand-optimized to fit within */
2712+ /* the sector layout of our flash chips! XXX FIXME XXX */
2713+ board/freescale/cgt_qmx6/flash_header.o (.text.flasheader)
2714+ cpu/arm_cortexa8/start.o
2715+ board/freescale/cgt_qmx6/libcgt_qmx6.a (.text)
2716+ lib_arm/libarm.a (.text)
2717+ net/libnet.a (.text)
2718+ drivers/mtd/libmtd.a (.text)
2719+ drivers/mmc/libmmc.a (.text)
2720+
2721+ . = DEFINED(env_offset) ? env_offset : .;
2722+ common/env_embedded.o(.text)
2723+
2724+ *(.text)
2725+ }
2726+
2727+ . = ALIGN(4);
2728+ .rodata : { *(.rodata) }
2729+
2730+ . = ALIGN(4);
2731+ .data : { *(.data) }
2732+
2733+ . = ALIGN(4);
2734+ .got : { *(.got) }
2735+
2736+ . = .;
2737+ __u_boot_cmd_start = .;
2738+ .u_boot_cmd : { *(.u_boot_cmd) }
2739+ __u_boot_cmd_end = .;
2740+
2741+ . = ALIGN(4);
2742+ _end_of_copy = .; /* end_of ROM copy code here */
2743+ __bss_start = .;
2744+ .bss : { *(.bss) }
2745+ _end = .;
2746+}
2747diff --git a/common/cmd_mii.c b/common/cmd_mii.c
2748index 65e13c3..dfa45fe 100644
2749--- a/common/cmd_mii.c
2750+++ b/common/cmd_mii.c
2751@@ -300,12 +300,29 @@ int do_mii (cmd_tbl_t * cmdtp, int flag, int argc, char *argv[])
2752 unsigned short data;
2753 int rcode = 0;
2754 char *devname;
2755+ struct eth_device *current;
2756
2757 if (argc < 2) {
2758 cmd_usage(cmdtp);
2759 return 1;
2760 }
2761
2762+ current = eth_get_dev();
2763+ if (!current) {
2764+ puts ("No ethernet found.\n");
2765+ return -1;
2766+ }
2767+
2768+ if (current->state != ETH_STATE_ACTIVE)
2769+ {
2770+ eth_halt();
2771+ eth_set_current();
2772+ if (eth_init(NULL) < 0) {
2773+ eth_halt();
2774+ return(-1);
2775+ }
2776+ }
2777+
2778 #if defined(CONFIG_MII_INIT)
2779 mii_init ();
2780 #endif
2781diff --git a/drivers/mtd/spi/imx_spi_nor_sst.c b/drivers/mtd/spi/imx_spi_nor_sst.c
2782index d484a51..19ba1bf 100644
2783--- a/drivers/mtd/spi/imx_spi_nor_sst.c
2784+++ b/drivers/mtd/spi/imx_spi_nor_sst.c
2785@@ -61,9 +61,9 @@ static const struct imx_spi_flash_params imx_spi_flash_table[] = {
2786 {
2787 .idcode1 = 0x25,
2788 .block_size = SZ_64K,
2789- .block_count = 32,
2790- .device_size = SZ_64K * 32,
2791- .name = "SST25VF016B - 2MB",
2792+ .block_count = 64,
2793+ .device_size = SZ_64K * 64,
2794+ .name = "SST25VF032B - 4MB",
2795 },
2796 };
2797
2798@@ -184,6 +184,15 @@ static int spi_nor_erase_block(struct spi_flash *flash,
2799 block_addr);
2800 return -1;
2801 }
2802+
2803+ #ifndef CONFIG_MFGAREA_UNPROTECT
2804+ /* protect 16KB at the end of flash for manufacturing purpose */
2805+ if ((addr + block_size) > (flash->size - 16*1024))
2806+ {
2807+ printf("Error - tried to erase reserved area\n");
2808+ return -1;
2809+ }
2810+ #endif
2811
2812 if (ENABLE_WRITE_STATUS(flash) != 0 ||
2813 spi_nor_write_status(flash, 0) != 0) {
2814@@ -328,6 +337,15 @@ static int spi_nor_flash_write(struct spi_flash *flash, u32 offset,
2815 debug("%s(flash addr=0x%08x, ram=%p, len=0x%x)\n",
2816 __func__, offset, buf, len);
2817
2818+ #ifndef CONFIG_MFGAREA_UNPROTECT
2819+ /* protect 16KB at the end of flash for manufacturing purpose */
2820+ if ((d_addr + len) > (flash->size - 16*1024))
2821+ {
2822+ printf("Error - tried to write to reserved area\n");
2823+ return -1;
2824+ }
2825+ #endif
2826+
2827 if (ENABLE_WRITE_STATUS(flash) != 0 ||
2828 spi_nor_write_status(flash, 0) != 0) {
2829 printf("Error: %s: %d\n", __func__, __LINE__);
2830diff --git a/include/asm-arm/mach-types.h b/include/asm-arm/mach-types.h
2831index a1fee0e..06ec506 100644
2832--- a/include/asm-arm/mach-types.h
2833+++ b/include/asm-arm/mach-types.h
2834@@ -3259,6 +3259,7 @@ extern unsigned int __machine_arch_type;
2835 #define MACH_TYPE_MX6Q_ARM2 3837
2836 #define MACH_TYPE_MX6Q_SABRESD 3980
2837 #define MACH_TYPE_MX6SL_ARM2 4091
2838+#define MACH_TYPE_CGT_QMX6 4122
2839 #define MACH_TYPE_MX6Q_HDMIDONGLE 4284
2840 #define MACH_TYPE_MX6SL_EVK 4307
2841
2842@@ -42214,6 +42215,18 @@ extern unsigned int __machine_arch_type;
2843 # define machine_is_mx6sl_evk() (0)
2844 #endif
2845
2846+#ifdef CONFIG_MACH_CGT_QMX6
2847+# ifdef machine_arch_type
2848+# undef machine_arch_type
2849+# define machine_arch_type __machine_arch_type
2850+# else
2851+# define machine_arch_type MACH_TYPE_CGT_QMX6
2852+# endif
2853+# define machine_is_cgt_qmx6() (machine_arch_type == MACH_TYPE_CGT_QMX6)
2854+#else
2855+# define machine_is_cgt_qmx6() (0)
2856+#endif
2857+
2858 /*
2859 * These have not yet been registered
2860 */
2861diff --git a/include/configs/cgt_qmx6.h b/include/configs/cgt_qmx6.h
2862new file mode 100644
2863index 0000000..fdfe5c1
2864--- /dev/null
2865+++ b/include/configs/cgt_qmx6.h
2866@@ -0,0 +1,364 @@
2867+/*
2868+ * Copyright (C) 2011-2012 Freescale Semiconductor, Inc.
2869+ *
2870+ * Configuration settings for the congatec QMX6 i.MX6 cpu module.
2871+ *
2872+ * This program is free software; you can redistribute it and/or
2873+ * modify it under the terms of the GNU General Public License as
2874+ * published by the Free Software Foundation; either version 2 of
2875+ * the License, or (at your option) any later version.
2876+ *
2877+ * This program is distributed in the hope that it will be useful,
2878+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
2879+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
2880+ * GNU General Public License for more details.
2881+ *
2882+ * You should have received a copy of the GNU General Public License
2883+ * along with this program; if not, write to the Free Software
2884+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
2885+ * MA 02111-1307 USA
2886+ */
2887+
2888+#ifndef __CONFIG_H
2889+#define __CONFIG_H
2890+
2891+#include <asm/arch/mx6.h>
2892+
2893+/* congatec product selection */
2894+/* uncomment one of the configuration switches below in order to build a bootloader for conga-QMX6 */
2895+/* enabling CONFIG_QMX6_PN016104 builds a bootloader for conga-QMX6 module, part number 016104, equipped i.MX6 1GHz QuadCore, 2GByte onboard DDR3 memory */
2896+/* enabling CONFIG_QMX6_PN016101 builds a bootloader for conga-QMX6 module, part number 016101, equipped i.MX6 1GHz DualCore Lite, 1GByte onboard DDR3 memory */
2897+#define CONFIG_QMX6_PN016104
2898+//#define CONFIG_QMX6_PN016101
2899+
2900+/* uncomment in order to build special trace version of bootloader */
2901+// #define CONFIG_QMX6_TRACE
2902+
2903+ /* High Level Configuration Options */
2904+#define CONFIG_ARMV7 /* This is armv7 Cortex-A9 CPU core */
2905+#define CONFIG_MXC
2906+
2907+#ifdef CONFIG_QMX6_PN016101
2908+#define CONFIG_QMX6_PN 016101
2909+#define CONFIG_MX6DL
2910+#endif
2911+
2912+#ifdef CONFIG_QMX6_PN016104
2913+#define CONFIG_QMX6_PN 016104
2914+#define CONFIG_MX6Q
2915+#endif
2916+
2917+#define CONFIG_FLASH_HEADER
2918+#define CONFIG_FLASH_HEADER_OFFSET 0x400
2919+#define CONFIG_MX6_CLK32 32768
2920+
2921+#define CONFIG_SKIP_RELOCATE_UBOOT
2922+
2923+#define CONFIG_ARCH_CPU_INIT
2924+#undef CONFIG_ARCH_MMU /* disable MMU first */
2925+#define CONFIG_L2_OFF /* disable L2 cache first*/
2926+
2927+#define CONFIG_MX6_HCLK_FREQ 24000000
2928+
2929+#define CONFIG_DISPLAY_CPUINFO
2930+#define CONFIG_DISPLAY_BOARDINFO
2931+
2932+#define CONFIG_SYS_64BIT_VSPRINTF
2933+
2934+#define BOARD_LATE_INIT
2935+
2936+#define CONFIG_CMDLINE_TAG /* enable passing of ATAGs */
2937+#define CONFIG_REVISION_TAG
2938+#define CONFIG_SETUP_MEMORY_TAGS
2939+#define CONFIG_INITRD_TAG
2940+
2941+/*
2942+ * Size of malloc() pool
2943+ */
2944+#ifdef CONFIG_QMX6_PN016104
2945+#define CONFIG_SYS_MALLOC_LEN (2 * 1024 * 1024)
2946+#endif
2947+#ifdef CONFIG_QMX6_PN016101
2948+#define CONFIG_SYS_MALLOC_LEN (1 * 1024 * 1024)
2949+#endif
2950+/* size in bytes reserved for initial data */
2951+#define CONFIG_SYS_GBL_DATA_SIZE 128
2952+
2953+/*
2954+ * Hardware drivers
2955+ */
2956+#define CONFIG_MXC_UART
2957+#define CONFIG_UART_BASE_ADDR UART2_BASE_ADDR
2958+
2959+/* allow to overwrite serial and ethaddr */
2960+#define CONFIG_ENV_OVERWRITE
2961+#define CONFIG_CONS_INDEX 1
2962+#define CONFIG_BAUDRATE 115200
2963+#define CONFIG_SYS_BAUDRATE_TABLE {9600, 19200, 38400, 57600, 115200}
2964+
2965+/***********************************************************
2966+ * Command definition
2967+ ***********************************************************/
2968+
2969+#include <config_cmd_default.h>
2970+
2971+#define CONFIG_CMD_PING
2972+#define CONFIG_CMD_DHCP
2973+#define CONFIG_CMD_MII
2974+#define CONFIG_CMD_NET
2975+#define CONFIG_NET_RETRY_COUNT 100
2976+#define CONFIG_NET_MULTI 1
2977+#define CONFIG_BOOTP_SUBNETMASK
2978+#define CONFIG_BOOTP_GATEWAY
2979+#define CONFIG_BOOTP_DNS
2980+
2981+#define CONFIG_CMD_SPI
2982+#define CONFIG_CMD_I2C
2983+
2984+/* Enable below configure when supporting nand */
2985+
2986+#define CONFIG_CMD_MMC
2987+#define CONFIG_MMC_8BIT_PORTS 0x00000002
2988+#define CONFIG_CMD_SF
2989+#define CONFIG_CMD_ENV
2990+#define CONFIG_CMD_REGUL
2991+
2992+#define CONFIG_CMD_CLOCK
2993+#define CONFIG_REF_CLK_FREQ CONFIG_MX6_HCLK_FREQ
2994+
2995+#ifdef CONFIG_QMX6_PN016104
2996+#define CONFIG_CMD_SATA
2997+#endif
2998+#undef CONFIG_CMD_IMLS
2999+
3000+#define CONFIG_CMD_IMX_DOWNLOAD_MODE
3001+
3002+#define CONFIG_BOOTDELAY 3
3003+
3004+#define CONFIG_PRIME "FEC0"
3005+
3006+#define CONFIG_LOADADDR 0x10800000 /* loadaddr env var */
3007+#define CONFIG_RD_LOADADDR 0x11000000
3008+
3009+#define CONFIG_EXTRA_ENV_SETTINGS \
3010+ "netdev=eth0\0" \
3011+ "ethprime=FEC0\0" \
3012+ "ethaddr=00:00:00:00:00:00\0" \
3013+ "uboot=u-boot.bin\0" \
3014+ "kernel=uImage\0" \
3015+ "vid_dev0=hdmi,1920x1080M@60,if=RGB24\0" \
3016+ "vid_dev1=ldb,LDB-XGA,if=RGB666\0" \
3017+ "bootargs=console=ttymxc1,115200\0" \
3018+ "bootargs_base=setenv bootargs ${bootargs} " \
3019+ "video=mxcfb0:dev=${vid_dev0} " \
3020+ "video=mxcfb2:dev=${vid_dev1}\0" \
3021+ "bootargs_mmc=setenv bootargs ${bootargs} rootwait enable_wait_mode=on\0" \
3022+ "bootargs_nfs=setenv bootargs ${bootargs} root=/dev/nfs "\
3023+ "ip=dhcp nfsroot=${serverip}:${nfsroot},v3,tcp " \
3024+ "enable_wait_mode=off\0" \
3025+ "bootcmd_net=dhcp; run bootargs_base bootargs_nfs;bootm\0" \
3026+ "bootcmd_mmc=run bootargs_base bootargs_mmc;" \
3027+ "for disk in 0 1 2; do mmc dev ${disk};" \
3028+ "for fs in fat ext2 ; do " \
3029+ "${fs}load mmc ${disk}:1 10008000 " \
3030+ "/6q_bootscript && " \
3031+ "source 10008000 ; " \
3032+ "done ; " \
3033+ "done\0" \
3034+ "bootcmd=run bootcmd_mmc\0" \
3035+ "clearenv=sf probe 1 && sf erase 0xc0000 0x2000 && " \
3036+ "echo restored environment to factory default\0" \
3037+ "upgradeu=for disk in 0 1 2; do mmc dev ${disk} ;" \
3038+ "for fs in fat ext2 ; do " \
3039+ "${fs}load mmc ${disk}:1 10008000 " \
3040+ "/6q_upgrade && " \
3041+ "source 10008000 ; " \
3042+ "done ; " \
3043+ "done\0" \
3044+ "bootfile=_BOOT_FILE_PATH_IN_TFTP_\0" \
3045+ "nfsroot=_ROOTFS_PATH_IN_NFS_\0"
3046+
3047+
3048+#define CONFIG_ARP_TIMEOUT 200UL
3049+
3050+/*
3051+ * Miscellaneous configurable options
3052+ */
3053+#define CONFIG_SYS_LONGHELP /* undef to save memory */
3054+#define CONFIG_SYS_PROMPT "conga-QMX6 U-Boot > "
3055+#define CONFIG_AUTO_COMPLETE
3056+#define CONFIG_SYS_CBSIZE 256 /* Console I/O Buffer Size */
3057+/* Print Buffer Size */
3058+#define CONFIG_SYS_PBSIZE (CONFIG_SYS_CBSIZE + sizeof(CONFIG_SYS_PROMPT) + 16)
3059+#define CONFIG_SYS_MAXARGS 16 /* max number of command args */
3060+#define CONFIG_SYS_BARGSIZE CONFIG_SYS_CBSIZE /* Boot Argument Buffer Size */
3061+
3062+#define CONFIG_SYS_MEMTEST_START 0x10000000 /* memtest works on */
3063+#define CONFIG_SYS_MEMTEST_END 0x10010000
3064+
3065+#undef CONFIG_SYS_CLKS_IN_HZ /* everything, incl board info, in Hz */
3066+
3067+#define CONFIG_SYS_LOAD_ADDR CONFIG_LOADADDR
3068+
3069+#define CONFIG_SYS_HZ 1000
3070+
3071+#define CONFIG_CMDLINE_EDITING
3072+#define CONFIG_SYS_HUSH_PARSER 1 /* Use the HUSH parser */
3073+#ifdef CONFIG_SYS_HUSH_PARSER
3074+#define CONFIG_SYS_PROMPT_HUSH_PS2 "> "
3075+#endif
3076+
3077+#define CONFIG_FEC0_IOBASE ENET_BASE_ADDR
3078+#define CONFIG_FEC0_PINMUX -1
3079+#define CONFIG_FEC0_MIIBASE -1
3080+#define CONFIG_GET_FEC_MAC_ADDR_FROM_ENV
3081+#define CONFIG_GET_FEC_MAC_ADDR_FROM_IIM
3082+#define CONFIG_MXC_FEC
3083+#define CONFIG_FEC0_PHY_ADDR 6
3084+#define CONFIG_ETH_PRIME
3085+#define CONFIG_RMII
3086+#define CONFIG_PHY_MICREL_KSZ9021
3087+#define CONFIG_CMD_MII
3088+#define CONFIG_CMD_DHCP
3089+#define CONFIG_CMD_PING
3090+#define CONFIG_IPADDR 192.168.1.103
3091+
3092+/*The IP ADDRESS of SERVERIP*/
3093+#define CONFIG_SERVERIP _SERVER_IP_ADDR_
3094+
3095+#define CONFIG_NETMASK 255.255.255.0
3096+
3097+/*
3098+ * OCOTP Configs
3099+ */
3100+#ifdef CONFIG_CMD_IMXOTP
3101+ #define CONFIG_IMX_OTP
3102+ #define IMX_OTP_BASE OCOTP_BASE_ADDR
3103+ #define IMX_OTP_ADDR_MAX 0x7F
3104+ #define IMX_OTP_DATA_ERROR_VAL 0xBADABADA
3105+#endif
3106+
3107+/*
3108+ * I2C Configs
3109+ */
3110+#ifdef CONFIG_CMD_I2C
3111+ #define CONFIG_HARD_I2C 1
3112+ #define CONFIG_I2C_MXC 1
3113+ #define CONFIG_SYS_I2C_PORT I2C2_BASE_ADDR
3114+ #define CONFIG_SYS_I2C_SPEED 100000
3115+ #define CONFIG_SYS_I2C_SLAVE 0x08
3116+#endif
3117+
3118+/*
3119+ * SPI Configs
3120+ */
3121+#ifdef CONFIG_CMD_SF
3122+ #define CONFIG_FSL_SF 1
3123+ #define CONFIG_SPI_FLASH_IMX_SST 1
3124+ #define CONFIG_SPI_FLASH_CS 1
3125+ #define CONFIG_IMX_ECSPI
3126+ #define IMX_CSPI_VER_2_3 1
3127+ #define MAX_SPI_BYTES (64 * 4)
3128+#endif
3129+
3130+/* Regulator Configs */
3131+#ifdef CONFIG_CMD_REGUL
3132+ #define CONFIG_ANATOP_REGULATOR
3133+ #define CONFIG_CORE_REGULATOR_NAME "vdd1p1"
3134+ #define CONFIG_PERIPH_REGULATOR_NAME "vdd1p1"
3135+#endif
3136+
3137+/*
3138+ * MMC Configs
3139+ */
3140+#ifdef CONFIG_CMD_MMC
3141+ #define CONFIG_MMC
3142+ #define CONFIG_GENERIC_MMC
3143+ #define CONFIG_IMX_MMC
3144+ #define CONFIG_SYS_FSL_USDHC_NUM 3
3145+ #define CONFIG_SYS_FSL_ESDHC_ADDR 0
3146+ #define CONFIG_SYS_MMC_ENV_DEV 2
3147+ #define CONFIG_DOS_PARTITION 1
3148+ #define CONFIG_CMD_FAT 1
3149+ #define CONFIG_CMD_EXT2 1
3150+
3151+ /* detect whether SD1, 2, 3, or 4 is boot device */
3152+ #define CONFIG_DYNAMIC_MMC_DEVNO
3153+
3154+ /* Setup target delay in DDR mode for each SD port */
3155+ #define CONFIG_GET_DDR_TARGET_DELAY
3156+#endif
3157+
3158+/*
3159+ * SATA Configs
3160+ */
3161+#ifdef CONFIG_CMD_SATA
3162+ #define CONFIG_DWC_AHSATA
3163+ #define CONFIG_SYS_SATA_MAX_DEVICE 1
3164+ #define CONFIG_DWC_AHSATA_PORT_ID 0
3165+ #define CONFIG_DWC_AHSATA_BASE_ADDR SATA_ARB_BASE_ADDR
3166+ #define CONFIG_LBA48
3167+ #define CONFIG_LIBATA
3168+
3169+ #define CONFIG_DOS_PARTITION 1
3170+ #define CONFIG_CMD_FAT 1
3171+ #define CONFIG_CMD_EXT2 1
3172+#endif
3173+
3174+/*
3175+ * USB OTG
3176+ */
3177+#define CONFIG_IMX_UDC 1
3178+
3179+/*-----------------------------------------------------------------------
3180+ * Stack sizes
3181+ *
3182+ * The stack sizes are set up in start.S using the settings below
3183+ */
3184+#define CONFIG_STACKSIZE (128 * 1024) /* regular stack */
3185+
3186+/*-----------------------------------------------------------------------
3187+ * Physical Memory Map
3188+ */
3189+#define CONFIG_NR_DRAM_BANKS 1
3190+#define PHYS_SDRAM_1 CSD0_DDR_BASE_ADDR
3191+#ifdef CONFIG_QMX6_PN016104
3192+#define PHYS_SDRAM_1_SIZE (2u * 1024 * 1024 * 1024)
3193+#endif
3194+#ifdef CONFIG_QMX6_PN016101
3195+#define PHYS_SDRAM_1_SIZE (1u * 1024 * 1024 * 1024)
3196+#endif
3197+#define iomem_valid_addr(addr, size) \
3198+ (addr >= PHYS_SDRAM_1 && addr <= (PHYS_SDRAM_1 + PHYS_SDRAM_1_SIZE))
3199+
3200+/*-----------------------------------------------------------------------
3201+ * FLASH and environment organization
3202+ */
3203+#define CONFIG_SYS_NO_FLASH
3204+
3205+/* Monitor at beginning of flash */
3206+/* #define CONFIG_FSL_ENV_IN_MMC */
3207+/* #define CONFIG_FSL_ENV_IN_SATA */
3208+#define CONFIG_FSL_ENV_IN_SF
3209+
3210+#define CONFIG_ENV_SECT_SIZE (8 * 1024)
3211+#define CONFIG_ENV_SIZE CONFIG_ENV_SECT_SIZE
3212+
3213+#if defined(CONFIG_FSL_ENV_IN_NAND)
3214+ #define CONFIG_ENV_IS_IN_NAND 1
3215+ #define CONFIG_ENV_OFFSET 0x100000
3216+#elif defined(CONFIG_FSL_ENV_IN_MMC)
3217+ #define CONFIG_ENV_IS_IN_MMC 1
3218+ #define CONFIG_ENV_OFFSET (768 * 1024)
3219+#elif defined(CONFIG_FSL_ENV_IN_SATA)
3220+ #define CONFIG_ENV_IS_IN_SATA 1
3221+ #define CONFIG_SATA_ENV_DEV 0
3222+ #define CONFIG_ENV_OFFSET (768 * 1024)
3223+#elif defined(CONFIG_FSL_ENV_IN_SF)
3224+ #define CONFIG_ENV_IS_IN_SPI_FLASH 1
3225+ #define CONFIG_ENV_SPI_CS 1
3226+ #define CONFIG_ENV_OFFSET (768 * 1024)
3227+#else
3228+ #define CONFIG_ENV_IS_NOWHERE 1
3229+#endif
3230+#endif /* __CONFIG_H */
3231diff --git a/include/configs/cgt_qmx6_android.h b/include/configs/cgt_qmx6_android.h
3232new file mode 100644
3233index 0000000..9c3a80d
3234--- /dev/null
3235+++ b/include/configs/cgt_qmx6_android.h
3236@@ -0,0 +1,360 @@
3237+/*
3238+ * Copyright (C) 2011-2012 Freescale Semiconductor, Inc.
3239+ *
3240+ * Configuration settings for the MX6Q SABRE-Lite Freescale board.
3241+ *
3242+ * This program is free software; you can redistribute it and/or
3243+ * modify it under the terms of the GNU General Public License as
3244+ * published by the Free Software Foundation; either version 2 of
3245+ * the License, or (at your option) any later version.
3246+ *
3247+ * This program is distributed in the hope that it will be useful,
3248+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
3249+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
3250+ * GNU General Public License for more details.
3251+ *
3252+ * You should have received a copy of the GNU General Public License
3253+ * along with this program; if not, write to the Free Software
3254+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
3255+ * MA 02111-1307 USA
3256+ */
3257+
3258+#ifndef __CONFIG_H
3259+#define __CONFIG_H
3260+
3261+#include <asm/arch/mx6.h>
3262+
3263+/* congatec product selection */
3264+/* uncomment one of the configuration switches below in order to build a bootloader for conga-QMX6 */
3265+/* enabling CONFIG_QMX6_PN016104 builds a bootloader for conga-QMX6 module, part number 016104, equipped i.MX6 1GHz QuadCore, 2GByte onboard DDR3 memory */
3266+/* enabling CONFIG_QMX6_PN016101 builds a bootloader for conga-QMX6 module, part number 016101, equipped i.MX6 1GHz DualCore Lite, 1GByte onboard DDR3 memory */
3267+//#define CONFIG_QMX6_PN016104
3268+//#define CONFIG_QMX6_PN016101
3269+
3270+/* uncomment in order to build special trace version of bootloader */
3271+// #define CONFIG_QMX6_TRACE
3272+
3273+ /* High Level Configuration Options */
3274+#define CONFIG_ARMV7 /* This is armv7 Cortex-A9 CPU core */
3275+#define CONFIG_MXC
3276+
3277+#ifdef CONFIG_QMX6_PN016101
3278+#define CONFIG_QMX6_PN 016101
3279+#define CONFIG_MX6DL
3280+#endif
3281+
3282+#ifdef CONFIG_QMX6_PN016104
3283+#define CONFIG_QMX6_PN 016104
3284+#define CONFIG_MX6Q
3285+#endif
3286+
3287+#define CONFIG_FLASH_HEADER
3288+#define CONFIG_FLASH_HEADER_OFFSET 0x400
3289+#define CONFIG_MX6_CLK32 32768
3290+
3291+#define CONFIG_SKIP_RELOCATE_UBOOT
3292+
3293+#define CONFIG_ARCH_CPU_INIT
3294+#undef CONFIG_ARCH_MMU /* disable MMU first */
3295+#define CONFIG_L2_OFF /* disable L2 cache first*/
3296+
3297+#define CONFIG_MX6_HCLK_FREQ 24000000
3298+
3299+#define CONFIG_DISPLAY_CPUINFO
3300+#define CONFIG_DISPLAY_BOARDINFO
3301+
3302+#define CONFIG_SYS_64BIT_VSPRINTF
3303+
3304+#define BOARD_LATE_INIT
3305+
3306+#define CONFIG_CMDLINE_TAG /* enable passing of ATAGs */
3307+#define CONFIG_REVISION_TAG
3308+#define CONFIG_SETUP_MEMORY_TAGS
3309+#define CONFIG_INITRD_TAG
3310+
3311+/*
3312+ * Size of malloc() pool
3313+ */
3314+#ifdef CONFIG_QMX6_PN016104
3315+#define CONFIG_SYS_MALLOC_LEN (2 * 1024 * 1024)
3316+#endif
3317+#ifdef CONFIG_QMX6_PN016101
3318+#define CONFIG_SYS_MALLOC_LEN (1 * 1024 * 1024)
3319+#endif
3320+/* size in bytes reserved for initial data */
3321+#define CONFIG_SYS_GBL_DATA_SIZE 128
3322+
3323+/*
3324+ * Hardware drivers
3325+ */
3326+#define CONFIG_MXC_UART
3327+#define CONFIG_UART_BASE_ADDR UART2_BASE_ADDR
3328+
3329+/* allow to overwrite serial and ethaddr */
3330+#define CONFIG_ENV_OVERWRITE
3331+#define CONFIG_CONS_INDEX 1
3332+#define CONFIG_BAUDRATE 115200
3333+#define CONFIG_SYS_BAUDRATE_TABLE {9600, 19200, 38400, 57600, 115200}
3334+
3335+/* Android related config */
3336+#define CONFIG_USB_DEVICE
3337+#define CONFIG_IMX_UDC 1
3338+#define CONFIG_FASTBOOT 1
3339+#define CONFIG_FASTBOOT_STORAGE_EMMC_SATA
3340+#define CONFIG_FASTBOOT_VENDOR_ID 0xbb4
3341+#define CONFIG_FASTBOOT_PRODUCT_ID 0xc01
3342+#define CONFIG_FASTBOOT_BCD_DEVICE 0x311
3343+#define CONFIG_FASTBOOT_MANUFACTURER_STR "Freescale"
3344+#define CONFIG_FASTBOOT_PRODUCT_NAME_STR "i.mx6q qmx6"
3345+#define CONFIG_FASTBOOT_INTERFACE_STR "Android fastboot"
3346+#define CONFIG_FASTBOOT_CONFIGURATION_STR "Android fastboot"
3347+#define CONFIG_FASTBOOT_SERIAL_NUM "12345"
3348+#define CONFIG_FASTBOOT_SATA_NO 0
3349+#define CONFIG_FASTBOOT_TRANSFER_BUF 0x30000000
3350+#define CONFIG_FASTBOOT_TRANSFER_BUF_SIZE 0x10000000 /* 256M byte */
3351+
3352+#define CONFIG_CMD_BOOTI
3353+#define CONFIG_ANDROID_RECOVERY
3354+#define CONFIG_ANDROID_BOOT_PARTITION_MMC 1
3355+#define CONFIG_ANDROID_SYSTEM_PARTITION_MMC 5
3356+#define CONFIG_ANDROID_RECOVERY_PARTITION_MMC 2
3357+#define CONFIG_ANDROID_CACHE_PARTITION_MMC 6
3358+
3359+#define CONFIG_ANDROID_RECOVERY_BOOTARGS_MMC NULL
3360+#define CONFIG_ANDROID_RECOVERY_BOOTCMD_MMC \
3361+ "booti mmc1 recovery"
3362+#define CONFIG_ANDROID_RECOVERY_CMD_FILE "/recovery/command"
3363+
3364+/***********************************************************
3365+ * Command definition
3366+ ***********************************************************/
3367+
3368+#include <config_cmd_default.h>
3369+
3370+#define CONFIG_CMD_PING
3371+#define CONFIG_CMD_DHCP
3372+#define CONFIG_CMD_MII
3373+#define CONFIG_CMD_NET
3374+#define CONFIG_NET_RETRY_COUNT 100
3375+#define CONFIG_NET_MULTI 1
3376+#define CONFIG_BOOTP_SUBNETMASK
3377+#define CONFIG_BOOTP_GATEWAY
3378+#define CONFIG_BOOTP_DNS
3379+
3380+#define CONFIG_CMD_SPI
3381+#define CONFIG_CMD_I2C
3382+
3383+/* Enable below configure when supporting nand */
3384+
3385+#define CONFIG_CMD_MMC
3386+#define CONFIG_MMC_8BIT_PORTS 0x00000002
3387+#define CONFIG_CMD_SF
3388+#define CONFIG_CMD_ENV
3389+#define CONFIG_CMD_REGUL
3390+
3391+#define CONFIG_CMD_CLOCK
3392+#define CONFIG_REF_CLK_FREQ CONFIG_MX6_HCLK_FREQ
3393+
3394+#ifdef CONFIG_QMX6_PN016104
3395+#define CONFIG_CMD_SATA
3396+#endif
3397+#undef CONFIG_CMD_IMLS
3398+
3399+#define CONFIG_CMD_IMX_DOWNLOAD_MODE
3400+
3401+#define CONFIG_BOOTDELAY 3
3402+
3403+#define CONFIG_PRIME "FEC0"
3404+
3405+#define CONFIG_LOADADDR 0x10800000 /* loadaddr env var */
3406+#define CONFIG_RD_LOADADDR 0x11000000
3407+
3408+#define CONFIG_INITRD_TAG
3409+
3410+#define CONFIG_EXTRA_ENV_SETTINGS \
3411+ "netdev=eth0\0" \
3412+ "ethprime=FEC0\0" \
3413+ "bootcmd=booti mmc1\0"
3414+#define CONFIG_ARP_TIMEOUT 200UL
3415+
3416+/*
3417+ * Miscellaneous configurable options
3418+ */
3419+#define CONFIG_SYS_LONGHELP /* undef to save memory */
3420+#define CONFIG_SYS_PROMPT "conga-QMX6 U-Boot > "
3421+#define CONFIG_AUTO_COMPLETE
3422+#define CONFIG_SYS_CBSIZE 256 /* Console I/O Buffer Size */
3423+/* Print Buffer Size */
3424+#define CONFIG_SYS_PBSIZE (CONFIG_SYS_CBSIZE + sizeof(CONFIG_SYS_PROMPT) + 16)
3425+#define CONFIG_SYS_MAXARGS 16 /* max number of command args */
3426+#define CONFIG_SYS_BARGSIZE CONFIG_SYS_CBSIZE /* Boot Argument Buffer Size */
3427+
3428+#define CONFIG_SYS_MEMTEST_START 0x10000000 /* memtest works on */
3429+#define CONFIG_SYS_MEMTEST_END 0x10010000
3430+
3431+#undef CONFIG_SYS_CLKS_IN_HZ /* everything, incl board info, in Hz */
3432+
3433+#define CONFIG_SYS_LOAD_ADDR CONFIG_LOADADDR
3434+
3435+#define CONFIG_SYS_HZ 1000
3436+
3437+#define CONFIG_CMDLINE_EDITING
3438+#define CONFIG_SYS_HUSH_PARSER 1 /* Use the HUSH parser */
3439+#ifdef CONFIG_SYS_HUSH_PARSER
3440+#define CONFIG_SYS_PROMPT_HUSH_PS2 "> "
3441+#endif
3442+
3443+#define CONFIG_FEC0_IOBASE ENET_BASE_ADDR
3444+#define CONFIG_FEC0_PINMUX -1
3445+#define CONFIG_FEC0_MIIBASE -1
3446+#define CONFIG_GET_FEC_MAC_ADDR_FROM_ENV
3447+#define CONFIG_GET_FEC_MAC_ADDR_FROM_IIM
3448+#define CONFIG_MXC_FEC
3449+#define CONFIG_FEC0_PHY_ADDR 6
3450+#define CONFIG_ETH_PRIME
3451+#define CONFIG_RMII
3452+#define CONFIG_PHY_MICREL_KSZ9021
3453+#define CONFIG_CMD_MII
3454+#define CONFIG_CMD_DHCP
3455+#define CONFIG_CMD_PING
3456+#define CONFIG_IPADDR 192.168.1.103
3457+
3458+/*The IP ADDRESS of SERVERIP*/
3459+#define CONFIG_SERVERIP _SERVER_IP_ADDR_
3460+
3461+#define CONFIG_NETMASK 255.255.255.0
3462+
3463+/*
3464+ * OCOTP Configs
3465+ */
3466+#ifdef CONFIG_CMD_IMXOTP
3467+ #define CONFIG_IMX_OTP
3468+ #define IMX_OTP_BASE OCOTP_BASE_ADDR
3469+ #define IMX_OTP_ADDR_MAX 0x7F
3470+ #define IMX_OTP_DATA_ERROR_VAL 0xBADABADA
3471+#endif
3472+
3473+/*
3474+ * I2C Configs
3475+ */
3476+#ifdef CONFIG_CMD_I2C
3477+ #define CONFIG_HARD_I2C 1
3478+ #define CONFIG_I2C_MXC 1
3479+ #define CONFIG_SYS_I2C_PORT I2C2_BASE_ADDR
3480+ #define CONFIG_SYS_I2C_SPEED 100000
3481+ #define CONFIG_SYS_I2C_SLAVE 0x08
3482+#endif
3483+
3484+/*
3485+ * SPI Configs
3486+ */
3487+#ifdef CONFIG_CMD_SF
3488+ #define CONFIG_FSL_SF 1
3489+ #define CONFIG_SPI_FLASH_IMX_SST 1
3490+ #define CONFIG_SPI_FLASH_CS 1
3491+ #define CONFIG_IMX_ECSPI
3492+ #define IMX_CSPI_VER_2_3 1
3493+ #define MAX_SPI_BYTES (64 * 4)
3494+#endif
3495+
3496+/* Regulator Configs */
3497+#ifdef CONFIG_CMD_REGUL
3498+ #define CONFIG_ANATOP_REGULATOR
3499+ #define CONFIG_CORE_REGULATOR_NAME "vdd1p1"
3500+ #define CONFIG_PERIPH_REGULATOR_NAME "vdd1p1"
3501+#endif
3502+
3503+/*
3504+ * MMC Configs
3505+ */
3506+#ifdef CONFIG_CMD_MMC
3507+ #define CONFIG_MMC
3508+ #define CONFIG_GENERIC_MMC
3509+ #define CONFIG_IMX_MMC
3510+ #define CONFIG_SYS_FSL_USDHC_NUM 3
3511+ #define CONFIG_SYS_FSL_ESDHC_ADDR 0
3512+ #define CONFIG_SYS_MMC_ENV_DEV 2
3513+ #define CONFIG_DOS_PARTITION 1
3514+ #define CONFIG_CMD_FAT 1
3515+ #define CONFIG_CMD_EXT2 1
3516+
3517+ /* detect whether SD1, 2, 3, or 4 is boot device */
3518+ #define CONFIG_DYNAMIC_MMC_DEVNO
3519+
3520+ /* Setup target delay in DDR mode for each SD port */
3521+ #define CONFIG_GET_DDR_TARGET_DELAY
3522+#endif
3523+
3524+/*
3525+ * SATA Configs
3526+ */
3527+#ifdef CONFIG_CMD_SATA
3528+ #define CONFIG_DWC_AHSATA
3529+ #define CONFIG_SYS_SATA_MAX_DEVICE 1
3530+ #define CONFIG_DWC_AHSATA_PORT_ID 0
3531+ #define CONFIG_DWC_AHSATA_BASE_ADDR SATA_ARB_BASE_ADDR
3532+ #define CONFIG_LBA48
3533+ #define CONFIG_LIBATA
3534+
3535+ #define CONFIG_DOS_PARTITION 1
3536+ #define CONFIG_CMD_FAT 1
3537+ #define CONFIG_CMD_EXT2 1
3538+#endif
3539+
3540+/*
3541+ * USB OTG
3542+ */
3543+#define CONFIG_IMX_UDC 1
3544+
3545+/*-----------------------------------------------------------------------
3546+ * Stack sizes
3547+ *
3548+ * The stack sizes are set up in start.S using the settings below
3549+ */
3550+#define CONFIG_STACKSIZE (128 * 1024) /* regular stack */
3551+
3552+/*-----------------------------------------------------------------------
3553+ * Physical Memory Map
3554+ */
3555+#define CONFIG_NR_DRAM_BANKS 1
3556+#define PHYS_SDRAM_1 CSD0_DDR_BASE_ADDR
3557+#ifdef CONFIG_QMX6_PN016104
3558+#define PHYS_SDRAM_1_SIZE (2u * 1024 * 1024 * 1024)
3559+#endif
3560+#ifdef CONFIG_QMX6_PN016101
3561+#define PHYS_SDRAM_1_SIZE (1u * 1024 * 1024 * 1024)
3562+#endif
3563+#define iomem_valid_addr(addr, size) \
3564+ (addr >= PHYS_SDRAM_1 && addr <= (PHYS_SDRAM_1 + PHYS_SDRAM_1_SIZE))
3565+
3566+/*-----------------------------------------------------------------------
3567+ * FLASH and environment organization
3568+ */
3569+#define CONFIG_SYS_NO_FLASH
3570+
3571+/* Monitor at beginning of flash */
3572+/* #define CONFIG_FSL_ENV_IN_MMC */
3573+/* #define CONFIG_FSL_ENV_IN_SATA */
3574+#define CONFIG_FSL_ENV_IN_SF
3575+
3576+#define CONFIG_ENV_SECT_SIZE (8 * 1024)
3577+#define CONFIG_ENV_SIZE CONFIG_ENV_SECT_SIZE
3578+
3579+#if defined(CONFIG_FSL_ENV_IN_NAND)
3580+ #define CONFIG_ENV_IS_IN_NAND 1
3581+ #define CONFIG_ENV_OFFSET 0x100000
3582+#elif defined(CONFIG_FSL_ENV_IN_MMC)
3583+ #define CONFIG_ENV_IS_IN_MMC 1
3584+ #define CONFIG_ENV_OFFSET (768 * 1024)
3585+#elif defined(CONFIG_FSL_ENV_IN_SATA)
3586+ #define CONFIG_ENV_IS_IN_SATA 1
3587+ #define CONFIG_SATA_ENV_DEV 0
3588+ #define CONFIG_ENV_OFFSET (768 * 1024)
3589+#elif defined(CONFIG_FSL_ENV_IN_SF)
3590+ #define CONFIG_ENV_IS_IN_SPI_FLASH 1
3591+ #define CONFIG_ENV_SPI_CS 1
3592+ #define CONFIG_ENV_OFFSET (768 * 1024)
3593+#else
3594+ #define CONFIG_ENV_IS_NOWHERE 1
3595+#endif
3596+#endif /* __CONFIG_H */
3597diff --git a/include/configs/cgt_qmx6_mfg.h b/include/configs/cgt_qmx6_mfg.h
3598new file mode 100644
3599index 0000000..8a8ba20
3600--- /dev/null
3601+++ b/include/configs/cgt_qmx6_mfg.h
3602@@ -0,0 +1,320 @@
3603+/*
3604+ * Copyright (C) 2011-2012 Freescale Semiconductor, Inc.
3605+ *
3606+ * Configuration settings for the MX6Q SABRE-Lite Freescale board.
3607+ *
3608+ * This program is free software; you can redistribute it and/or
3609+ * modify it under the terms of the GNU General Public License as
3610+ * published by the Free Software Foundation; either version 2 of
3611+ * the License, or (at your option) any later version.
3612+ *
3613+ * This program is distributed in the hope that it will be useful,
3614+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
3615+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
3616+ * GNU General Public License for more details.
3617+ *
3618+ * You should have received a copy of the GNU General Public License
3619+ * along with this program; if not, write to the Free Software
3620+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
3621+ * MA 02111-1307 USA
3622+ */
3623+
3624+#ifndef __CONFIG_H
3625+#define __CONFIG_H
3626+
3627+#include <asm/arch/mx6.h>
3628+
3629+/* congatec product selection */
3630+/* uncomment one of the configuration switches below in order to build a bootloader for conga-QMX6 */
3631+/* enabling CONFIG_QMX6_PN016104 builds a bootloader for conga-QMX6 module, part number 016104, equipped i.MX6 1GHz QuadCore, 2GByte onboard DDR3 memory */
3632+/* enabling CONFIG_QMX6_PN016101 builds a bootloader for conga-QMX6 module, part number 016101, equipped i.MX6 1GHz DualCore Lite, 1GByte onboard DDR3 memory */
3633+//#define CONFIG_QMX6_PN016104
3634+//#define CONFIG_QMX6_PN016101
3635+
3636+/* uncomment in order to build special trace version of bootloader */
3637+// #define CONFIG_QMX6_TRACE
3638+
3639+ /* High Level Configuration Options */
3640+#define CONFIG_MFG
3641+#define CONFIG_ARMV7 /* This is armv7 Cortex-A9 CPU core */
3642+#define CONFIG_MXC
3643+
3644+#ifdef CONFIG_QMX6_PN016101
3645+#define CONFIG_QMX6_PN 016101
3646+#define CONFIG_MX6DL
3647+#endif
3648+
3649+#ifdef CONFIG_QMX6_PN016104
3650+#define CONFIG_QMX6_PN 016104
3651+#define CONFIG_MX6Q
3652+#endif
3653+
3654+#define CONFIG_FLASH_HEADER
3655+#define CONFIG_FLASH_HEADER_OFFSET 0x400
3656+#define CONFIG_MX6_CLK32 32768
3657+
3658+#define CONFIG_SKIP_RELOCATE_UBOOT
3659+
3660+#define CONFIG_ARCH_CPU_INIT
3661+#undef CONFIG_ARCH_MMU /* disable MMU first */
3662+#define CONFIG_L2_OFF /* disable L2 cache first*/
3663+
3664+#define CONFIG_MX6_HCLK_FREQ 24000000
3665+
3666+#define CONFIG_DISPLAY_CPUINFO
3667+#define CONFIG_DISPLAY_BOARDINFO
3668+
3669+#define CONFIG_SYS_64BIT_VSPRINTF
3670+
3671+#define BOARD_LATE_INIT
3672+
3673+#define CONFIG_CMDLINE_TAG /* enable passing of ATAGs */
3674+#define CONFIG_REVISION_TAG
3675+#define CONFIG_SETUP_MEMORY_TAGS
3676+#define CONFIG_INITRD_TAG
3677+
3678+/*
3679+ * Size of malloc() pool
3680+ */
3681+#ifdef CONFIG_QMX6_PN016104
3682+#define CONFIG_SYS_MALLOC_LEN (2 * 1024 * 1024)
3683+#endif
3684+#ifdef CONFIG_QMX6_PN016101
3685+#define CONFIG_SYS_MALLOC_LEN (1 * 1024 * 1024)
3686+#endif
3687+/* size in bytes reserved for initial data */
3688+#define CONFIG_SYS_GBL_DATA_SIZE 128
3689+
3690+/*
3691+ * Hardware drivers
3692+ */
3693+#define CONFIG_MXC_UART
3694+#define CONFIG_UART_BASE_ADDR UART2_BASE_ADDR
3695+
3696+/* allow to overwrite serial and ethaddr */
3697+#define CONFIG_ENV_OVERWRITE
3698+#define CONFIG_CONS_INDEX 1
3699+#define CONFIG_BAUDRATE 115200
3700+#define CONFIG_SYS_BAUDRATE_TABLE {9600, 19200, 38400, 57600, 115200}
3701+
3702+/***********************************************************
3703+ * Command definition
3704+ ***********************************************************/
3705+
3706+#include <config_cmd_default.h>
3707+
3708+#define CONFIG_CMD_PING
3709+#define CONFIG_CMD_DHCP
3710+#define CONFIG_CMD_MII
3711+#define CONFIG_CMD_NET
3712+#define CONFIG_NET_RETRY_COUNT 100
3713+#define CONFIG_NET_MULTI 1
3714+#define CONFIG_BOOTP_SUBNETMASK
3715+#define CONFIG_BOOTP_GATEWAY
3716+#define CONFIG_BOOTP_DNS
3717+
3718+#define CONFIG_CMD_SPI
3719+#define CONFIG_CMD_I2C
3720+#define CONFIG_CMD_IMXOTP
3721+
3722+/* Enable below configure when supporting nand */
3723+
3724+#define CONFIG_CMD_MMC
3725+#define CONFIG_MMC_8BIT_PORTS 0x00000002
3726+#define CONFIG_CMD_SF
3727+#define CONFIG_CMD_ENV
3728+#define CONFIG_CMD_REGUL
3729+
3730+#define CONFIG_CMD_CLOCK
3731+#define CONFIG_REF_CLK_FREQ CONFIG_MX6_HCLK_FREQ
3732+
3733+#ifdef CONFIG_QMX6_PN016104
3734+#define CONFIG_CMD_SATA
3735+#endif
3736+#undef CONFIG_CMD_IMLS
3737+
3738+#define CONFIG_BOOTDELAY 3
3739+
3740+#define CONFIG_PRIME "FEC0"
3741+
3742+#define CONFIG_LOADADDR 0x10800000 /* loadaddr env var */
3743+#define CONFIG_RD_LOADADDR 0x11000000
3744+
3745+#define CONFIG_BOOTARGS "console=ttymxc1,115200 rdinit=/linuxrc rootwait root=/dev/ram0"
3746+#define CONFIG_BOOTCOMMAND "bootm 0x10800000 0x11000000"
3747+
3748+#define CONFIG_EXTRA_ENV_SETTINGS \
3749+ "netdev=eth0\0" \
3750+ "ethprime=FEC0\0" \
3751+ "uboot=u-boot.bin\0" \
3752+ "kernel=uImage\0" \
3753+
3754+
3755+#define CONFIG_ARP_TIMEOUT 200UL
3756+
3757+/*
3758+ * Miscellaneous configurable options
3759+ */
3760+#define CONFIG_SYS_LONGHELP /* undef to save memory */
3761+#define CONFIG_SYS_PROMPT "conga-QMX6-MFG U-Boot > "
3762+#define CONFIG_AUTO_COMPLETE
3763+#define CONFIG_SYS_CBSIZE 256 /* Console I/O Buffer Size */
3764+/* Print Buffer Size */
3765+#define CONFIG_SYS_PBSIZE (CONFIG_SYS_CBSIZE + sizeof(CONFIG_SYS_PROMPT) + 16)
3766+#define CONFIG_SYS_MAXARGS 16 /* max number of command args */
3767+#define CONFIG_SYS_BARGSIZE CONFIG_SYS_CBSIZE /* Boot Argument Buffer Size */
3768+
3769+#define CONFIG_SYS_MEMTEST_START 0x10000000 /* memtest works on */
3770+#define CONFIG_SYS_MEMTEST_END 0x10010000
3771+
3772+#undef CONFIG_SYS_CLKS_IN_HZ /* everything, incl board info, in Hz */
3773+
3774+#define CONFIG_SYS_LOAD_ADDR CONFIG_LOADADDR
3775+
3776+#define CONFIG_SYS_HZ 1000
3777+
3778+#define CONFIG_CMDLINE_EDITING
3779+#define CONFIG_SYS_HUSH_PARSER 1 /* Use the HUSH parser */
3780+#ifdef CONFIG_SYS_HUSH_PARSER
3781+#define CONFIG_SYS_PROMPT_HUSH_PS2 "> "
3782+#endif
3783+
3784+#define CONFIG_FEC0_IOBASE ENET_BASE_ADDR
3785+#define CONFIG_FEC0_PINMUX -1
3786+#define CONFIG_FEC0_MIIBASE -1
3787+#define CONFIG_GET_FEC_MAC_ADDR_FROM_ENV
3788+#define CONFIG_GET_FEC_MAC_ADDR_FROM_IIM
3789+#define CONFIG_MXC_FEC
3790+#define CONFIG_FEC0_PHY_ADDR 6
3791+#define CONFIG_ETH_PRIME
3792+#define CONFIG_RMII
3793+#define CONFIG_PHY_MICREL_KSZ9021
3794+#define CONFIG_CMD_MII
3795+#define CONFIG_CMD_DHCP
3796+#define CONFIG_CMD_PING
3797+#define CONFIG_IPADDR 192.168.1.103
3798+
3799+/*The IP ADDRESS of SERVERIP*/
3800+#define CONFIG_SERVERIP _SERVER_IP_ADDR_
3801+
3802+#define CONFIG_NETMASK 255.255.255.0
3803+
3804+/*
3805+ * OCOTP Configs
3806+ */
3807+#ifdef CONFIG_CMD_IMXOTP
3808+ #define CONFIG_IMX_OTP
3809+ #define IMX_OTP_BASE OCOTP_BASE_ADDR
3810+ #define IMX_OTP_ADDR_MAX 0x7F
3811+ #define IMX_OTP_DATA_ERROR_VAL 0xBADABADA
3812+#endif
3813+
3814+/*
3815+ * I2C Configs
3816+ */
3817+#ifdef CONFIG_CMD_I2C
3818+ #define CONFIG_HARD_I2C 1
3819+ #define CONFIG_I2C_MXC 1
3820+ #define CONFIG_SYS_I2C_PORT I2C2_BASE_ADDR
3821+ #define CONFIG_SYS_I2C_SPEED 100000
3822+ #define CONFIG_SYS_I2C_SLAVE 0x08
3823+#endif
3824+
3825+/*
3826+ * SPI Configs
3827+ */
3828+#ifdef CONFIG_CMD_SF
3829+ #define CONFIG_FSL_SF 1
3830+ #define CONFIG_SPI_FLASH_IMX_SST 1
3831+ #define CONFIG_SPI_FLASH_CS 1
3832+/* #define CONFIG_MFGAREA_UNPROTECT */
3833+ #define CONFIG_IMX_ECSPI
3834+ #define IMX_CSPI_VER_2_3 1
3835+ #define MAX_SPI_BYTES (64 * 4)
3836+#endif
3837+
3838+/* Regulator Configs */
3839+#ifdef CONFIG_CMD_REGUL
3840+ #define CONFIG_ANATOP_REGULATOR
3841+ #define CONFIG_CORE_REGULATOR_NAME "vdd1p1"
3842+ #define CONFIG_PERIPH_REGULATOR_NAME "vdd1p1"
3843+#endif
3844+
3845+/*
3846+ * MMC Configs
3847+ */
3848+#ifdef CONFIG_CMD_MMC
3849+ #define CONFIG_MMC
3850+ #define CONFIG_GENERIC_MMC
3851+ #define CONFIG_IMX_MMC
3852+ #define CONFIG_SYS_FSL_USDHC_NUM 3
3853+ #define CONFIG_SYS_FSL_ESDHC_ADDR 0
3854+ #define CONFIG_SYS_MMC_ENV_DEV 2
3855+ #define CONFIG_DOS_PARTITION 1
3856+ #define CONFIG_CMD_FAT 1
3857+ #define CONFIG_CMD_EXT2 1
3858+
3859+ /* detect whether SD1, 2, 3, or 4 is boot device */
3860+ #define CONFIG_DYNAMIC_MMC_DEVNO
3861+
3862+ /* Setup target delay in DDR mode for each SD port */
3863+ #define CONFIG_GET_DDR_TARGET_DELAY
3864+#endif
3865+
3866+/*
3867+ * SATA Configs
3868+ */
3869+#ifdef CONFIG_CMD_SATA
3870+ #define CONFIG_DWC_AHSATA
3871+ #define CONFIG_SYS_SATA_MAX_DEVICE 1
3872+ #define CONFIG_DWC_AHSATA_PORT_ID 0
3873+ #define CONFIG_DWC_AHSATA_BASE_ADDR SATA_ARB_BASE_ADDR
3874+ #define CONFIG_LBA48
3875+ #define CONFIG_LIBATA
3876+
3877+ #define CONFIG_DOS_PARTITION 1
3878+ #define CONFIG_CMD_FAT 1
3879+ #define CONFIG_CMD_EXT2 1
3880+#endif
3881+
3882+/*
3883+ * USB OTG
3884+ */
3885+#define CONFIG_IMX_UDC 1
3886+
3887+/*-----------------------------------------------------------------------
3888+ * Stack sizes
3889+ *
3890+ * The stack sizes are set up in start.S using the settings below
3891+ */
3892+#define CONFIG_STACKSIZE (128 * 1024) /* regular stack */
3893+
3894+/*-----------------------------------------------------------------------
3895+ * Physical Memory Map
3896+ */
3897+#define CONFIG_NR_DRAM_BANKS 1
3898+#define PHYS_SDRAM_1 CSD0_DDR_BASE_ADDR
3899+#ifdef CONFIG_QMX6_PN016104
3900+#define PHYS_SDRAM_1_SIZE (2u * 1024 * 1024 * 1024)
3901+#endif
3902+#ifdef CONFIG_QMX6_PN016101
3903+#define PHYS_SDRAM_1_SIZE (1u * 1024 * 1024 * 1024)
3904+#endif
3905+#define iomem_valid_addr(addr, size) \
3906+ (addr >= PHYS_SDRAM_1 && addr <= (PHYS_SDRAM_1 + PHYS_SDRAM_1_SIZE))
3907+
3908+/*-----------------------------------------------------------------------
3909+ * FLASH and environment organization
3910+ */
3911+#define CONFIG_SYS_NO_FLASH
3912+
3913+/* Monitor at beginning of flash */
3914+/* #define CONFIG_FSL_ENV_IN_MMC */
3915+/* #define CONFIG_FSL_ENV_IN_SATA */
3916+/* #define CONFIG_FSL_ENV_IN_SF */
3917+
3918+#define CONFIG_ENV_SECT_SIZE (8 * 1024)
3919+#define CONFIG_ENV_SIZE CONFIG_ENV_SECT_SIZE
3920+#define CONFIG_ENV_IS_NOWHERE 1
3921+
3922+#endif /* __CONFIG_H */
3923diff --git a/localversion-qmx6 b/localversion-qmx6
3924new file mode 100644
3925index 0000000..5293f29
3926--- /dev/null
3927+++ b/localversion-qmx6
3928@@ -0,0 +1 @@
3929+ QMX6R003
3930--
39311.7.10.4
3932
diff --git a/recipes-bsp/u-boot/u-boot-imx_2009.08.bbappend b/recipes-bsp/u-boot/u-boot-imx_2009.08.bbappend
new file mode 100644
index 0000000..788fdb8
--- /dev/null
+++ b/recipes-bsp/u-boot/u-boot-imx_2009.08.bbappend
@@ -0,0 +1,7 @@
1FILESEXTRAPATHS_prepend := "${THISDIR}/${PN}"
2
3SRC_URI_append_cgtqmx6 = " \
4 file://cgtqmx6/0001-Add-uboot-support-for-congatec-qmx6-board.patch \
5"
6
7UBOOT_MACHINE_cgtqmx6 = "cgt_qmx6_config"
diff --git a/recipes-bsp/u-boot/u-boot-script-boundary_git.bb b/recipes-bsp/u-boot/u-boot-script-boundary_git.bb
new file mode 100644
index 0000000..b39d963
--- /dev/null
+++ b/recipes-bsp/u-boot/u-boot-script-boundary_git.bb
@@ -0,0 +1,68 @@
1LICENSE = "GPLv2+"
2LIC_FILES_CHKSUM = "file://Licenses/README;md5=025bf9f768cbcb1a165dbe1a110babfb"
3DEPENDS = "u-boot-mkimage-native"
4
5PV = "v2014.01+git${SRCPV}"
6
7SRCREV = "aed9475361820a65e37ed936c833322cbbc0f2b5"
8SRCBRANCH = "v2014.04-20140419"
9SRC_URI = "git://github.com/boundarydevices/u-boot-imx6.git;branch=${SRCBRANCH}"
10
11S = "${WORKDIR}/git"
12
13inherit deploy
14
15do_mkimage () {
16
17 boarddir=nitrogen6x;
18 if test "${MACHINE}" = "nitrogen6x-lite"; then
19 boarddir=nit6xlite;
20 fi
21
22 # allow deploy to use the ${MACHINE} name to simplify things
23 if [ ! -d board/boundary/${MACHINE} ]; then
24 mkdir board/boundary/${MACHINE}
25 fi
26 bootscript=board/boundary/${boarddir}/6x_bootscript-yocto.txt;
27 if ! [ -f $bootscript ]; then
28 bootscript=board/boundary/${boarddir}/6x_bootscript-yocto.txt;
29 fi
30 echo "bootscript == $bootscript"
31
32 upgradescript=board/boundary/${boarddir}/6x_upgrade.txt;
33 if ! [ -f $upgradescript ]; then
34 upgradescript=board/boundary/nitrogen6x/6x_upgrade.txt;
35 fi
36
37 uboot-mkimage -A arm -O linux -T script -C none -a 0 -e 0 \
38 -n "boot script" -d $bootscript \
39 board/boundary/${MACHINE}/6x_bootscript
40
41 uboot-mkimage -A arm -O linux -T script -C none -a 0 -e 0 \
42 -n "upgrade script" -d $upgradescript \
43 board/boundary/${MACHINE}/6x_upgrade
44}
45
46addtask mkimage after do_compile before do_install
47
48do_deploy () {
49 install -d ${DEPLOYDIR}
50 install ${S}/board/boundary/${MACHINE}/6x_bootscript \
51 ${DEPLOYDIR}/6x_bootscript-${MACHINE}-${PV}-${PR}
52 install ${S}/board/boundary/${MACHINE}/6x_upgrade \
53 ${DEPLOYDIR}/6x_upgrade-${MACHINE}-${PV}-${PR}
54
55 cd ${DEPLOYDIR}
56 rm -f 6x_bootscript-${MACHINE} 6x_upgrade-${MACHINE}
57 ln -sf 6x_bootscript-${MACHINE}-${PV}-${PR} 6x_bootscript-${MACHINE}
58 ln -sf 6x_upgrade-${MACHINE}-${PV}-${PR} 6x_upgrade-${MACHINE}
59}
60
61addtask deploy after do_install before do_build
62
63do_compile[noexec] = "1"
64do_install[noexec] = "1"
65do_populate_sysroot[noexec] = "1"
66
67PACKAGE_ARCH = "${MACHINE_ARCH}"
68COMPATIBLE_MACHINE = "(nitrogen6x|nitrogen6x-lite)"
diff --git a/recipes-bsp/u-boot/u-boot-timesys_2011.12.bb b/recipes-bsp/u-boot/u-boot-timesys_2011.12.bb
new file mode 100644
index 0000000..5912423
--- /dev/null
+++ b/recipes-bsp/u-boot/u-boot-timesys_2011.12.bb
@@ -0,0 +1,24 @@
1# Copyright (C) 2013-2014 Timesys Corporation
2# Released under the MIT license (see COPYING.MIT for the terms)
3
4DESCRIPTION = "bootloader for Vybrid platforms"
5require recipes-bsp/u-boot/u-boot.inc
6
7PROVIDES += "u-boot"
8
9LICENSE = "GPLv2+"
10LIC_FILES_CHKSUM = "file://COPYING;md5=1707d6db1d42237583f50183a5651ecb"
11
12SRCBRANCH = "2011.12-pcl052"
13SRC_URI = "git://github.com/Timesys/u-boot-timesys.git;protocol=git;branch=${SRCBRANCH}"
14SRCREV = "dca5026484c69628be9b9618e5795c635cefe110"
15
16SRCBRANCH_quartz = "2011.12-quartz"
17SRCREV_quartz = "2dc3859b8274b45fb6336d9713b4b07e42dfb4cb"
18
19S = "${WORKDIR}/git"
20
21PACKAGE_ARCH = "${MACHINE_ARCH}"
22COMPATIBLE_MACHINE = "(vf60)"
23
24PV = "v2011.12"
diff --git a/recipes-core/init-ifupdown/init-ifupdown/imx233-olinuxino-maxi/interfaces b/recipes-core/init-ifupdown/init-ifupdown/imx233-olinuxino-maxi/interfaces
new file mode 100644
index 0000000..c7c17cc
--- /dev/null
+++ b/recipes-core/init-ifupdown/init-ifupdown/imx233-olinuxino-maxi/interfaces
@@ -0,0 +1,22 @@
1# /etc/network/interfaces -- configuration file for ifup(8), ifdown(8)
2
3# The loopback interface
4auto lo
5iface lo inet loopback
6
7# Wireless interfaces
8iface wlan0 inet dhcp
9 wireless_mode managed
10 wireless_essid any
11 wpa-driver wext
12 wpa-conf /etc/wpa_supplicant.conf
13
14auto usb0
15iface usb0 inet static
16 address 192.168.7.2
17 netmask 255.255.255.0
18 network 192.168.7.0
19 gateway 192.168.7.1
20
21
22
diff --git a/recipes-core/init-ifupdown/init-ifupdown_1.0.bbappend b/recipes-core/init-ifupdown/init-ifupdown_1.0.bbappend
new file mode 100644
index 0000000..a276059
--- /dev/null
+++ b/recipes-core/init-ifupdown/init-ifupdown_1.0.bbappend
@@ -0,0 +1 @@
FILESEXTRAPATHS_prepend := "${THISDIR}/init-ifupdown:"
diff --git a/recipes-core/net-persistent-mac/net-persistent-mac.bb b/recipes-core/net-persistent-mac/net-persistent-mac.bb
new file mode 100644
index 0000000..17111c0
--- /dev/null
+++ b/recipes-core/net-persistent-mac/net-persistent-mac.bb
@@ -0,0 +1,23 @@
1SUMMARY = "Network device MAC persistency"
2DESCRIPTION = "Provides support to store/restore the MAC of a specific network device"
3SECTION = "base"
4LICENSE = "MIT"
5LIC_FILES_CHKSUM = "file://${COREBASE}/meta/files/common-licenses/MIT;md5=0835ade698e0bcf8506ecda2f7b4f302"
6
7inherit update-rc.d
8
9INITSCRIPT_NAME = "net-persistent-mac"
10INITSCRIPT_PARAMS = "start 39 S ."
11
12SRC_URI = "file://init \
13 file://default"
14
15do_install () {
16 install -d ${D}${sysconfdir}/init.d
17 install -m 0755 ${WORKDIR}/init ${D}${sysconfdir}/init.d/${PN}
18
19 install -d ${D}${sysconfdir}/default
20 install -m 0644 ${WORKDIR}/default ${D}${sysconfdir}/default/${PN}
21}
22
23PACKAGE_ARCH = "${MACHINE_ARCH}"
diff --git a/recipes-core/net-persistent-mac/net-persistent-mac/default b/recipes-core/net-persistent-mac/net-persistent-mac/default
new file mode 100644
index 0000000..9086f7b
--- /dev/null
+++ b/recipes-core/net-persistent-mac/net-persistent-mac/default
@@ -0,0 +1 @@
INTERFACES="" \ No newline at end of file
diff --git a/recipes-core/net-persistent-mac/net-persistent-mac/imx233-olinuxino-maxi/default b/recipes-core/net-persistent-mac/net-persistent-mac/imx233-olinuxino-maxi/default
new file mode 100644
index 0000000..fe4a054
--- /dev/null
+++ b/recipes-core/net-persistent-mac/net-persistent-mac/imx233-olinuxino-maxi/default
@@ -0,0 +1 @@
INTERFACES="usb0"
diff --git a/recipes-core/net-persistent-mac/net-persistent-mac/init b/recipes-core/net-persistent-mac/net-persistent-mac/init
new file mode 100644
index 0000000..a2e2863
--- /dev/null
+++ b/recipes-core/net-persistent-mac/net-persistent-mac/init
@@ -0,0 +1,42 @@
1#!/bin/sh
2
3### BEGIN INIT INFO
4# Provides: net-persistent-mac
5# Required-Start: $local_fs
6# Required-Stop:
7# Default-Start: S
8# Default-Stop:
9# X-Start-Before: networking
10# Short-Description: restore MAC during boot process
11### END INIT INFO
12
13set -e
14
15[ -f /etc/default/net-persistent-mac ] && . /etc/default/net-persistent-mac
16
17MAC_DIR="/var/lib/net-persistent-mac"
18
19for if in $INTERFACES; do
20 mkdir -p "$MAC_DIR"
21 IF_FILE="$MAC_DIR/$if.mac"
22 IF_MAC="/sys/class/net/$if/address"
23
24 # Store MAC for reuse
25 if [ ! -r "$IF_FILE" ]; then
26 if [ -e "$IF_MAC" ]; then
27 echo "Storing MAC for $if for future use." > /dev/stderr
28 cat "$IF_MAC" > "$IF_FILE"
29 else
30 echo "Failed to read MAC for $if; skiping device."
31 fi
32 fi
33
34 if [ -r "$IF_FILE" ]; then
35 # Restore MAC setting
36 WANTED_MAC=`cat $IF_FILE`
37 if [ "$WANTED_MAC" != "`cat $IF_MAC`" ]; then
38 echo "Setting MAC of $if to $WANTED_MAC."
39 ifconfig $if hw ether "$WANTED_MAC"
40 fi
41 fi
42done
diff --git a/recipes-kernel/linux/linux-boundary-3.0.35/0003-ENGR00261814-4-gpu-use-new-PU-power-on-off-interface.patch b/recipes-kernel/linux/linux-boundary-3.0.35/0003-ENGR00261814-4-gpu-use-new-PU-power-on-off-interface.patch
new file mode 100644
index 0000000..23a415d
--- /dev/null
+++ b/recipes-kernel/linux/linux-boundary-3.0.35/0003-ENGR00261814-4-gpu-use-new-PU-power-on-off-interface.patch
@@ -0,0 +1,53 @@
1From 1579de9397783ab5321c80f1e76661653ef38ccd Mon Sep 17 00:00:00 2001
2From: Robin Gong <b38343@freescale.com>
3Date: Thu, 9 May 2013 11:45:55 +0800
4Subject: [PATCH 3/6] ENGR00261814-4 gpu: use new PU power on/off interface
5
6use new PU power on/off interface in GPU driver
7
8Upstream-Status: Backport [3.5.7-1.0.0]
9
10Signed-off-by: Robin Gong <b38343@freescale.com>
11Acked-by: Lily Zhang
12---
13 .../mxc/gpu-viv/hal/os/linux/kernel/gc_hal_kernel_os.c | 16 +++++++++++++---
14 1 file changed, 13 insertions(+), 3 deletions(-)
15
16diff --git a/drivers/mxc/gpu-viv/hal/os/linux/kernel/gc_hal_kernel_os.c b/drivers/mxc/gpu-viv/hal/os/linux/kernel/gc_hal_kernel_os.c
17index 9c2bae6..dfbc699 100644
18--- a/drivers/mxc/gpu-viv/hal/os/linux/kernel/gc_hal_kernel_os.c
19+++ b/drivers/mxc/gpu-viv/hal/os/linux/kernel/gc_hal_kernel_os.c
20@@ -6819,8 +6819,13 @@ gckOS_SetGPUPower(
21 }
22 if((Power == gcvTRUE) && (oldPowerState == gcvFALSE))
23 {
24- if(!IS_ERR(Os->device->gpu_regulator))
25- regulator_enable(Os->device->gpu_regulator);
26+#if LINUX_VERSION_CODE < KERNEL_VERSION(3,5,0)
27+ if(!IS_ERR(Os->device->gpu_regulator))
28+ regulator_enable(Os->device->gpu_regulator);
29+#else
30+ imx_gpc_power_up_pu(true);
31+#endif
32+
33 #ifdef CONFIG_PM
34 pm_runtime_get_sync(Os->device->pmdev);
35 #endif
36@@ -6930,8 +6935,13 @@ gckOS_SetGPUPower(
37 #ifdef CONFIG_PM
38 pm_runtime_put_sync(Os->device->pmdev);
39 #endif
40+
41+#if LINUX_VERSION_CODE < KERNEL_VERSION(3,5,0)
42 if(!IS_ERR(Os->device->gpu_regulator))
43- regulator_disable(Os->device->gpu_regulator);
44+ regulator_disable(Os->device->gpu_regulator);
45+#else
46+ imx_gpc_power_up_pu(false);
47+#endif
48 }
49 /* TODO: Put your code here. */
50 gcmkFOOTER_NO();
51--
521.8.3.2
53
diff --git a/recipes-kernel/linux/linux-boundary-3.0.35/ENGR00278350-gpu-viante-4.6.9p13-kernel-part-integra.patch b/recipes-kernel/linux/linux-boundary-3.0.35/ENGR00278350-gpu-viante-4.6.9p13-kernel-part-integra.patch
new file mode 100644
index 0000000..1e039fd
--- /dev/null
+++ b/recipes-kernel/linux/linux-boundary-3.0.35/ENGR00278350-gpu-viante-4.6.9p13-kernel-part-integra.patch
@@ -0,0 +1,6261 @@
1From 2e575255b8c53d3cfe2af068411696fe3c40debb Mon Sep 17 00:00:00 2001
2From: Loren Huang <b02279@freescale.com>
3Date: Mon, 2 Sep 2013 12:16:48 +0800
4Subject: [PATCH 01/16] ENGR00278350 gpu:viante 4.6.9p13 kernel part
5 integration
6
7Integrated 4.6.9p13 kernel part change.
8This integration is mainly for android test.
9Linux test will be focused on 3.10 kernel.
10
11Signed-off-by: Loren HUANG <b02279@freescale.com>
12Acked-by: Shawn Guo
13---
14 drivers/mxc/gpu-viv/Kbuild | 33 +-
15 .../GC350/hal/kernel/gc_hal_kernel_hardware_vg.c | 177 ++--
16 .../GC350/hal/kernel/gc_hal_kernel_hardware_vg.h | 9 +-
17 .../arch/XAQ2/hal/kernel/gc_hal_kernel_context.c | 8 +-
18 .../arch/XAQ2/hal/kernel/gc_hal_kernel_context.h | 13 +
19 .../arch/XAQ2/hal/kernel/gc_hal_kernel_hardware.c | 736 ++++++++++++-
20 .../arch/XAQ2/hal/kernel/gc_hal_kernel_hardware.h | 1 +
21 drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel.c | 125 ++-
22 drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel.h | 24 +-
23 .../mxc/gpu-viv/hal/kernel/gc_hal_kernel_command.c | 57 ++
24 .../gpu-viv/hal/kernel/gc_hal_kernel_command_vg.c | 45 +-
25 drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel_db.c | 12 +
26 .../mxc/gpu-viv/hal/kernel/gc_hal_kernel_event.c | 29 +
27 .../hal/kernel/gc_hal_kernel_interrupt_vg.c | 3 +
28 drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel_mmu.c | 8 +-
29 .../hal/kernel/gc_hal_kernel_video_memory.c | 20 +-
30 drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal.h | 84 +-
31 drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_base.h | 172 +++-
32 .../mxc/gpu-viv/hal/kernel/inc/gc_hal_compiler.h | 142 ++-
33 drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_driver.h | 37 +
34 drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_engine.h | 46 +-
35 drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_enum.h | 125 ++-
36 .../mxc/gpu-viv/hal/kernel/inc/gc_hal_options.h | 86 +-
37 .../mxc/gpu-viv/hal/kernel/inc/gc_hal_profiler.h | 1078 +++-----------------
38 drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_raster.h | 48 +
39 drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_types.h | 79 +-
40 .../mxc/gpu-viv/hal/kernel/inc/gc_hal_version.h | 2 +-
41 .../hal/os/linux/kernel/gc_hal_kernel_device.c | 17 +-
42 .../hal/os/linux/kernel/gc_hal_kernel_device.h | 16 +-
43 .../hal/os/linux/kernel/gc_hal_kernel_driver.c | 99 +-
44 .../gpu-viv/hal/os/linux/kernel/gc_hal_kernel_os.c | 655 ++++++++++--
45 .../hal/os/linux/kernel/gc_hal_kernel_sync.c | 174 ++++
46 .../hal/os/linux/kernel/gc_hal_kernel_sync.h | 71 ++
47 33 files changed, 2974 insertions(+), 1257 deletions(-)
48 create mode 100644 drivers/mxc/gpu-viv/hal/os/linux/kernel/gc_hal_kernel_sync.c
49 create mode 100644 drivers/mxc/gpu-viv/hal/os/linux/kernel/gc_hal_kernel_sync.h
50
51diff --git a/drivers/mxc/gpu-viv/Kbuild b/drivers/mxc/gpu-viv/Kbuild
52index 93b1259..2b277d6 100644
53--- a/drivers/mxc/gpu-viv/Kbuild
54+++ b/drivers/mxc/gpu-viv/Kbuild
55@@ -45,8 +45,6 @@ OBJS := $(OS_KERNEL_DIR)/gc_hal_kernel_device.o \
56 $(OS_KERNEL_DIR)/gc_hal_kernel_os.o \
57 $(OS_KERNEL_DIR)/gc_hal_kernel_debugfs.o
58
59-ifeq ($(USE_3D_VG), 1)
60-
61 OBJS += $(HAL_KERNEL_DIR)/gc_hal_kernel.o \
62 $(HAL_KERNEL_DIR)/gc_hal_kernel_command.o \
63 $(HAL_KERNEL_DIR)/gc_hal_kernel_db.o \
64@@ -69,19 +67,9 @@ OBJS +=\
65 $(ARCH_VG_KERNEL_DIR)/gc_hal_kernel_hardware_command_vg.o\
66 $(ARCH_VG_KERNEL_DIR)/gc_hal_kernel_hardware_vg.o
67 endif
68-else
69-
70-OBJS += $(HAL_KERNEL_DIR)/gc_hal_kernel.o \
71- $(HAL_KERNEL_DIR)/gc_hal_kernel_command.o \
72- $(HAL_KERNEL_DIR)/gc_hal_kernel_heap.o \
73- $(HAL_KERNEL_DIR)/gc_hal_kernel_interrupt.o \
74- $(HAL_KERNEL_DIR)/gc_hal_kernel_mmu.o \
75- $(HAL_KERNEL_DIR)/gc_hal_kernel_video_memory.o \
76- $(OS_KERNEL_DIR)/gc_hal_kernel_debug.o
77-
78-OBJS += $(ARCH_KERNEL_DIR)/gc_hal_kernel_hardware.o \
79- $(ARCH_KERNEL_DIR)/gc_hal_kernel_hardware_command.o
80
81+ifneq ($(CONFIG_SYNC),)
82+OBJS += $(OS_KERNEL_DIR)/gc_hal_kernel_sync.o
83 endif
84
85 ifeq ($(KERNELRELEASE), )
86@@ -129,23 +117,16 @@ ifeq ($(CONFIG_DOVE_GPU), 1)
87 EXTRA_CFLAGS += -DCONFIG_DOVE_GPU=1
88 endif
89
90-ifeq ($(USE_POWER_MANAGEMENT), 1)
91-EXTRA_CFLAGS += -DgcdPOWER_MANAGEMENT=1
92-else
93-EXTRA_CFLAGS += -DgcdPOWER_MANAGEMENT=0
94-endif
95-
96 ifneq ($(USE_PLATFORM_DRIVER), 0)
97 EXTRA_CFLAGS += -DUSE_PLATFORM_DRIVER=1
98 else
99 EXTRA_CFLAGS += -DUSE_PLATFORM_DRIVER=0
100 endif
101
102-ifeq ($(USE_PROFILER), 1)
103+
104 EXTRA_CFLAGS += -DVIVANTE_PROFILER=1
105-else
106-EXTRA_CFLAGS += -DVIVANTE_PROFILER=0
107-endif
108+EXTRA_CFLAGS += -DVIVANTE_PROFILER_CONTEXT=1
109+
110
111 ifeq ($(ANDROID), 1)
112 EXTRA_CFLAGS += -DANDROID=1
113@@ -235,6 +216,10 @@ ifeq ($(USE_BANK_ALIGNMENT), 1)
114 endif
115 endif
116
117+ifneq ($(CONFIG_SYNC),)
118+EXTRA_CFLAGS += -DgcdANDROID_NATIVE_FENCE_SYNC=1
119+endif
120+
121 EXTRA_CFLAGS += -I$(AQROOT)/hal/kernel/inc
122 EXTRA_CFLAGS += -I$(AQROOT)/hal/kernel
123 EXTRA_CFLAGS += -I$(AQARCH)/hal/kernel
124diff --git a/drivers/mxc/gpu-viv/arch/GC350/hal/kernel/gc_hal_kernel_hardware_vg.c b/drivers/mxc/gpu-viv/arch/GC350/hal/kernel/gc_hal_kernel_hardware_vg.c
125index 70c2cd6..a17d2fd 100644
126--- a/drivers/mxc/gpu-viv/arch/GC350/hal/kernel/gc_hal_kernel_hardware_vg.c
127+++ b/drivers/mxc/gpu-viv/arch/GC350/hal/kernel/gc_hal_kernel_hardware_vg.c
128@@ -217,50 +217,17 @@ _IdentifyHardware(
129 return status;
130 }
131
132-static gctTHREADFUNCRESULT gctTHREADFUNCTYPE
133-_TimeIdleThread(
134- gctTHREADFUNCPARAMETER ThreadParameter
135+#if gcdPOWEROFF_TIMEOUT
136+void
137+_VGPowerTimerFunction(
138+ gctPOINTER Data
139 )
140 {
141- gctUINT32 currentTime = 0;
142- gctBOOL isAfter = gcvFALSE;
143- gceCHIPPOWERSTATE state;
144-
145- /* Cast the object. */
146- gckVGHARDWARE hardware = (gckVGHARDWARE) ThreadParameter;
147-
148- while(gcvTRUE)
149- {
150- gcmkVERIFY_OK(gckOS_WaitSignal(hardware->os,
151- hardware->idleSignal, gcvINFINITE));
152-
153- if (hardware->killThread)
154- {
155- break;
156- }
157-
158- do
159- {
160- gcmkVERIFY_OK(gckOS_GetTicks(&currentTime));
161-
162- gcmkVERIFY_OK(
163- gckOS_TicksAfter(currentTime, hardware->powerOffTime, &isAfter));
164-
165- if (isAfter)
166- {
167- gcmkVERIFY_OK(gckVGHARDWARE_SetPowerManagementState(
168- hardware, gcvPOWER_OFF_BROADCAST));
169- }
170-
171- gcmkVERIFY_OK(gckOS_Delay(hardware->os, 200));
172-
173- gcmkVERIFY_OK(gckVGHARDWARE_QueryPowerManagementState(
174- hardware, &state));
175-
176- } while (state == gcvPOWER_IDLE);
177- }
178- return 0;
179+ gckVGHARDWARE hardware = (gckVGHARDWARE)Data;
180+ gcmkVERIFY_OK(
181+ gckVGHARDWARE_SetPowerManagementState(hardware, gcvPOWER_OFF_TIMEOUT));
182 }
183+#endif
184
185 /******************************************************************************\
186 ****************************** gckVGHARDWARE API code *****************************
187@@ -338,15 +305,21 @@ gckVGHARDWARE_Construct(
188 hardware->chipMinorFeatures2 = chipMinorFeatures2;
189
190 hardware->powerMutex = gcvNULL;
191- hardware->idleSignal = gcvNULL;
192 hardware->chipPowerState = gcvPOWER_ON;
193 hardware->chipPowerStateGlobal = gcvPOWER_ON;
194 hardware->clockState = gcvTRUE;
195 hardware->powerState = gcvTRUE;
196- hardware->powerOffTimeout = gcdPOWEROFF_TIMEOUT;
197+
198 hardware->powerOffTime = 0;
199- hardware->timeIdleThread = gcvNULL;
200- hardware->killThread = gcvFALSE;
201+#if gcdPOWEROFF_TIMEOUT
202+ hardware->powerOffTimeout = gcdPOWEROFF_TIMEOUT;
203+
204+ gcmkVERIFY_OK(gckOS_CreateTimer(Os,
205+ _VGPowerTimerFunction,
206+ (gctPOINTER)hardware,
207+ &hardware->powerOffTimer));
208+#endif
209+
210 /* Determine whether FE 2.0 is present. */
211 hardware->fe20 = ((((gctUINT32) (hardware->chipFeatures)) >> (0 ? 28:28) & ((gctUINT32) ((((1 ? 28:28) - (0 ? 28:28) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 28:28) - (0 ? 28:28) + 1)))))) == (0x1 & ((gctUINT32) ((((1 ? 28:28) - (0 ? 28:28) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 28:28) - (0 ? 28:28) + 1)))))));
212
213@@ -365,18 +338,10 @@ gckVGHARDWARE_Construct(
214 gcmkVERIFY_OK(gckVGHARDWARE_SetFastClear(hardware, -1));
215
216 gcmkERR_BREAK(gckOS_CreateMutex(Os, &hardware->powerMutex));
217- gcmkERR_BREAK(gckOS_CreateSignal(Os, gcvFALSE, &hardware->idleSignal));
218
219 /* Enable power management by default. */
220 hardware->powerManagement = gcvTRUE;
221
222- gcmkERR_BREAK(gckOS_StartThread(
223- hardware->os,
224- _TimeIdleThread,
225- hardware,
226- &hardware->timeIdleThread
227- ));
228-
229 /* Return pointer to the gckVGHARDWARE object. */
230 *Hardware = hardware;
231
232@@ -386,6 +351,14 @@ gckVGHARDWARE_Construct(
233 }
234 while (gcvFALSE);
235
236+#if gcdPOWEROFF_TIMEOUT
237+ if (hardware->powerOffTimer != gcvNULL)
238+ {
239+ gcmkVERIFY_OK(gckOS_StopTimer(Os, hardware->powerOffTimer));
240+ gcmkVERIFY_OK(gckOS_DestroyTimer(Os, hardware->powerOffTimer));
241+ }
242+#endif
243+
244 if (hardware->pageTableDirty != gcvNULL)
245 {
246 gcmkVERIFY_OK(gckOS_AtomDestroy(Os, hardware->pageTableDirty));
247@@ -428,10 +401,6 @@ gckVGHARDWARE_Destroy(
248 /* Verify the arguments. */
249 gcmkVERIFY_OBJECT(Hardware, gcvOBJ_HARDWARE);
250
251- Hardware->killThread = gcvTRUE;
252- gcmkVERIFY_OK(gckOS_Signal(Hardware->os, Hardware->idleSignal, gcvTRUE));
253- gcmkVERIFY_OK(gckOS_StopThread(Hardware->os, Hardware->timeIdleThread));
254-
255 /* Mark the object as unknown. */
256 Hardware->object.type = gcvOBJ_UNKNOWN;
257
258@@ -441,11 +410,10 @@ gckVGHARDWARE_Destroy(
259 Hardware->os, Hardware->powerMutex));
260 }
261
262- if (Hardware->idleSignal != gcvNULL)
263- {
264- gcmkVERIFY_OK(gckOS_DestroySignal(
265- Hardware->os, Hardware->idleSignal));
266- }
267+#if gcdPOWEROFF_TIMEOUT
268+ gcmkVERIFY_OK(gckOS_StopTimer(Hardware->os, Hardware->powerOffTimer));
269+ gcmkVERIFY_OK(gckOS_DestroyTimer(Hardware->os, Hardware->powerOffTimer));
270+#endif
271
272 if (Hardware->pageTableDirty != gcvNULL)
273 {
274@@ -1510,11 +1478,15 @@ gckVGHARDWARE_SetPowerManagementState(
275 gctBOOL commitMutex = gcvFALSE;
276 gctBOOL mutexAcquired = gcvFALSE;
277
278+#if gcdPOWEROFF_TIMEOUT
279+ gctBOOL timeout = gcvFALSE;
280+ gctBOOL isAfter = gcvFALSE;
281+ gctUINT32 currentTime;
282+#endif
283+
284 gctBOOL broadcast = gcvFALSE;
285 gctUINT32 process, thread;
286 gctBOOL global = gcvFALSE;
287- gctUINT32 currentTime;
288-
289
290 #if gcdENABLE_PROFILING
291 gctUINT64 time, freq, mutexTime, onTime, stallTime, stopTime, delayTime,
292@@ -1661,6 +1633,16 @@ gckVGHARDWARE_SetPowerManagementState(
293 global = gcvTRUE;
294 break;
295
296+#if gcdPOWEROFF_TIMEOUT
297+ case gcvPOWER_OFF_TIMEOUT:
298+ /* Convert to OFF and note we are inside broadcast. */
299+ State = gcvPOWER_OFF;
300+ broadcast = gcvTRUE;
301+ /* Check time out */
302+ timeout = gcvTRUE;
303+ break;
304+#endif
305+
306 default:
307 break;
308 }
309@@ -1719,6 +1701,31 @@ gckVGHARDWARE_SetPowerManagementState(
310 flag = flags[Hardware->chipPowerState][State];
311 /*clock = clocks[State];*/
312
313+#if gcdPOWEROFF_TIMEOUT
314+ if (timeout)
315+ {
316+ gcmkONERROR(gckOS_GetTicks(&currentTime));
317+
318+ gcmkONERROR(
319+ gckOS_TicksAfter(Hardware->powerOffTime, currentTime, &isAfter));
320+
321+ /* powerOffTime is pushed forward, give up.*/
322+ if (isAfter
323+ /* Expect a transition start from IDLE. */
324+ || (Hardware->chipPowerState == gcvPOWER_ON)
325+ || (Hardware->chipPowerState == gcvPOWER_OFF)
326+ )
327+ {
328+ /* Release the power mutex. */
329+ gcmkONERROR(gckOS_ReleaseMutex(os, Hardware->powerMutex));
330+
331+ /* No need to do anything. */
332+ gcmkFOOTER_NO();
333+ return gcvSTATUS_OK;
334+ }
335+ }
336+#endif
337+
338 if (flag == 0)
339 {
340 /* Release the power mutex. */
341@@ -1742,6 +1749,18 @@ gckVGHARDWARE_SetPowerManagementState(
342 return gcvSTATUS_OK;
343 }
344 }
345+ else
346+ {
347+ if (flag & gcvPOWER_FLAG_ACQUIRE)
348+ {
349+ /* Acquire the power management semaphore. */
350+ gcmkONERROR(gckOS_AcquireSemaphore(os, command->powerSemaphore));
351+ acquired = gcvTRUE;
352+
353+ /* avoid acquiring again. */
354+ flag &= ~gcvPOWER_FLAG_ACQUIRE;
355+ }
356+ }
357
358 if (flag & (gcvPOWER_FLAG_INITIALIZE | gcvPOWER_FLAG_CLOCK_ON))
359 {
360@@ -1858,14 +1877,6 @@ gckVGHARDWARE_SetPowerManagementState(
361 Hardware->chipPowerStateGlobal = State;
362 }
363
364- if (State == gcvPOWER_IDLE)
365- {
366- gcmkVERIFY_OK(gckOS_Signal(os, Hardware->idleSignal, gcvTRUE));
367- }
368- /* Reset power off time */
369- gcmkVERIFY_OK(gckOS_GetTicks(&currentTime));
370- Hardware->powerOffTime = currentTime + Hardware->powerOffTimeout;
371-
372 if (commitMutex)
373 {
374 /* Acquire the mutex. */
375@@ -1875,6 +1886,28 @@ gckVGHARDWARE_SetPowerManagementState(
376 ));
377 }
378
379+#if gcdPOWEROFF_TIMEOUT
380+ /* Reset power off time */
381+ gcmkONERROR(gckOS_GetTicks(&currentTime));
382+
383+ Hardware->powerOffTime = currentTime + Hardware->powerOffTimeout;
384+
385+ if (State == gcvPOWER_IDLE)
386+ {
387+ /* Start a timer to power off GPU when GPU enters IDLE or SUSPEND. */
388+ gcmkVERIFY_OK(gckOS_StartTimer(os,
389+ Hardware->powerOffTimer,
390+ Hardware->powerOffTimeout));
391+ }
392+ else
393+ {
394+ gcmkTRACE_ZONE(gcvLEVEL_INFO, gcvZONE_HARDWARE, "Cancel powerOfftimer");
395+
396+ /* Cancel running timer when GPU enters ON or OFF. */
397+ gcmkVERIFY_OK(gckOS_StopTimer(os, Hardware->powerOffTimer));
398+ }
399+#endif
400+
401 /* Release the power mutex. */
402 gcmkONERROR(gckOS_ReleaseMutex(os, Hardware->powerMutex));
403
404diff --git a/drivers/mxc/gpu-viv/arch/GC350/hal/kernel/gc_hal_kernel_hardware_vg.h b/drivers/mxc/gpu-viv/arch/GC350/hal/kernel/gc_hal_kernel_hardware_vg.h
405index 16b81ae..73d4594 100644
406--- a/drivers/mxc/gpu-viv/arch/GC350/hal/kernel/gc_hal_kernel_hardware_vg.h
407+++ b/drivers/mxc/gpu-viv/arch/GC350/hal/kernel/gc_hal_kernel_hardware_vg.h
408@@ -53,7 +53,6 @@ struct _gckVGHARDWARE
409 gctBOOL clockState;
410 gctBOOL powerState;
411 gctPOINTER powerMutex;
412- gctSIGNAL idleSignal;
413 gctUINT32 powerProcess;
414 gctUINT32 powerThread;
415 gceCHIPPOWERSTATE chipPowerState;
416@@ -61,11 +60,13 @@ struct _gckVGHARDWARE
417 gctISRMANAGERFUNC startIsr;
418 gctISRMANAGERFUNC stopIsr;
419 gctPOINTER isrContext;
420+ gctPOINTER pageTableDirty;
421+
422+#if gcdPOWEROFF_TIMEOUT
423 gctUINT32 powerOffTime;
424 gctUINT32 powerOffTimeout;
425- gctTHREAD timeIdleThread;
426- gctBOOL killThread;
427- gctPOINTER pageTableDirty;
428+ gctPOINTER powerOffTimer;
429+#endif
430
431 gctBOOL powerManagement;
432 };
433diff --git a/drivers/mxc/gpu-viv/arch/XAQ2/hal/kernel/gc_hal_kernel_context.c b/drivers/mxc/gpu-viv/arch/XAQ2/hal/kernel/gc_hal_kernel_context.c
434index 24003e7..42e6915 100644
435--- a/drivers/mxc/gpu-viv/arch/XAQ2/hal/kernel/gc_hal_kernel_context.c
436+++ b/drivers/mxc/gpu-viv/arch/XAQ2/hal/kernel/gc_hal_kernel_context.c
437@@ -181,7 +181,8 @@ _FlushPipe(
438 ? ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 3:3) - (0 ? 3:3) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 3:3) - (0 ? 3:3) + 1))))))) << (0 ? 3:3))) | (((gctUINT32) (0x1 & ((gctUINT32) ((((1 ? 3:3) - (0 ? 3:3) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 3:3) - (0 ? 3:3) + 1))))))) << (0 ? 3:3)))
439 : ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 0:0) - (0 ? 0:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 0:0) - (0 ? 0:0) + 1))))))) << (0 ? 0:0))) | (((gctUINT32) (0x1 & ((gctUINT32) ((((1 ? 0:0) - (0 ? 0:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 0:0) - (0 ? 0:0) + 1))))))) << (0 ? 0:0)))
440 | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 1:1) - (0 ? 1:1) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 1:1) - (0 ? 1:1) + 1))))))) << (0 ? 1:1))) | (((gctUINT32) (0x1 & ((gctUINT32) ((((1 ? 1:1) - (0 ? 1:1) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 1:1) - (0 ? 1:1) + 1))))))) << (0 ? 1:1)))
441- | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 2:2) - (0 ? 2:2) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 2:2) - (0 ? 2:2) + 1))))))) << (0 ? 2:2))) | (((gctUINT32) (0x1 & ((gctUINT32) ((((1 ? 2:2) - (0 ? 2:2) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 2:2) - (0 ? 2:2) + 1))))))) << (0 ? 2:2)));
442+ | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 2:2) - (0 ? 2:2) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 2:2) - (0 ? 2:2) + 1))))))) << (0 ? 2:2))) | (((gctUINT32) (0x1 & ((gctUINT32) ((((1 ? 2:2) - (0 ? 2:2) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 2:2) - (0 ? 2:2) + 1))))))) << (0 ? 2:2)))
443+ | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 4:4) - (0 ? 4:4) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 4:4) - (0 ? 4:4) + 1))))))) << (0 ? 4:4))) | (((gctUINT32) (0x1 & ((gctUINT32) ((((1 ? 4:4) - (0 ? 4:4) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 4:4) - (0 ? 4:4) + 1))))))) << (0 ? 4:4)));
444
445 /* Semaphore from FE to PE. */
446 *buffer++
447@@ -620,7 +621,10 @@ _InitializeContextBuffer(
448 index += _State(Context, index, 0x10180 >> 2, 0x00000000, 32, gcvFALSE, gcvFALSE);
449 index += _State(Context, index, 0x10200 >> 2, 0x00000000, 32, gcvFALSE, gcvFALSE);
450 index += _State(Context, index, 0x10280 >> 2, 0x00000000, 32, gcvFALSE, gcvFALSE);
451- index += _State(Context, index, 0x02C00 >> 2, 0x00000000, 256, gcvFALSE, gcvFALSE);
452+ for (i = 0; i < 256 / 16; i += 1)
453+ {
454+ index += _State(Context, index, (0x02C00 >> 2) + i * 16, 0x00000000, 14, gcvFALSE, gcvFALSE);
455+ }
456 index += _State(Context, index, 0x10300 >> 2, 0x00000000, 32, gcvFALSE, gcvFALSE);
457 index += _State(Context, index, 0x10380 >> 2, 0x00321000, 32, gcvFALSE, gcvFALSE);
458 index += _State(Context, index, 0x10400 >> 2, 0x00000000, 32, gcvFALSE, gcvFALSE);
459diff --git a/drivers/mxc/gpu-viv/arch/XAQ2/hal/kernel/gc_hal_kernel_context.h b/drivers/mxc/gpu-viv/arch/XAQ2/hal/kernel/gc_hal_kernel_context.h
460index 7554045..5d2c7c7 100644
461--- a/drivers/mxc/gpu-viv/arch/XAQ2/hal/kernel/gc_hal_kernel_context.h
462+++ b/drivers/mxc/gpu-viv/arch/XAQ2/hal/kernel/gc_hal_kernel_context.h
463@@ -134,6 +134,19 @@ struct _gckCONTEXT
464 #if gcdSECURE_USER
465 gctBOOL_PTR hint;
466 #endif
467+
468+#if VIVANTE_PROFILER_CONTEXT
469+ gcsPROFILER_COUNTERS latestProfiler;
470+ gcsPROFILER_COUNTERS histroyProfiler;
471+ gctUINT32 prevVSInstCount;
472+ gctUINT32 prevVSBranchInstCount;
473+ gctUINT32 prevVSTexInstCount;
474+ gctUINT32 prevVSVertexCount;
475+ gctUINT32 prevPSInstCount;
476+ gctUINT32 prevPSBranchInstCount;
477+ gctUINT32 prevPSTexInstCount;
478+ gctUINT32 prevPSPixelCount;
479+#endif
480 };
481
482 #ifdef __cplusplus
483diff --git a/drivers/mxc/gpu-viv/arch/XAQ2/hal/kernel/gc_hal_kernel_hardware.c b/drivers/mxc/gpu-viv/arch/XAQ2/hal/kernel/gc_hal_kernel_hardware.c
484index 00f3839..e02dc23 100644
485--- a/drivers/mxc/gpu-viv/arch/XAQ2/hal/kernel/gc_hal_kernel_hardware.c
486+++ b/drivers/mxc/gpu-viv/arch/XAQ2/hal/kernel/gc_hal_kernel_hardware.c
487@@ -21,6 +21,9 @@
488
489 #include "gc_hal.h"
490 #include "gc_hal_kernel.h"
491+#if VIVANTE_PROFILER_CONTEXT
492+#include "gc_hal_kernel_context.h"
493+#endif
494
495 #define _GC_OBJ_ZONE gcvZONE_HARDWARE
496
497@@ -69,6 +72,7 @@ _IdentifyHardware(
498 gctUINT32 numConstants = 0;
499 gctUINT32 bufferSize = 0;
500 gctUINT32 varyingsCount = 0;
501+ gctBOOL useHZ;
502
503 gcmkHEADER_ARG("Os=0x%x", Os);
504
505@@ -209,6 +213,15 @@ _IdentifyHardware(
506 0x00088,
507 &Identity->chipMinorFeatures3));
508
509+ /*The BG2 chip has no compression supertiled, and the bit of GCMinorFeature3BugFixes15 is n/a*/
510+ if(Identity->chipModel == gcv1000 && Identity->chipRevision == 0x5036)
511+ {
512+ Identity->chipMinorFeatures3
513+ = ((((gctUINT32) (Identity->chipMinorFeatures3)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 5:5) - (0 ? 5:5) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 5:5) - (0 ? 5:5) + 1))))))) << (0 ? 5:5))) | (((gctUINT32) (0x0 & ((gctUINT32) ((((1 ? 5:5) - (0 ? 5:5) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 5:5) - (0 ? 5:5) + 1))))))) << (0 ? 5:5)));
514+ Identity->chipMinorFeatures3
515+ = ((((gctUINT32) (Identity->chipMinorFeatures3)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 27:27) - (0 ? 27:27) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 27:27) - (0 ? 27:27) + 1))))))) << (0 ? 27:27))) | (((gctUINT32) (0x0 & ((gctUINT32) ((((1 ? 27:27) - (0 ? 27:27) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 27:27) - (0 ? 27:27) + 1))))))) << (0 ? 27:27)));
516+ }
517+
518 /* Read chip minor featuress register #4. */
519 gcmkONERROR(
520 gckOS_ReadRegisterEx(Os, Core,
521@@ -244,14 +257,31 @@ _IdentifyHardware(
522 if (((Identity->chipModel == gcv1000) && ((Identity->chipRevision == 0x5035)
523 || (Identity->chipRevision == 0x5036)
524 || (Identity->chipRevision == 0x5037)))
525- || ((Identity->chipModel == gcv800) && (Identity->chipRevision == 0x4612)))
526+ || ((Identity->chipModel == gcv800) && (Identity->chipRevision == 0x4612))
527+ || ((Identity->chipModel == gcv860) && (Identity->chipRevision == 0x4647)))
528 {
529 Identity->superTileMode = 1;
530 }
531
532+ if (Identity->chipModel == gcv4000 && Identity->chipRevision == 0x5245)
533+ {
534+ useHZ = ((((gctUINT32) (Identity->chipMinorFeatures3)) >> (0 ? 26:26) & ((gctUINT32) ((((1 ? 26:26) - (0 ? 26:26) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 26:26) - (0 ? 26:26) + 1)))))) == (0x1 & ((gctUINT32) ((((1 ? 26:26) - (0 ? 26:26) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 26:26) - (0 ? 26:26) + 1)))))))
535+ || ((((gctUINT32) (Identity->chipMinorFeatures3)) >> (0 ? 8:8) & ((gctUINT32) ((((1 ? 8:8) - (0 ? 8:8) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 8:8) - (0 ? 8:8) + 1)))))) == (0x1 & ((gctUINT32) ((((1 ? 8:8) - (0 ? 8:8) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 8:8) - (0 ? 8:8) + 1)))))));
536+ }
537+ else
538+ {
539+ useHZ = gcvFALSE;
540+ }
541
542- /* Disable HZ when EZ is present for older chips. */
543- if (!((((gctUINT32) (Identity->chipFeatures)) >> (0 ? 16:16) & ((gctUINT32) ((((1 ? 16:16) - (0 ? 16:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 16:16) - (0 ? 16:16) + 1)))))) == (0x1 & ((gctUINT32) ((((1 ? 16:16) - (0 ? 16:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 16:16) - (0 ? 16:16) + 1))))))))
544+ if (useHZ)
545+ {
546+ /* Disable EZ. */
547+ Identity->chipFeatures
548+ = ((((gctUINT32) (Identity->chipFeatures)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 16:16) - (0 ? 16:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 16:16) - (0 ? 16:16) + 1))))))) << (0 ? 16:16))) | (((gctUINT32) (0x1 & ((gctUINT32) ((((1 ? 16:16) - (0 ? 16:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 16:16) - (0 ? 16:16) + 1))))))) << (0 ? 16:16)));
549+ }
550+
551+ /* Disable HZ when EZ is present for older chips. */
552+ else if (!((((gctUINT32) (Identity->chipFeatures)) >> (0 ? 16:16) & ((gctUINT32) ((((1 ? 16:16) - (0 ? 16:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 16:16) - (0 ? 16:16) + 1)))))) == (0x1 & ((gctUINT32) ((((1 ? 16:16) - (0 ? 16:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 16:16) - (0 ? 16:16) + 1))))))))
553 {
554 /* Disable HIERARCHICAL_Z. */
555 Identity->chipMinorFeatures
556@@ -470,6 +500,15 @@ _IdentifyHardware(
557 Identity->varyingsCount = 8;
558 }
559
560+ /* For some cores, it consumes two varying for position, so the max varying vectors should minus one. */
561+ if ((Identity->chipModel == gcv4000 && Identity->chipRevision == 0x5222) ||
562+ (Identity->chipModel == gcv4000 && Identity->chipRevision == 0x5208) ||
563+ ((Identity->chipModel == gcv2100 || Identity->chipModel == gcv2000) && Identity->chipRevision == 0x5108) ||
564+ (Identity->chipModel == gcv880 && (Identity->chipRevision == 0x5107 || Identity->chipRevision == 0x5106)))
565+ {
566+ Identity->varyingsCount -= 1;
567+ }
568+
569 /* Success. */
570 gcmkFOOTER();
571 return gcvSTATUS_OK;
572@@ -535,9 +574,9 @@ _DumpDebugRegisters(
573 IN gcsiDEBUG_REGISTERS_PTR Descriptor
574 )
575 {
576- gceSTATUS status;
577+ gceSTATUS status = gcvSTATUS_OK;
578 gctUINT32 select;
579- gctUINT32 data;
580+ gctUINT32 data = 0;
581 gctUINT i;
582
583 gcmkHEADER_ARG("Os=0x%X Descriptor=0x%X", Os, Descriptor);
584@@ -643,6 +682,42 @@ OnError:
585 return status;
586 }
587
588+gceSTATUS
589+_FlushCache(
590+ gckHARDWARE Hardware,
591+ gckCOMMAND Command
592+ )
593+{
594+ gceSTATUS status;
595+ gctSIZE_T bytes, requested;
596+ gctPOINTER buffer;
597+
598+ /* Get the size of the flush command. */
599+ gcmkONERROR(gckHARDWARE_Flush(Hardware,
600+ gcvFLUSH_ALL,
601+ gcvNULL,
602+ &requested));
603+
604+ /* Reserve space in the command queue. */
605+ gcmkONERROR(gckCOMMAND_Reserve(Command,
606+ requested,
607+ &buffer,
608+ &bytes));
609+
610+ /* Append a flush. */
611+ gcmkONERROR(gckHARDWARE_Flush(
612+ Hardware, gcvFLUSH_ALL, buffer, &bytes
613+ ));
614+
615+ /* Execute the command queue. */
616+ gcmkONERROR(gckCOMMAND_Execute(Command, requested));
617+
618+ return gcvSTATUS_OK;
619+
620+OnError:
621+ return status;
622+}
623+
624 /******************************************************************************\
625 ****************************** gckHARDWARE API code *****************************
626 \******************************************************************************/
627@@ -809,6 +884,9 @@ gckHARDWARE_Construct(
628 /* Enable power management by default. */
629 hardware->powerManagement = gcvTRUE;
630
631+ /* Disable profiler by default */
632+ hardware->gpuProfiler = gcvFALSE;
633+
634 /* Return pointer to the gckHARDWARE object. */
635 *Hardware = hardware;
636
637@@ -1113,6 +1191,31 @@ gckHARDWARE_InitializeHardware(
638 ((((gctUINT32) (0x01590880)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 23:23) - (0 ? 23:23) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 23:23) - (0 ? 23:23) + 1))))))) << (0 ? 23:23))) | (((gctUINT32) ((gctUINT32) (1) & ((gctUINT32) ((((1 ? 23:23) - (0 ? 23:23) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 23:23) - (0 ? 23:23) + 1))))))) << (0 ? 23:23)))));
639 }
640
641+ if ((gckHARDWARE_IsFeatureAvailable(Hardware, gcvFEATURE_HALTI2) == gcvFALSE)
642+ || (gckHARDWARE_IsFeatureAvailable(Hardware, gcvFEATURE_HALTI2) && (Hardware->identity.chipRevision < 0x5422))
643+ )
644+ {
645+ gctUINT32 data;
646+
647+ gcmkONERROR(
648+ gckOS_ReadRegisterEx(Hardware->os,
649+ Hardware->core,
650+ Hardware->powerBaseAddress
651+ + 0x00104,
652+ &data));
653+
654+
655+ data = ((((gctUINT32) (data)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 15:15) - (0 ? 15:15) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:15) - (0 ? 15:15) + 1))))))) << (0 ? 15:15))) | (((gctUINT32) ((gctUINT32) (1) & ((gctUINT32) ((((1 ? 15:15) - (0 ? 15:15) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:15) - (0 ? 15:15) + 1))))))) << (0 ? 15:15)));
656+
657+
658+ gcmkONERROR(
659+ gckOS_WriteRegisterEx(Hardware->os,
660+ Hardware->core,
661+ Hardware->powerBaseAddress
662+ + 0x00104,
663+ data));
664+ }
665+
666 /* Special workaround for this core
667 ** Make sure FE and TX are on different buses */
668 if ((Hardware->identity.chipModel == gcv2000)
669@@ -1152,7 +1255,9 @@ gckHARDWARE_InitializeHardware(
670 }
671
672 if (Hardware->identity.chipModel >= gcv400
673- && Hardware->identity.chipModel != gcv420)
674+ && Hardware->identity.chipModel != gcv420
675+ && (((((gctUINT32) (Hardware->identity.chipMinorFeatures3)) >> (0 ? 15:15) & ((gctUINT32) ((((1 ? 15:15) - (0 ? 15:15) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:15) - (0 ? 15:15) + 1)))))) == (0x1 & ((gctUINT32) ((((1 ? 15:15) - (0 ? 15:15) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:15) - (0 ? 15:15) + 1))))))) != gcvTRUE)
676+ )
677 {
678 gctUINT32 data;
679
680@@ -2883,35 +2988,44 @@ gckHARDWARE_QueryShaderCaps(
681 OUT gctUINT * Varyings
682 )
683 {
684+ gctUINT32 vsConstMax;
685+ gctUINT32 psConstMax;
686+
687 gcmkHEADER_ARG("Hardware=0x%x VertexUniforms=0x%x "
688 "FragmentUniforms=0x%x Varyings=0x%x",
689 Hardware, VertexUniforms,
690 FragmentUniforms, Varyings);
691
692+ if ((Hardware->identity.chipModel == gcv2000)
693+ && (Hardware->identity.chipRevision == 0x5118))
694+ {
695+ vsConstMax = 256;
696+ psConstMax = 64;
697+ }
698+ else if (Hardware->identity.numConstants > 256)
699+ {
700+ vsConstMax = 256;
701+ psConstMax = 256;
702+ }
703+ else if (Hardware->identity.numConstants == 256)
704+ {
705+ vsConstMax = 256;
706+ psConstMax = 256;
707+ }
708+ else
709+ {
710+ vsConstMax = 168;
711+ psConstMax = 64;
712+ }
713+
714 if (VertexUniforms != gcvNULL)
715 {
716- /* Return the vs shader const count. */
717- if (Hardware->identity.chipModel < gcv4000)
718- {
719- *VertexUniforms = 168;
720- }
721- else
722- {
723- *VertexUniforms = 256;
724- }
725+ *VertexUniforms = vsConstMax;
726 }
727
728 if (FragmentUniforms != gcvNULL)
729 {
730- /* Return the ps shader const count. */
731- if (Hardware->identity.chipModel < gcv4000)
732- {
733- *FragmentUniforms = 64;
734- }
735- else
736- {
737- *FragmentUniforms = 256;
738- }
739+ *FragmentUniforms = psConstMax;
740 }
741
742 if (Varyings != gcvNULL)
743@@ -3229,12 +3343,28 @@ gckHARDWARE_SetMMUv2(
744 gctBOOL commitEntered = gcvFALSE;
745 gctPOINTER pointer = gcvNULL;
746 gctBOOL acquired = gcvFALSE;
747+ gctBOOL config2D;
748+ gctSIZE_T configSize;
749
750 gcmkHEADER_ARG("Hardware=0x%x Enable=%d", Hardware, Enable);
751
752 /* Verify the arguments. */
753 gcmkVERIFY_OBJECT(Hardware, gcvOBJ_HARDWARE);
754
755+ config2D = gckHARDWARE_IsFeatureAvailable(Hardware, gcvFEATURE_PIPE_3D)
756+ && gckHARDWARE_IsFeatureAvailable(Hardware, gcvFEATURE_PIPE_2D);
757+
758+ configSize = 4 * 4;
759+
760+ if (config2D)
761+ {
762+ configSize +=
763+ /* Pipe Select. */
764+ 4 * 4
765+ /* Configure MMU States. */
766+ + 4 * 4;
767+ }
768+
769 /* Convert logical address into physical address. */
770 gcmkONERROR(
771 gckOS_GetPhysicalAddress(Hardware->os, MtlbAddress, &config));
772@@ -3281,7 +3411,7 @@ gckHARDWARE_SetMMUv2(
773 commitEntered = gcvTRUE;
774
775 gcmkONERROR(gckCOMMAND_Reserve(
776- command, 16, &pointer, &bufferSize
777+ command, configSize, &pointer, &bufferSize
778 ));
779
780 buffer = pointer;
781@@ -3300,10 +3430,43 @@ gckHARDWARE_SetMMUv2(
782
783 buffer[3] = address;
784
785+ if (config2D)
786+ {
787+ /* LoadState(AQPipeSelect, 1), pipe. */
788+ buffer[4]
789+ = ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 31:27) - (0 ? 31:27) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27))) | (((gctUINT32) (0x01 & ((gctUINT32) ((((1 ? 31:27) - (0 ? 31:27) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27)))
790+ | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 15:0) - (0 ? 15:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ? 15:0))) | (((gctUINT32) ((gctUINT32) (0x0E00) & ((gctUINT32) ((((1 ? 15:0) - (0 ? 15:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ? 15:0)))
791+ | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 25:16) - (0 ? 25:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 25:16) - (0 ? 25:16) + 1))))))) << (0 ? 25:16))) | (((gctUINT32) ((gctUINT32) (1) & ((gctUINT32) ((((1 ? 25:16) - (0 ? 25:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 25:16) - (0 ? 25:16) + 1))))))) << (0 ? 25:16)));
792+
793+ buffer[5] = 0x1;
794+
795+ buffer[6]
796+ = ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 31:27) - (0 ? 31:27) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27))) | (((gctUINT32) (0x01 & ((gctUINT32) ((((1 ? 31:27) - (0 ? 31:27) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27)))
797+ | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 15:0) - (0 ? 15:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ? 15:0))) | (((gctUINT32) ((gctUINT32) (0x0061) & ((gctUINT32) ((((1 ? 15:0) - (0 ? 15:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ? 15:0)))
798+ | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 25:16) - (0 ? 25:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 25:16) - (0 ? 25:16) + 1))))))) << (0 ? 25:16))) | (((gctUINT32) ((gctUINT32) (1) & ((gctUINT32) ((((1 ? 25:16) - (0 ? 25:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 25:16) - (0 ? 25:16) + 1))))))) << (0 ? 25:16)));
799+
800+ buffer[7] = config;
801+
802+ buffer[8]
803+ = ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 31:27) - (0 ? 31:27) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27))) | (((gctUINT32) (0x01 & ((gctUINT32) ((((1 ? 31:27) - (0 ? 31:27) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27)))
804+ | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 15:0) - (0 ? 15:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ? 15:0))) | (((gctUINT32) ((gctUINT32) (0x0060) & ((gctUINT32) ((((1 ? 15:0) - (0 ? 15:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ? 15:0)))
805+ | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 25:16) - (0 ? 25:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 25:16) - (0 ? 25:16) + 1))))))) << (0 ? 25:16))) | (((gctUINT32) ((gctUINT32) (1) & ((gctUINT32) ((((1 ? 25:16) - (0 ? 25:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 25:16) - (0 ? 25:16) + 1))))))) << (0 ? 25:16)));
806+
807+ buffer[9] = address;
808+
809+ /* LoadState(AQPipeSelect, 1), pipe. */
810+ buffer[10]
811+ = ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 31:27) - (0 ? 31:27) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27))) | (((gctUINT32) (0x01 & ((gctUINT32) ((((1 ? 31:27) - (0 ? 31:27) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27)))
812+ | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 15:0) - (0 ? 15:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ? 15:0))) | (((gctUINT32) ((gctUINT32) (0x0E00) & ((gctUINT32) ((((1 ? 15:0) - (0 ? 15:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ? 15:0)))
813+ | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 25:16) - (0 ? 25:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 25:16) - (0 ? 25:16) + 1))))))) << (0 ? 25:16))) | (((gctUINT32) ((gctUINT32) (1) & ((gctUINT32) ((((1 ? 25:16) - (0 ? 25:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 25:16) - (0 ? 25:16) + 1))))))) << (0 ? 25:16)));
814+
815+ buffer[11] = 0x0;
816+ }
817+
818 gcmkTRACE_ZONE(gcvLEVEL_INFO, gcvZONE_HARDWARE,
819 "Setup MMU: config=%08x, Safe Address=%08x\n.", config, address);
820
821- gcmkONERROR(gckCOMMAND_Execute(command, 16));
822+ gcmkONERROR(gckCOMMAND_Execute(command, configSize));
823
824 if (FromPower == gcvFALSE)
825 {
826@@ -3501,6 +3664,8 @@ gckHARDWARE_Flush(
827 gctUINT32 flush = 0;
828 gctUINT32_PTR logical = (gctUINT32_PTR) Logical;
829 gceSTATUS status;
830+ gctBOOL fcFlushStall;
831+ gctUINT32 reserveBytes = 8;
832
833 gcmkHEADER_ARG("Hardware=0x%x Flush=0x%x Logical=0x%x *Bytes=%lu",
834 Hardware, Flush, Logical, gcmOPT_VALUE(Bytes));
835@@ -3511,6 +3676,16 @@ gckHARDWARE_Flush(
836 /* Get current pipe. */
837 pipe = Hardware->kernel->command->pipeSelect;
838
839+ fcFlushStall
840+ = ((((gctUINT32) (Hardware->identity.chipMinorFeatures1)) >> (0 ? 31:31) & ((gctUINT32) ((((1 ? 31:31) - (0 ? 31:31) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:31) - (0 ? 31:31) + 1)))))) == (0x1 & ((gctUINT32) ((((1 ? 31:31) - (0 ? 31:31) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:31) - (0 ? 31:31) + 1)))))))
841+ && (Flush == gcvFLUSH_ALL)
842+ ;
843+
844+ if (fcFlushStall)
845+ {
846+ reserveBytes += 8;
847+ }
848+
849 /* Flush 3D color cache. */
850 if ((Flush & gcvFLUSH_COLOR) && (pipe == 0x0))
851 {
852@@ -3527,6 +3702,7 @@ gckHARDWARE_Flush(
853 if ((Flush & gcvFLUSH_TEXTURE) && (pipe == 0x0))
854 {
855 flush |= ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 2:2) - (0 ? 2:2) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 2:2) - (0 ? 2:2) + 1))))))) << (0 ? 2:2))) | (((gctUINT32) (0x1 & ((gctUINT32) ((((1 ? 2:2) - (0 ? 2:2) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 2:2) - (0 ? 2:2) + 1))))))) << (0 ? 2:2)));
856+ flush |= ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 4:4) - (0 ? 4:4) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 4:4) - (0 ? 4:4) + 1))))))) << (0 ? 4:4))) | (((gctUINT32) (0x1 & ((gctUINT32) ((((1 ? 4:4) - (0 ? 4:4) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 4:4) - (0 ? 4:4) + 1))))))) << (0 ? 4:4)));
857 }
858
859 /* Flush 2D cache. */
860@@ -3550,7 +3726,7 @@ gckHARDWARE_Flush(
861 /* Copy to command queue. */
862 if (Logical != gcvNULL)
863 {
864- if (*Bytes < 8)
865+ if (*Bytes < reserveBytes)
866 {
867 /* Command queue too small. */
868 gcmkONERROR(gcvSTATUS_BUFFER_TOO_SMALL);
869@@ -3565,12 +3741,26 @@ gckHARDWARE_Flush(
870
871 gcmkTRACE_ZONE(gcvLEVEL_INFO, gcvZONE_HARDWARE,
872 "0x%x: FLUSH 0x%x", logical, flush);
873+
874+ if (fcFlushStall)
875+ {
876+ logical[2] = ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 31:27) - (0 ? 31:27) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27))) | (((gctUINT32) (0x01 & ((gctUINT32) ((((1 ? 31:27) - (0 ? 31:27) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27)))
877+ | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 15:0) - (0 ? 15:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ? 15:0))) | (((gctUINT32) ((gctUINT32) (0x0594) & ((gctUINT32) ((((1 ? 15:0) - (0 ? 15:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ? 15:0)))
878+ | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 25:16) - (0 ? 25:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 25:16) - (0 ? 25:16) + 1))))))) << (0 ? 25:16))) | (((gctUINT32) ((gctUINT32) (1) & ((gctUINT32) ((((1 ? 25:16) - (0 ? 25:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 25:16) - (0 ? 25:16) + 1))))))) << (0 ? 25:16)));
879+
880+ logical[3] = ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 0:0) - (0 ? 0:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 0:0) - (0 ? 0:0) + 1))))))) << (0 ? 0:0))) | (((gctUINT32) (0x1 & ((gctUINT32) ((((1 ? 0:0) - (0 ? 0:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 0:0) - (0 ? 0:0) + 1))))))) << (0 ? 0:0)));
881+
882+
883+ gcmkTRACE_ZONE(gcvLEVEL_INFO, gcvZONE_HARDWARE,
884+ "0x%x: FLUSH 0x%x", logical + 3, logical[3]);
885+ }
886+
887 }
888
889 if (Bytes != gcvNULL)
890 {
891- /* 8 bytes required. */
892- *Bytes = 8;
893+ /* bytes required. */
894+ *Bytes = reserveBytes;
895 }
896 }
897
898@@ -4285,6 +4475,48 @@ gckHARDWARE_SetPowerManagementState(
899 }
900 }
901
902+ /* Flush Cache before Power Off. */
903+ if (flag & gcvPOWER_FLAG_POWER_OFF)
904+ {
905+ if (Hardware->clockState == gcvFALSE)
906+ {
907+ /* Turn off the GPU power. */
908+ gcmkONERROR(
909+ gckOS_SetGPUPower(os,
910+ Hardware->core,
911+ gcvTRUE,
912+ gcvTRUE));
913+
914+ Hardware->clockState = gcvTRUE;
915+
916+ if (gckHARDWARE_IsFeatureAvailable(Hardware, gcvFEATURE_DYNAMIC_FREQUENCY_SCALING) != gcvTRUE)
917+ {
918+ /* Write the clock control register. */
919+ gcmkONERROR(gckOS_WriteRegisterEx(os,
920+ Hardware->core,
921+ 0x00000,
922+ clocks[0]));
923+
924+ /* Done loading the frequency scaler. */
925+ gcmkONERROR(gckOS_WriteRegisterEx(os,
926+ Hardware->core,
927+ 0x00000,
928+ ((((gctUINT32) (clocks[0])) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 9:9) - (0 ? 9:9) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 9:9) - (0 ? 9:9) + 1))))))) << (0 ? 9:9))) | (((gctUINT32) ((gctUINT32) (0) & ((gctUINT32) ((((1 ? 9:9) - (0 ? 9:9) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 9:9) - (0 ? 9:9) + 1))))))) << (0 ? 9:9)))));
929+ }
930+ }
931+
932+ gcmkONERROR(gckCOMMAND_Start(command));
933+
934+ gcmkONERROR(_FlushCache(Hardware, command));
935+
936+ gckOS_Delay(gcvNULL, 1);
937+
938+ /* Stop the command parser. */
939+ gcmkONERROR(gckCOMMAND_Stop(command, gcvFALSE));
940+
941+ flag |= gcvPOWER_FLAG_CLOCK_OFF;
942+ }
943+
944 /* Get time until stopped. */
945 gcmkPROFILE_QUERY(time, stopTime);
946
947@@ -4582,6 +4814,40 @@ gckHARDWARE_SetPowerManagement(
948 return gcvSTATUS_OK;
949 }
950
951+/*******************************************************************************
952+**
953+** gckHARDWARE_SetGpuProfiler
954+**
955+** Configure GPU profiler function.
956+** Only used in driver initialization stage.
957+**
958+** INPUT:
959+**
960+** gckHARDWARE Harwdare
961+** Pointer to an gckHARDWARE object.
962+**
963+** gctBOOL GpuProfiler
964+** GOU Profiler State.
965+**
966+*/
967+gceSTATUS
968+gckHARDWARE_SetGpuProfiler(
969+ IN gckHARDWARE Hardware,
970+ IN gctBOOL GpuProfiler
971+ )
972+{
973+ gcmkHEADER_ARG("Hardware=0x%x", Hardware);
974+
975+ /* Verify the arguments. */
976+ gcmkVERIFY_OBJECT(Hardware, gcvOBJ_HARDWARE);
977+
978+ Hardware->gpuProfiler = GpuProfiler;
979+
980+ /* Success. */
981+ gcmkFOOTER_NO();
982+ return gcvSTATUS_OK;
983+}
984+
985 #if gcdENABLE_FSCALE_VAL_ADJUST
986 gceSTATUS
987 gckHARDWARE_SetFscaleValue(
988@@ -5141,6 +5407,402 @@ OnError:
989 }
990 #endif
991
992+#if VIVANTE_PROFILER_CONTEXT
993+#define gcmkUPDATE_PROFILE_DATA(data) \
994+ profilerHistroy->data += profiler->data
995+
996+gceSTATUS
997+gckHARDWARE_QueryContextProfile(
998+ IN gckHARDWARE Hardware,
999+ IN gctBOOL Reset,
1000+ IN gckCONTEXT Context,
1001+ OUT gcsPROFILER_COUNTERS * Counters
1002+ )
1003+{
1004+ gceSTATUS status;
1005+ gckCOMMAND command = Hardware->kernel->command;
1006+ gcsPROFILER_COUNTERS * profiler = Counters;
1007+
1008+ gcmkHEADER_ARG("Hardware=0x%x Counters=0x%x", Hardware, Counters);
1009+
1010+ /* Verify the arguments. */
1011+ gcmkVERIFY_OBJECT(Hardware, gcvOBJ_HARDWARE);
1012+
1013+ /* Acquire the context sequnence mutex. */
1014+ gcmkONERROR(gckOS_AcquireMutex(
1015+ command->os, command->mutexContextSeq, gcvINFINITE
1016+ ));
1017+
1018+ /* Read the counters. */
1019+ gcmkVERIFY_OK(gckOS_MemCopy(
1020+ profiler, &Context->histroyProfiler, gcmSIZEOF(gcsPROFILER_COUNTERS)
1021+ ));
1022+
1023+ if (Reset)
1024+ {
1025+ /* Reset counters. */
1026+ gcmkVERIFY_OK(gckOS_ZeroMemory(
1027+ &Context->histroyProfiler, gcmSIZEOF(gcsPROFILER_COUNTERS)
1028+ ));
1029+ }
1030+
1031+ gcmkVERIFY_OK(gckOS_ReleaseMutex(
1032+ command->os, command->mutexContextSeq
1033+ ));
1034+
1035+ /* Success. */
1036+ gcmkFOOTER_NO();
1037+ return gcvSTATUS_OK;
1038+
1039+OnError:
1040+ /* Return the status. */
1041+ gcmkFOOTER();
1042+ return status;
1043+}
1044+
1045+
1046+gceSTATUS
1047+gckHARDWARE_UpdateContextProfile(
1048+ IN gckHARDWARE Hardware,
1049+ IN gckCONTEXT Context
1050+ )
1051+{
1052+ gceSTATUS status;
1053+ gcsPROFILER_COUNTERS * profiler = &Context->latestProfiler;
1054+ gcsPROFILER_COUNTERS * profilerHistroy = &Context->histroyProfiler;
1055+ gctUINT i, clock;
1056+ gctUINT32 colorKilled, colorDrawn, depthKilled, depthDrawn;
1057+ gctUINT32 totalRead, totalWrite;
1058+ gceCHIPMODEL chipModel;
1059+ gctUINT32 chipRevision;
1060+ gctUINT32 temp;
1061+ gctBOOL needResetShader = gcvFALSE;
1062+
1063+ gcmkHEADER_ARG("Hardware=0x%x Context=0x%x", Hardware, Context);
1064+
1065+ /* Verify the arguments. */
1066+ gcmkVERIFY_OBJECT(Hardware, gcvOBJ_HARDWARE);
1067+ gcmkVERIFY_OBJECT(Context, gcvOBJ_CONTEXT);
1068+
1069+ chipModel = Hardware->identity.chipModel;
1070+ chipRevision = Hardware->identity.chipRevision;
1071+ if (chipModel == gcv2000 || (chipModel == gcv2100 && chipRevision == 0x5118))
1072+ {
1073+ needResetShader = gcvTRUE;
1074+ }
1075+
1076+ /* Read the counters. */
1077+ gcmkONERROR(
1078+ gckOS_ReadRegisterEx(Hardware->os,
1079+ Hardware->core,
1080+ 0x00438,
1081+ &profiler->gpuCyclesCounter));
1082+ gcmkUPDATE_PROFILE_DATA(gpuCyclesCounter);
1083+
1084+ gcmkONERROR(
1085+ gckOS_ReadRegisterEx(Hardware->os,
1086+ Hardware->core,
1087+ 0x00078,
1088+ &profiler->gpuTotalCyclesCounter));
1089+ gcmkUPDATE_PROFILE_DATA(gpuTotalCyclesCounter);
1090+
1091+ gcmkONERROR(
1092+ gckOS_ReadRegisterEx(Hardware->os,
1093+ Hardware->core,
1094+ 0x0007C,
1095+ &profiler->gpuIdleCyclesCounter));
1096+ gcmkUPDATE_PROFILE_DATA(gpuIdleCyclesCounter);
1097+
1098+ /* Read clock control register. */
1099+ gcmkONERROR(gckOS_ReadRegisterEx(Hardware->os,
1100+ Hardware->core,
1101+ 0x00000,
1102+ &clock));
1103+
1104+ profiler->gpuTotalRead64BytesPerFrame = 0;
1105+ profiler->gpuTotalWrite64BytesPerFrame = 0;
1106+ profiler->pe_pixel_count_killed_by_color_pipe = 0;
1107+ profiler->pe_pixel_count_killed_by_depth_pipe = 0;
1108+ profiler->pe_pixel_count_drawn_by_color_pipe = 0;
1109+ profiler->pe_pixel_count_drawn_by_depth_pipe = 0;
1110+
1111+ /* Walk through all avaiable pixel pipes. */
1112+ for (i = 0; i < Hardware->identity.pixelPipes; ++i)
1113+ {
1114+ /* Select proper pipe. */
1115+ gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os,
1116+ Hardware->core,
1117+ 0x00000,
1118+ ((((gctUINT32) (clock)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 23:20) - (0 ? 23:20) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 23:20) - (0 ? 23:20) + 1))))))) << (0 ? 23:20))) | (((gctUINT32) ((gctUINT32) (i) & ((gctUINT32) ((((1 ? 23:20) - (0 ? 23:20) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 23:20) - (0 ? 23:20) + 1))))))) << (0 ? 23:20)))));
1119+
1120+ /* BW */
1121+ gcmkONERROR(
1122+ gckOS_ReadRegisterEx(Hardware->os,
1123+ Hardware->core,
1124+ 0x00040,
1125+ &totalRead));
1126+ gcmkONERROR(
1127+ gckOS_ReadRegisterEx(Hardware->os,
1128+ Hardware->core,
1129+ 0x00044,
1130+ &totalWrite));
1131+
1132+ profiler->gpuTotalRead64BytesPerFrame += totalRead;
1133+ profiler->gpuTotalWrite64BytesPerFrame += totalWrite;
1134+ gcmkUPDATE_PROFILE_DATA(gpuTotalRead64BytesPerFrame);
1135+ gcmkUPDATE_PROFILE_DATA(gpuTotalWrite64BytesPerFrame);
1136+
1137+ /* PE */
1138+ gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00470, ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 23:16) - (0 ? 23:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 23:16) - (0 ? 23:16) + 1))))))) << (0 ? 23:16))) | (((gctUINT32) ((gctUINT32) (0) & ((gctUINT32) ((((1 ? 23:16) - (0 ? 23:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 23:16) - (0 ? 23:16) + 1))))))) << (0 ? 23:16)))));gcmkONERROR(gckOS_ReadRegisterEx(Hardware->os, Hardware->core, 0x00454, &colorKilled));
1139+ gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00470, ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 23:16) - (0 ? 23:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 23:16) - (0 ? 23:16) + 1))))))) << (0 ? 23:16))) | (((gctUINT32) ((gctUINT32) (1) & ((gctUINT32) ((((1 ? 23:16) - (0 ? 23:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 23:16) - (0 ? 23:16) + 1))))))) << (0 ? 23:16)))));gcmkONERROR(gckOS_ReadRegisterEx(Hardware->os, Hardware->core, 0x00454, &depthKilled));
1140+ gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00470, ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 23:16) - (0 ? 23:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 23:16) - (0 ? 23:16) + 1))))))) << (0 ? 23:16))) | (((gctUINT32) ((gctUINT32) (2) & ((gctUINT32) ((((1 ? 23:16) - (0 ? 23:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 23:16) - (0 ? 23:16) + 1))))))) << (0 ? 23:16)))));gcmkONERROR(gckOS_ReadRegisterEx(Hardware->os, Hardware->core, 0x00454, &colorDrawn));
1141+ gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00470, ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 23:16) - (0 ? 23:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 23:16) - (0 ? 23:16) + 1))))))) << (0 ? 23:16))) | (((gctUINT32) ((gctUINT32) (3) & ((gctUINT32) ((((1 ? 23:16) - (0 ? 23:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 23:16) - (0 ? 23:16) + 1))))))) << (0 ? 23:16)))));gcmkONERROR(gckOS_ReadRegisterEx(Hardware->os, Hardware->core, 0x00454, &depthDrawn));
1142+
1143+ profiler->pe_pixel_count_killed_by_color_pipe += colorKilled;
1144+ profiler->pe_pixel_count_killed_by_depth_pipe += depthKilled;
1145+ profiler->pe_pixel_count_drawn_by_color_pipe += colorDrawn;
1146+ profiler->pe_pixel_count_drawn_by_depth_pipe += depthDrawn;
1147+ gcmkUPDATE_PROFILE_DATA(pe_pixel_count_killed_by_color_pipe);
1148+ gcmkUPDATE_PROFILE_DATA(pe_pixel_count_killed_by_depth_pipe);
1149+ gcmkUPDATE_PROFILE_DATA(pe_pixel_count_drawn_by_color_pipe);
1150+ gcmkUPDATE_PROFILE_DATA(pe_pixel_count_drawn_by_depth_pipe);
1151+ }
1152+
1153+ /* Reset clock control register. */
1154+ gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os,
1155+ Hardware->core,
1156+ 0x00000,
1157+ clock));
1158+
1159+
1160+
1161+
1162+ /* Reset counters. */
1163+ gcmkONERROR(
1164+ gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x0003C, 1));
1165+ gcmkONERROR(
1166+ gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x0003C, 0));
1167+ gcmkONERROR(
1168+ gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00438, 0));
1169+ gcmkONERROR(
1170+ gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00078, 0));
1171+ gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00470, ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 23:16) - (0 ? 23:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 23:16) - (0 ? 23:16) + 1))))))) << (0 ? 23:16))) | (((gctUINT32) ((gctUINT32) (15) & ((gctUINT32) ((((1 ? 23:16) - (0 ? 23:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 23:16) - (0 ? 23:16) + 1))))))) << (0 ? 23:16))) ));
1172+gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00470, ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 23:16) - (0 ? 23:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 23:16) - (0 ? 23:16) + 1))))))) << (0 ? 23:16))) | (((gctUINT32) ((gctUINT32) (0) & ((gctUINT32) ((((1 ? 23:16) - (0 ? 23:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 23:16) - (0 ? 23:16) + 1))))))) << (0 ? 23:16)))
1173+));
1174+
1175+ /* SH */
1176+ gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00470, ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 31:24) - (0 ? 31:24) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:24) - (0 ? 31:24) + 1))))))) << (0 ? 31:24))) | (((gctUINT32) ((gctUINT32) (7) & ((gctUINT32) ((((1 ? 31:24) - (0 ? 31:24) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:24) - (0 ? 31:24) + 1))))))) << (0 ? 31:24))) ));
1177+gcmkONERROR(gckOS_ReadRegisterEx(Hardware->os, Hardware->core, 0x0045C, &profiler->ps_inst_counter));
1178+ if (needResetShader)
1179+ {
1180+ temp = profiler->ps_inst_counter;
1181+ profiler->ps_inst_counter -= Context->prevPSInstCount;
1182+ Context->prevPSInstCount = temp;
1183+ }
1184+ gcmkUPDATE_PROFILE_DATA(ps_inst_counter);
1185+
1186+ gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00470, ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 31:24) - (0 ? 31:24) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:24) - (0 ? 31:24) + 1))))))) << (0 ? 31:24))) | (((gctUINT32) ((gctUINT32) (8) & ((gctUINT32) ((((1 ? 31:24) - (0 ? 31:24) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:24) - (0 ? 31:24) + 1))))))) << (0 ? 31:24))) ));
1187+gcmkONERROR(gckOS_ReadRegisterEx(Hardware->os, Hardware->core, 0x0045C, &profiler->rendered_pixel_counter));
1188+ if (needResetShader)
1189+ {
1190+ temp = profiler->rendered_pixel_counter;
1191+ profiler->rendered_pixel_counter -= Context->prevPSPixelCount;
1192+ Context->prevPSPixelCount = temp;
1193+ }
1194+ gcmkUPDATE_PROFILE_DATA(rendered_pixel_counter);
1195+
1196+ gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00470, ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 31:24) - (0 ? 31:24) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:24) - (0 ? 31:24) + 1))))))) << (0 ? 31:24))) | (((gctUINT32) ((gctUINT32) (9) & ((gctUINT32) ((((1 ? 31:24) - (0 ? 31:24) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:24) - (0 ? 31:24) + 1))))))) << (0 ? 31:24))) ));
1197+gcmkONERROR(gckOS_ReadRegisterEx(Hardware->os, Hardware->core, 0x0045C, &profiler->vs_inst_counter));
1198+ if (needResetShader)
1199+ {
1200+ temp = profiler->vs_inst_counter;
1201+ profiler->vs_inst_counter -= Context->prevVSInstCount;
1202+ Context->prevVSInstCount = temp;
1203+ }
1204+ gcmkUPDATE_PROFILE_DATA(vs_inst_counter);
1205+
1206+ gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00470, ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 31:24) - (0 ? 31:24) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:24) - (0 ? 31:24) + 1))))))) << (0 ? 31:24))) | (((gctUINT32) ((gctUINT32) (10) & ((gctUINT32) ((((1 ? 31:24) - (0 ? 31:24) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:24) - (0 ? 31:24) + 1))))))) << (0 ? 31:24))) ));
1207+gcmkONERROR(gckOS_ReadRegisterEx(Hardware->os, Hardware->core, 0x0045C, &profiler->rendered_vertice_counter));
1208+ if (needResetShader)
1209+ {
1210+ temp = profiler->rendered_vertice_counter;
1211+ profiler->rendered_vertice_counter -= Context->prevVSVertexCount;
1212+ Context->prevVSVertexCount = temp;
1213+ }
1214+ gcmkUPDATE_PROFILE_DATA(rendered_vertice_counter);
1215+
1216+ gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00470, ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 31:24) - (0 ? 31:24) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:24) - (0 ? 31:24) + 1))))))) << (0 ? 31:24))) | (((gctUINT32) ((gctUINT32) (11) & ((gctUINT32) ((((1 ? 31:24) - (0 ? 31:24) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:24) - (0 ? 31:24) + 1))))))) << (0 ? 31:24))) ));
1217+gcmkONERROR(gckOS_ReadRegisterEx(Hardware->os, Hardware->core, 0x0045C, &profiler->vtx_branch_inst_counter));
1218+ if (needResetShader)
1219+ {
1220+ temp = profiler->vtx_branch_inst_counter;
1221+ profiler->vtx_branch_inst_counter -= Context->prevVSBranchInstCount;
1222+ Context->prevVSBranchInstCount = temp;
1223+ }
1224+ gcmkUPDATE_PROFILE_DATA(vtx_branch_inst_counter);
1225+
1226+ gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00470, ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 31:24) - (0 ? 31:24) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:24) - (0 ? 31:24) + 1))))))) << (0 ? 31:24))) | (((gctUINT32) ((gctUINT32) (12) & ((gctUINT32) ((((1 ? 31:24) - (0 ? 31:24) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:24) - (0 ? 31:24) + 1))))))) << (0 ? 31:24))) ));
1227+gcmkONERROR(gckOS_ReadRegisterEx(Hardware->os, Hardware->core, 0x0045C, &profiler->vtx_texld_inst_counter));
1228+ if (needResetShader)
1229+ {
1230+ temp = profiler->vtx_texld_inst_counter;
1231+ profiler->vtx_texld_inst_counter -= Context->prevVSTexInstCount;
1232+ Context->prevVSTexInstCount = temp;
1233+ }
1234+ gcmkUPDATE_PROFILE_DATA(vtx_texld_inst_counter);
1235+
1236+ gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00470, ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 31:24) - (0 ? 31:24) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:24) - (0 ? 31:24) + 1))))))) << (0 ? 31:24))) | (((gctUINT32) ((gctUINT32) (13) & ((gctUINT32) ((((1 ? 31:24) - (0 ? 31:24) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:24) - (0 ? 31:24) + 1))))))) << (0 ? 31:24))) ));
1237+gcmkONERROR(gckOS_ReadRegisterEx(Hardware->os, Hardware->core, 0x0045C, &profiler->pxl_branch_inst_counter));
1238+ if (needResetShader)
1239+ {
1240+ temp = profiler->pxl_branch_inst_counter;
1241+ profiler->pxl_branch_inst_counter -= Context->prevPSBranchInstCount;
1242+ Context->prevPSBranchInstCount = temp;
1243+ }
1244+ gcmkUPDATE_PROFILE_DATA(pxl_branch_inst_counter);
1245+
1246+ gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00470, ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 31:24) - (0 ? 31:24) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:24) - (0 ? 31:24) + 1))))))) << (0 ? 31:24))) | (((gctUINT32) ((gctUINT32) (14) & ((gctUINT32) ((((1 ? 31:24) - (0 ? 31:24) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:24) - (0 ? 31:24) + 1))))))) << (0 ? 31:24))) ));
1247+gcmkONERROR(gckOS_ReadRegisterEx(Hardware->os, Hardware->core, 0x0045C, &profiler->pxl_texld_inst_counter));
1248+ if (needResetShader)
1249+ {
1250+ temp = profiler->pxl_texld_inst_counter;
1251+ profiler->pxl_texld_inst_counter -= Context->prevPSTexInstCount;
1252+ Context->prevPSTexInstCount = temp;
1253+ }
1254+ gcmkUPDATE_PROFILE_DATA(pxl_texld_inst_counter);
1255+
1256+ gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00470, ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 31:24) - (0 ? 31:24) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:24) - (0 ? 31:24) + 1))))))) << (0 ? 31:24))) | (((gctUINT32) ((gctUINT32) (15) & ((gctUINT32) ((((1 ? 31:24) - (0 ? 31:24) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:24) - (0 ? 31:24) + 1))))))) << (0 ? 31:24))) ));
1257+gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00470, ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 31:24) - (0 ? 31:24) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:24) - (0 ? 31:24) + 1))))))) << (0 ? 31:24))) | (((gctUINT32) ((gctUINT32) (0) & ((gctUINT32) ((((1 ? 31:24) - (0 ? 31:24) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:24) - (0 ? 31:24) + 1))))))) << (0 ? 31:24)))
1258+));
1259+
1260+ /* PA */
1261+ gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00474, ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 7:0) - (0 ? 7:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 7:0) - (0 ? 7:0) + 1))))))) << (0 ? 7:0))) | (((gctUINT32) ((gctUINT32) (3) & ((gctUINT32) ((((1 ? 7:0) - (0 ? 7:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 7:0) - (0 ? 7:0) + 1))))))) << (0 ? 7:0))) ));
1262+gcmkONERROR(gckOS_ReadRegisterEx(Hardware->os, Hardware->core, 0x00460, &profiler->pa_input_vtx_counter));
1263+ gcmkUPDATE_PROFILE_DATA(pa_input_vtx_counter);
1264+ gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00474, ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 7:0) - (0 ? 7:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 7:0) - (0 ? 7:0) + 1))))))) << (0 ? 7:0))) | (((gctUINT32) ((gctUINT32) (4) & ((gctUINT32) ((((1 ? 7:0) - (0 ? 7:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 7:0) - (0 ? 7:0) + 1))))))) << (0 ? 7:0))) ));
1265+gcmkONERROR(gckOS_ReadRegisterEx(Hardware->os, Hardware->core, 0x00460, &profiler->pa_input_prim_counter));
1266+ gcmkUPDATE_PROFILE_DATA(pa_input_prim_counter);
1267+ gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00474, ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 7:0) - (0 ? 7:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 7:0) - (0 ? 7:0) + 1))))))) << (0 ? 7:0))) | (((gctUINT32) ((gctUINT32) (5) & ((gctUINT32) ((((1 ? 7:0) - (0 ? 7:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 7:0) - (0 ? 7:0) + 1))))))) << (0 ? 7:0))) ));
1268+gcmkONERROR(gckOS_ReadRegisterEx(Hardware->os, Hardware->core, 0x00460, &profiler->pa_output_prim_counter));
1269+ gcmkUPDATE_PROFILE_DATA(pa_output_prim_counter);
1270+ gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00474, ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 7:0) - (0 ? 7:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 7:0) - (0 ? 7:0) + 1))))))) << (0 ? 7:0))) | (((gctUINT32) ((gctUINT32) (6) & ((gctUINT32) ((((1 ? 7:0) - (0 ? 7:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 7:0) - (0 ? 7:0) + 1))))))) << (0 ? 7:0))) ));
1271+gcmkONERROR(gckOS_ReadRegisterEx(Hardware->os, Hardware->core, 0x00460, &profiler->pa_depth_clipped_counter));
1272+ gcmkUPDATE_PROFILE_DATA(pa_depth_clipped_counter);
1273+ gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00474, ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 7:0) - (0 ? 7:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 7:0) - (0 ? 7:0) + 1))))))) << (0 ? 7:0))) | (((gctUINT32) ((gctUINT32) (7) & ((gctUINT32) ((((1 ? 7:0) - (0 ? 7:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 7:0) - (0 ? 7:0) + 1))))))) << (0 ? 7:0))) ));
1274+gcmkONERROR(gckOS_ReadRegisterEx(Hardware->os, Hardware->core, 0x00460, &profiler->pa_trivial_rejected_counter));
1275+ gcmkUPDATE_PROFILE_DATA(pa_trivial_rejected_counter);
1276+ gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00474, ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 7:0) - (0 ? 7:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 7:0) - (0 ? 7:0) + 1))))))) << (0 ? 7:0))) | (((gctUINT32) ((gctUINT32) (8) & ((gctUINT32) ((((1 ? 7:0) - (0 ? 7:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 7:0) - (0 ? 7:0) + 1))))))) << (0 ? 7:0))) ));
1277+gcmkONERROR(gckOS_ReadRegisterEx(Hardware->os, Hardware->core, 0x00460, &profiler->pa_culled_counter));
1278+ gcmkUPDATE_PROFILE_DATA(pa_culled_counter);
1279+ gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00474, ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 7:0) - (0 ? 7:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 7:0) - (0 ? 7:0) + 1))))))) << (0 ? 7:0))) | (((gctUINT32) ((gctUINT32) (15) & ((gctUINT32) ((((1 ? 7:0) - (0 ? 7:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 7:0) - (0 ? 7:0) + 1))))))) << (0 ? 7:0))) ));
1280+gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00474, ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 7:0) - (0 ? 7:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 7:0) - (0 ? 7:0) + 1))))))) << (0 ? 7:0))) | (((gctUINT32) ((gctUINT32) (0) & ((gctUINT32) ((((1 ? 7:0) - (0 ? 7:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 7:0) - (0 ? 7:0) + 1))))))) << (0 ? 7:0)))
1281+));
1282+
1283+ /* SE */
1284+ gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00474, ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 15:8) - (0 ? 15:8) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:8) - (0 ? 15:8) + 1))))))) << (0 ? 15:8))) | (((gctUINT32) ((gctUINT32) (0) & ((gctUINT32) ((((1 ? 15:8) - (0 ? 15:8) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:8) - (0 ? 15:8) + 1))))))) << (0 ? 15:8))) ));
1285+gcmkONERROR(gckOS_ReadRegisterEx(Hardware->os, Hardware->core, 0x00464, &profiler->se_culled_triangle_count));
1286+ gcmkUPDATE_PROFILE_DATA(se_culled_triangle_count);
1287+ gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00474, ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 15:8) - (0 ? 15:8) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:8) - (0 ? 15:8) + 1))))))) << (0 ? 15:8))) | (((gctUINT32) ((gctUINT32) (1) & ((gctUINT32) ((((1 ? 15:8) - (0 ? 15:8) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:8) - (0 ? 15:8) + 1))))))) << (0 ? 15:8))) ));
1288+gcmkONERROR(gckOS_ReadRegisterEx(Hardware->os, Hardware->core, 0x00464, &profiler->se_culled_lines_count));
1289+ gcmkUPDATE_PROFILE_DATA(se_culled_lines_count);
1290+ gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00474, ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 15:8) - (0 ? 15:8) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:8) - (0 ? 15:8) + 1))))))) << (0 ? 15:8))) | (((gctUINT32) ((gctUINT32) (15) & ((gctUINT32) ((((1 ? 15:8) - (0 ? 15:8) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:8) - (0 ? 15:8) + 1))))))) << (0 ? 15:8))) ));
1291+gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00474, ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 15:8) - (0 ? 15:8) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:8) - (0 ? 15:8) + 1))))))) << (0 ? 15:8))) | (((gctUINT32) ((gctUINT32) (0) & ((gctUINT32) ((((1 ? 15:8) - (0 ? 15:8) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:8) - (0 ? 15:8) + 1))))))) << (0 ? 15:8)))
1292+));
1293+
1294+ /* RA */
1295+ gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00474, ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 23:16) - (0 ? 23:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 23:16) - (0 ? 23:16) + 1))))))) << (0 ? 23:16))) | (((gctUINT32) ((gctUINT32) (0) & ((gctUINT32) ((((1 ? 23:16) - (0 ? 23:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 23:16) - (0 ? 23:16) + 1))))))) << (0 ? 23:16))) ));
1296+gcmkONERROR(gckOS_ReadRegisterEx(Hardware->os, Hardware->core, 0x00448, &profiler->ra_valid_pixel_count));
1297+ gcmkUPDATE_PROFILE_DATA(ra_valid_pixel_count);
1298+ gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00474, ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 23:16) - (0 ? 23:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 23:16) - (0 ? 23:16) + 1))))))) << (0 ? 23:16))) | (((gctUINT32) ((gctUINT32) (1) & ((gctUINT32) ((((1 ? 23:16) - (0 ? 23:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 23:16) - (0 ? 23:16) + 1))))))) << (0 ? 23:16))) ));
1299+gcmkONERROR(gckOS_ReadRegisterEx(Hardware->os, Hardware->core, 0x00448, &profiler->ra_total_quad_count));
1300+ gcmkUPDATE_PROFILE_DATA(ra_total_quad_count);
1301+ gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00474, ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 23:16) - (0 ? 23:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 23:16) - (0 ? 23:16) + 1))))))) << (0 ? 23:16))) | (((gctUINT32) ((gctUINT32) (2) & ((gctUINT32) ((((1 ? 23:16) - (0 ? 23:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 23:16) - (0 ? 23:16) + 1))))))) << (0 ? 23:16))) ));
1302+gcmkONERROR(gckOS_ReadRegisterEx(Hardware->os, Hardware->core, 0x00448, &profiler->ra_valid_quad_count_after_early_z));
1303+ gcmkUPDATE_PROFILE_DATA(ra_valid_quad_count_after_early_z);
1304+ gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00474, ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 23:16) - (0 ? 23:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 23:16) - (0 ? 23:16) + 1))))))) << (0 ? 23:16))) | (((gctUINT32) ((gctUINT32) (3) & ((gctUINT32) ((((1 ? 23:16) - (0 ? 23:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 23:16) - (0 ? 23:16) + 1))))))) << (0 ? 23:16))) ));
1305+gcmkONERROR(gckOS_ReadRegisterEx(Hardware->os, Hardware->core, 0x00448, &profiler->ra_total_primitive_count));
1306+ gcmkUPDATE_PROFILE_DATA(ra_total_primitive_count);
1307+ gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00474, ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 23:16) - (0 ? 23:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 23:16) - (0 ? 23:16) + 1))))))) << (0 ? 23:16))) | (((gctUINT32) ((gctUINT32) (9) & ((gctUINT32) ((((1 ? 23:16) - (0 ? 23:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 23:16) - (0 ? 23:16) + 1))))))) << (0 ? 23:16))) ));
1308+gcmkONERROR(gckOS_ReadRegisterEx(Hardware->os, Hardware->core, 0x00448, &profiler->ra_pipe_cache_miss_counter));
1309+ gcmkUPDATE_PROFILE_DATA(ra_pipe_cache_miss_counter);
1310+ gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00474, ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 23:16) - (0 ? 23:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 23:16) - (0 ? 23:16) + 1))))))) << (0 ? 23:16))) | (((gctUINT32) ((gctUINT32) (10) & ((gctUINT32) ((((1 ? 23:16) - (0 ? 23:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 23:16) - (0 ? 23:16) + 1))))))) << (0 ? 23:16))) ));
1311+gcmkONERROR(gckOS_ReadRegisterEx(Hardware->os, Hardware->core, 0x00448, &profiler->ra_prefetch_cache_miss_counter));
1312+ gcmkUPDATE_PROFILE_DATA(ra_prefetch_cache_miss_counter);
1313+ gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00474, ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 23:16) - (0 ? 23:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 23:16) - (0 ? 23:16) + 1))))))) << (0 ? 23:16))) | (((gctUINT32) ((gctUINT32) (15) & ((gctUINT32) ((((1 ? 23:16) - (0 ? 23:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 23:16) - (0 ? 23:16) + 1))))))) << (0 ? 23:16))) ));
1314+gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00474, ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 23:16) - (0 ? 23:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 23:16) - (0 ? 23:16) + 1))))))) << (0 ? 23:16))) | (((gctUINT32) ((gctUINT32) (0) & ((gctUINT32) ((((1 ? 23:16) - (0 ? 23:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 23:16) - (0 ? 23:16) + 1))))))) << (0 ? 23:16)))
1315+));
1316+
1317+ /* TX */
1318+ gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00474, ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 31:24) - (0 ? 31:24) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:24) - (0 ? 31:24) + 1))))))) << (0 ? 31:24))) | (((gctUINT32) ((gctUINT32) (0) & ((gctUINT32) ((((1 ? 31:24) - (0 ? 31:24) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:24) - (0 ? 31:24) + 1))))))) << (0 ? 31:24))) ));
1319+gcmkONERROR(gckOS_ReadRegisterEx(Hardware->os, Hardware->core, 0x0044C, &profiler->tx_total_bilinear_requests));
1320+ gcmkUPDATE_PROFILE_DATA(tx_total_bilinear_requests);
1321+ gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00474, ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 31:24) - (0 ? 31:24) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:24) - (0 ? 31:24) + 1))))))) << (0 ? 31:24))) | (((gctUINT32) ((gctUINT32) (1) & ((gctUINT32) ((((1 ? 31:24) - (0 ? 31:24) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:24) - (0 ? 31:24) + 1))))))) << (0 ? 31:24))) ));
1322+gcmkONERROR(gckOS_ReadRegisterEx(Hardware->os, Hardware->core, 0x0044C, &profiler->tx_total_trilinear_requests));
1323+ gcmkUPDATE_PROFILE_DATA(tx_total_trilinear_requests);
1324+ gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00474, ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 31:24) - (0 ? 31:24) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:24) - (0 ? 31:24) + 1))))))) << (0 ? 31:24))) | (((gctUINT32) ((gctUINT32) (2) & ((gctUINT32) ((((1 ? 31:24) - (0 ? 31:24) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:24) - (0 ? 31:24) + 1))))))) << (0 ? 31:24))) ));
1325+gcmkONERROR(gckOS_ReadRegisterEx(Hardware->os, Hardware->core, 0x0044C, &profiler->tx_total_discarded_texture_requests));
1326+ gcmkUPDATE_PROFILE_DATA(tx_total_discarded_texture_requests);
1327+ gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00474, ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 31:24) - (0 ? 31:24) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:24) - (0 ? 31:24) + 1))))))) << (0 ? 31:24))) | (((gctUINT32) ((gctUINT32) (3) & ((gctUINT32) ((((1 ? 31:24) - (0 ? 31:24) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:24) - (0 ? 31:24) + 1))))))) << (0 ? 31:24))) ));
1328+gcmkONERROR(gckOS_ReadRegisterEx(Hardware->os, Hardware->core, 0x0044C, &profiler->tx_total_texture_requests));
1329+ gcmkUPDATE_PROFILE_DATA(tx_total_texture_requests);
1330+ gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00474, ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 31:24) - (0 ? 31:24) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:24) - (0 ? 31:24) + 1))))))) << (0 ? 31:24))) | (((gctUINT32) ((gctUINT32) (5) & ((gctUINT32) ((((1 ? 31:24) - (0 ? 31:24) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:24) - (0 ? 31:24) + 1))))))) << (0 ? 31:24))) ));
1331+gcmkONERROR(gckOS_ReadRegisterEx(Hardware->os, Hardware->core, 0x0044C, &profiler->tx_mem_read_count));
1332+ gcmkUPDATE_PROFILE_DATA(tx_mem_read_count);
1333+ gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00474, ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 31:24) - (0 ? 31:24) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:24) - (0 ? 31:24) + 1))))))) << (0 ? 31:24))) | (((gctUINT32) ((gctUINT32) (6) & ((gctUINT32) ((((1 ? 31:24) - (0 ? 31:24) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:24) - (0 ? 31:24) + 1))))))) << (0 ? 31:24))) ));
1334+gcmkONERROR(gckOS_ReadRegisterEx(Hardware->os, Hardware->core, 0x0044C, &profiler->tx_mem_read_in_8B_count));
1335+ gcmkUPDATE_PROFILE_DATA(tx_mem_read_in_8B_count);
1336+ gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00474, ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 31:24) - (0 ? 31:24) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:24) - (0 ? 31:24) + 1))))))) << (0 ? 31:24))) | (((gctUINT32) ((gctUINT32) (7) & ((gctUINT32) ((((1 ? 31:24) - (0 ? 31:24) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:24) - (0 ? 31:24) + 1))))))) << (0 ? 31:24))) ));
1337+gcmkONERROR(gckOS_ReadRegisterEx(Hardware->os, Hardware->core, 0x0044C, &profiler->tx_cache_miss_count));
1338+ gcmkUPDATE_PROFILE_DATA(tx_cache_miss_count);
1339+ gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00474, ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 31:24) - (0 ? 31:24) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:24) - (0 ? 31:24) + 1))))))) << (0 ? 31:24))) | (((gctUINT32) ((gctUINT32) (8) & ((gctUINT32) ((((1 ? 31:24) - (0 ? 31:24) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:24) - (0 ? 31:24) + 1))))))) << (0 ? 31:24))) ));
1340+gcmkONERROR(gckOS_ReadRegisterEx(Hardware->os, Hardware->core, 0x0044C, &profiler->tx_cache_hit_texel_count));
1341+ gcmkUPDATE_PROFILE_DATA(tx_cache_hit_texel_count);
1342+ gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00474, ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 31:24) - (0 ? 31:24) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:24) - (0 ? 31:24) + 1))))))) << (0 ? 31:24))) | (((gctUINT32) ((gctUINT32) (9) & ((gctUINT32) ((((1 ? 31:24) - (0 ? 31:24) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:24) - (0 ? 31:24) + 1))))))) << (0 ? 31:24))) ));
1343+gcmkONERROR(gckOS_ReadRegisterEx(Hardware->os, Hardware->core, 0x0044C, &profiler->tx_cache_miss_texel_count));
1344+ gcmkUPDATE_PROFILE_DATA(tx_cache_miss_texel_count);
1345+ gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00474, ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 31:24) - (0 ? 31:24) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:24) - (0 ? 31:24) + 1))))))) << (0 ? 31:24))) | (((gctUINT32) ((gctUINT32) (15) & ((gctUINT32) ((((1 ? 31:24) - (0 ? 31:24) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:24) - (0 ? 31:24) + 1))))))) << (0 ? 31:24))) ));
1346+gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00474, ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 31:24) - (0 ? 31:24) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:24) - (0 ? 31:24) + 1))))))) << (0 ? 31:24))) | (((gctUINT32) ((gctUINT32) (0) & ((gctUINT32) ((((1 ? 31:24) - (0 ? 31:24) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:24) - (0 ? 31:24) + 1))))))) << (0 ? 31:24)))
1347+));
1348+
1349+ /* MC */
1350+ gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00478, ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 7:0) - (0 ? 7:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 7:0) - (0 ? 7:0) + 1))))))) << (0 ? 7:0))) | (((gctUINT32) ((gctUINT32) (1) & ((gctUINT32) ((((1 ? 7:0) - (0 ? 7:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 7:0) - (0 ? 7:0) + 1))))))) << (0 ? 7:0))) ));
1351+gcmkONERROR(gckOS_ReadRegisterEx(Hardware->os, Hardware->core, 0x00468, &profiler->mc_total_read_req_8B_from_pipeline));
1352+ gcmkUPDATE_PROFILE_DATA(mc_total_read_req_8B_from_pipeline);
1353+ gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00478, ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 7:0) - (0 ? 7:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 7:0) - (0 ? 7:0) + 1))))))) << (0 ? 7:0))) | (((gctUINT32) ((gctUINT32) (2) & ((gctUINT32) ((((1 ? 7:0) - (0 ? 7:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 7:0) - (0 ? 7:0) + 1))))))) << (0 ? 7:0))) ));
1354+gcmkONERROR(gckOS_ReadRegisterEx(Hardware->os, Hardware->core, 0x00468, &profiler->mc_total_read_req_8B_from_IP));
1355+ gcmkUPDATE_PROFILE_DATA(mc_total_read_req_8B_from_IP);
1356+ gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00478, ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 7:0) - (0 ? 7:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 7:0) - (0 ? 7:0) + 1))))))) << (0 ? 7:0))) | (((gctUINT32) ((gctUINT32) (3) & ((gctUINT32) ((((1 ? 7:0) - (0 ? 7:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 7:0) - (0 ? 7:0) + 1))))))) << (0 ? 7:0))) ));
1357+gcmkONERROR(gckOS_ReadRegisterEx(Hardware->os, Hardware->core, 0x00468, &profiler->mc_total_write_req_8B_from_pipeline));
1358+ gcmkUPDATE_PROFILE_DATA(mc_total_write_req_8B_from_pipeline);
1359+ gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00478, ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 7:0) - (0 ? 7:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 7:0) - (0 ? 7:0) + 1))))))) << (0 ? 7:0))) | (((gctUINT32) ((gctUINT32) (15) & ((gctUINT32) ((((1 ? 7:0) - (0 ? 7:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 7:0) - (0 ? 7:0) + 1))))))) << (0 ? 7:0))) ));
1360+gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00478, ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 7:0) - (0 ? 7:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 7:0) - (0 ? 7:0) + 1))))))) << (0 ? 7:0))) | (((gctUINT32) ((gctUINT32) (0) & ((gctUINT32) ((((1 ? 7:0) - (0 ? 7:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 7:0) - (0 ? 7:0) + 1))))))) << (0 ? 7:0)))
1361+));
1362+
1363+ /* HI */
1364+ gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00478, ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 15:8) - (0 ? 15:8) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:8) - (0 ? 15:8) + 1))))))) << (0 ? 15:8))) | (((gctUINT32) ((gctUINT32) (0) & ((gctUINT32) ((((1 ? 15:8) - (0 ? 15:8) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:8) - (0 ? 15:8) + 1))))))) << (0 ? 15:8))) ));
1365+gcmkONERROR(gckOS_ReadRegisterEx(Hardware->os, Hardware->core, 0x0046C, &profiler->hi_axi_cycles_read_request_stalled));
1366+ gcmkUPDATE_PROFILE_DATA(hi_axi_cycles_read_request_stalled);
1367+ gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00478, ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 15:8) - (0 ? 15:8) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:8) - (0 ? 15:8) + 1))))))) << (0 ? 15:8))) | (((gctUINT32) ((gctUINT32) (1) & ((gctUINT32) ((((1 ? 15:8) - (0 ? 15:8) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:8) - (0 ? 15:8) + 1))))))) << (0 ? 15:8))) ));
1368+gcmkONERROR(gckOS_ReadRegisterEx(Hardware->os, Hardware->core, 0x0046C, &profiler->hi_axi_cycles_write_request_stalled));
1369+ gcmkUPDATE_PROFILE_DATA(hi_axi_cycles_write_request_stalled);
1370+ gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00478, ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 15:8) - (0 ? 15:8) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:8) - (0 ? 15:8) + 1))))))) << (0 ? 15:8))) | (((gctUINT32) ((gctUINT32) (2) & ((gctUINT32) ((((1 ? 15:8) - (0 ? 15:8) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:8) - (0 ? 15:8) + 1))))))) << (0 ? 15:8))) ));
1371+gcmkONERROR(gckOS_ReadRegisterEx(Hardware->os, Hardware->core, 0x0046C, &profiler->hi_axi_cycles_write_data_stalled));
1372+ gcmkUPDATE_PROFILE_DATA(hi_axi_cycles_write_data_stalled);
1373+ gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00478, ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 15:8) - (0 ? 15:8) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:8) - (0 ? 15:8) + 1))))))) << (0 ? 15:8))) | (((gctUINT32) ((gctUINT32) (15) & ((gctUINT32) ((((1 ? 15:8) - (0 ? 15:8) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:8) - (0 ? 15:8) + 1))))))) << (0 ? 15:8))) ));
1374+gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00478, ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 15:8) - (0 ? 15:8) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:8) - (0 ? 15:8) + 1))))))) << (0 ? 15:8))) | (((gctUINT32) ((gctUINT32) (0) & ((gctUINT32) ((((1 ? 15:8) - (0 ? 15:8) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:8) - (0 ? 15:8) + 1))))))) << (0 ? 15:8)))
1375+));
1376+
1377+ /* Success. */
1378+ gcmkFOOTER_NO();
1379+ return gcvSTATUS_OK;
1380+
1381+OnError:
1382+ /* Return the status. */
1383+ gcmkFOOTER();
1384+ return status;
1385+}
1386+#endif
1387+
1388 static gceSTATUS
1389 _ResetGPU(
1390 IN gckHARDWARE Hardware,
1391@@ -5602,6 +6264,22 @@ gckHARDWARE_IsFeatureAvailable(
1392 && ((((gctUINT32) (Hardware->identity.chipFeatures)) >> (0 ? 2:2) & ((gctUINT32) ((((1 ? 2:2) - (0 ? 2:2) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 2:2) - (0 ? 2:2) + 1)))))) == (0x1 & ((gctUINT32) ((((1 ? 2:2) - (0 ? 2:2) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 2:2) - (0 ? 2:2) + 1)))))));
1393 break;
1394
1395+ case gcvFEATURE_PIPE_2D:
1396+ available = ((((gctUINT32) (Hardware->identity.chipFeatures)) >> (0 ? 9:9) & ((gctUINT32) ((((1 ? 9:9) - (0 ? 9:9) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 9:9) - (0 ? 9:9) + 1)))))) == (0x1 & ((gctUINT32) ((((1 ? 9:9) - (0 ? 9:9) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 9:9) - (0 ? 9:9) + 1)))))));
1397+ break;
1398+
1399+ case gcvFEATURE_PIPE_3D:
1400+#ifndef VIVANTE_NO_3D
1401+ available = ((((gctUINT32) (Hardware->identity.chipFeatures)) >> (0 ? 2:2) & ((gctUINT32) ((((1 ? 2:2) - (0 ? 2:2) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 2:2) - (0 ? 2:2) + 1)))))) == (0x1 & ((gctUINT32) ((((1 ? 2:2) - (0 ? 2:2) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 2:2) - (0 ? 2:2) + 1)))))));
1402+#else
1403+ available = gcvFALSE;
1404+#endif
1405+ break;
1406+
1407+ case gcvFEATURE_HALTI2:
1408+ available = ((((gctUINT32) (Hardware->identity.chipMinorFeatures4)) >> (0 ? 16:16) & ((gctUINT32) ((((1 ? 16:16) - (0 ? 16:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 16:16) - (0 ? 16:16) + 1)))))) == (0x1 & ((gctUINT32) ((((1 ? 16:16) - (0 ? 16:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 16:16) - (0 ? 16:16) + 1)))))));
1409+ break;
1410+
1411 default:
1412 gcmkFATAL("Invalid feature has been requested.");
1413 available = gcvFALSE;
1414diff --git a/drivers/mxc/gpu-viv/arch/XAQ2/hal/kernel/gc_hal_kernel_hardware.h b/drivers/mxc/gpu-viv/arch/XAQ2/hal/kernel/gc_hal_kernel_hardware.h
1415index 37226b7..287ea60 100644
1416--- a/drivers/mxc/gpu-viv/arch/XAQ2/hal/kernel/gc_hal_kernel_hardware.h
1417+++ b/drivers/mxc/gpu-viv/arch/XAQ2/hal/kernel/gc_hal_kernel_hardware.h
1418@@ -92,6 +92,7 @@ struct _gckHARDWARE
1419 #endif
1420
1421 gctBOOL powerManagement;
1422+ gctBOOL gpuProfiler;
1423 };
1424
1425 gceSTATUS
1426diff --git a/drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel.c b/drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel.c
1427index b7b0d28..12a5340 100644
1428--- a/drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel.c
1429+++ b/drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel.c
1430@@ -128,19 +128,6 @@ _ResetFinishFunction(
1431 ** Pointer to a variable that will hold the pointer to the gckKERNEL
1432 ** object.
1433 */
1434-#ifdef ANDROID
1435-#if gcdNEW_PROFILER_FILE
1436-#define DEFAULT_PROFILE_FILE_NAME "/sdcard/vprofiler.vpd"
1437-#else
1438-#define DEFAULT_PROFILE_FILE_NAME "/sdcard/vprofiler.xml"
1439-#endif
1440-#else
1441-#if gcdNEW_PROFILER_FILE
1442-#define DEFAULT_PROFILE_FILE_NAME "vprofiler.vpd"
1443-#else
1444-#define DEFAULT_PROFILE_FILE_NAME "vprofiler.xml"
1445-#endif
1446-#endif
1447
1448 gceSTATUS
1449 gckKERNEL_Construct(
1450@@ -302,17 +289,12 @@ gckKERNEL_Construct(
1451
1452 #if VIVANTE_PROFILER
1453 /* Initialize profile setting */
1454-#if defined ANDROID
1455 kernel->profileEnable = gcvFALSE;
1456-#else
1457- kernel->profileEnable = gcvTRUE;
1458-#endif
1459 kernel->profileCleanRegister = gcvTRUE;
1460+#endif
1461
1462- gcmkVERIFY_OK(
1463- gckOS_MemCopy(kernel->profileFileName,
1464- DEFAULT_PROFILE_FILE_NAME,
1465- gcmSIZEOF(DEFAULT_PROFILE_FILE_NAME) + 1));
1466+#if gcdANDROID_NATIVE_FENCE_SYNC
1467+ gcmkONERROR(gckOS_CreateSyncTimeline(Os, &kernel->timeline));
1468 #endif
1469
1470 /* Return pointer to the gckKERNEL object. */
1471@@ -395,6 +377,13 @@ OnError:
1472 }
1473 #endif
1474
1475+#if gcdANDROID_NATIVE_FENCE_SYNC
1476+ if (kernel->timeline)
1477+ {
1478+ gcmkVERIFY_OK(gckOS_DestroySyncTimeline(Os, kernel->timeline));
1479+ }
1480+#endif
1481+
1482 gcmkVERIFY_OK(gcmkOS_SAFE_FREE(Os, kernel));
1483 }
1484
1485@@ -525,6 +514,10 @@ gckKERNEL_Destroy(
1486 }
1487 #endif
1488
1489+#if gcdANDROID_NATIVE_FENCE_SYNC
1490+ gcmkVERIFY_OK(gckOS_DestroySyncTimeline(Kernel->os, Kernel->timeline));
1491+#endif
1492+
1493 /* Mark the gckKERNEL object as unknown. */
1494 Kernel->object.type = gcvOBJ_UNKNOWN;
1495
1496@@ -1310,7 +1303,8 @@ gckKERNEL_Dispatch(
1497 /* Commit a command and context buffer. */
1498 gcmkONERROR(
1499 gckCOMMAND_Commit(Kernel->command,
1500- gcmNAME_TO_PTR(Interface->u.Commit.context),
1501+ Interface->u.Commit.context ?
1502+ gcmNAME_TO_PTR(Interface->u.Commit.context) : gcvNULL,
1503 gcmUINT64_TO_PTR(Interface->u.Commit.commandBuffer),
1504 gcmUINT64_TO_PTR(Interface->u.Commit.delta),
1505 gcmUINT64_TO_PTR(Interface->u.Commit.queue),
1506@@ -1600,7 +1594,15 @@ gckKERNEL_Dispatch(
1507 break;
1508
1509 case gcvHAL_READ_ALL_PROFILE_REGISTERS:
1510-#if VIVANTE_PROFILER
1511+#if VIVANTE_PROFILER && VIVANTE_PROFILER_CONTEXT
1512+ /* Read profile data according to the context. */
1513+ gcmkONERROR(
1514+ gckHARDWARE_QueryContextProfile(
1515+ Kernel->hardware,
1516+ Kernel->profileCleanRegister,
1517+ gcmNAME_TO_PTR(Interface->u.RegisterProfileData.context),
1518+ &Interface->u.RegisterProfileData.counters));
1519+#elif VIVANTE_PROFILER
1520 /* Read all 3D profile registers. */
1521 gcmkONERROR(
1522 gckHARDWARE_QueryProfileRegisters(
1523@@ -1628,11 +1630,6 @@ gckKERNEL_Dispatch(
1524 #if VIVANTE_PROFILER
1525 /* Get profile setting */
1526 Interface->u.GetProfileSetting.enable = Kernel->profileEnable;
1527-
1528- gcmkVERIFY_OK(
1529- gckOS_MemCopy(Interface->u.GetProfileSetting.fileName,
1530- Kernel->profileFileName,
1531- gcdMAX_PROFILE_FILE_NAME));
1532 #endif
1533
1534 status = gcvSTATUS_OK;
1535@@ -1640,12 +1637,13 @@ gckKERNEL_Dispatch(
1536 case gcvHAL_SET_PROFILE_SETTING:
1537 #if VIVANTE_PROFILER
1538 /* Set profile setting */
1539- Kernel->profileEnable = Interface->u.SetProfileSetting.enable;
1540-
1541- gcmkVERIFY_OK(
1542- gckOS_MemCopy(Kernel->profileFileName,
1543- Interface->u.SetProfileSetting.fileName,
1544- gcdMAX_PROFILE_FILE_NAME));
1545+ if(Kernel->hardware->gpuProfiler)
1546+ Kernel->profileEnable = Interface->u.SetProfileSetting.enable;
1547+ else
1548+ {
1549+ status = gcvSTATUS_NOT_SUPPORTED;
1550+ break;
1551+ }
1552 #endif
1553
1554 status = gcvSTATUS_OK;
1555@@ -2093,6 +2091,61 @@ gckKERNEL_Dispatch(
1556 #endif
1557 break;
1558
1559+#if gcdANDROID_NATIVE_FENCE_SYNC
1560+ case gcvHAL_SYNC_POINT:
1561+ {
1562+ gctSYNC_POINT syncPoint;
1563+
1564+ switch (Interface->u.SyncPoint.command)
1565+ {
1566+ case gcvSYNC_POINT_CREATE:
1567+ gcmkONERROR(gckOS_CreateSyncPoint(Kernel->os, &syncPoint));
1568+
1569+ Interface->u.SyncPoint.syncPoint = gcmPTR_TO_UINT64(syncPoint);
1570+
1571+ gcmkVERIFY_OK(
1572+ gckKERNEL_AddProcessDB(Kernel,
1573+ processID, gcvDB_SYNC_POINT,
1574+ syncPoint,
1575+ gcvNULL,
1576+ 0));
1577+ break;
1578+
1579+ case gcvSYNC_POINT_DESTROY:
1580+ syncPoint = gcmUINT64_TO_PTR(Interface->u.SyncPoint.syncPoint);
1581+
1582+ gcmkONERROR(gckOS_DestroySyncPoint(Kernel->os, syncPoint));
1583+
1584+ gcmkVERIFY_OK(
1585+ gckKERNEL_RemoveProcessDB(Kernel,
1586+ processID, gcvDB_SYNC_POINT,
1587+ syncPoint));
1588+ break;
1589+
1590+ default:
1591+ gcmkONERROR(gcvSTATUS_INVALID_ARGUMENT);
1592+ break;
1593+ }
1594+ }
1595+ break;
1596+
1597+ case gcvHAL_CREATE_NATIVE_FENCE:
1598+ {
1599+ gctINT fenceFD;
1600+ gctSYNC_POINT syncPoint =
1601+ gcmUINT64_TO_PTR(Interface->u.CreateNativeFence.syncPoint);
1602+
1603+ gcmkONERROR(
1604+ gckOS_CreateNativeFence(Kernel->os,
1605+ Kernel->timeline,
1606+ syncPoint,
1607+ &fenceFD));
1608+
1609+ Interface->u.CreateNativeFence.fenceFD = fenceFD;
1610+ }
1611+ break;
1612+#endif
1613+
1614 default:
1615 /* Invalid command. */
1616 gcmkONERROR(gcvSTATUS_INVALID_ARGUMENT);
1617@@ -2856,6 +2909,8 @@ gckKERNEL_Recovery(
1618 return gcvSTATUS_OK;
1619 }
1620
1621+ gcmkPRINT("[galcore]: GPU[%d] hang, automatic recovery.", Kernel->core);
1622+
1623 /* Start a timer to clear reset flag, before timer is expired,
1624 ** other recovery request is ignored. */
1625 gcmkVERIFY_OK(
1626@@ -3382,7 +3437,7 @@ gckLINKQUEUE_Dequeue(
1627 IN gckLINKQUEUE LinkQueue
1628 )
1629 {
1630- gcmASSERT(LinkQueue->count == gcdLINK_QUEUE_SIZE);
1631+ gcmkASSERT(LinkQueue->count == gcdLINK_QUEUE_SIZE);
1632
1633 LinkQueue->count--;
1634 LinkQueue->front = (LinkQueue->front + 1) % gcdLINK_QUEUE_SIZE;
1635diff --git a/drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel.h b/drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel.h
1636index 5896e93..1c40df2 100644
1637--- a/drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel.h
1638+++ b/drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel.h
1639@@ -140,8 +140,9 @@ typedef enum _gceDATABASE_TYPE
1640 gcvDB_CONTEXT, /* Context */
1641 gcvDB_IDLE, /* GPU idle. */
1642 gcvDB_MAP_MEMORY, /* Map memory */
1643- gcvDB_SHARED_INFO, /* Private data */
1644- gcvDB_MAP_USER_MEMORY /* Map user memory */
1645+ gcvDB_SHARED_INFO, /* Private data */
1646+ gcvDB_MAP_USER_MEMORY, /* Map user memory */
1647+ gcvDB_SYNC_POINT, /* Sync point. */
1648 }
1649 gceDATABASE_TYPE;
1650
1651@@ -406,9 +407,6 @@ struct _gckKERNEL
1652 /* Enable profiling */
1653 gctBOOL profileEnable;
1654
1655- /* The profile file name */
1656- gctCHAR profileFileName[gcdMAX_PROFILE_FILE_NAME];
1657-
1658 /* Clear profile register or not*/
1659 gctBOOL profileCleanRegister;
1660
1661@@ -445,6 +443,10 @@ struct _gckKERNEL
1662 #if gcdDVFS
1663 gckDVFS dvfs;
1664 #endif
1665+
1666+#if gcdANDROID_NATIVE_FENCE_SYNC
1667+ gctHANDLE timeline;
1668+#endif
1669 };
1670
1671 struct _FrequencyHistory
1672@@ -496,6 +498,11 @@ struct _gckCOMMAND
1673 /* Context switching mutex. */
1674 gctPOINTER mutexContext;
1675
1676+#if VIVANTE_PROFILER_CONTEXT
1677+ /* Context sequence mutex. */
1678+ gctPOINTER mutexContextSeq;
1679+#endif
1680+
1681 /* Command queue power semaphore. */
1682 gctPOINTER powerSemaphore;
1683
1684@@ -649,6 +656,8 @@ struct _gckEVENT
1685 gctPOINTER eventListMutex;
1686
1687 gctPOINTER submitTimer;
1688+
1689+ volatile gctBOOL inNotify;
1690 };
1691
1692 /* Free all events belonging to a process. */
1693@@ -668,6 +677,11 @@ gckEVENT_Stop(
1694 IN OUT gctSIZE_T * waitSize
1695 );
1696
1697+gceSTATUS
1698+gckEVENT_WaitEmpty(
1699+ IN gckEVENT Event
1700+ );
1701+
1702 /* gcuVIDMEM_NODE structure. */
1703 typedef union _gcuVIDMEM_NODE
1704 {
1705diff --git a/drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel_command.c b/drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel_command.c
1706index 9ee9ea1..73dab81 100644
1707--- a/drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel_command.c
1708+++ b/drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel_command.c
1709@@ -494,6 +494,11 @@ gckCOMMAND_Construct(
1710 /* Create the context switching mutex. */
1711 gcmkONERROR(gckOS_CreateMutex(os, &command->mutexContext));
1712
1713+#if VIVANTE_PROFILER_CONTEXT
1714+ /* Create the context switching mutex. */
1715+ gcmkONERROR(gckOS_CreateMutex(os, &command->mutexContextSeq));
1716+#endif
1717+
1718 /* Create the power management semaphore. */
1719 gcmkONERROR(gckOS_CreateSemaphore(os, &command->powerSemaphore));
1720
1721@@ -572,6 +577,13 @@ OnError:
1722 gcmkVERIFY_OK(gckOS_DeleteMutex(os, command->mutexContext));
1723 }
1724
1725+#if VIVANTE_PROFILER_CONTEXT
1726+ if (command->mutexContextSeq != gcvNULL)
1727+ {
1728+ gcmkVERIFY_OK(gckOS_DeleteMutex(os, command->mutexContextSeq));
1729+ }
1730+#endif
1731+
1732 if (command->mutexQueue != gcvNULL)
1733 {
1734 gcmkVERIFY_OK(gckOS_DeleteMutex(os, command->mutexQueue));
1735@@ -662,6 +674,11 @@ gckCOMMAND_Destroy(
1736 /* Delete the context switching mutex. */
1737 gcmkVERIFY_OK(gckOS_DeleteMutex(Command->os, Command->mutexContext));
1738
1739+#if VIVANTE_PROFILER_CONTEXT
1740+ if (Command->mutexContextSeq != gcvNULL)
1741+ gcmkVERIFY_OK(gckOS_DeleteMutex(Command->os, Command->mutexContextSeq));
1742+#endif
1743+
1744 /* Delete the command queue mutex. */
1745 gcmkVERIFY_OK(gckOS_DeleteMutex(Command->os, Command->mutexQueue));
1746
1747@@ -1127,6 +1144,10 @@ gckCOMMAND_Commit(
1748 # endif
1749 #endif
1750
1751+#if VIVANTE_PROFILER_CONTEXT
1752+ gctBOOL sequenceAcquired = gcvFALSE;
1753+#endif
1754+
1755 gctPOINTER pointer = gcvNULL;
1756
1757 gcmkHEADER_ARG(
1758@@ -1145,6 +1166,17 @@ gckCOMMAND_Commit(
1759
1760 gcmkONERROR(_FlushMMU(Command));
1761
1762+#if VIVANTE_PROFILER_CONTEXT
1763+ if((Command->kernel->hardware->gpuProfiler) && (Command->kernel->profileEnable))
1764+ {
1765+ /* Acquire the context sequnence mutex. */
1766+ gcmkONERROR(gckOS_AcquireMutex(
1767+ Command->os, Command->mutexContextSeq, gcvINFINITE
1768+ ));
1769+ sequenceAcquired = gcvTRUE;
1770+ }
1771+#endif
1772+
1773 /* Acquire the command queue. */
1774 gcmkONERROR(gckCOMMAND_EnterCommit(Command, gcvFALSE));
1775 commitEntered = gcvTRUE;
1776@@ -2002,6 +2034,23 @@ gckCOMMAND_Commit(
1777 gcmkONERROR(gckCOMMAND_ExitCommit(Command, gcvFALSE));
1778 commitEntered = gcvFALSE;
1779
1780+#if VIVANTE_PROFILER_CONTEXT
1781+ if(sequenceAcquired)
1782+ {
1783+ gcmkONERROR(gckCOMMAND_Stall(Command, gcvTRUE));
1784+ if (Command->currContext)
1785+ {
1786+ gcmkONERROR(gckHARDWARE_UpdateContextProfile(
1787+ hardware,
1788+ Command->currContext));
1789+ }
1790+
1791+ /* Release the context switching mutex. */
1792+ gcmkONERROR(gckOS_ReleaseMutex(Command->os, Command->mutexContextSeq));
1793+ sequenceAcquired = gcvFALSE;
1794+ }
1795+#endif
1796+
1797 /* Loop while there are records in the queue. */
1798 while (EventQueue != gcvNULL)
1799 {
1800@@ -2114,6 +2163,14 @@ OnError:
1801 gcmkVERIFY_OK(gckCOMMAND_ExitCommit(Command, gcvFALSE));
1802 }
1803
1804+#if VIVANTE_PROFILER_CONTEXT
1805+ if (sequenceAcquired)
1806+ {
1807+ /* Release the context sequence mutex. */
1808+ gcmkVERIFY_OK(gckOS_ReleaseMutex(Command->os, Command->mutexContextSeq));
1809+ }
1810+#endif
1811+
1812 /* Unmap the command buffer pointer. */
1813 if (commandBufferMapped)
1814 {
1815diff --git a/drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel_command_vg.c b/drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel_command_vg.c
1816index 76c1c10..1a7c340 100644
1817--- a/drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel_command_vg.c
1818+++ b/drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel_command_vg.c
1819@@ -2819,6 +2819,7 @@ gckVGCOMMAND_Construct(
1820 ** Enable TS overflow interrupt.
1821 */
1822
1823+ command->info.tsOverflowInt = 0;
1824 gcmkERR_BREAK(gckVGINTERRUPT_Enable(
1825 Kernel->interrupt,
1826 &command->info.tsOverflowInt,
1827@@ -3406,38 +3407,26 @@ gckVGCOMMAND_Commit(
1828 gctBOOL previousExecuted;
1829 gctUINT controlIndex;
1830
1831+ gcmkERR_BREAK(gckVGHARDWARE_SetPowerManagementState(
1832+ Command->hardware, gcvPOWER_ON_AUTO
1833+ ));
1834+
1835+ /* Acquire the power semaphore. */
1836+ gcmkERR_BREAK(gckOS_AcquireSemaphore(
1837+ Command->os, Command->powerSemaphore
1838+ ));
1839+
1840 /* Acquire the mutex. */
1841- gcmkERR_BREAK(gckOS_AcquireMutex(
1842+ status = gckOS_AcquireMutex(
1843 Command->os,
1844 Command->commitMutex,
1845 gcvINFINITE
1846- ));
1847-
1848- status = gckVGHARDWARE_SetPowerManagementState(
1849- Command->hardware, gcvPOWER_ON_AUTO);
1850-
1851- if (gcmIS_ERROR(status))
1852- {
1853- /* Acquire the mutex. */
1854- gcmkVERIFY_OK(gckOS_ReleaseMutex(
1855- Command->os,
1856- Command->commitMutex
1857- ));
1858-
1859- break;
1860- }
1861- /* Acquire the power semaphore. */
1862- status = gckOS_AcquireSemaphore(
1863- Command->os, Command->powerSemaphore);
1864+ );
1865
1866 if (gcmIS_ERROR(status))
1867 {
1868- /* Acquire the mutex. */
1869- gcmkVERIFY_OK(gckOS_ReleaseMutex(
1870- Command->os,
1871- Command->commitMutex
1872- ));
1873-
1874+ gcmkVERIFY_OK(gckOS_ReleaseSemaphore(
1875+ Command->os, Command->powerSemaphore));
1876 break;
1877 }
1878
1879@@ -3669,14 +3658,14 @@ gckVGCOMMAND_Commit(
1880 }
1881 while (gcvFALSE);
1882
1883- gcmkVERIFY_OK(gckOS_ReleaseSemaphore(
1884- Command->os, Command->powerSemaphore));
1885-
1886 /* Release the mutex. */
1887 gcmkCHECK_STATUS(gckOS_ReleaseMutex(
1888 Command->os,
1889 Command->commitMutex
1890 ));
1891+
1892+ gcmkVERIFY_OK(gckOS_ReleaseSemaphore(
1893+ Command->os, Command->powerSemaphore));
1894 }
1895 while (gcvFALSE);
1896
1897diff --git a/drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel_db.c b/drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel_db.c
1898index 673d4f7..134351a 100644
1899--- a/drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel_db.c
1900+++ b/drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel_db.c
1901@@ -1307,6 +1307,18 @@ gckKERNEL_DestroyProcessDB(
1902 status = gckOS_FreeMemory(Kernel->os, record->physical);
1903 break;
1904
1905+#if gcdANDROID_NATIVE_FENCE_SYNC
1906+ case gcvDB_SYNC_POINT:
1907+ /* Free the user signal. */
1908+ status = gckOS_DestroySyncPoint(Kernel->os,
1909+ (gctSYNC_POINT) record->data);
1910+
1911+ gcmkTRACE_ZONE(gcvLEVEL_WARNING, gcvZONE_DATABASE,
1912+ "DB: SYNC POINT %d (status=%d)",
1913+ (gctINT)(gctUINTPTR_T)record->data, status);
1914+ break;
1915+#endif
1916+
1917 default:
1918 gcmkTRACE_ZONE(gcvLEVEL_ERROR, gcvZONE_DATABASE,
1919 "DB: Correcupted record=0x%08x type=%d",
1920diff --git a/drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel_event.c b/drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel_event.c
1921index 217f7f1..2d81a56 100644
1922--- a/drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel_event.c
1923+++ b/drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel_event.c
1924@@ -931,6 +931,7 @@ gckEVENT_AddList(
1925 || (Interface->command == gcvHAL_TIMESTAMP)
1926 || (Interface->command == gcvHAL_COMMIT_DONE)
1927 || (Interface->command == gcvHAL_FREE_VIRTUAL_COMMAND_BUFFER)
1928+ || (Interface->command == gcvHAL_SYNC_POINT)
1929 );
1930
1931 /* Validate the source. */
1932@@ -2131,6 +2132,9 @@ gckEVENT_Notify(
1933 gcvINFINITE));
1934 acquired = gcvTRUE;
1935
1936+ /* We are in the notify loop. */
1937+ Event->inNotify = gcvTRUE;
1938+
1939 /* Grab the event head. */
1940 record = queue->head;
1941
1942@@ -2463,6 +2467,17 @@ gckEVENT_Notify(
1943 break;
1944 #endif
1945
1946+#if gcdANDROID_NATIVE_FENCE_SYNC
1947+ case gcvHAL_SYNC_POINT:
1948+ {
1949+ gctSYNC_POINT syncPoint;
1950+
1951+ syncPoint = gcmUINT64_TO_PTR(record->info.u.SyncPoint.syncPoint);
1952+ status = gckOS_SignalSyncPoint(Event->os, syncPoint);
1953+ }
1954+ break;
1955+#endif
1956+
1957 case gcvHAL_COMMIT_DONE:
1958 break;
1959
1960@@ -2505,6 +2520,9 @@ gckEVENT_Notify(
1961 gcmkONERROR(_TryToIdleGPU(Event));
1962 }
1963
1964+ /* We are out the notify loop. */
1965+ Event->inNotify = gcvFALSE;
1966+
1967 /* Success. */
1968 gcmkFOOTER_NO();
1969 return gcvSTATUS_OK;
1970@@ -2524,6 +2542,9 @@ OnError:
1971 }
1972 #endif
1973
1974+ /* We are out the notify loop. */
1975+ Event->inNotify = gcvFALSE;
1976+
1977 /* Return the status. */
1978 gcmkFOOTER();
1979 return status;
1980@@ -2871,3 +2892,11 @@ gckEVENT_Dump(
1981 return gcvSTATUS_OK;
1982 }
1983
1984+gceSTATUS gckEVENT_WaitEmpty(gckEVENT Event)
1985+{
1986+ gctBOOL isEmpty;
1987+
1988+ while (Event->inNotify || (gcmIS_SUCCESS(gckEVENT_IsEmpty(Event, &isEmpty)) && !isEmpty)) ;
1989+
1990+ return gcvSTATUS_OK;
1991+}
1992diff --git a/drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel_interrupt_vg.c b/drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel_interrupt_vg.c
1993index 8ac187b..50bc63e 100644
1994--- a/drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel_interrupt_vg.c
1995+++ b/drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel_interrupt_vg.c
1996@@ -794,6 +794,9 @@ gckVGINTERRUPT_Enque(
1997 Interrupt->kernel->hardware, &triggered
1998 ));
1999
2000+ /* Mask out TS overflow interrupt */
2001+ triggered &= 0xfffffffe;
2002+
2003 /* No interrupts to process? */
2004 if (triggered == 0)
2005 {
2006diff --git a/drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel_mmu.c b/drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel_mmu.c
2007index c7f67c7..e4ca497 100644
2008--- a/drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel_mmu.c
2009+++ b/drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel_mmu.c
2010@@ -1436,7 +1436,7 @@ gckMMU_AllocatePages(
2011 acquired = gcvTRUE;
2012
2013 /* Allocate page table for current MMU. */
2014- for (i = 0; i < mirrorPageTable->reference; i++)
2015+ for (i = 0; i < (gctINT)mirrorPageTable->reference; i++)
2016 {
2017 if (Mmu == mirrorPageTable->mmus[i])
2018 {
2019@@ -1446,7 +1446,7 @@ gckMMU_AllocatePages(
2020 }
2021
2022 /* Allocate page table for other MMUs. */
2023- for (i = 0; i < mirrorPageTable->reference; i++)
2024+ for (i = 0; i < (gctINT)mirrorPageTable->reference; i++)
2025 {
2026 mmu = mirrorPageTable->mmus[i];
2027
2028@@ -1500,7 +1500,7 @@ gckMMU_FreePages(
2029
2030 offset = (gctUINT32)PageTable - (gctUINT32)Mmu->pageTableLogical;
2031
2032- for (i = 0; i < mirrorPageTable->reference; i++)
2033+ for (i = 0; i < (gctINT)mirrorPageTable->reference; i++)
2034 {
2035 mmu = mirrorPageTable->mmus[i];
2036
2037@@ -1639,7 +1639,7 @@ gckMMU_SetPage(
2038 _WritePageEntry(PageEntry, data);
2039
2040 #if gcdMIRROR_PAGETABLE
2041- for (i = 0; i < mirrorPageTable->reference; i++)
2042+ for (i = 0; i < (gctINT)mirrorPageTable->reference; i++)
2043 {
2044 mmu = mirrorPageTable->mmus[i];
2045
2046diff --git a/drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel_video_memory.c b/drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel_video_memory.c
2047index 8b8bbdc..3b5dd82 100644
2048--- a/drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel_video_memory.c
2049+++ b/drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel_video_memory.c
2050@@ -1582,6 +1582,7 @@ _NeedVirtualMapping(
2051 gctUINT32 end;
2052 gcePOOL pool;
2053 gctUINT32 offset;
2054+ gctUINT32 baseAddress;
2055
2056 gcmkHEADER_ARG("Node=0x%X", Node);
2057
2058@@ -1601,10 +1602,16 @@ _NeedVirtualMapping(
2059 else
2060 #endif
2061 {
2062- /* For cores which can't access all physical address. */
2063- gcmkONERROR(gckHARDWARE_ConvertLogical(Kernel->hardware,
2064- Node->Virtual.logical,
2065- &phys));
2066+ /* Convert logical address into a physical address. */
2067+ gcmkONERROR(
2068+ gckOS_GetPhysicalAddress(Kernel->os, Node->Virtual.logical, &phys));
2069+
2070+ gcmkONERROR(gckOS_GetBaseAddress(Kernel->os, &baseAddress));
2071+
2072+ gcmkASSERT(phys >= baseAddress);
2073+
2074+ /* Subtract baseAddress to get a GPU address used for programming. */
2075+ phys -= baseAddress;
2076
2077 /* If part of region is belong to gcvPOOL_VIRTUAL,
2078 ** whole region has to be mapped. */
2079@@ -1734,6 +1741,11 @@ gckVIDMEM_Lock(
2080 gcmkONERROR(gckOS_AcquireMutex(os, Node->Virtual.mutex, gcvINFINITE));
2081 acquired = gcvTRUE;
2082
2083+#if gcdPAGED_MEMORY_CACHEABLE
2084+ /* Force video memory cacheable. */
2085+ Cacheable = gcvTRUE;
2086+#endif
2087+
2088 gcmkONERROR(
2089 gckOS_LockPages(os,
2090 Node->Virtual.physical,
2091diff --git a/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal.h b/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal.h
2092index 4406d7e..7312cc2 100644
2093--- a/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal.h
2094+++ b/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal.h
2095@@ -123,6 +123,12 @@ extern "C" {
2096
2097 #define gcvINVALID_ADDRESS ~0U
2098
2099+#define gcmGET_PRE_ROTATION(rotate) \
2100+ ((rotate) & (~(gcvSURF_POST_FLIP_X | gcvSURF_POST_FLIP_Y)))
2101+
2102+#define gcmGET_POST_ROTATION(rotate) \
2103+ ((rotate) & (gcvSURF_POST_FLIP_X | gcvSURF_POST_FLIP_Y))
2104+
2105 /******************************************************************************\
2106 ******************************** gcsOBJECT Object *******************************
2107 \******************************************************************************/
2108@@ -1124,6 +1130,60 @@ gckOS_UnmapUserMemory(
2109 IN gctUINT32 Address
2110 );
2111
2112+/******************************************************************************\
2113+************************** Android Native Fence Sync ***************************
2114+\******************************************************************************/
2115+gceSTATUS
2116+gckOS_CreateSyncTimeline(
2117+ IN gckOS Os,
2118+ OUT gctHANDLE * Timeline
2119+ );
2120+
2121+gceSTATUS
2122+gckOS_DestroySyncTimeline(
2123+ IN gckOS Os,
2124+ IN gctHANDLE Timeline
2125+ );
2126+
2127+gceSTATUS
2128+gckOS_CreateSyncPoint(
2129+ IN gckOS Os,
2130+ OUT gctSYNC_POINT * SyncPoint
2131+ );
2132+
2133+gceSTATUS
2134+gckOS_ReferenceSyncPoint(
2135+ IN gckOS Os,
2136+ IN gctSYNC_POINT SyncPoint
2137+ );
2138+
2139+gceSTATUS
2140+gckOS_DestroySyncPoint(
2141+ IN gckOS Os,
2142+ IN gctSYNC_POINT SyncPoint
2143+ );
2144+
2145+gceSTATUS
2146+gckOS_SignalSyncPoint(
2147+ IN gckOS Os,
2148+ IN gctSYNC_POINT SyncPoint
2149+ );
2150+
2151+gceSTATUS
2152+gckOS_QuerySyncPoint(
2153+ IN gckOS Os,
2154+ IN gctSYNC_POINT SyncPoint,
2155+ OUT gctBOOL_PTR State
2156+ );
2157+
2158+gceSTATUS
2159+gckOS_CreateNativeFence(
2160+ IN gckOS Os,
2161+ IN gctHANDLE Timeline,
2162+ IN gctSYNC_POINT SyncPoint,
2163+ OUT gctINT * FenceFD
2164+ );
2165+
2166 #if !USE_NEW_LINUX_SIGNAL
2167 /* Create signal to be used in the user space. */
2168 gceSTATUS
2169@@ -1758,7 +1818,7 @@ gckKERNEL_Recovery(
2170 void
2171 gckKERNEL_SetTimeOut(
2172 IN gckKERNEL Kernel,
2173- IN gctUINT32 timeOut
2174+ IN gctUINT32 timeOut
2175 );
2176
2177 /* Get access to the user data. */
2178@@ -2078,6 +2138,12 @@ gckHARDWARE_SetPowerManagement(
2179 IN gctBOOL PowerManagement
2180 );
2181
2182+gceSTATUS
2183+gckHARDWARE_SetGpuProfiler(
2184+ IN gckHARDWARE Hardware,
2185+ IN gctBOOL GpuProfiler
2186+ );
2187+
2188 #if gcdENABLE_FSCALE_VAL_ADJUST
2189 gceSTATUS
2190 gckHARDWARE_SetFscaleValue(
2191@@ -2554,6 +2620,22 @@ gckHARDWARE_QueryProfileRegisters(
2192 );
2193 #endif
2194
2195+#if VIVANTE_PROFILER_CONTEXT
2196+gceSTATUS
2197+gckHARDWARE_QueryContextProfile(
2198+ IN gckHARDWARE Hardware,
2199+ IN gctBOOL Clear,
2200+ IN gckCONTEXT Context,
2201+ OUT gcsPROFILER_COUNTERS * Counters
2202+ );
2203+
2204+gceSTATUS
2205+gckHARDWARE_UpdateContextProfile(
2206+ IN gckHARDWARE Hardware,
2207+ IN gckCONTEXT Context
2208+ );
2209+#endif
2210+
2211 gceSTATUS
2212 gckOS_SignalQueryHardware(
2213 IN gckOS Os,
2214diff --git a/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_base.h b/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_base.h
2215index 44689b0..9c17114 100644
2216--- a/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_base.h
2217+++ b/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_base.h
2218@@ -71,10 +71,17 @@ typedef struct _gcoFENCE * gcoFENCE;
2219 typedef struct _gcsSYNC_CONTEXT * gcsSYNC_CONTEXT_PTR;
2220 #endif
2221
2222+typedef struct _gcoOS_SymbolsList gcoOS_SymbolsList;
2223+
2224 /******************************************************************************\
2225 ******************************* Process local storage *************************
2226 \******************************************************************************/
2227 typedef struct _gcsPLS * gcsPLS_PTR;
2228+
2229+typedef void (* gctPLS_DESTRUCTOR) (
2230+ gcsPLS_PTR
2231+ );
2232+
2233 typedef struct _gcsPLS
2234 {
2235 /* Global objects. */
2236@@ -103,6 +110,12 @@ typedef struct _gcsPLS
2237
2238 /* PorcessID of the constrcutor process */
2239 gctUINT32 processID;
2240+#if gcdFORCE_GAL_LOAD_TWICE
2241+ /* ThreadID of the constrcutor process. */
2242+ gctSIZE_T threadID;
2243+ /* Flag for calling module destructor. */
2244+ gctBOOL exiting;
2245+#endif
2246
2247 /* Reference count for destructor. */
2248 gcsATOM_PTR reference;
2249@@ -111,6 +124,8 @@ typedef struct _gcsPLS
2250 gctBOOL bNeedSupportNP2Texture;
2251 #endif
2252
2253+ /* Destructor for eglDisplayInfo. */
2254+ gctPLS_DESTRUCTOR destructor;
2255 }
2256 gcsPLS;
2257
2258@@ -148,6 +163,11 @@ typedef struct _gcsTLS
2259 #endif
2260 gco2D engine2D;
2261 gctBOOL copied;
2262+
2263+#if gcdFORCE_GAL_LOAD_TWICE
2264+ /* libGAL.so handle */
2265+ gctHANDLE handle;
2266+#endif
2267 }
2268 gcsTLS;
2269
2270@@ -160,6 +180,7 @@ typedef enum _gcePLS_VALUE
2271 gcePLS_VALUE_EGL_DISPLAY_INFO,
2272 gcePLS_VALUE_EGL_SURFACE_INFO,
2273 gcePLS_VALUE_EGL_CONFIG_FORMAT_INFO,
2274+ gcePLS_VALUE_EGL_DESTRUCTOR_INFO,
2275 }
2276 gcePLS_VALUE;
2277
2278@@ -577,6 +598,12 @@ gcoHAL_Call(
2279 IN OUT gcsHAL_INTERFACE_PTR Interface
2280 );
2281
2282+gceSTATUS
2283+gcoHAL_GetPatchID(
2284+ IN gcoHAL Hal,
2285+ OUT gcePATCH_ID * PatchID
2286+ );
2287+
2288 /* Schedule an event. */
2289 gceSTATUS
2290 gcoHAL_ScheduleEvent(
2291@@ -637,6 +664,16 @@ gcoHAL_QuerySeparated3D2D(
2292 IN gcoHAL Hal
2293 );
2294
2295+gceSTATUS
2296+gcoHAL_QuerySpecialHint(
2297+ IN gceSPECIAL_HINT Hint
2298+ );
2299+
2300+gceSTATUS
2301+gcoHAL_SetSpecialHintData(
2302+ IN gcoHARDWARE Hardware
2303+ );
2304+
2305 /* Get pointer to gcoVG object. */
2306 gceSTATUS
2307 gcoHAL_GetVGEngine(
2308@@ -786,7 +823,6 @@ gcoOS_FreeVideoMemory(
2309 IN gctPOINTER Handle
2310 );
2311
2312-#if gcdENABLE_BANK_ALIGNMENT
2313 gceSTATUS
2314 gcoSURF_GetBankOffsetBytes(
2315 IN gcoSURF Surfce,
2316@@ -794,7 +830,6 @@ gcoSURF_GetBankOffsetBytes(
2317 IN gctUINT32 Stride,
2318 IN gctUINT32_PTR Bytes
2319 );
2320-#endif
2321
2322 /* Map user memory. */
2323 gceSTATUS
2324@@ -918,6 +953,21 @@ gcoOS_Flush(
2325 IN gctFILE File
2326 );
2327
2328+/* Close a file descriptor. */
2329+gceSTATUS
2330+gcoOS_CloseFD(
2331+ IN gcoOS Os,
2332+ IN gctINT FD
2333+ );
2334+
2335+/* Dup file descriptor to another. */
2336+gceSTATUS
2337+gcoOS_DupFD(
2338+ IN gcoOS Os,
2339+ IN gctINT FD,
2340+ OUT gctINT * FD2
2341+ );
2342+
2343 /* Create an endpoint for communication. */
2344 gceSTATUS
2345 gcoOS_Socket(
2346@@ -977,6 +1027,14 @@ gcoOS_GetEnv(
2347 OUT gctSTRING * Value
2348 );
2349
2350+/* Set environment variable value. */
2351+gceSTATUS
2352+gcoOS_SetEnv(
2353+ IN gcoOS Os,
2354+ IN gctCONST_STRING VarName,
2355+ IN gctSTRING Value
2356+ );
2357+
2358 /* Get current working directory. */
2359 gceSTATUS
2360 gcoOS_GetCwd(
2361@@ -1210,6 +1268,13 @@ gcoOS_DetectProcessByEncryptedName(
2362 IN gctCONST_STRING Name
2363 );
2364
2365+#if defined(ANDROID)
2366+gceSTATUS
2367+gcoOS_DetectProgrameByEncryptedSymbols(
2368+ IN gcoOS_SymbolsList Symbols
2369+ );
2370+#endif
2371+
2372 /*----------------------------------------------------------------------------*/
2373 /*----- Atoms ----------------------------------------------------------------*/
2374
2375@@ -1403,6 +1468,42 @@ gcoOS_UnmapSignal(
2376 IN gctSIGNAL Signal
2377 );
2378
2379+/*----------------------------------------------------------------------------*/
2380+/*----- Android Native Fence -------------------------------------------------*/
2381+
2382+/* Create sync point. */
2383+gceSTATUS
2384+gcoOS_CreateSyncPoint(
2385+ IN gcoOS Os,
2386+ OUT gctSYNC_POINT * SyncPoint
2387+ );
2388+
2389+/* Destroy sync point. */
2390+gceSTATUS
2391+gcoOS_DestroySyncPoint(
2392+ IN gcoOS Os,
2393+ IN gctSYNC_POINT SyncPoint
2394+ );
2395+
2396+/* Create native fence. */
2397+gceSTATUS
2398+gcoOS_CreateNativeFence(
2399+ IN gcoOS Os,
2400+ IN gctSYNC_POINT SyncPoint,
2401+ OUT gctINT * FenceFD
2402+ );
2403+
2404+/* Wait on native fence. */
2405+gceSTATUS
2406+gcoOS_WaitNativeFence(
2407+ IN gcoOS Os,
2408+ IN gctINT FenceFD,
2409+ IN gctUINT32 Timeout
2410+ );
2411+
2412+/*----------------------------------------------------------------------------*/
2413+/*----- Memory Access and Cache ----------------------------------------------*/
2414+
2415 /* Write a register. */
2416 gceSTATUS
2417 gcoOS_WriteRegister(
2418@@ -1507,7 +1608,7 @@ gcoOS_QueryProfileTickRate(
2419 # define gcmPROFILE_QUERY(start, ticks) do { } while (gcvFALSE)
2420 # define gcmPROFILE_ONLY(x) do { } while (gcvFALSE)
2421 # define gcmPROFILE_ELSE(x) x
2422-# define gcmPROFILE_DECLARE_ONLY(x) typedef x
2423+# define gcmPROFILE_DECLARE_ONLY(x) do { } while (gcvFALSE)
2424 # define gcmPROFILE_DECLARE_ELSE(x) x
2425 #endif
2426
2427@@ -1579,6 +1680,28 @@ typedef struct _gcsRECT
2428 }
2429 gcsRECT;
2430
2431+typedef union _gcsPIXEL
2432+{
2433+ struct
2434+ {
2435+ gctFLOAT r, g, b, a;
2436+ gctFLOAT d, s;
2437+ } pf;
2438+
2439+ struct
2440+ {
2441+ gctINT32 r, g, b, a;
2442+ gctINT32 d, s;
2443+ } pi;
2444+
2445+ struct
2446+ {
2447+ gctUINT32 r, g, b, a;
2448+ gctUINT32 d, s;
2449+ } pui;
2450+
2451+} gcsPIXEL;
2452+
2453
2454 /******************************************************************************\
2455 ********************************* gcoSURF Object ********************************
2456@@ -1795,6 +1918,18 @@ gcoSURF_SetRotation(
2457 );
2458
2459 gceSTATUS
2460+gcoSURF_SetPreRotation(
2461+ IN gcoSURF Surface,
2462+ IN gceSURF_ROTATION Rotation
2463+ );
2464+
2465+gceSTATUS
2466+gcoSURF_GetPreRotation(
2467+ IN gcoSURF Surface,
2468+ IN gceSURF_ROTATION *Rotation
2469+ );
2470+
2471+gceSTATUS
2472 gcoSURF_IsValid(
2473 IN gcoSURF Surface
2474 );
2475@@ -1824,6 +1959,15 @@ gcoSURF_DisableTileStatus(
2476 IN gcoSURF Surface,
2477 IN gctBOOL Decompress
2478 );
2479+
2480+gceSTATUS
2481+gcoSURF_AlignResolveRect(
2482+ IN gcoSURF Surf,
2483+ IN gcsPOINT_PTR RectOrigin,
2484+ IN gcsPOINT_PTR RectSize,
2485+ OUT gcsPOINT_PTR AlignedOrigin,
2486+ OUT gcsPOINT_PTR AlignedSize
2487+ );
2488 #endif /* VIVANTE_NO_3D */
2489
2490 /* Get surface size. */
2491@@ -1910,6 +2054,9 @@ gcoSURF_FillFromTile(
2492 IN gcoSURF Surface
2493 );
2494
2495+/* Check if surface needs a filler. */
2496+gceSTATUS gcoSURF_NeedFiller(IN gcoSURF Surface);
2497+
2498 /* Fill surface with a value. */
2499 gceSTATUS
2500 gcoSURF_Fill(
2501@@ -1949,6 +2096,19 @@ gcoSURF_SetBuffer(
2502 IN gctUINT32 Physical
2503 );
2504
2505+/* Set the underlying video buffer for the surface wrapper. */
2506+gceSTATUS
2507+gcoSURF_SetVideoBuffer(
2508+ IN gcoSURF Surface,
2509+ IN gceSURF_TYPE Type,
2510+ IN gceSURF_FORMAT Format,
2511+ IN gctUINT Width,
2512+ IN gctUINT Height,
2513+ IN gctUINT Stride,
2514+ IN gctPOINTER *LogicalPlane1,
2515+ IN gctUINT32 *PhysicalPlane1
2516+ );
2517+
2518 /* Set the size of the surface in pixels and map the underlying buffer. */
2519 gceSTATUS
2520 gcoSURF_SetWindow(
2521@@ -3705,6 +3865,12 @@ gcGetUserDebugOption(
2522 void
2523 );
2524
2525+struct _gcoOS_SymbolsList
2526+{
2527+ gcePATCH_ID patchId;
2528+ const char * symList[10];
2529+};
2530+
2531 #if gcdHAS_ELLIPSES
2532 #define gcmUSER_DEBUG_MSG(level, ...) \
2533 do \
2534diff --git a/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_compiler.h b/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_compiler.h
2535index 8693c37..062224c 100644
2536--- a/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_compiler.h
2537+++ b/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_compiler.h
2538@@ -39,12 +39,10 @@ extern "C" {
2539 #define GC_ENABLE_LOADTIME_OPT 1
2540 #endif
2541
2542-#define TEMP_OPT_CONSTANT_TEXLD_COORD 1
2543+#define TEMP_OPT_CONSTANT_TEXLD_COORD 0
2544
2545 #define TEMP_SHADER_PATCH 1
2546
2547-#define ADD_PRE_ROTATION_TO_VS 0
2548-
2549 #define TEMP_INLINE_ALL_EXPANSION 1
2550 /******************************* IR VERSION ******************/
2551 #define gcdSL_IR_VERSION gcmCC('\0','\0','\0','\1')
2552@@ -271,6 +269,7 @@ typedef enum _gcSL_OPCODE
2553 gcSL_ADDSAT, /* 0x5C */ /* Integer only. */
2554 gcSL_SUBSAT, /* 0x5D */ /* Integer only. */
2555 gcSL_MULSAT, /* 0x5E */ /* Integer only. */
2556+ gcSL_DP2, /* 0x5F */
2557 gcSL_MAXOPCODE
2558 }
2559 gcSL_OPCODE;
2560@@ -474,6 +473,9 @@ struct _gcsHINT
2561
2562 gctBOOL clipW;
2563
2564+ /* Flag whether or not the shader has a KILL instruction. */
2565+ gctBOOL hasKill;
2566+
2567 /* Element count. */
2568 gctUINT32 elementCount;
2569
2570@@ -495,12 +497,18 @@ struct _gcsHINT
2571 /* Balance maximum. */
2572 gctUINT32 balanceMax;
2573
2574+ /* Auto-shift balancing. */
2575+ gctBOOL autoShift;
2576+
2577 /* Flag whether the PS outputs the depth value or not. */
2578 gctBOOL psHasFragDepthOut;
2579
2580 /* Flag whether the ThreadWalker is in PS. */
2581 gctBOOL threadWalkerInPS;
2582
2583+ /* HW reg number for position of VS */
2584+ gctUINT32 hwRegNoOfSIVPos;
2585+
2586 #if gcdALPHA_KILL_IN_SHADER
2587 /* States to set when alpha kill is enabled. */
2588 gctUINT32 killStateAddress;
2589@@ -687,12 +695,12 @@ typedef enum _gceSHADER_FLAGS
2590 gcvSHADER_USE_ALPHA_KILL = 0x100,
2591 #endif
2592
2593-#if ADD_PRE_ROTATION_TO_VS
2594+#if gcdPRE_ROTATION && (ANDROID_SDK_VERSION >= 14)
2595 gcvSHADER_VS_PRE_ROTATION = 0x200,
2596 #endif
2597
2598 #if TEMP_INLINE_ALL_EXPANSION
2599- gcvSHADER_INLINE_ALL_EXPANSION = 0x200,
2600+ gcvSHADER_INLINE_ALL_EXPANSION = 0x400,
2601 #endif
2602 }
2603 gceSHADER_FLAGS;
2604@@ -827,6 +835,7 @@ typedef struct _gcOPTIMIZER_OPTION
2605 gctBOOL dumpOptimizerVerbose; /* dump result IR in each optimization phase */
2606 gctBOOL dumpBEGenertedCode; /* dump generated machine code */
2607 gctBOOL dumpBEVerbose; /* dump BE tree and optimization detail */
2608+ gctBOOL dumpBEFinalIR; /* dump BE final IR */
2609
2610 /* Code generation */
2611
2612@@ -945,6 +954,8 @@ extern gcOPTIMIZER_OPTION theOptimizerOption;
2613 gcmOPT_DUMP_CODEGEN_VERBOSE() )
2614 #define gcmOPT_DUMP_CODEGEN_VERBOSE() \
2615 (gcmGetOptimizerOption()->dumpBEVerbose != 0)
2616+#define gcmOPT_DUMP_FINAL_IR() \
2617+ (gcmGetOptimizerOption()->dumpBEFinalIR != 0)
2618
2619 #define gcmOPT_SET_DUMP_SHADER_SRC(v) \
2620 gcmGetOptimizerOption()->dumpShaderSource = (v)
2621@@ -1064,6 +1075,13 @@ typedef struct _gcNPOT_PATCH_PARAM
2622 gctINT texDimension; /* 2 or 3 */
2623 }gcNPOT_PATCH_PARAM, *gcNPOT_PATCH_PARAM_PTR;
2624
2625+typedef struct _gcZBIAS_PATCH_PARAM
2626+{
2627+ /* Driver uses this to program uniform that designating zbias */
2628+ gctINT uniformAddr;
2629+ gctINT channel;
2630+}gcZBIAS_PATCH_PARAM, *gcZBIAS_PATCH_PARAM_PTR;
2631+
2632 void
2633 gcGetOptionFromEnv(
2634 IN OUT gcOPTIMIZER_OPTION * Option
2635@@ -1556,6 +1574,43 @@ gcSHADER_AddUniform(
2636 OUT gcUNIFORM * Uniform
2637 );
2638
2639+/*******************************************************************************
2640+** gcSHADER_AddPreRotationUniform
2641+********************************************************************************
2642+**
2643+** Add an uniform to a gcSHADER object.
2644+**
2645+** INPUT:
2646+**
2647+** gcSHADER Shader
2648+** Pointer to a gcSHADER object.
2649+**
2650+** gctCONST_STRING Name
2651+** Name of the uniform to add.
2652+**
2653+** gcSHADER_TYPE Type
2654+** Type of the uniform to add.
2655+**
2656+** gctSIZE_T Length
2657+** Array length of the uniform to add. 'Length' must be at least 1.
2658+**
2659+** gctINT col
2660+** Which uniform.
2661+**
2662+** OUTPUT:
2663+**
2664+** gcUNIFORM * Uniform
2665+** Pointer to a variable receiving the gcUNIFORM object pointer.
2666+*/
2667+gceSTATUS
2668+gcSHADER_AddPreRotationUniform(
2669+ IN gcSHADER Shader,
2670+ IN gctCONST_STRING Name,
2671+ IN gcSHADER_TYPE Type,
2672+ IN gctSIZE_T Length,
2673+ IN gctINT col,
2674+ OUT gcUNIFORM * Uniform
2675+ );
2676
2677 /*******************************************************************************
2678 ** gcSHADER_AddUniformEx
2679@@ -1677,6 +1732,28 @@ gcSHADER_GetUniformCount(
2680 );
2681
2682 /*******************************************************************************
2683+** gcSHADER_GetPreRotationUniform
2684+********************************************************************************
2685+**
2686+** Get the preRotate Uniform.
2687+**
2688+** INPUT:
2689+**
2690+** gcSHADER Shader
2691+** Pointer to a gcSHADER object.
2692+**
2693+** OUTPUT:
2694+**
2695+** gcUNIFORM ** pUniform
2696+** Pointer to a preRotation uniforms array.
2697+*/
2698+gceSTATUS
2699+gcSHADER_GetPreRotationUniform(
2700+ IN gcSHADER Shader,
2701+ OUT gcUNIFORM ** pUniform
2702+ );
2703+
2704+/*******************************************************************************
2705 ** gcSHADER_GetUniform
2706 ********************************************************************************
2707 **
2708@@ -3438,6 +3515,34 @@ gcUNIFORM_SetValueF(
2709 );
2710
2711 /*******************************************************************************
2712+** gcUNIFORM_ProgramF
2713+**
2714+** Set the value of a uniform in floating point.
2715+**
2716+** INPUT:
2717+**
2718+** gctUINT32 Address
2719+** Address of Uniform.
2720+**
2721+** gctSIZE_T Row/Col
2722+**
2723+** const gctFLOAT * Value
2724+** Pointer to a buffer holding the floating point values for the
2725+** uniform.
2726+**
2727+** OUTPUT:
2728+**
2729+** Nothing.
2730+*/
2731+gceSTATUS
2732+gcUNIFORM_ProgramF(
2733+ IN gctUINT32 Address,
2734+ IN gctSIZE_T Row,
2735+ IN gctSIZE_T Col,
2736+ IN const gctFLOAT * Value
2737+ );
2738+
2739+/*******************************************************************************
2740 ** gcUNIFORM_GetModelViewProjMatrix
2741 ********************************************************************************
2742 **
2743@@ -3912,6 +4017,23 @@ gcRecompileShaders(
2744 IN gctUINT32 *SamplerWrapS,
2745 IN gctUINT32 *SamplerWrapT
2746 );
2747+
2748+gceSTATUS
2749+gcRecompileDepthBias(
2750+ IN gcoHAL Hal,
2751+ IN gcMACHINECODE_PTR pVsMachineCode,
2752+ /*Recompile variables*/
2753+ IN OUT gctPOINTER *ppRecompileStateBuffer,
2754+ IN OUT gctSIZE_T *pRecompileStateBufferSize,
2755+ IN OUT gcsHINT_PTR *ppRecompileHints,
2756+ /* natvie state*/
2757+ IN gctPOINTER pNativeStateBuffer,
2758+ IN gctSIZE_T nativeStateBufferSize,
2759+ IN gcsHINT_PTR pNativeHints,
2760+ OUT gctINT * uniformAddr,
2761+ OUT gctINT * uniformChannel
2762+ );
2763+
2764 /*******************************************************************************
2765 ** gcSaveProgram
2766 ********************************************************************************
2767@@ -4138,6 +4260,16 @@ gcSHADER_PatchNPOTForMachineCode(
2768 IN OUT gcsHINT_PTR pHints /* User needs copy original hints to this one, then passed this one in */
2769 );
2770
2771+gceSTATUS
2772+gcSHADER_PatchZBiasForMachineCodeVS(
2773+ IN gcMACHINECODE_PTR pMachineCode,
2774+ IN OUT gcZBIAS_PATCH_PARAM_PTR pPatchParam,
2775+ IN gctUINT hwSupportedInstCount,
2776+ OUT gctPOINTER* ppCmdBuffer,
2777+ OUT gctUINT32* pByteSizeOfCmdBuffer,
2778+ IN OUT gcsHINT_PTR pHints /* User needs copy original hints to this one, then passed this one in */
2779+ );
2780+
2781 #ifdef __cplusplus
2782 }
2783 #endif
2784diff --git a/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_driver.h b/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_driver.h
2785index b056c52..fc8c395 100644
2786--- a/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_driver.h
2787+++ b/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_driver.h
2788@@ -166,6 +166,12 @@ typedef enum _gceHAL_COMMAND_CODES
2789
2790 /* Reset time stamp. */
2791 gcvHAL_QUERY_RESET_TIME_STAMP,
2792+
2793+ /* Sync point operations. */
2794+ gcvHAL_SYNC_POINT,
2795+
2796+ /* Create native fence and return its fd. */
2797+ gcvHAL_CREATE_NATIVE_FENCE,
2798 }
2799 gceHAL_COMMAND_CODES;
2800
2801@@ -723,6 +729,10 @@ typedef struct _gcsHAL_INTERFACE
2802 /* gcvHAL_READ_ALL_PROFILE_REGISTERS */
2803 struct _gcsHAL_READ_ALL_PROFILE_REGISTERS
2804 {
2805+#if VIVANTE_PROFILER_CONTEXT
2806+ /* Context buffer object gckCONTEXT. Just a name. */
2807+ IN gctUINT32 context;
2808+#endif
2809 /* Data read. */
2810 OUT gcsPROFILER_COUNTERS counters;
2811 }
2812@@ -978,6 +988,33 @@ typedef struct _gcsHAL_INTERFACE
2813 OUT gctUINT64 timeStamp;
2814 }
2815 QueryResetTimeStamp;
2816+
2817+ struct _gcsHAL_SYNC_POINT
2818+ {
2819+ /* Command. */
2820+ gceSYNC_POINT_COMMAND_CODES command;
2821+
2822+ /* Sync point. */
2823+ IN OUT gctUINT64 syncPoint;
2824+
2825+ /* From where. */
2826+ IN gceKERNEL_WHERE fromWhere;
2827+
2828+ /* Signaled state. */
2829+ OUT gctBOOL state;
2830+ }
2831+ SyncPoint;
2832+
2833+ struct _gcsHAL_CREATE_NATIVE_FENCE
2834+ {
2835+ /* Signal id to dup. */
2836+ IN gctUINT64 syncPoint;
2837+
2838+ /* Native fence file descriptor. */
2839+ OUT gctINT fenceFD;
2840+
2841+ }
2842+ CreateNativeFence;
2843 }
2844 u;
2845 }
2846diff --git a/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_engine.h b/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_engine.h
2847index 8481375..3fb2fe4 100644
2848--- a/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_engine.h
2849+++ b/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_engine.h
2850@@ -323,6 +323,15 @@ gcoSURF_Resolve(
2851 IN gcoSURF DestSurface
2852 );
2853
2854+gceSTATUS
2855+gcoSURF_IsHWResolveable(
2856+ IN gcoSURF SrcSurface,
2857+ IN gcoSURF DestSurface,
2858+ IN gcsPOINT_PTR SrcOrigin,
2859+ IN gcsPOINT_PTR DestOrigin,
2860+ IN gcsPOINT_PTR RectSize
2861+ );
2862+
2863 /* Resolve rectangular area of a surface. */
2864 gceSTATUS
2865 gcoSURF_ResolveRect(
2866@@ -345,6 +354,11 @@ gcoSURF_IsRenderable(
2867 IN gcoSURF Surface
2868 );
2869
2870+gceSTATUS
2871+gcoSURF_IsFormatRenderableAsRT(
2872+ IN gcoSURF Surface
2873+ );
2874+
2875 #if gcdSYNC
2876 gceSTATUS
2877 gcoSURF_GetFence(
2878@@ -1006,6 +1020,7 @@ typedef struct _gcsALPHA_INFO
2879 gctBOOL test;
2880 gceCOMPARE compare;
2881 gctUINT8 reference;
2882+ gctFLOAT floatReference;
2883
2884 /* Alpha blending states. */
2885 gctBOOL blend;
2886@@ -1040,7 +1055,8 @@ gco3D_SetAlphaCompare(
2887 gceSTATUS
2888 gco3D_SetAlphaReference(
2889 IN gco3D Engine,
2890- IN gctUINT8 Reference
2891+ IN gctUINT8 Reference,
2892+ IN gctFLOAT FloatReference
2893 );
2894
2895 /* Set alpha test reference in fixed point. */
2896@@ -1504,6 +1520,19 @@ gcoTEXTURE_UploadSub(
2897 IN gceSURF_FORMAT Format
2898 );
2899
2900+/* Upload YUV data to an gcoTEXTURE object. */
2901+gceSTATUS
2902+gcoTEXTURE_UploadYUV(
2903+ IN gcoTEXTURE Texture,
2904+ IN gceTEXTURE_FACE Face,
2905+ IN gctUINT Width,
2906+ IN gctUINT Height,
2907+ IN gctUINT Slice,
2908+ IN gctPOINTER Memory[3],
2909+ IN gctINT Stride[3],
2910+ IN gceSURF_FORMAT Format
2911+ );
2912+
2913 /* Upload compressed data to an gcoTEXTURE object. */
2914 gceSTATUS
2915 gcoTEXTURE_UploadCompressed(
2916@@ -1621,6 +1650,13 @@ gcoTEXTURE_QueryCaps(
2917 );
2918
2919 gceSTATUS
2920+gcoTEXTURE_GetTiling(
2921+ IN gcoTEXTURE Texture,
2922+ IN gctINT preferLevel,
2923+ OUT gceTILING * Tiling
2924+ );
2925+
2926+gceSTATUS
2927 gcoTEXTURE_GetClosestFormat(
2928 IN gcoHAL Hal,
2929 IN gceSURF_FORMAT InFormat,
2930@@ -2001,6 +2037,14 @@ gcoHAL_SetSharedInfo(
2931 IN gctSIZE_T Bytes
2932 );
2933
2934+#if VIVANTE_PROFILER_CONTEXT
2935+gceSTATUS
2936+gcoHARDWARE_GetContext(
2937+ IN gcoHARDWARE Hardware,
2938+ OUT gctUINT32 * Context
2939+ );
2940+#endif
2941+
2942 #ifdef __cplusplus
2943 }
2944 #endif
2945diff --git a/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_enum.h b/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_enum.h
2946index a1d9ae5..8e3c2f8 100644
2947--- a/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_enum.h
2948+++ b/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_enum.h
2949@@ -146,10 +146,26 @@ typedef enum _gceFEATURE
2950 gcvFEATURE_FRUSTUM_CLIP_FIX,
2951 gcvFEATURE_TEXTURE_LINEAR,
2952 gcvFEATURE_TEXTURE_YUV_ASSEMBLER,
2953+ gcvFEATURE_SHADER_HAS_INSTRUCTION_CACHE,
2954 gcvFEATURE_DYNAMIC_FREQUENCY_SCALING,
2955 gcvFEATURE_BUGFIX15,
2956+ gcvFEATURE_2D_GAMMA,
2957+ gcvFEATURE_2D_COLOR_SPACE_CONVERSION,
2958+ gcvFEATURE_2D_SUPER_TILE_VERSION,
2959 gcvFEATURE_2D_MIRROR_EXTENSION,
2960+ gcvFEATURE_2D_SUPER_TILE_V1,
2961+ gcvFEATURE_2D_SUPER_TILE_V2,
2962+ gcvFEATURE_2D_SUPER_TILE_V3,
2963+ gcvFEATURE_2D_MULTI_SOURCE_BLT_EX2,
2964 gcvFEATURE_ELEMENT_INDEX_UINT,
2965+ gcvFEATURE_2D_COMPRESSION,
2966+ gcvFEATURE_2D_OPF_YUV_OUTPUT,
2967+ gcvFEATURE_2D_MULTI_SRC_BLT_TO_UNIFIED_DST_RECT,
2968+ gcvFEATURE_2D_YUV_MODE,
2969+ gcvFEATURE_DECOMPRESS_Z16,
2970+ gcvFEATURE_LINEAR_RENDER_TARGET,
2971+ gcvFEATURE_BUG_FIXES8,
2972+ gcvFEATURE_HALTI2,
2973 }
2974 gceFEATURE;
2975
2976@@ -203,11 +219,14 @@ typedef enum _gceSURF_TYPE
2977 gcvSURF_NO_VIDMEM = 0x200, /* Used to allocate surfaces with no underlying vidmem node.
2978 In Android, vidmem node is allocated by another process. */
2979 gcvSURF_CACHEABLE = 0x400, /* Used to allocate a cacheable surface */
2980-#if gcdANDROID_UNALIGNED_LINEAR_COMPOSITION_ADJUST
2981 gcvSURF_FLIP = 0x800, /* The Resolve Target the will been flip resolve from RT */
2982-#endif
2983 gcvSURF_TILE_STATUS_DIRTY = 0x1000, /* Init tile status to all dirty */
2984
2985+ gcvSURF_LINEAR = 0x2000,
2986+
2987+ gcvSURF_TEXTURE_LINEAR = gcvSURF_TEXTURE
2988+ | gcvSURF_LINEAR,
2989+
2990 gcvSURF_RENDER_TARGET_NO_TILE_STATUS = gcvSURF_RENDER_TARGET
2991 | gcvSURF_NO_TILE_STATUS,
2992
2993@@ -217,6 +236,9 @@ typedef enum _gceSURF_TYPE
2994 gcvSURF_DEPTH_NO_TILE_STATUS = gcvSURF_DEPTH
2995 | gcvSURF_NO_TILE_STATUS,
2996
2997+ gcvSURF_DEPTH_TS_DIRTY = gcvSURF_DEPTH
2998+ | gcvSURF_TILE_STATUS_DIRTY,
2999+
3000 /* Supported surface types with no vidmem node. */
3001 gcvSURF_BITMAP_NO_VIDMEM = gcvSURF_BITMAP
3002 | gcvSURF_NO_VIDMEM,
3003@@ -231,10 +253,8 @@ typedef enum _gceSURF_TYPE
3004 gcvSURF_CACHEABLE_BITMAP = gcvSURF_BITMAP
3005 | gcvSURF_CACHEABLE,
3006
3007-#if gcdANDROID_UNALIGNED_LINEAR_COMPOSITION_ADJUST
3008 gcvSURF_FLIP_BITMAP = gcvSURF_BITMAP
3009 | gcvSURF_FLIP,
3010-#endif
3011 }
3012 gceSURF_TYPE;
3013
3014@@ -263,6 +283,9 @@ typedef enum _gceSURF_ROTATION
3015 gcvSURF_270_DEGREE,
3016 gcvSURF_FLIP_X,
3017 gcvSURF_FLIP_Y,
3018+
3019+ gcvSURF_POST_FLIP_X = 0x40000000,
3020+ gcvSURF_POST_FLIP_Y = 0x80000000,
3021 }
3022 gceSURF_ROTATION;
3023
3024@@ -622,21 +645,16 @@ gce2D_PORTER_DUFF_RULE;
3025 typedef enum _gce2D_YUV_COLOR_MODE
3026 {
3027 gcv2D_YUV_601= 0,
3028- gcv2D_YUV_709
3029-}
3030-gce2D_YUV_COLOR_MODE;
3031+ gcv2D_YUV_709,
3032+ gcv2D_YUV_USER_DEFINED,
3033+ gcv2D_YUV_USER_DEFINED_CLAMP,
3034
3035-/* 2D Rotation and flipping. */
3036-typedef enum _gce2D_ORIENTATION
3037-{
3038- gcv2D_0_DEGREE = 0,
3039- gcv2D_90_DEGREE,
3040- gcv2D_180_DEGREE,
3041- gcv2D_270_DEGREE,
3042- gcv2D_X_FLIP,
3043- gcv2D_Y_FLIP
3044+ /* Default setting is for src. gcv2D_YUV_DST
3045+ can be ORed to set dst.
3046+ */
3047+ gcv2D_YUV_DST = 0x80000000,
3048 }
3049-gce2D_ORIENTATION;
3050+gce2D_YUV_COLOR_MODE;
3051
3052 typedef enum _gce2D_COMMAND
3053 {
3054@@ -656,21 +674,39 @@ typedef enum _gce2D_TILE_STATUS_CONFIG
3055 gcv2D_TSC_ENABLE = 0x00000001,
3056 gcv2D_TSC_COMPRESSED = 0x00000002,
3057 gcv2D_TSC_DOWN_SAMPLER = 0x00000004,
3058+ gcv2D_TSC_2D_COMPRESSED = 0x00000008,
3059 }
3060 gce2D_TILE_STATUS_CONFIG;
3061
3062 typedef enum _gce2D_QUERY
3063 {
3064- gcv2D_QUERY_RGB_ADDRESS_MAX_ALIGN = 0,
3065- gcv2D_QUERY_RGB_STRIDE_MAX_ALIGN,
3066- gcv2D_QUERY_YUV_ADDRESS_MAX_ALIGN,
3067- gcv2D_QUERY_YUV_STRIDE_MAX_ALIGN,
3068+ gcv2D_QUERY_RGB_ADDRESS_MIN_ALIGN = 0,
3069+ gcv2D_QUERY_RGB_STRIDE_MIN_ALIGN,
3070+ gcv2D_QUERY_YUV_ADDRESS_MIN_ALIGN,
3071+ gcv2D_QUERY_YUV_STRIDE_MIN_ALIGN,
3072 }
3073 gce2D_QUERY;
3074
3075+typedef enum _gce2D_SUPER_TILE_VERSION
3076+{
3077+ gcv2D_SUPER_TILE_VERSION_V1 = 1,
3078+ gcv2D_SUPER_TILE_VERSION_V2 = 2,
3079+ gcv2D_SUPER_TILE_VERSION_V3 = 3,
3080+}
3081+gce2D_SUPER_TILE_VERSION;
3082+
3083 typedef enum _gce2D_STATE
3084 {
3085 gcv2D_STATE_SPECIAL_FILTER_MIRROR_MODE = 1,
3086+ gcv2D_STATE_SUPER_TILE_VERSION,
3087+ gcv2D_STATE_EN_GAMMA,
3088+ gcv2D_STATE_DE_GAMMA,
3089+ gcv2D_STATE_MULTI_SRC_BLIT_UNIFIED_DST_RECT,
3090+
3091+ gcv2D_STATE_ARRAY_EN_GAMMA = 0x10001,
3092+ gcv2D_STATE_ARRAY_DE_GAMMA,
3093+ gcv2D_STATE_ARRAY_CSC_YUV_TO_RGB,
3094+ gcv2D_STATE_ARRAY_CSC_RGB_TO_YUV,
3095 }
3096 gce2D_STATE;
3097
3098@@ -809,6 +845,15 @@ typedef enum _gceUSER_SIGNAL_COMMAND_CODES
3099 }
3100 gceUSER_SIGNAL_COMMAND_CODES;
3101
3102+/* Sync point command codes. */
3103+typedef enum _gceSYNC_POINT_COMMAND_CODES
3104+{
3105+ gcvSYNC_POINT_CREATE,
3106+ gcvSYNC_POINT_DESTROY,
3107+ gcvSYNC_POINT_SIGNAL,
3108+}
3109+gceSYNC_POINT_COMMAND_CODES;
3110+
3111 /* Event locations. */
3112 typedef enum _gceKERNEL_WHERE
3113 {
3114@@ -848,6 +893,44 @@ typedef enum _gceDEBUG_MESSAGE_TYPE
3115 }
3116 gceDEBUG_MESSAGE_TYPE;
3117
3118+typedef enum _gceSPECIAL_HINT
3119+{
3120+ gceSPECIAL_HINT0,
3121+ gceSPECIAL_HINT1,
3122+ gceSPECIAL_HINT2,
3123+ gceSPECIAL_HINT3,
3124+ /* For disable dynamic stream/index */
3125+ gceSPECIAL_HINT4
3126+}
3127+gceSPECIAL_HINT;
3128+
3129+typedef enum _gceMACHINECODE
3130+{
3131+ gcvMACHINECODE_HOVERJET0 = 0x0,
3132+ gcvMACHINECODE_HOVERJET1 ,
3133+
3134+ gcvMACHINECODE_TAIJI0 ,
3135+ gcvMACHINECODE_TAIJI1 ,
3136+ gcvMACHINECODE_TAIJI2 ,
3137+
3138+ gcvMACHINECODE_ANTUTU0 ,
3139+
3140+ gcvMACHINECODE_GLB27_RELEASE_0,
3141+ gcvMACHINECODE_GLB27_RELEASE_1,
3142+
3143+ gcvMACHINECODE_WAVESCAPE0 ,
3144+ gcvMACHINECODE_WAVESCAPE1 ,
3145+
3146+ gcvMACHINECODE_NENAMARKV2_4_0 ,
3147+ gcvMACHINECODE_NENAMARKV2_4_1 ,
3148+
3149+ gcvMACHINECODE_GLB25_RELEASE_0,
3150+ gcvMACHINECODE_GLB25_RELEASE_1,
3151+ gcvMACHINECODE_GLB25_RELEASE_2,
3152+}
3153+gceMACHINECODE;
3154+
3155+
3156 /******************************************************************************\
3157 ****************************** Object Declarations *****************************
3158 \******************************************************************************/
3159diff --git a/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_options.h b/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_options.h
3160index 9e2a8db..b53b618 100644
3161--- a/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_options.h
3162+++ b/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_options.h
3163@@ -46,7 +46,7 @@
3164 This define enables the profiler.
3165 */
3166 #ifndef VIVANTE_PROFILER
3167-# define VIVANTE_PROFILER 0
3168+# define VIVANTE_PROFILER 1
3169 #endif
3170
3171 #ifndef VIVANTE_PROFILER_PERDRAW
3172@@ -54,6 +54,15 @@
3173 #endif
3174
3175 /*
3176+ VIVANTE_PROFILER_CONTEXT
3177+
3178+ This define enables the profiler according to each hw context.
3179+*/
3180+#ifndef VIVANTE_PROFILER_CONTEXT
3181+# define VIVANTE_PROFILER_CONTEXT 1
3182+#endif
3183+
3184+/*
3185 gcdUSE_VG
3186
3187 Enable VG HAL layer (only for GC350).
3188@@ -729,7 +738,24 @@
3189 Use linear buffer for GPU apps so HWC can do 2D composition.
3190 */
3191 #ifndef gcdGPU_LINEAR_BUFFER_ENABLED
3192-# define gcdGPU_LINEAR_BUFFER_ENABLED 0
3193+# define gcdGPU_LINEAR_BUFFER_ENABLED 1
3194+#endif
3195+
3196+/*
3197+ gcdENABLE_RENDER_INTO_WINDOW
3198+
3199+ Enable Render-Into-Window (ie, No-Resolve) feature on android.
3200+ NOTE that even if enabled, it still depends on hardware feature and
3201+ android application behavior. When hardware feature or application
3202+ behavior can not support render into window mode, it will fail back
3203+ to normal mode.
3204+ When Render-Into-Window is finally used, window back buffer of android
3205+ applications will be allocated matching render target tiling format.
3206+ Otherwise buffer tiling is decided by the above option
3207+ 'gcdGPU_LINEAR_BUFFER_ENABLED'.
3208+*/
3209+#ifndef gcdENABLE_RENDER_INTO_WINDOW
3210+# define gcdENABLE_RENDER_INTO_WINDOW 1
3211 #endif
3212
3213 /*
3214@@ -758,7 +784,11 @@
3215 #endif
3216
3217 #ifndef gcdANDROID_UNALIGNED_LINEAR_COMPOSITION_ADJUST
3218-# define gcdANDROID_UNALIGNED_LINEAR_COMPOSITION_ADJUST 0
3219+# ifdef ANDROID
3220+# define gcdANDROID_UNALIGNED_LINEAR_COMPOSITION_ADJUST 1
3221+# else
3222+# define gcdANDROID_UNALIGNED_LINEAR_COMPOSITION_ADJUST 0
3223+# endif
3224 #endif
3225
3226 #ifndef gcdENABLE_PE_DITHER_FIX
3227@@ -800,6 +830,10 @@
3228 # define gcdDISALBE_EARLY_EARLY_Z 1
3229 #endif
3230
3231+#ifndef gcdSHADER_SRC_BY_MACHINECODE
3232+# define gcdSHADER_SRC_BY_MACHINECODE 1
3233+#endif
3234+
3235 /*
3236 gcdLINK_QUEUE_SIZE
3237
3238@@ -849,11 +883,20 @@
3239 #define gcdUSE_NPOT_PATCH 1
3240 #endif
3241
3242-
3243 #ifndef gcdSYNC
3244 # define gcdSYNC 1
3245 #endif
3246
3247+#ifndef gcdENABLE_SPECIAL_HINT3
3248+# define gcdENABLE_SPECIAL_HINT3 1
3249+#endif
3250+
3251+#if defined(ANDROID)
3252+#ifndef gcdPRE_ROTATION
3253+# define gcdPRE_ROTATION 1
3254+#endif
3255+#endif
3256+
3257 /*
3258 gcdDVFS
3259
3260@@ -866,4 +909,39 @@
3261 # define gcdDVFS_POLLING_TIME (gcdDVFS_ANAYLSE_WINDOW * 4)
3262 #endif
3263
3264+/*
3265+ gcdANDROID_NATIVE_FENCE_SYNC
3266+
3267+ Enable android native fence sync. It is introduced since jellybean-4.2.
3268+ Depends on linux kernel option: CONFIG_SYNC.
3269+
3270+ 0: Disabled
3271+ 1: Build framework for native fence sync feature, and EGL extension
3272+ 2: Enable async swap buffers for client
3273+ * Native fence sync for client 'queueBuffer' in EGL, which is
3274+ 'acquireFenceFd' for layer in compositor side.
3275+ 3. Enable async hwcomposer composition.
3276+ * 'releaseFenceFd' for layer in compositor side, which is native
3277+ fence sync when client 'dequeueBuffer'
3278+ * Native fence sync for compositor 'queueBuffer' in EGL, which is
3279+ 'acquireFenceFd' for framebuffer target for DC
3280+ */
3281+#ifndef gcdANDROID_NATIVE_FENCE_SYNC
3282+# define gcdANDROID_NATIVE_FENCE_SYNC 0
3283+#endif
3284+
3285+#ifndef gcdFORCE_MIPMAP
3286+# define gcdFORCE_MIPMAP 0
3287+#endif
3288+
3289+/*
3290+ gcdFORCE_GAL_LOAD_TWICE
3291+
3292+ When non-zero, each thread except the main one will load libGAL.so twice to avoid potential segmetantion fault when app using dlopen/dlclose.
3293+ If threads exit arbitrarily, libGAL.so may not unload until the process quit.
3294+ */
3295+#ifndef gcdFORCE_GAL_LOAD_TWICE
3296+# define gcdFORCE_GAL_LOAD_TWICE 0
3297+#endif
3298+
3299 #endif /* __gc_hal_options_h_ */
3300diff --git a/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_profiler.h b/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_profiler.h
3301index 3e450ba..aed73aa 100644
3302--- a/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_profiler.h
3303+++ b/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_profiler.h
3304@@ -45,509 +45,115 @@ extern "C" {
3305 #define gcdNEW_PROFILER_FILE 1
3306 #endif
3307
3308-/* OpenGL ES11 API IDs. */
3309-#define ES11_ACTIVETEXTURE 1
3310-#define ES11_ALPHAFUNC (ES11_ACTIVETEXTURE + 1)
3311-#define ES11_ALPHAFUNCX (ES11_ALPHAFUNC + 1)
3312-#define ES11_BINDBUFFER (ES11_ALPHAFUNCX + 1)
3313-#define ES11_BINDTEXTURE (ES11_BINDBUFFER + 1)
3314-#define ES11_BLENDFUNC (ES11_BINDTEXTURE + 1)
3315-#define ES11_BUFFERDATA (ES11_BLENDFUNC + 1)
3316-#define ES11_BUFFERSUBDATA (ES11_BUFFERDATA + 1)
3317-#define ES11_CLEAR (ES11_BUFFERSUBDATA + 1)
3318-#define ES11_CLEARCOLOR (ES11_CLEAR + 1)
3319-#define ES11_CLEARCOLORX (ES11_CLEARCOLOR + 1)
3320-#define ES11_CLEARDEPTHF (ES11_CLEARCOLORX + 1)
3321-#define ES11_CLEARDEPTHX (ES11_CLEARDEPTHF + 1)
3322-#define ES11_CLEARSTENCIL (ES11_CLEARDEPTHX + 1)
3323-#define ES11_CLIENTACTIVETEXTURE (ES11_CLEARSTENCIL + 1)
3324-#define ES11_CLIPPLANEF (ES11_CLIENTACTIVETEXTURE + 1)
3325-#define ES11_CLIPPLANEX (ES11_CLIPPLANEF + 1)
3326-#define ES11_COLOR4F (ES11_CLIPPLANEX + 1)
3327-#define ES11_COLOR4UB (ES11_COLOR4F + 1)
3328-#define ES11_COLOR4X (ES11_COLOR4UB + 1)
3329-#define ES11_COLORMASK (ES11_COLOR4X + 1)
3330-#define ES11_COLORPOINTER (ES11_COLORMASK + 1)
3331-#define ES11_COMPRESSEDTEXIMAGE2D (ES11_COLORPOINTER + 1)
3332-#define ES11_COMPRESSEDTEXSUBIMAGE2D (ES11_COMPRESSEDTEXIMAGE2D + 1)
3333-#define ES11_COPYTEXIMAGE2D (ES11_COMPRESSEDTEXSUBIMAGE2D + 1)
3334-#define ES11_COPYTEXSUBIMAGE2D (ES11_COPYTEXIMAGE2D + 1)
3335-#define ES11_CULLFACE (ES11_COPYTEXSUBIMAGE2D + 1)
3336-#define ES11_DELETEBUFFERS (ES11_CULLFACE + 1)
3337-#define ES11_DELETETEXTURES (ES11_DELETEBUFFERS + 1)
3338-#define ES11_DEPTHFUNC (ES11_DELETETEXTURES + 1)
3339-#define ES11_DEPTHMASK (ES11_DEPTHFUNC + 1)
3340-#define ES11_DEPTHRANGEF (ES11_DEPTHMASK + 1)
3341-#define ES11_DEPTHRANGEX (ES11_DEPTHRANGEF + 1)
3342-#define ES11_DISABLE (ES11_DEPTHRANGEX + 1)
3343-#define ES11_DISABLECLIENTSTATE (ES11_DISABLE + 1)
3344-#define ES11_DRAWARRAYS (ES11_DISABLECLIENTSTATE + 1)
3345-#define ES11_DRAWELEMENTS (ES11_DRAWARRAYS + 1)
3346-#define ES11_ENABLE (ES11_DRAWELEMENTS + 1)
3347-#define ES11_ENABLECLIENTSTATE (ES11_ENABLE + 1)
3348-#define ES11_FINISH (ES11_ENABLECLIENTSTATE + 1)
3349-#define ES11_FLUSH (ES11_FINISH + 1)
3350-#define ES11_FOGF (ES11_FLUSH + 1)
3351-#define ES11_FOGFV (ES11_FOGF + 1)
3352-#define ES11_FOGX (ES11_FOGFV + 1)
3353-#define ES11_FOGXV (ES11_FOGX + 1)
3354-#define ES11_FRONTFACE (ES11_FOGXV + 1)
3355-#define ES11_FRUSTUMF (ES11_FRONTFACE + 1)
3356-#define ES11_FRUSTUMX (ES11_FRUSTUMF + 1)
3357-#define ES11_GENBUFFERS (ES11_FRUSTUMX + 1)
3358-#define ES11_GENTEXTURES (ES11_GENBUFFERS + 1)
3359-#define ES11_GETBOOLEANV (ES11_GENTEXTURES + 1)
3360-#define ES11_GETBUFFERPARAMETERIV (ES11_GETBOOLEANV + 1)
3361-#define ES11_GETCLIPPLANEF (ES11_GETBUFFERPARAMETERIV + 1)
3362-#define ES11_GETCLIPPLANEX (ES11_GETCLIPPLANEF + 1)
3363-#define ES11_GETERROR (ES11_GETCLIPPLANEX + 1)
3364-#define ES11_GETFIXEDV (ES11_GETERROR + 1)
3365-#define ES11_GETFLOATV (ES11_GETFIXEDV + 1)
3366-#define ES11_GETINTEGERV (ES11_GETFLOATV + 1)
3367-#define ES11_GETLIGHTFV (ES11_GETINTEGERV + 1)
3368-#define ES11_GETLIGHTXV (ES11_GETLIGHTFV + 1)
3369-#define ES11_GETMATERIALFV (ES11_GETLIGHTXV + 1)
3370-#define ES11_GETMATERIALXV (ES11_GETMATERIALFV + 1)
3371-#define ES11_GETPOINTERV (ES11_GETMATERIALXV + 1)
3372-#define ES11_GETSTRING (ES11_GETPOINTERV + 1)
3373-#define ES11_GETTEXENVFV (ES11_GETSTRING + 1)
3374-#define ES11_GETTEXENVIV (ES11_GETTEXENVFV + 1)
3375-#define ES11_GETTEXENVXV (ES11_GETTEXENVIV + 1)
3376-#define ES11_GETTEXPARAMETERFV (ES11_GETTEXENVXV + 1)
3377-#define ES11_GETTEXPARAMETERIV (ES11_GETTEXPARAMETERFV + 1)
3378-#define ES11_GETTEXPARAMETERXV (ES11_GETTEXPARAMETERIV + 1)
3379-#define ES11_HINT (ES11_GETTEXPARAMETERXV + 1)
3380-#define ES11_ISBUFFER (ES11_HINT + 1)
3381-#define ES11_ISENABLED (ES11_ISBUFFER + 1)
3382-#define ES11_ISTEXTURE (ES11_ISENABLED + 1)
3383-#define ES11_LIGHTF (ES11_ISTEXTURE + 1)
3384-#define ES11_LIGHTFV (ES11_LIGHTF + 1)
3385-#define ES11_LIGHTMODELF (ES11_LIGHTFV + 1)
3386-#define ES11_LIGHTMODELFV (ES11_LIGHTMODELF + 1)
3387-#define ES11_LIGHTMODELX (ES11_LIGHTMODELFV + 1)
3388-#define ES11_LIGHTMODELXV (ES11_LIGHTMODELX + 1)
3389-#define ES11_LIGHTX (ES11_LIGHTMODELXV + 1)
3390-#define ES11_LIGHTXV (ES11_LIGHTX + 1)
3391-#define ES11_LINEWIDTH (ES11_LIGHTXV + 1)
3392-#define ES11_LINEWIDTHX (ES11_LINEWIDTH + 1)
3393-#define ES11_LOADIDENTITY (ES11_LINEWIDTHX + 1)
3394-#define ES11_LOADMATRIXF (ES11_LOADIDENTITY + 1)
3395-#define ES11_LOADMATRIXX (ES11_LOADMATRIXF + 1)
3396-#define ES11_LOGICOP (ES11_LOADMATRIXX + 1)
3397-#define ES11_MATERIALF (ES11_LOGICOP + 1)
3398-#define ES11_MATERIALFV (ES11_MATERIALF + 1)
3399-#define ES11_MATERIALX (ES11_MATERIALFV + 1)
3400-#define ES11_MATERIALXV (ES11_MATERIALX + 1)
3401-#define ES11_MATRIXMODE (ES11_MATERIALXV + 1)
3402-#define ES11_MULTITEXCOORD4F (ES11_MATRIXMODE + 1)
3403-#define ES11_MULTITEXCOORD4X (ES11_MULTITEXCOORD4F + 1)
3404-#define ES11_MULTMATRIXF (ES11_MULTITEXCOORD4X + 1)
3405-#define ES11_MULTMATRIXX (ES11_MULTMATRIXF + 1)
3406-#define ES11_NORMAL3F (ES11_MULTMATRIXX + 1)
3407-#define ES11_NORMAL3X (ES11_NORMAL3F + 1)
3408-#define ES11_NORMALPOINTER (ES11_NORMAL3X + 1)
3409-#define ES11_ORTHOF (ES11_NORMALPOINTER + 1)
3410-#define ES11_ORTHOX (ES11_ORTHOF + 1)
3411-#define ES11_PIXELSTOREI (ES11_ORTHOX + 1)
3412-#define ES11_POINTPARAMETERF (ES11_PIXELSTOREI + 1)
3413-#define ES11_POINTPARAMETERFV (ES11_POINTPARAMETERF + 1)
3414-#define ES11_POINTPARAMETERX (ES11_POINTPARAMETERFV + 1)
3415-#define ES11_POINTPARAMETERXV (ES11_POINTPARAMETERX + 1)
3416-#define ES11_POINTSIZE (ES11_POINTPARAMETERXV + 1)
3417-#define ES11_POINTSIZEX (ES11_POINTSIZE + 1)
3418-#define ES11_POLYGONOFFSET (ES11_POINTSIZEX + 1)
3419-#define ES11_POLYGONOFFSETX (ES11_POLYGONOFFSET + 1)
3420-#define ES11_POPMATRIX (ES11_POLYGONOFFSETX + 1)
3421-#define ES11_PUSHMATRIX (ES11_POPMATRIX + 1)
3422-#define ES11_READPIXELS (ES11_PUSHMATRIX + 1)
3423-#define ES11_ROTATEF (ES11_READPIXELS + 1)
3424-#define ES11_ROTATEX (ES11_ROTATEF + 1)
3425-#define ES11_SAMPLECOVERAGE (ES11_ROTATEX + 1)
3426-#define ES11_SAMPLECOVERAGEX (ES11_SAMPLECOVERAGE + 1)
3427-#define ES11_SCALEF (ES11_SAMPLECOVERAGEX + 1)
3428-#define ES11_SCALEX (ES11_SCALEF + 1)
3429-#define ES11_SCISSOR (ES11_SCALEX + 1)
3430-#define ES11_SHADEMODEL (ES11_SCISSOR + 1)
3431-#define ES11_STENCILFUNC (ES11_SHADEMODEL + 1)
3432-#define ES11_STENCILMASK (ES11_STENCILFUNC + 1)
3433-#define ES11_STENCILOP (ES11_STENCILMASK + 1)
3434-#define ES11_TEXCOORDPOINTER (ES11_STENCILOP + 1)
3435-#define ES11_TEXENVF (ES11_TEXCOORDPOINTER + 1)
3436-#define ES11_TEXENVFV (ES11_TEXENVF + 1)
3437-#define ES11_TEXENVI (ES11_TEXENVFV + 1)
3438-#define ES11_TEXENVIV (ES11_TEXENVI + 1)
3439-#define ES11_TEXENVX (ES11_TEXENVIV + 1)
3440-#define ES11_TEXENVXV (ES11_TEXENVX + 1)
3441-#define ES11_TEXIMAGE2D (ES11_TEXENVXV + 1)
3442-#define ES11_TEXPARAMETERF (ES11_TEXIMAGE2D + 1)
3443-#define ES11_TEXPARAMETERFV (ES11_TEXPARAMETERF + 1)
3444-#define ES11_TEXPARAMETERI (ES11_TEXPARAMETERFV + 1)
3445-#define ES11_TEXPARAMETERIV (ES11_TEXPARAMETERI + 1)
3446-#define ES11_TEXPARAMETERX (ES11_TEXPARAMETERIV + 1)
3447-#define ES11_TEXPARAMETERXV (ES11_TEXPARAMETERX + 1)
3448-#define ES11_TEXSUBIMAGE2D (ES11_TEXPARAMETERXV + 1)
3449-#define ES11_TRANSLATEF (ES11_TEXSUBIMAGE2D + 1)
3450-#define ES11_TRANSLATEX (ES11_TRANSLATEF + 1)
3451-#define ES11_VERTEXPOINTER (ES11_TRANSLATEX + 1)
3452-#define ES11_VIEWPORT (ES11_VERTEXPOINTER + 1)
3453-#define ES11_BLENDEQUATIONOES (ES11_VIEWPORT + 1)
3454-#define ES11_BLENDFUNCSEPERATEOES (ES11_BLENDEQUATIONOES + 1)
3455-#define ES11_BLENDEQUATIONSEPARATEOES (ES11_BLENDFUNCSEPERATEOES + 1)
3456-#define ES11_GLMAPBUFFEROES (ES11_BLENDEQUATIONSEPARATEOES + 1)
3457-#define ES11_GLUNMAPBUFFEROES (ES11_GLMAPBUFFEROES + 1)
3458-#define ES11_GLGETBUFFERPOINTERVOES (ES11_GLUNMAPBUFFEROES + 1)
3459-#define ES11_CALLS (ES11_GLGETBUFFERPOINTERVOES + 1)
3460-#define ES11_DRAWCALLS (ES11_CALLS + 1)
3461-#define ES11_STATECHANGECALLS (ES11_DRAWCALLS + 1)
3462-#define ES11_POINTCOUNT (ES11_STATECHANGECALLS + 1)
3463-#define ES11_LINECOUNT (ES11_POINTCOUNT + 1)
3464-#define ES11_TRIANGLECOUNT (ES11_LINECOUNT + 1)
3465-
3466-/* OpenGL ES2X API IDs. */
3467-#define ES20_ACTIVETEXTURE 1
3468-#define ES20_ATTACHSHADER (ES20_ACTIVETEXTURE + 1)
3469-#define ES20_BINDATTRIBLOCATION (ES20_ATTACHSHADER + 1)
3470-#define ES20_BINDBUFFER (ES20_BINDATTRIBLOCATION + 1)
3471-#define ES20_BINDFRAMEBUFFER (ES20_BINDBUFFER + 1)
3472-#define ES20_BINDRENDERBUFFER (ES20_BINDFRAMEBUFFER + 1)
3473-#define ES20_BINDTEXTURE (ES20_BINDRENDERBUFFER + 1)
3474-#define ES20_BLENDCOLOR (ES20_BINDTEXTURE + 1)
3475-#define ES20_BLENDEQUATION (ES20_BLENDCOLOR + 1)
3476-#define ES20_BLENDEQUATIONSEPARATE (ES20_BLENDEQUATION + 1)
3477-#define ES20_BLENDFUNC (ES20_BLENDEQUATIONSEPARATE + 1)
3478-#define ES20_BLENDFUNCSEPARATE (ES20_BLENDFUNC + 1)
3479-#define ES20_BUFFERDATA (ES20_BLENDFUNCSEPARATE + 1)
3480-#define ES20_BUFFERSUBDATA (ES20_BUFFERDATA + 1)
3481-#define ES20_CHECKFRAMEBUFFERSTATUS (ES20_BUFFERSUBDATA + 1)
3482-#define ES20_CLEAR (ES20_CHECKFRAMEBUFFERSTATUS + 1)
3483-#define ES20_CLEARCOLOR (ES20_CLEAR + 1)
3484-#define ES20_CLEARDEPTHF (ES20_CLEARCOLOR + 1)
3485-#define ES20_CLEARSTENCIL (ES20_CLEARDEPTHF + 1)
3486-#define ES20_COLORMASK (ES20_CLEARSTENCIL + 1)
3487-#define ES20_COMPILESHADER (ES20_COLORMASK + 1)
3488-#define ES20_COMPRESSEDTEXIMAGE2D (ES20_COMPILESHADER + 1)
3489-#define ES20_COMPRESSEDTEXSUBIMAGE2D (ES20_COMPRESSEDTEXIMAGE2D + 1)
3490-#define ES20_COPYTEXIMAGE2D (ES20_COMPRESSEDTEXSUBIMAGE2D + 1)
3491-#define ES20_COPYTEXSUBIMAGE2D (ES20_COPYTEXIMAGE2D + 1)
3492-#define ES20_CREATEPROGRAM (ES20_COPYTEXSUBIMAGE2D + 1)
3493-#define ES20_CREATESHADER (ES20_CREATEPROGRAM + 1)
3494-#define ES20_CULLFACE (ES20_CREATESHADER + 1)
3495-#define ES20_DELETEBUFFERS (ES20_CULLFACE + 1)
3496-#define ES20_DELETEFRAMEBUFFERS (ES20_DELETEBUFFERS + 1)
3497-#define ES20_DELETEPROGRAM (ES20_DELETEFRAMEBUFFERS + 1)
3498-#define ES20_DELETERENDERBUFFERS (ES20_DELETEPROGRAM + 1)
3499-#define ES20_DELETESHADER (ES20_DELETERENDERBUFFERS + 1)
3500-#define ES20_DELETETEXTURES (ES20_DELETESHADER + 1)
3501-#define ES20_DEPTHFUNC (ES20_DELETETEXTURES + 1)
3502-#define ES20_DEPTHMASK (ES20_DEPTHFUNC + 1)
3503-#define ES20_DEPTHRANGEF (ES20_DEPTHMASK + 1)
3504-#define ES20_DETACHSHADER (ES20_DEPTHRANGEF + 1)
3505-#define ES20_DISABLE (ES20_DETACHSHADER + 1)
3506-#define ES20_DISABLEVERTEXATTRIBARRAY (ES20_DISABLE + 1)
3507-#define ES20_DRAWARRAYS (ES20_DISABLEVERTEXATTRIBARRAY + 1)
3508-#define ES20_DRAWELEMENTS (ES20_DRAWARRAYS + 1)
3509-#define ES20_ENABLE (ES20_DRAWELEMENTS + 1)
3510-#define ES20_ENABLEVERTEXATTRIBARRAY (ES20_ENABLE + 1)
3511-#define ES20_FINISH (ES20_ENABLEVERTEXATTRIBARRAY + 1)
3512-#define ES20_FLUSH (ES20_FINISH + 1)
3513-#define ES20_FRAMEBUFFERRENDERBUFFER (ES20_FLUSH + 1)
3514-#define ES20_FRAMEBUFFERTEXTURE2D (ES20_FRAMEBUFFERRENDERBUFFER + 1)
3515-#define ES20_FRONTFACE (ES20_FRAMEBUFFERTEXTURE2D + 1)
3516-#define ES20_GENBUFFERS (ES20_FRONTFACE + 1)
3517-#define ES20_GENERATEMIPMAP (ES20_GENBUFFERS + 1)
3518-#define ES20_GENFRAMEBUFFERS (ES20_GENERATEMIPMAP + 1)
3519-#define ES20_GENRENDERBUFFERS (ES20_GENFRAMEBUFFERS + 1)
3520-#define ES20_GENTEXTURES (ES20_GENRENDERBUFFERS + 1)
3521-#define ES20_GETACTIVEATTRIB (ES20_GENTEXTURES + 1)
3522-#define ES20_GETACTIVEUNIFORM (ES20_GETACTIVEATTRIB + 1)
3523-#define ES20_GETATTACHEDSHADERS (ES20_GETACTIVEUNIFORM + 1)
3524-#define ES20_GETATTRIBLOCATION (ES20_GETATTACHEDSHADERS + 1)
3525-#define ES20_GETBOOLEANV (ES20_GETATTRIBLOCATION + 1)
3526-#define ES20_GETBUFFERPARAMETERIV (ES20_GETBOOLEANV + 1)
3527-#define ES20_GETERROR (ES20_GETBUFFERPARAMETERIV + 1)
3528-#define ES20_GETFLOATV (ES20_GETERROR + 1)
3529-#define ES20_GETFRAMEBUFFERATTACHMENTPARAMETERIV (ES20_GETFLOATV + 1)
3530-#define ES20_GETINTEGERV (ES20_GETFRAMEBUFFERATTACHMENTPARAMETERIV + 1)
3531-#define ES20_GETPROGRAMIV (ES20_GETINTEGERV + 1)
3532-#define ES20_GETPROGRAMINFOLOG (ES20_GETPROGRAMIV + 1)
3533-#define ES20_GETRENDERBUFFERPARAMETERIV (ES20_GETPROGRAMINFOLOG + 1)
3534-#define ES20_GETSHADERIV (ES20_GETRENDERBUFFERPARAMETERIV + 1)
3535-#define ES20_GETSHADERINFOLOG (ES20_GETSHADERIV + 1)
3536-#define ES20_GETSHADERPRECISIONFORMAT (ES20_GETSHADERINFOLOG + 1)
3537-#define ES20_GETSHADERSOURCE (ES20_GETSHADERPRECISIONFORMAT + 1)
3538-#define ES20_GETSTRING (ES20_GETSHADERSOURCE + 1)
3539-#define ES20_GETTEXPARAMETERFV (ES20_GETSTRING + 1)
3540-#define ES20_GETTEXPARAMETERIV (ES20_GETTEXPARAMETERFV + 1)
3541-#define ES20_GETUNIFORMFV (ES20_GETTEXPARAMETERIV + 1)
3542-#define ES20_GETUNIFORMIV (ES20_GETUNIFORMFV + 1)
3543-#define ES20_GETUNIFORMLOCATION (ES20_GETUNIFORMIV + 1)
3544-#define ES20_GETVERTEXATTRIBFV (ES20_GETUNIFORMLOCATION + 1)
3545-#define ES20_GETVERTEXATTRIBIV (ES20_GETVERTEXATTRIBFV + 1)
3546-#define ES20_GETVERTEXATTRIBPOINTERV (ES20_GETVERTEXATTRIBIV + 1)
3547-#define ES20_HINT (ES20_GETVERTEXATTRIBPOINTERV + 1)
3548-#define ES20_ISBUFFER (ES20_HINT + 1)
3549-#define ES20_ISENABLED (ES20_ISBUFFER + 1)
3550-#define ES20_ISFRAMEBUFFER (ES20_ISENABLED + 1)
3551-#define ES20_ISPROGRAM (ES20_ISFRAMEBUFFER + 1)
3552-#define ES20_ISRENDERBUFFER (ES20_ISPROGRAM + 1)
3553-#define ES20_ISSHADER (ES20_ISRENDERBUFFER + 1)
3554-#define ES20_ISTEXTURE (ES20_ISSHADER + 1)
3555-#define ES20_LINEWIDTH (ES20_ISTEXTURE + 1)
3556-#define ES20_LINKPROGRAM (ES20_LINEWIDTH + 1)
3557-#define ES20_PIXELSTOREI (ES20_LINKPROGRAM + 1)
3558-#define ES20_POLYGONOFFSET (ES20_PIXELSTOREI + 1)
3559-#define ES20_READPIXELS (ES20_POLYGONOFFSET + 1)
3560-#define ES20_RELEASESHADERCOMPILER (ES20_READPIXELS + 1)
3561-#define ES20_RENDERBUFFERSTORAGE (ES20_RELEASESHADERCOMPILER + 1)
3562-#define ES20_SAMPLECOVERAGE (ES20_RENDERBUFFERSTORAGE + 1)
3563-#define ES20_SCISSOR (ES20_SAMPLECOVERAGE + 1)
3564-#define ES20_SHADERBINARY (ES20_SCISSOR + 1)
3565-#define ES20_SHADERSOURCE (ES20_SHADERBINARY + 1)
3566-#define ES20_STENCILFUNC (ES20_SHADERSOURCE + 1)
3567-#define ES20_STENCILFUNCSEPARATE (ES20_STENCILFUNC + 1)
3568-#define ES20_STENCILMASK (ES20_STENCILFUNCSEPARATE + 1)
3569-#define ES20_STENCILMASKSEPARATE (ES20_STENCILMASK + 1)
3570-#define ES20_STENCILOP (ES20_STENCILMASKSEPARATE + 1)
3571-#define ES20_STENCILOPSEPARATE (ES20_STENCILOP + 1)
3572-#define ES20_TEXIMAGE2D (ES20_STENCILOPSEPARATE + 1)
3573-#define ES20_TEXPARAMETERF (ES20_TEXIMAGE2D + 1)
3574-#define ES20_TEXPARAMETERFV (ES20_TEXPARAMETERF + 1)
3575-#define ES20_TEXPARAMETERI (ES20_TEXPARAMETERFV + 1)
3576-#define ES20_TEXPARAMETERIV (ES20_TEXPARAMETERI + 1)
3577-#define ES20_TEXSUBIMAGE2D (ES20_TEXPARAMETERIV + 1)
3578-#define ES20_UNIFORM1F (ES20_TEXSUBIMAGE2D + 1)
3579-#define ES20_UNIFORM1FV (ES20_UNIFORM1F + 1)
3580-#define ES20_UNIFORM1I (ES20_UNIFORM1FV + 1)
3581-#define ES20_UNIFORM1IV (ES20_UNIFORM1I + 1)
3582-#define ES20_UNIFORM2F (ES20_UNIFORM1IV + 1)
3583-#define ES20_UNIFORM2FV (ES20_UNIFORM2F + 1)
3584-#define ES20_UNIFORM2I (ES20_UNIFORM2FV + 1)
3585-#define ES20_UNIFORM2IV (ES20_UNIFORM2I + 1)
3586-#define ES20_UNIFORM3F (ES20_UNIFORM2IV + 1)
3587-#define ES20_UNIFORM3FV (ES20_UNIFORM3F + 1)
3588-#define ES20_UNIFORM3I (ES20_UNIFORM3FV + 1)
3589-#define ES20_UNIFORM3IV (ES20_UNIFORM3I + 1)
3590-#define ES20_UNIFORM4F (ES20_UNIFORM3IV + 1)
3591-#define ES20_UNIFORM4FV (ES20_UNIFORM4F + 1)
3592-#define ES20_UNIFORM4I (ES20_UNIFORM4FV + 1)
3593-#define ES20_UNIFORM4IV (ES20_UNIFORM4I + 1)
3594-#define ES20_UNIFORMMATRIX2FV (ES20_UNIFORM4IV + 1)
3595-#define ES20_UNIFORMMATRIX3FV (ES20_UNIFORMMATRIX2FV + 1)
3596-#define ES20_UNIFORMMATRIX4FV (ES20_UNIFORMMATRIX3FV + 1)
3597-#define ES20_USEPROGRAM (ES20_UNIFORMMATRIX4FV + 1)
3598-#define ES20_VALIDATEPROGRAM (ES20_USEPROGRAM + 1)
3599-#define ES20_VERTEXATTRIB1F (ES20_VALIDATEPROGRAM + 1)
3600-#define ES20_VERTEXATTRIB1FV (ES20_VERTEXATTRIB1F + 1)
3601-#define ES20_VERTEXATTRIB2F (ES20_VERTEXATTRIB1FV + 1)
3602-#define ES20_VERTEXATTRIB2FV (ES20_VERTEXATTRIB2F + 1)
3603-#define ES20_VERTEXATTRIB3F (ES20_VERTEXATTRIB2FV + 1)
3604-#define ES20_VERTEXATTRIB3FV (ES20_VERTEXATTRIB3F + 1)
3605-#define ES20_VERTEXATTRIB4F (ES20_VERTEXATTRIB3FV + 1)
3606-#define ES20_VERTEXATTRIB4FV (ES20_VERTEXATTRIB4F + 1)
3607-#define ES20_VERTEXATTRIBPOINTER (ES20_VERTEXATTRIB4FV + 1)
3608-#define ES20_VIEWPORT (ES20_VERTEXATTRIBPOINTER + 1)
3609-#define ES20_GETPROGRAMBINARYOES (ES20_VIEWPORT + 1)
3610-#define ES20_PROGRAMBINARYOES (ES20_GETPROGRAMBINARYOES + 1)
3611-#define ES20_TEXIMAGE3DOES (ES20_PROGRAMBINARYOES + 1)
3612-#define ES20_TEXSUBIMAGE3DOES (ES20_TEXIMAGE3DOES + 1)
3613-#define ES20_COPYSUBIMAGE3DOES (ES20_TEXSUBIMAGE3DOES + 1)
3614-#define ES20_COMPRESSEDTEXIMAGE3DOES (ES20_COPYSUBIMAGE3DOES + 1)
3615-#define ES20_COMPRESSEDTEXSUBIMAGE3DOES (ES20_COMPRESSEDTEXIMAGE3DOES + 1)
3616-#define ES20_FRAMEBUFFERTEXTURE3DOES (ES20_COMPRESSEDTEXSUBIMAGE3DOES + 1)
3617-#define ES20_BINDVERTEXARRAYOES (ES20_FRAMEBUFFERTEXTURE3DOES + 1)
3618-#define ES20_GENVERTEXARRAYOES (ES20_BINDVERTEXARRAYOES + 1)
3619-#define ES20_ISVERTEXARRAYOES (ES20_GENVERTEXARRAYOES + 1)
3620-#define ES20_DELETEVERTEXARRAYOES (ES20_ISVERTEXARRAYOES + 1)
3621-#define ES20_GLMAPBUFFEROES (ES20_DELETEVERTEXARRAYOES + 1)
3622-#define ES20_GLUNMAPBUFFEROES (ES20_GLMAPBUFFEROES + 1)
3623-#define ES20_GLGETBUFFERPOINTERVOES (ES20_GLUNMAPBUFFEROES + 1)
3624-#define ES20_DISCARDFRAMEBUFFEREXT (ES20_GLGETBUFFERPOINTERVOES + 1)
3625-#define ES20_CALLS (ES20_DISCARDFRAMEBUFFEREXT + 1)
3626-#define ES20_DRAWCALLS (ES20_CALLS + 1)
3627-#define ES20_STATECHANGECALLS (ES20_DRAWCALLS + 1)
3628-#define ES20_POINTCOUNT (ES20_STATECHANGECALLS + 1)
3629-#define ES20_LINECOUNT (ES20_POINTCOUNT + 1)
3630-#define ES20_TRIANGLECOUNT (ES20_LINECOUNT + 1)
3631-
3632-/* OpenVG API IDs. */
3633-#define VG11_APPENDPATH 1
3634-#define VG11_APPENDPATHDATA (VG11_APPENDPATH + 1)
3635-#define VG11_CHILDIMAGE (VG11_APPENDPATHDATA + 1)
3636-#define VG11_CLEAR (VG11_CHILDIMAGE + 1)
3637-#define VG11_CLEARGLYPH (VG11_CLEAR + 1)
3638-#define VG11_CLEARIMAGE (VG11_CLEARGLYPH + 1)
3639-#define VG11_CLEARPATH (VG11_CLEARIMAGE + 1)
3640-#define VG11_COLORMATRIX (VG11_CLEARPATH + 1)
3641-#define VG11_CONVOLVE (VG11_COLORMATRIX + 1)
3642-#define VG11_COPYIMAGE (VG11_CONVOLVE + 1)
3643-#define VG11_COPYMASK (VG11_COPYIMAGE + 1)
3644-#define VG11_COPYPIXELS (VG11_COPYMASK + 1)
3645-#define VG11_CREATEFONT (VG11_COPYPIXELS + 1)
3646-#define VG11_CREATEIMAGE (VG11_CREATEFONT + 1)
3647-#define VG11_CREATEMASKLAYER (VG11_CREATEIMAGE + 1)
3648-#define VG11_CREATEPAINT (VG11_CREATEMASKLAYER + 1)
3649-#define VG11_CREATEPATH (VG11_CREATEPAINT + 1)
3650-#define VG11_DESTROYFONT (VG11_CREATEPATH + 1)
3651-#define VG11_DESTROYIMAGE (VG11_DESTROYFONT + 1)
3652-#define VG11_DESTROYMASKLAYER (VG11_DESTROYIMAGE + 1)
3653-#define VG11_DESTROYPAINT (VG11_DESTROYMASKLAYER + 1)
3654-#define VG11_DESTROYPATH (VG11_DESTROYPAINT + 1)
3655-#define VG11_DRAWGLYPH (VG11_DESTROYPATH + 1)
3656-#define VG11_DRAWGLYPHS (VG11_DRAWGLYPH + 1)
3657-#define VG11_DRAWIMAGE (VG11_DRAWGLYPHS + 1)
3658-#define VG11_DRAWPATH (VG11_DRAWIMAGE + 1)
3659-#define VG11_FILLMASKLAYER (VG11_DRAWPATH + 1)
3660-#define VG11_FINISH (VG11_FILLMASKLAYER + 1)
3661-#define VG11_FLUSH (VG11_FINISH + 1)
3662-#define VG11_GAUSSIANBLUR (VG11_FLUSH + 1)
3663-#define VG11_GETCOLOR (VG11_GAUSSIANBLUR + 1)
3664-#define VG11_GETERROR (VG11_GETCOLOR + 1)
3665-#define VG11_GETF (VG11_GETERROR + 1)
3666-#define VG11_GETFV (VG11_GETF + 1)
3667-#define VG11_GETI (VG11_GETFV + 1)
3668-#define VG11_GETIMAGESUBDATA (VG11_GETI + 1)
3669-#define VG11_GETIV (VG11_GETIMAGESUBDATA + 1)
3670-#define VG11_GETMATRIX (VG11_GETIV + 1)
3671-#define VG11_GETPAINT (VG11_GETMATRIX + 1)
3672-#define VG11_GETPARAMETERF (VG11_GETPAINT + 1)
3673-#define VG11_GETPARAMETERFV (VG11_GETPARAMETERF + 1)
3674-#define VG11_GETPARAMETERI (VG11_GETPARAMETERFV + 1)
3675-#define VG11_GETPARAMETERIV (VG11_GETPARAMETERI + 1)
3676-#define VG11_GETPARAMETERVECTORSIZE (VG11_GETPARAMETERIV + 1)
3677-#define VG11_GETPARENT (VG11_GETPARAMETERVECTORSIZE + 1)
3678-#define VG11_GETPATHCAPABILITIES (VG11_GETPARENT + 1)
3679-#define VG11_GETPIXELS (VG11_GETPATHCAPABILITIES + 1)
3680-#define VG11_GETSTRING (VG11_GETPIXELS + 1)
3681-#define VG11_GETVECTORSIZE (VG11_GETSTRING + 1)
3682-#define VG11_HARDWAREQUERY (VG11_GETVECTORSIZE + 1)
3683-#define VG11_IMAGESUBDATA (VG11_HARDWAREQUERY + 1)
3684-#define VG11_INTERPOLATEPATH (VG11_IMAGESUBDATA + 1)
3685-#define VG11_LOADIDENTITY (VG11_INTERPOLATEPATH + 1)
3686-#define VG11_LOADMATRIX (VG11_LOADIDENTITY + 1)
3687-#define VG11_LOOKUP (VG11_LOADMATRIX + 1)
3688-#define VG11_LOOKUPSINGLE (VG11_LOOKUP + 1)
3689-#define VG11_MASK (VG11_LOOKUPSINGLE + 1)
3690-#define VG11_MODIFYPATHCOORDS (VG11_MASK + 1)
3691-#define VG11_MULTMATRIX (VG11_MODIFYPATHCOORDS + 1)
3692-#define VG11_PAINTPATTERN (VG11_MULTMATRIX + 1)
3693-#define VG11_PATHBOUNDS (VG11_PAINTPATTERN + 1)
3694-#define VG11_PATHLENGTH (VG11_PATHBOUNDS + 1)
3695-#define VG11_PATHTRANSFORMEDBOUNDS (VG11_PATHLENGTH + 1)
3696-#define VG11_POINTALONGPATH (VG11_PATHTRANSFORMEDBOUNDS + 1)
3697-#define VG11_READPIXELS (VG11_POINTALONGPATH + 1)
3698-#define VG11_REMOVEPATHCAPABILITIES (VG11_READPIXELS + 1)
3699-#define VG11_RENDERTOMASK (VG11_REMOVEPATHCAPABILITIES + 1)
3700-#define VG11_ROTATE (VG11_RENDERTOMASK + 1)
3701-#define VG11_SCALE (VG11_ROTATE + 1)
3702-#define VG11_SEPARABLECONVOLVE (VG11_SCALE + 1)
3703-#define VG11_SETCOLOR (VG11_SEPARABLECONVOLVE + 1)
3704-#define VG11_SETF (VG11_SETCOLOR + 1)
3705-#define VG11_SETFV (VG11_SETF + 1)
3706-#define VG11_SETGLYPHTOIMAGE (VG11_SETFV + 1)
3707-#define VG11_SETGLYPHTOPATH (VG11_SETGLYPHTOIMAGE + 1)
3708-#define VG11_SETI (VG11_SETGLYPHTOPATH + 1)
3709-#define VG11_SETIV (VG11_SETI + 1)
3710-#define VG11_SETPAINT (VG11_SETIV + 1)
3711-#define VG11_SETPARAMETERF (VG11_SETPAINT + 1)
3712-#define VG11_SETPARAMETERFV (VG11_SETPARAMETERF + 1)
3713-#define VG11_SETPARAMETERI (VG11_SETPARAMETERFV + 1)
3714-#define VG11_SETPARAMETERIV (VG11_SETPARAMETERI + 1)
3715-#define VG11_SETPIXELS (VG11_SETPARAMETERIV + 1)
3716-#define VG11_SHEAR (VG11_SETPIXELS + 1)
3717-#define VG11_TRANSFORMPATH (VG11_SHEAR + 1)
3718-#define VG11_TRANSLATE (VG11_TRANSFORMPATH + 1)
3719-#define VG11_WRITEPIXELS (VG11_TRANSLATE + 1)
3720-#define VG11_CALLS (VG11_WRITEPIXELS + 1)
3721-#define VG11_DRAWCALLS (VG11_CALLS + 1)
3722-#define VG11_STATECHANGECALLS (VG11_DRAWCALLS + 1)
3723-#define VG11_FILLCOUNT (VG11_STATECHANGECALLS + 1)
3724-#define VG11_STROKECOUNT (VG11_FILLCOUNT + 1)
3725+#define ES11_CALLS 151
3726+#define ES11_DRAWCALLS (ES11_CALLS + 1)
3727+#define ES11_STATECHANGECALLS (ES11_DRAWCALLS + 1)
3728+#define ES11_POINTCOUNT (ES11_STATECHANGECALLS + 1)
3729+#define ES11_LINECOUNT (ES11_POINTCOUNT + 1)
3730+#define ES11_TRIANGLECOUNT (ES11_LINECOUNT + 1)
3731+
3732+#define ES20_CALLS 159
3733+#define ES20_DRAWCALLS (ES20_CALLS + 1)
3734+#define ES20_STATECHANGECALLS (ES20_DRAWCALLS + 1)
3735+#define ES20_POINTCOUNT (ES20_STATECHANGECALLS + 1)
3736+#define ES20_LINECOUNT (ES20_POINTCOUNT + 1)
3737+#define ES20_TRIANGLECOUNT (ES20_LINECOUNT + 1)
3738+
3739+#define VG11_CALLS 88
3740+#define VG11_DRAWCALLS (VG11_CALLS + 1)
3741+#define VG11_STATECHANGECALLS (VG11_DRAWCALLS + 1)
3742+#define VG11_FILLCOUNT (VG11_STATECHANGECALLS + 1)
3743+#define VG11_STROKECOUNT (VG11_FILLCOUNT + 1)
3744 /* End of Driver API ID Definitions. */
3745
3746 /* HAL & MISC IDs. */
3747-#define HAL_VERTBUFNEWBYTEALLOC 1
3748-#define HAL_VERTBUFTOTALBYTEALLOC (HAL_VERTBUFNEWBYTEALLOC + 1)
3749-#define HAL_VERTBUFNEWOBJALLOC (HAL_VERTBUFTOTALBYTEALLOC + 1)
3750-#define HAL_VERTBUFTOTALOBJALLOC (HAL_VERTBUFNEWOBJALLOC + 1)
3751-#define HAL_INDBUFNEWBYTEALLOC (HAL_VERTBUFTOTALOBJALLOC + 1)
3752-#define HAL_INDBUFTOTALBYTEALLOC (HAL_INDBUFNEWBYTEALLOC + 1)
3753-#define HAL_INDBUFNEWOBJALLOC (HAL_INDBUFTOTALBYTEALLOC + 1)
3754-#define HAL_INDBUFTOTALOBJALLOC (HAL_INDBUFNEWOBJALLOC + 1)
3755-#define HAL_TEXBUFNEWBYTEALLOC (HAL_INDBUFTOTALOBJALLOC + 1)
3756-#define HAL_TEXBUFTOTALBYTEALLOC (HAL_TEXBUFNEWBYTEALLOC + 1)
3757-#define HAL_TEXBUFNEWOBJALLOC (HAL_TEXBUFTOTALBYTEALLOC + 1)
3758-#define HAL_TEXBUFTOTALOBJALLOC (HAL_TEXBUFNEWOBJALLOC + 1)
3759-
3760-#define GPU_CYCLES 1
3761-#define GPU_READ64BYTE (GPU_CYCLES + 1)
3762-#define GPU_WRITE64BYTE (GPU_READ64BYTE + 1)
3763-#define GPU_TOTALCYCLES (GPU_WRITE64BYTE + 1)
3764-#define GPU_IDLECYCLES (GPU_TOTALCYCLES + 1)
3765-
3766-#define VS_INSTCOUNT 1
3767-#define VS_BRANCHINSTCOUNT (VS_INSTCOUNT + 1)
3768-#define VS_TEXLDINSTCOUNT (VS_BRANCHINSTCOUNT + 1)
3769-#define VS_RENDEREDVERTCOUNT (VS_TEXLDINSTCOUNT + 1)
3770-
3771-#define PS_INSTCOUNT 1
3772-#define PS_BRANCHINSTCOUNT (PS_INSTCOUNT + 1)
3773-#define PS_TEXLDINSTCOUNT (PS_BRANCHINSTCOUNT + 1)
3774-#define PS_RENDEREDPIXCOUNT (PS_TEXLDINSTCOUNT + 1)
3775-
3776-#define PA_INVERTCOUNT 1
3777-#define PA_INPRIMCOUNT (PA_INVERTCOUNT + 1)
3778-#define PA_OUTPRIMCOUNT (PA_INPRIMCOUNT + 1)
3779-#define PA_DEPTHCLIPCOUNT (PA_OUTPRIMCOUNT + 1)
3780-#define PA_TRIVIALREJCOUNT (PA_DEPTHCLIPCOUNT + 1)
3781-#define PA_CULLCOUNT (PA_TRIVIALREJCOUNT + 1)
3782-
3783-#define SE_TRIANGLECOUNT 1
3784-#define SE_LINECOUNT (SE_TRIANGLECOUNT + 1)
3785-
3786-#define RA_VALIDPIXCOUNT 1
3787-#define RA_TOTALQUADCOUNT (RA_VALIDPIXCOUNT + 1)
3788-#define RA_VALIDQUADCOUNTEZ (RA_TOTALQUADCOUNT + 1)
3789-#define RA_TOTALPRIMCOUNT (RA_VALIDQUADCOUNTEZ + 1)
3790-#define RA_PIPECACHEMISSCOUNT (RA_TOTALPRIMCOUNT + 1)
3791-#define RA_PREFCACHEMISSCOUNT (RA_PIPECACHEMISSCOUNT + 1)
3792-#define RA_EEZCULLCOUNT (RA_PREFCACHEMISSCOUNT + 1)
3793-
3794-#define TX_TOTBILINEARREQ 1
3795-#define TX_TOTTRILINEARREQ (TX_TOTBILINEARREQ + 1)
3796-#define TX_TOTDISCARDTEXREQ (TX_TOTTRILINEARREQ + 1)
3797-#define TX_TOTTEXREQ (TX_TOTDISCARDTEXREQ + 1)
3798-#define TX_MEMREADCOUNT (TX_TOTTEXREQ + 1)
3799-#define TX_MEMREADIN8BCOUNT (TX_MEMREADCOUNT + 1)
3800-#define TX_CACHEMISSCOUNT (TX_MEMREADIN8BCOUNT + 1)
3801-#define TX_CACHEHITTEXELCOUNT (TX_CACHEMISSCOUNT + 1)
3802-#define TX_CACHEMISSTEXELCOUNT (TX_CACHEHITTEXELCOUNT + 1)
3803-
3804-#define PE_KILLEDBYCOLOR 1
3805-#define PE_KILLEDBYDEPTH (PE_KILLEDBYCOLOR + 1)
3806-#define PE_DRAWNBYCOLOR (PE_KILLEDBYDEPTH + 1)
3807-#define PE_DRAWNBYDEPTH (PE_DRAWNBYCOLOR + 1)
3808-
3809-#define MC_READREQ8BPIPE 1
3810-#define MC_READREQ8BIP (MC_READREQ8BPIPE + 1)
3811-#define MC_WRITEREQ8BPIPE (MC_READREQ8BIP + 1)
3812-
3813-#define AXI_READREQSTALLED 1
3814-#define AXI_WRITEREQSTALLED (AXI_READREQSTALLED + 1)
3815-#define AXI_WRITEDATASTALLED (AXI_WRITEREQSTALLED + 1)
3816-
3817-#define PVS_INSTRCOUNT 1
3818-#define PVS_ALUINSTRCOUNT (PVS_INSTRCOUNT + 1)
3819-#define PVS_TEXINSTRCOUNT (PVS_ALUINSTRCOUNT + 1)
3820-#define PVS_ATTRIBCOUNT (PVS_TEXINSTRCOUNT + 1)
3821-#define PVS_UNIFORMCOUNT (PVS_ATTRIBCOUNT + 1)
3822-#define PVS_FUNCTIONCOUNT (PVS_UNIFORMCOUNT + 1)
3823-
3824-#define PPS_INSTRCOUNT 1
3825-#define PPS_ALUINSTRCOUNT (PPS_INSTRCOUNT + 1)
3826-#define PPS_TEXINSTRCOUNT (PPS_ALUINSTRCOUNT + 1)
3827-#define PPS_ATTRIBCOUNT (PPS_TEXINSTRCOUNT + 1)
3828-#define PPS_UNIFORMCOUNT (PPS_ATTRIBCOUNT + 1)
3829-#define PPS_FUNCTIONCOUNT (PPS_UNIFORMCOUNT + 1)
3830+#define HAL_VERTBUFNEWBYTEALLOC 1
3831+#define HAL_VERTBUFTOTALBYTEALLOC (HAL_VERTBUFNEWBYTEALLOC + 1)
3832+#define HAL_VERTBUFNEWOBJALLOC (HAL_VERTBUFTOTALBYTEALLOC + 1)
3833+#define HAL_VERTBUFTOTALOBJALLOC (HAL_VERTBUFNEWOBJALLOC + 1)
3834+#define HAL_INDBUFNEWBYTEALLOC (HAL_VERTBUFTOTALOBJALLOC + 1)
3835+#define HAL_INDBUFTOTALBYTEALLOC (HAL_INDBUFNEWBYTEALLOC + 1)
3836+#define HAL_INDBUFNEWOBJALLOC (HAL_INDBUFTOTALBYTEALLOC + 1)
3837+#define HAL_INDBUFTOTALOBJALLOC (HAL_INDBUFNEWOBJALLOC + 1)
3838+#define HAL_TEXBUFNEWBYTEALLOC (HAL_INDBUFTOTALOBJALLOC + 1)
3839+#define HAL_TEXBUFTOTALBYTEALLOC (HAL_TEXBUFNEWBYTEALLOC + 1)
3840+#define HAL_TEXBUFNEWOBJALLOC (HAL_TEXBUFTOTALBYTEALLOC + 1)
3841+#define HAL_TEXBUFTOTALOBJALLOC (HAL_TEXBUFNEWOBJALLOC + 1)
3842+
3843+#define GPU_CYCLES 1
3844+#define GPU_READ64BYTE (GPU_CYCLES + 1)
3845+#define GPU_WRITE64BYTE (GPU_READ64BYTE + 1)
3846+#define GPU_TOTALCYCLES (GPU_WRITE64BYTE + 1)
3847+#define GPU_IDLECYCLES (GPU_TOTALCYCLES + 1)
3848+
3849+#define VS_INSTCOUNT 1
3850+#define VS_BRANCHINSTCOUNT (VS_INSTCOUNT + 1)
3851+#define VS_TEXLDINSTCOUNT (VS_BRANCHINSTCOUNT + 1)
3852+#define VS_RENDEREDVERTCOUNT (VS_TEXLDINSTCOUNT + 1)
3853+#define VS_SOURCE (VS_RENDEREDVERTCOUNT + 1)
3854+
3855+#define PS_INSTCOUNT 1
3856+#define PS_BRANCHINSTCOUNT (PS_INSTCOUNT + 1)
3857+#define PS_TEXLDINSTCOUNT (PS_BRANCHINSTCOUNT + 1)
3858+#define PS_RENDEREDPIXCOUNT (PS_TEXLDINSTCOUNT + 1)
3859+#define PS_SOURCE (PS_RENDEREDPIXCOUNT + 1)
3860+
3861+#define PA_INVERTCOUNT 1
3862+#define PA_INPRIMCOUNT (PA_INVERTCOUNT + 1)
3863+#define PA_OUTPRIMCOUNT (PA_INPRIMCOUNT + 1)
3864+#define PA_DEPTHCLIPCOUNT (PA_OUTPRIMCOUNT + 1)
3865+#define PA_TRIVIALREJCOUNT (PA_DEPTHCLIPCOUNT + 1)
3866+#define PA_CULLCOUNT (PA_TRIVIALREJCOUNT + 1)
3867+
3868+#define SE_TRIANGLECOUNT 1
3869+#define SE_LINECOUNT (SE_TRIANGLECOUNT + 1)
3870+
3871+#define RA_VALIDPIXCOUNT 1
3872+#define RA_TOTALQUADCOUNT (RA_VALIDPIXCOUNT + 1)
3873+#define RA_VALIDQUADCOUNTEZ (RA_TOTALQUADCOUNT + 1)
3874+#define RA_TOTALPRIMCOUNT (RA_VALIDQUADCOUNTEZ + 1)
3875+#define RA_PIPECACHEMISSCOUNT (RA_TOTALPRIMCOUNT + 1)
3876+#define RA_PREFCACHEMISSCOUNT (RA_PIPECACHEMISSCOUNT + 1)
3877+#define RA_EEZCULLCOUNT (RA_PREFCACHEMISSCOUNT + 1)
3878+
3879+#define TX_TOTBILINEARREQ 1
3880+#define TX_TOTTRILINEARREQ (TX_TOTBILINEARREQ + 1)
3881+#define TX_TOTDISCARDTEXREQ (TX_TOTTRILINEARREQ + 1)
3882+#define TX_TOTTEXREQ (TX_TOTDISCARDTEXREQ + 1)
3883+#define TX_MEMREADCOUNT (TX_TOTTEXREQ + 1)
3884+#define TX_MEMREADIN8BCOUNT (TX_MEMREADCOUNT + 1)
3885+#define TX_CACHEMISSCOUNT (TX_MEMREADIN8BCOUNT + 1)
3886+#define TX_CACHEHITTEXELCOUNT (TX_CACHEMISSCOUNT + 1)
3887+#define TX_CACHEMISSTEXELCOUNT (TX_CACHEHITTEXELCOUNT + 1)
3888+
3889+#define PE_KILLEDBYCOLOR 1
3890+#define PE_KILLEDBYDEPTH (PE_KILLEDBYCOLOR + 1)
3891+#define PE_DRAWNBYCOLOR (PE_KILLEDBYDEPTH + 1)
3892+#define PE_DRAWNBYDEPTH (PE_DRAWNBYCOLOR + 1)
3893+
3894+#define MC_READREQ8BPIPE 1
3895+#define MC_READREQ8BIP (MC_READREQ8BPIPE + 1)
3896+#define MC_WRITEREQ8BPIPE (MC_READREQ8BIP + 1)
3897+
3898+#define AXI_READREQSTALLED 1
3899+#define AXI_WRITEREQSTALLED (AXI_READREQSTALLED + 1)
3900+#define AXI_WRITEDATASTALLED (AXI_WRITEREQSTALLED + 1)
3901+
3902+#define PVS_INSTRCOUNT 1
3903+#define PVS_ALUINSTRCOUNT (PVS_INSTRCOUNT + 1)
3904+#define PVS_TEXINSTRCOUNT (PVS_ALUINSTRCOUNT + 1)
3905+#define PVS_ATTRIBCOUNT (PVS_TEXINSTRCOUNT + 1)
3906+#define PVS_UNIFORMCOUNT (PVS_ATTRIBCOUNT + 1)
3907+#define PVS_FUNCTIONCOUNT (PVS_UNIFORMCOUNT + 1)
3908+#define PVS_SOURCE (PVS_FUNCTIONCOUNT + 1)
3909+
3910+#define PPS_INSTRCOUNT 1
3911+#define PPS_ALUINSTRCOUNT (PPS_INSTRCOUNT + 1)
3912+#define PPS_TEXINSTRCOUNT (PPS_ALUINSTRCOUNT + 1)
3913+#define PPS_ATTRIBCOUNT (PPS_TEXINSTRCOUNT + 1)
3914+#define PPS_UNIFORMCOUNT (PPS_ATTRIBCOUNT + 1)
3915+#define PPS_FUNCTIONCOUNT (PPS_UNIFORMCOUNT + 1)
3916+#define PPS_SOURCE (PPS_FUNCTIONCOUNT + 1)
3917 /* End of MISC Counter IDs. */
3918
3919 #ifdef gcdNEW_PROFILER_FILE
3920@@ -578,8 +184,8 @@ extern "C" {
3921 #define VPG_ES11_TIME 0x170000
3922 #define VPG_ES20_TIME 0x180000
3923 #define VPG_FRAME 0x190000
3924-#define VPG_ES11_DRAW 0x200000
3925-#define VPG_ES20_DRAW 0x210000
3926+#define VPG_ES11_DRAW 0x200000
3927+#define VPG_ES20_DRAW 0x210000
3928 #define VPG_END 0xff0000
3929
3930 /* Info. */
3931@@ -592,7 +198,7 @@ extern "C" {
3932 #define VPC_INFOSCREENSIZE (VPC_INFODRIVERMODE + 1)
3933
3934 /* Counter Constants. */
3935-#define VPC_ELAPSETIME (VPG_TIME + 1)
3936+#define VPC_ELAPSETIME (VPG_TIME + 1)
3937 #define VPC_CPUTIME (VPC_ELAPSETIME + 1)
3938
3939 #define VPC_MEMMAXRES (VPG_MEM + 1)
3940@@ -600,404 +206,28 @@ extern "C" {
3941 #define VPC_MEMUNSHAREDDATA (VPC_MEMSHARED + 1)
3942 #define VPC_MEMUNSHAREDSTACK (VPC_MEMUNSHAREDDATA + 1)
3943
3944-/* OpenGL ES11 Counters. */
3945-#define VPC_ES11ACTIVETEXTURE (VPG_ES11 + ES11_ACTIVETEXTURE)
3946-#define VPC_ES11ALPHAFUNC (VPG_ES11 + ES11_ALPHAFUNC)
3947-#define VPC_ES11ALPHAFUNCX (VPG_ES11 + ES11_ALPHAFUNCX)
3948-#define VPC_ES11BINDBUFFER (VPG_ES11 + ES11_BINDBUFFER)
3949-#define VPC_ES11BINDTEXTURE (VPG_ES11 + ES11_BINDTEXTURE)
3950-#define VPC_ES11BLENDFUNC (VPG_ES11 + ES11_BLENDFUNC)
3951-#define VPC_ES11BUFFERDATA (VPG_ES11 + ES11_BUFFERDATA)
3952-#define VPC_ES11BUFFERSUBDATA (VPG_ES11 + ES11_BUFFERSUBDATA)
3953-#define VPC_ES11CLEAR (VPG_ES11 + ES11_CLEAR)
3954-#define VPC_ES11CLEARCOLOR (VPG_ES11 + ES11_CLEARCOLOR)
3955-#define VPC_ES11CLEARCOLORX (VPG_ES11 + ES11_CLEARCOLORX)
3956-#define VPC_ES11CLEARDEPTHF (VPG_ES11 + ES11_CLEARDEPTHF)
3957-#define VPC_ES11CLEARDEPTHX (VPG_ES11 + ES11_CLEARDEPTHX)
3958-#define VPC_ES11CLEARSTENCIL (VPG_ES11 + ES11_CLEARSTENCIL)
3959-#define VPC_ES11CLIENTACTIVETEXTURE (VPG_ES11 + ES11_CLIENTACTIVETEXTURE)
3960-#define VPC_ES11CLIPPLANEF (VPG_ES11 + ES11_CLIPPLANEF)
3961-#define VPC_ES11CLIPPLANEX (VPG_ES11 + ES11_CLIPPLANEX)
3962-#define VPC_ES11COLOR4F (VPG_ES11 + ES11_COLOR4F)
3963-#define VPC_ES11COLOR4UB (VPG_ES11 + ES11_COLOR4UB)
3964-#define VPC_ES11COLOR4X (VPG_ES11 + ES11_COLOR4X)
3965-#define VPC_ES11COLORMASK (VPG_ES11 + ES11_COLORMASK)
3966-#define VPC_ES11COLORPOINTER (VPG_ES11 + ES11_COLORPOINTER)
3967-#define VPC_ES11COMPRESSEDTEXIMAGE2D (VPG_ES11 + ES11_COMPRESSEDTEXIMAGE2D)
3968-#define VPC_ES11COMPRESSEDTEXSUBIMAGE2D (VPG_ES11 + ES11_COMPRESSEDTEXSUBIMAGE2D)
3969-#define VPC_ES11COPYTEXIMAGE2D (VPG_ES11 + ES11_COPYTEXIMAGE2D)
3970-#define VPC_ES11COPYTEXSUBIMAGE2D (VPG_ES11 + ES11_COPYTEXSUBIMAGE2D)
3971-#define VPC_ES11CULLFACE (VPG_ES11 + ES11_CULLFACE)
3972-#define VPC_ES11DELETEBUFFERS (VPG_ES11 + ES11_DELETEBUFFERS)
3973-#define VPC_ES11DELETETEXTURES (VPG_ES11 + ES11_DELETETEXTURES)
3974-#define VPC_ES11DEPTHFUNC (VPG_ES11 + ES11_DEPTHFUNC)
3975-#define VPC_ES11DEPTHMASK (VPG_ES11 + ES11_DEPTHMASK)
3976-#define VPC_ES11DEPTHRANGEF (VPG_ES11 + ES11_DEPTHRANGEF)
3977-#define VPC_ES11DEPTHRANGEX (VPG_ES11 + ES11_DEPTHRANGEX)
3978-#define VPC_ES11DISABLE (VPG_ES11 + ES11_DISABLE)
3979-#define VPC_ES11DISABLECLIENTSTATE (VPG_ES11 + ES11_DISABLECLIENTSTATE)
3980-#define VPC_ES11DRAWARRAYS (VPG_ES11 + ES11_DRAWARRAYS)
3981-#define VPC_ES11DRAWELEMENTS (VPG_ES11 + ES11_DRAWELEMENTS)
3982-#define VPC_ES11ENABLE (VPG_ES11 + ES11_ENABLE)
3983-#define VPC_ES11ENABLECLIENTSTATE (VPG_ES11 + ES11_ENABLECLIENTSTATE)
3984-#define VPC_ES11FINISH (VPG_ES11 + ES11_FINISH)
3985-#define VPC_ES11FLUSH (VPG_ES11 + ES11_FLUSH)
3986-#define VPC_ES11FOGF (VPG_ES11 + ES11_FOGF)
3987-#define VPC_ES11FOGFV (VPG_ES11 + ES11_FOGFV)
3988-#define VPC_ES11FOGX (VPG_ES11 + ES11_FOGX)
3989-#define VPC_ES11FOGXV (VPG_ES11 + ES11_FOGXV)
3990-#define VPC_ES11FRONTFACE (VPG_ES11 + ES11_FRONTFACE)
3991-#define VPC_ES11FRUSTUMF (VPG_ES11 + ES11_FRUSTUMF)
3992-#define VPC_ES11FRUSTUMX (VPG_ES11 + ES11_FRUSTUMX)
3993-#define VPC_ES11GENBUFFERS (VPG_ES11 + ES11_GENBUFFERS)
3994-#define VPC_ES11GENTEXTURES (VPG_ES11 + ES11_GENTEXTURES)
3995-#define VPC_ES11GETBOOLEANV (VPG_ES11 + ES11_GETBOOLEANV)
3996-#define VPC_ES11GETBUFFERPARAMETERIV (VPG_ES11 + ES11_GETBUFFERPARAMETERIV)
3997-#define VPC_ES11GETCLIPPLANEF (VPG_ES11 + ES11_GETCLIPPLANEF)
3998-#define VPC_ES11GETCLIPPLANEX (VPG_ES11 + ES11_GETCLIPPLANEX)
3999-#define VPC_ES11GETERROR (VPG_ES11 + ES11_GETERROR)
4000-#define VPC_ES11GETFIXEDV (VPG_ES11 + ES11_GETFIXEDV)
4001-#define VPC_ES11GETFLOATV (VPG_ES11 + ES11_GETFLOATV)
4002-#define VPC_ES11GETINTEGERV (VPG_ES11 + ES11_GETINTEGERV)
4003-#define VPC_ES11GETLIGHTFV (VPG_ES11 + ES11_GETLIGHTFV)
4004-#define VPC_ES11GETLIGHTXV (VPG_ES11 + ES11_GETLIGHTXV)
4005-#define VPC_ES11GETMATERIALFV (VPG_ES11 + ES11_GETMATERIALFV)
4006-#define VPC_ES11GETMATERIALXV (VPG_ES11 + ES11_GETMATERIALXV)
4007-#define VPC_ES11GETPOINTERV (VPG_ES11 + ES11_GETPOINTERV)
4008-#define VPC_ES11GETSTRING (VPG_ES11 + ES11_GETSTRING)
4009-#define VPC_ES11GETTEXENVFV (VPG_ES11 + ES11_GETTEXENVFV)
4010-#define VPC_ES11GETTEXENVIV (VPG_ES11 + ES11_GETTEXENVIV)
4011-#define VPC_ES11GETTEXENVXV (VPG_ES11 + ES11_GETTEXENVXV)
4012-#define VPC_ES11GETTEXPARAMETERFV (VPG_ES11 + ES11_GETTEXPARAMETERFV)
4013-#define VPC_ES11GETTEXPARAMETERIV (VPG_ES11 + ES11_GETTEXPARAMETERIV)
4014-#define VPC_ES11GETTEXPARAMETERXV (VPG_ES11 + ES11_GETTEXPARAMETERXV)
4015-#define VPC_ES11HINT (VPG_ES11 + ES11_HINT)
4016-#define VPC_ES11ISBUFFER (VPG_ES11 + ES11_ISBUFFER)
4017-#define VPC_ES11ISENABLED (VPG_ES11 + ES11_ISENABLED)
4018-#define VPC_ES11ISTEXTURE (VPG_ES11 + ES11_ISTEXTURE)
4019-#define VPC_ES11LIGHTF (VPG_ES11 + ES11_LIGHTF)
4020-#define VPC_ES11LIGHTFV (VPG_ES11 + ES11_LIGHTFV)
4021-#define VPC_ES11LIGHTMODELF (VPG_ES11 + ES11_LIGHTMODELF)
4022-#define VPC_ES11LIGHTMODELFV (VPG_ES11 + ES11_LIGHTMODELFV)
4023-#define VPC_ES11LIGHTMODELX (VPG_ES11 + ES11_LIGHTMODELX)
4024-#define VPC_ES11LIGHTMODELXV (VPG_ES11 + ES11_LIGHTMODELXV)
4025-#define VPC_ES11LIGHTX (VPG_ES11 + ES11_LIGHTX)
4026-#define VPC_ES11LIGHTXV (VPG_ES11 + ES11_LIGHTXV)
4027-#define VPC_ES11LINEWIDTH (VPG_ES11 + ES11_LINEWIDTH)
4028-#define VPC_ES11LINEWIDTHX (VPG_ES11 + ES11_LINEWIDTHX)
4029-#define VPC_ES11LOADIDENTITY (VPG_ES11 + ES11_LOADIDENTITY)
4030-#define VPC_ES11LOADMATRIXF (VPG_ES11 + ES11_LOADMATRIXF)
4031-#define VPC_ES11LOADMATRIXX (VPG_ES11 + ES11_LOADMATRIXX)
4032-#define VPC_ES11LOGICOP (VPG_ES11 + ES11_LOGICOP)
4033-#define VPC_ES11MATERIALF (VPG_ES11 + ES11_MATERIALF)
4034-#define VPC_ES11MATERIALFV (VPG_ES11 + ES11_MATERIALFV)
4035-#define VPC_ES11MATERIALX (VPG_ES11 + ES11_MATERIALX)
4036-#define VPC_ES11MATERIALXV (VPG_ES11 + ES11_MATERIALXV)
4037-#define VPC_ES11MATRIXMODE (VPG_ES11 + ES11_MATRIXMODE)
4038-#define VPC_ES11MULTITEXCOORD4F (VPG_ES11 + ES11_MULTITEXCOORD4F)
4039-#define VPC_ES11MULTITEXCOORD4X (VPG_ES11 + ES11_MULTITEXCOORD4X)
4040-#define VPC_ES11MULTMATRIXF (VPG_ES11 + ES11_MULTMATRIXF)
4041-#define VPC_ES11MULTMATRIXX (VPG_ES11 + ES11_MULTMATRIXX)
4042-#define VPC_ES11NORMAL3F (VPG_ES11 + ES11_NORMAL3F)
4043-#define VPC_ES11NORMAL3X (VPG_ES11 + ES11_NORMAL3X)
4044-#define VPC_ES11NORMALPOINTER (VPG_ES11 + ES11_NORMALPOINTER)
4045-#define VPC_ES11ORTHOF (VPG_ES11 + ES11_ORTHOF)
4046-#define VPC_ES11ORTHOX (VPG_ES11 + ES11_ORTHOX)
4047-#define VPC_ES11PIXELSTOREI (VPG_ES11 + ES11_PIXELSTOREI)
4048-#define VPC_ES11POINTPARAMETERF (VPG_ES11 + ES11_POINTPARAMETERF)
4049-#define VPC_ES11POINTPARAMETERFV (VPG_ES11 + ES11_POINTPARAMETERFV)
4050-#define VPC_ES11POINTPARAMETERX (VPG_ES11 + ES11_POINTPARAMETERX)
4051-#define VPC_ES11POINTPARAMETERXV (VPG_ES11 + ES11_POINTPARAMETERXV)
4052-#define VPC_ES11POINTSIZE (VPG_ES11 + ES11_POINTSIZE)
4053-#define VPC_ES11POINTSIZEX (VPG_ES11 + ES11_POINTSIZEX)
4054-#define VPC_ES11POLYGONOFFSET (VPG_ES11 + ES11_POLYGONOFFSET)
4055-#define VPC_ES11POLYGONOFFSETX (VPG_ES11 + ES11_POLYGONOFFSETX)
4056-#define VPC_ES11POPMATRIX (VPG_ES11 + ES11_POPMATRIX)
4057-#define VPC_ES11PUSHMATRIX (VPG_ES11 + ES11_PUSHMATRIX)
4058-#define VPC_ES11READPIXELS (VPG_ES11 + ES11_READPIXELS)
4059-#define VPC_ES11ROTATEF (VPG_ES11 + ES11_ROTATEF)
4060-#define VPC_ES11ROTATEX (VPG_ES11 + ES11_ROTATEX)
4061-#define VPC_ES11SAMPLECOVERAGE (VPG_ES11 + ES11_SAMPLECOVERAGE)
4062-#define VPC_ES11SAMPLECOVERAGEX (VPG_ES11 + ES11_SAMPLECOVERAGEX)
4063-#define VPC_ES11SCALEF (VPG_ES11 + ES11_SCALEF)
4064-#define VPC_ES11SCALEX (VPG_ES11 + ES11_SCALEX)
4065-#define VPC_ES11SCISSOR (VPG_ES11 + ES11_SCISSOR)
4066-#define VPC_ES11SHADEMODEL (VPG_ES11 + ES11_SHADEMODEL)
4067-#define VPC_ES11STENCILFUNC (VPG_ES11 + ES11_STENCILFUNC)
4068-#define VPC_ES11STENCILMASK (VPG_ES11 + ES11_STENCILMASK)
4069-#define VPC_ES11STENCILOP (VPG_ES11 + ES11_STENCILOP)
4070-#define VPC_ES11TEXCOORDPOINTER (VPG_ES11 + ES11_TEXCOORDPOINTER)
4071-#define VPC_ES11TEXENVF (VPG_ES11 + ES11_TEXENVF)
4072-#define VPC_ES11TEXENVFV (VPG_ES11 + ES11_TEXENVFV)
4073-#define VPC_ES11TEXENVI (VPG_ES11 + ES11_TEXENVI)
4074-#define VPC_ES11TEXENVIV (VPG_ES11 + ES11_TEXENVIV)
4075-#define VPC_ES11TEXENVX (VPG_ES11 + ES11_TEXENVX)
4076-#define VPC_ES11TEXENVXV (VPG_ES11 + ES11_TEXENVXV)
4077-#define VPC_ES11TEXIMAGE2D (VPG_ES11 + ES11_TEXIMAGE2D)
4078-#define VPC_ES11TEXPARAMETERF (VPG_ES11 + ES11_TEXPARAMETERF)
4079-#define VPC_ES11TEXPARAMETERFV (VPG_ES11 + ES11_TEXPARAMETERFV)
4080-#define VPC_ES11TEXPARAMETERI (VPG_ES11 + ES11_TEXPARAMETERI)
4081-#define VPC_ES11TEXPARAMETERIV (VPG_ES11 + ES11_TEXPARAMETERIV)
4082-#define VPC_ES11TEXPARAMETERX (VPG_ES11 + ES11_TEXPARAMETERX)
4083-#define VPC_ES11TEXPARAMETERXV (VPG_ES11 + ES11_TEXPARAMETERXV)
4084-#define VPC_ES11TEXSUBIMAGE2D (VPG_ES11 + ES11_TEXSUBIMAGE2D)
4085-#define VPC_ES11TRANSLATEF (VPG_ES11 + ES11_TRANSLATEF)
4086-#define VPC_ES11TRANSLATEX (VPG_ES11 + ES11_TRANSLATEX)
4087-#define VPC_ES11VERTEXPOINTER (VPG_ES11 + ES11_VERTEXPOINTER)
4088-#define VPC_ES11VIEWPORT (VPG_ES11 + ES11_VIEWPORT)
4089 /* OpenGL ES11 Statics Counter IDs. */
4090-#define VPC_ES11CALLS (VPG_ES11 + ES11_CALLS)
4091-#define VPC_ES11DRAWCALLS (VPG_ES11 + ES11_DRAWCALLS)
4092-#define VPC_ES11STATECHANGECALLS (VPG_ES11 + ES11_STATECHANGECALLS)
4093-#define VPC_ES11POINTCOUNT (VPG_ES11 + ES11_POINTCOUNT)
4094-#define VPC_ES11LINECOUNT (VPG_ES11 + ES11_LINECOUNT)
4095-#define VPC_ES11TRIANGLECOUNT (VPG_ES11 + ES11_TRIANGLECOUNT)
4096-
4097-/* OpenGLES 2.x */
4098-#define VPC_ES20ACTIVETEXTURE (VPG_ES20 + ES20_ACTIVETEXTURE)
4099-#define VPC_ES20ATTACHSHADER (VPG_ES20 + ES20_ATTACHSHADER)
4100-#define VPC_ES20BINDATTRIBLOCATION (VPG_ES20 + ES20_BINDATTRIBLOCATION)
4101-#define VPC_ES20BINDBUFFER (VPG_ES20 + ES20_BINDBUFFER)
4102-#define VPC_ES20BINDFRAMEBUFFER (VPG_ES20 + ES20_BINDFRAMEBUFFER)
4103-#define VPC_ES20BINDRENDERBUFFER (VPG_ES20 + ES20_BINDRENDERBUFFER)
4104-#define VPC_ES20BINDTEXTURE (VPG_ES20 + ES20_BINDTEXTURE)
4105-#define VPC_ES20BLENDCOLOR (VPG_ES20 + ES20_BLENDCOLOR)
4106-#define VPC_ES20BLENDEQUATION (VPG_ES20 + ES20_BLENDEQUATION)
4107-#define VPC_ES20BLENDEQUATIONSEPARATE (VPG_ES20 + ES20_BLENDEQUATIONSEPARATE)
4108-#define VPC_ES20BLENDFUNC (VPG_ES20 + ES20_BLENDFUNC)
4109-#define VPC_ES20BLENDFUNCSEPARATE (VPG_ES20 + ES20_BLENDFUNCSEPARATE)
4110-#define VPC_ES20BUFFERDATA (VPG_ES20 + ES20_BUFFERDATA)
4111-#define VPC_ES20BUFFERSUBDATA (VPG_ES20 + ES20_BUFFERSUBDATA)
4112-#define VPC_ES20CHECKFRAMEBUFFERSTATUS (VPG_ES20 + ES20_CHECKFRAMEBUFFERSTATUS)
4113-#define VPC_ES20CLEAR (VPG_ES20 + ES20_CLEAR)
4114-#define VPC_ES20CLEARCOLOR (VPG_ES20 + ES20_CLEARCOLOR)
4115-#define VPC_ES20CLEARDEPTHF (VPG_ES20 + ES20_CLEARDEPTHF)
4116-#define VPC_ES20CLEARSTENCIL (VPG_ES20 + ES20_CLEARSTENCIL)
4117-#define VPC_ES20COLORMASK (VPG_ES20 + ES20_COLORMASK)
4118-#define VPC_ES20COMPILESHADER (VPG_ES20 + ES20_COMPILESHADER)
4119-#define VPC_ES20COMPRESSEDTEXIMAGE2D (VPG_ES20 + ES20_COMPRESSEDTEXIMAGE2D)
4120-#define VPC_ES20COMPRESSEDTEXSUBIMAGE2D (VPG_ES20 + ES20_COMPRESSEDTEXSUBIMAGE2D)
4121-#define VPC_ES20COPYTEXIMAGE2D (VPG_ES20 + ES20_COPYTEXIMAGE2D)
4122-#define VPC_ES20COPYTEXSUBIMAGE2D (VPG_ES20 + ES20_COPYTEXSUBIMAGE2D)
4123-#define VPC_ES20CREATEPROGRAM (VPG_ES20 + ES20_CREATEPROGRAM)
4124-#define VPC_ES20CREATESHADER (VPG_ES20 + ES20_CREATESHADER)
4125-#define VPC_ES20CULLFACE (VPG_ES20 + ES20_CULLFACE)
4126-#define VPC_ES20DELETEBUFFERS (VPG_ES20 + ES20_DELETEBUFFERS)
4127-#define VPC_ES20DELETEFRAMEBUFFERS (VPG_ES20 + ES20_DELETEFRAMEBUFFERS)
4128-#define VPC_ES20DELETEPROGRAM (VPG_ES20 + ES20_DELETEPROGRAM)
4129-#define VPC_ES20DELETERENDERBUFFERS (VPG_ES20 + ES20_DELETERENDERBUFFERS)
4130-#define VPC_ES20DELETESHADER (VPG_ES20 + ES20_DELETESHADER)
4131-#define VPC_ES20DELETETEXTURES (VPG_ES20 + ES20_DELETETEXTURES)
4132-#define VPC_ES20DEPTHFUNC (VPG_ES20 + ES20_DEPTHFUNC)
4133-#define VPC_ES20DEPTHMASK (VPG_ES20 + ES20_DEPTHMASK)
4134-#define VPC_ES20DEPTHRANGEF (VPG_ES20 + ES20_DEPTHRANGEF)
4135-#define VPC_ES20DETACHSHADER (VPG_ES20 + ES20_DETACHSHADER)
4136-#define VPC_ES20DISABLE (VPG_ES20 + ES20_DISABLE)
4137-#define VPC_ES20DISABLEVERTEXATTRIBARRAY (VPG_ES20 + ES20_DISABLEVERTEXATTRIBARRAY)
4138-#define VPC_ES20DRAWARRAYS (VPG_ES20 + ES20_DRAWARRAYS)
4139-#define VPC_ES20DRAWELEMENTS (VPG_ES20 + ES20_DRAWELEMENTS)
4140-#define VPC_ES20ENABLE (VPG_ES20 + ES20_ENABLE)
4141-#define VPC_ES20ENABLEVERTEXATTRIBARRAY (VPG_ES20 + ES20_ENABLEVERTEXATTRIBARRAY)
4142-#define VPC_ES20FINISH (VPG_ES20 + ES20_FINISH)
4143-#define VPC_ES20FLUSH (VPG_ES20 + ES20_FLUSH)
4144-#define VPC_ES20FRAMEBUFFERRENDERBUFFER (VPG_ES20 + ES20_FRAMEBUFFERRENDERBUFFER)
4145-#define VPC_ES20FRAMEBUFFERTEXTURE2D (VPG_ES20 + ES20_FRAMEBUFFERTEXTURE2D)
4146-#define VPC_ES20FRONTFACE (VPG_ES20 + ES20_FRONTFACE)
4147-#define VPC_ES20GENBUFFERS (VPG_ES20 + ES20_GENBUFFERS)
4148-#define VPC_ES20GENERATEMIPMAP (VPG_ES20 + ES20_GENERATEMIPMAP)
4149-#define VPC_ES20GENFRAMEBUFFERS (VPG_ES20 + ES20_GENFRAMEBUFFERS)
4150-#define VPC_ES20GENRENDERBUFFERS (VPG_ES20 + ES20_GENRENDERBUFFERS)
4151-#define VPC_ES20GENTEXTURES (VPG_ES20 + ES20_GENTEXTURES)
4152-#define VPC_ES20GETACTIVEATTRIB (VPG_ES20 + ES20_GETACTIVEATTRIB)
4153-#define VPC_ES20GETACTIVEUNIFORM (VPG_ES20 + ES20_GETACTIVEUNIFORM)
4154-#define VPC_ES20GETATTACHEDSHADERS (VPG_ES20 + ES20_GETATTACHEDSHADERS)
4155-#define VPC_ES20GETATTRIBLOCATION (VPG_ES20 + ES20_GETATTRIBLOCATION)
4156-#define VPC_ES20GETBOOLEANV (VPG_ES20 + ES20_GETBOOLEANV)
4157-#define VPC_ES20GETBUFFERPARAMETERIV (VPG_ES20 + ES20_GETBUFFERPARAMETERIV)
4158-#define VPC_ES20GETERROR (VPG_ES20 + ES20_GETERROR)
4159-#define VPC_ES20GETFLOATV (VPG_ES20 + ES20_GETFLOATV)
4160-#define VPC_ES20GETFRAMEBUFFERATTACHMENTPARAMETERIV (VPG_ES20 + ES20_GETFRAMEBUFFERATTACHMENTPARAMETERIV)
4161-#define VPC_ES20GETINTEGERV (VPG_ES20 + ES20_GETINTEGERV)
4162-#define VPC_ES20GETPROGRAMIV (VPG_ES20 + ES20_GETPROGRAMIV)
4163-#define VPC_ES20GETPROGRAMINFOLOG (VPG_ES20 + ES20_GETPROGRAMINFOLOG)
4164-#define VPC_ES20GETRENDERBUFFERPARAMETERIV (VPG_ES20 + ES20_GETRENDERBUFFERPARAMETERIV)
4165-#define VPC_ES20GETSHADERIV (VPG_ES20 + ES20_GETSHADERIV)
4166-#define VPC_ES20GETSHADERINFOLOG (VPG_ES20 + ES20_GETSHADERINFOLOG)
4167-#define VPC_ES20GETSHADERPRECISIONFORMAT (VPG_ES20 + ES20_GETSHADERPRECISIONFORMAT)
4168-#define VPC_ES20GETSHADERSOURCE (VPG_ES20 + ES20_GETSHADERSOURCE)
4169-#define VPC_ES20GETSTRING (VPG_ES20 + ES20_GETSTRING)
4170-#define VPC_ES20GETTEXPARAMETERFV (VPG_ES20 + ES20_GETTEXPARAMETERFV)
4171-#define VPC_ES20GETTEXPARAMETERIV (VPG_ES20 + ES20_GETTEXPARAMETERIV)
4172-#define VPC_ES20GETUNIFORMFV (VPG_ES20 + ES20_GETUNIFORMFV)
4173-#define VPC_ES20GETUNIFORMIV (VPG_ES20 + ES20_GETUNIFORMIV)
4174-#define VPC_ES20GETUNIFORMLOCATION (VPG_ES20 + ES20_GETUNIFORMLOCATION)
4175-#define VPC_ES20GETVERTEXATTRIBFV (VPG_ES20 + ES20_GETVERTEXATTRIBFV)
4176-#define VPC_ES20GETVERTEXATTRIBIV (VPG_ES20 + ES20_GETVERTEXATTRIBIV)
4177-#define VPC_ES20GETVERTEXATTRIBPOINTERV (VPG_ES20 + ES20_GETVERTEXATTRIBPOINTERV)
4178-#define VPC_ES20HINT (VPG_ES20 + ES20_HINT)
4179-#define VPC_ES20ISBUFFER (VPG_ES20 + ES20_ISBUFFER)
4180-#define VPC_ES20ISENABLED (VPG_ES20 + ES20_ISENABLED)
4181-#define VPC_ES20ISFRAMEBUFFER (VPG_ES20 + ES20_ISFRAMEBUFFER)
4182-#define VPC_ES20ISPROGRAM (VPG_ES20 + ES20_ISPROGRAM)
4183-#define VPC_ES20ISRENDERBUFFER (VPG_ES20 + ES20_ISRENDERBUFFER)
4184-#define VPC_ES20ISSHADER (VPG_ES20 + ES20_ISSHADER)
4185-#define VPC_ES20ISTEXTURE (VPG_ES20 + ES20_ISTEXTURE)
4186-#define VPC_ES20LINEWIDTH (VPG_ES20 + ES20_LINEWIDTH)
4187-#define VPC_ES20LINKPROGRAM (VPG_ES20 + ES20_LINKPROGRAM)
4188-#define VPC_ES20PIXELSTOREI (VPG_ES20 + ES20_PIXELSTOREI)
4189-#define VPC_ES20POLYGONOFFSET (VPG_ES20 + ES20_POLYGONOFFSET)
4190-#define VPC_ES20READPIXELS (VPG_ES20 + ES20_READPIXELS)
4191-#define VPC_ES20RELEASESHADERCOMPILER (VPG_ES20 + ES20_RELEASESHADERCOMPILER)
4192-#define VPC_ES20RENDERBUFFERSTORAGE (VPG_ES20 + ES20_RENDERBUFFERSTORAGE)
4193-#define VPC_ES20SAMPLECOVERAGE (VPG_ES20 + ES20_SAMPLECOVERAGE)
4194-#define VPC_ES20SCISSOR (VPG_ES20 + ES20_SCISSOR)
4195-#define VPC_ES20SHADERBINARY (VPG_ES20 + ES20_SHADERBINARY)
4196-#define VPC_ES20SHADERSOURCE (VPG_ES20 + ES20_SHADERSOURCE)
4197-#define VPC_ES20STENCILFUNC (VPG_ES20 + ES20_STENCILFUNC)
4198-#define VPC_ES20STENCILFUNCSEPARATE (VPG_ES20 + ES20_STENCILFUNCSEPARATE)
4199-#define VPC_ES20STENCILMASK (VPG_ES20 + ES20_STENCILMASK)
4200-#define VPC_ES20STENCILMASKSEPARATE (VPG_ES20 + ES20_STENCILMASKSEPARATE)
4201-#define VPC_ES20STENCILOP (VPG_ES20 + ES20_STENCILOP)
4202-#define VPC_ES20STENCILOPSEPARATE (VPG_ES20 + ES20_STENCILOPSEPARATE)
4203-#define VPC_ES20TEXIMAGE2D (VPG_ES20 + ES20_TEXIMAGE2D)
4204-#define VPC_ES20TEXPARAMETERF (VPG_ES20 + ES20_TEXPARAMETERF)
4205-#define VPC_ES20TEXPARAMETERFV (VPG_ES20 + ES20_TEXPARAMETERFV)
4206-#define VPC_ES20TEXPARAMETERI (VPG_ES20 + ES20_TEXPARAMETERI)
4207-#define VPC_ES20TEXPARAMETERIV (VPG_ES20 + ES20_TEXPARAMETERIV)
4208-#define VPC_ES20TEXSUBIMAGE2D (VPG_ES20 + ES20_TEXSUBIMAGE2D)
4209-#define VPC_ES20UNIFORM1F (VPG_ES20 + ES20_UNIFORM1F)
4210-#define VPC_ES20UNIFORM1FV (VPG_ES20 + ES20_UNIFORM1FV)
4211-#define VPC_ES20UNIFORM1I (VPG_ES20 + ES20_UNIFORM1I)
4212-#define VPC_ES20UNIFORM1IV (VPG_ES20 + ES20_UNIFORM1IV)
4213-#define VPC_ES20UNIFORM2F (VPG_ES20 + ES20_UNIFORM2F)
4214-#define VPC_ES20UNIFORM2FV (VPG_ES20 + ES20_UNIFORM2FV)
4215-#define VPC_ES20UNIFORM2I (VPG_ES20 + ES20_UNIFORM2I)
4216-#define VPC_ES20UNIFORM2IV (VPG_ES20 + ES20_UNIFORM2IV)
4217-#define VPC_ES20UNIFORM3F (VPG_ES20 + ES20_UNIFORM3F)
4218-#define VPC_ES20UNIFORM3FV (VPG_ES20 + ES20_UNIFORM3FV)
4219-#define VPC_ES20UNIFORM3I (VPG_ES20 + ES20_UNIFORM3I)
4220-#define VPC_ES20UNIFORM3IV (VPG_ES20 + ES20_UNIFORM3IV)
4221-#define VPC_ES20UNIFORM4F (VPG_ES20 + ES20_UNIFORM4F)
4222-#define VPC_ES20UNIFORM4FV (VPG_ES20 + ES20_UNIFORM4FV)
4223-#define VPC_ES20UNIFORM4I (VPG_ES20 + ES20_UNIFORM4I)
4224-#define VPC_ES20UNIFORM4IV (VPG_ES20 + ES20_UNIFORM4IV)
4225-#define VPC_ES20UNIFORMMATRIX2FV (VPG_ES20 + ES20_UNIFORMMATRIX2FV)
4226-#define VPC_ES20UNIFORMMATRIX3FV (VPG_ES20 + ES20_UNIFORMMATRIX3FV)
4227-#define VPC_ES20UNIFORMMATRIX4FV (VPG_ES20 + ES20_UNIFORMMATRIX4FV)
4228-#define VPC_ES20USEPROGRAM (VPG_ES20 + ES20_USEPROGRAM)
4229-#define VPC_ES20VALIDATEPROGRAM (VPG_ES20 + ES20_VALIDATEPROGRAM)
4230-#define VPC_ES20VERTEXATTRIB1F (VPG_ES20 + ES20_VERTEXATTRIB1F)
4231-#define VPC_ES20VERTEXATTRIB1FV (VPG_ES20 + ES20_VERTEXATTRIB1FV)
4232-#define VPC_ES20VERTEXATTRIB2F (VPG_ES20 + ES20_VERTEXATTRIB2F)
4233-#define VPC_ES20VERTEXATTRIB2FV (VPG_ES20 + ES20_VERTEXATTRIB2FV)
4234-#define VPC_ES20VERTEXATTRIB3F (VPG_ES20 + ES20_VERTEXATTRIB3F)
4235-#define VPC_ES20VERTEXATTRIB3FV (VPG_ES20 + ES20_VERTEXATTRIB3FV)
4236-#define VPC_ES20VERTEXATTRIB4F (VPG_ES20 + ES20_VERTEXATTRIB4F)
4237-#define VPC_ES20VERTEXATTRIB4FV (VPG_ES20 + ES20_VERTEXATTRIB4FV)
4238-#define VPC_ES20VERTEXATTRIBPOINTER (VPG_ES20 + ES20_VERTEXATTRIBPOINTER)
4239-#define VPC_ES20VIEWPORT (VPG_ES20 + ES20_VIEWPORT)
4240+#define VPC_ES11CALLS (VPG_ES11 + ES11_CALLS)
4241+#define VPC_ES11DRAWCALLS (VPG_ES11 + ES11_DRAWCALLS)
4242+#define VPC_ES11STATECHANGECALLS (VPG_ES11 + ES11_STATECHANGECALLS)
4243+#define VPC_ES11POINTCOUNT (VPG_ES11 + ES11_POINTCOUNT)
4244+#define VPC_ES11LINECOUNT (VPG_ES11 + ES11_LINECOUNT)
4245+#define VPC_ES11TRIANGLECOUNT (VPG_ES11 + ES11_TRIANGLECOUNT)
4246+
4247 /* OpenGL ES20 Statistics Counter IDs. */
4248-#define VPC_ES20CALLS (VPG_ES20 + ES20_CALLS)
4249-#define VPC_ES20DRAWCALLS (VPG_ES20 + ES20_DRAWCALLS)
4250-#define VPC_ES20STATECHANGECALLS (VPG_ES20 + ES20_STATECHANGECALLS)
4251-#define VPC_ES20POINTCOUNT (VPG_ES20 + ES20_POINTCOUNT)
4252-#define VPC_ES20LINECOUNT (VPG_ES20 + ES20_LINECOUNT)
4253-#define VPC_ES20TRIANGLECOUNT (VPG_ES20 + ES20_TRIANGLECOUNT)
4254-
4255-/* VG11 Counters. */
4256-#define VPC_VG11APPENDPATH (VPG_VG11 + VG11_APPENDPATH)
4257-#define VPC_VG11APPENDPATHDATA (VPG_VG11 + VG11_APPENDPATHDATA)
4258-#define VPC_VG11CHILDIMAGE (VPG_VG11 + VG11_CHILDIMAGE)
4259-#define VPC_VG11CLEAR (VPG_VG11 + VG11_CLEAR)
4260-#define VPC_VG11CLEARGLYPH (VPG_VG11 + VG11_CLEARGLYPH)
4261-#define VPC_VG11CLEARIMAGE (VPG_VG11 + VG11_CLEARIMAGE)
4262-#define VPC_VG11CLEARPATH (VPG_VG11 + VG11_CLEARPATH)
4263-#define VPC_VG11COLORMATRIX (VPG_VG11 + VG11_COLORMATRIX)
4264-#define VPC_VG11CONVOLVE (VPG_VG11 + VG11_CONVOLVE)
4265-#define VPC_VG11COPYIMAGE (VPG_VG11 + VG11_COPYIMAGE)
4266-#define VPC_VG11COPYMASK (VPG_VG11 + VG11_COPYMASK)
4267-#define VPC_VG11COPYPIXELS (VPG_VG11 + VG11_COPYPIXELS)
4268-#define VPC_VG11CREATEFONT (VPG_VG11 + VG11_CREATEFONT)
4269-#define VPC_VG11CREATEIMAGE (VPG_VG11 + VG11_CREATEIMAGE)
4270-#define VPC_VG11CREATEMASKLAYER (VPG_VG11 + VG11_CREATEMASKLAYER)
4271-#define VPC_VG11CREATEPAINT (VPG_VG11 + VG11_CREATEPAINT)
4272-#define VPC_VG11CREATEPATH (VPG_VG11 + VG11_CREATEPATH)
4273-#define VPC_VG11DESTROYFONT (VPG_VG11 + VG11_DESTROYFONT)
4274-#define VPC_VG11DESTROYIMAGE (VPG_VG11 + VG11_DESTROYIMAGE)
4275-#define VPC_VG11DESTROYMASKLAYER (VPG_VG11 + VG11_DESTROYMASKLAYER)
4276-#define VPC_VG11DESTROYPAINT (VPG_VG11 + VG11_DESTROYPAINT)
4277-#define VPC_VG11DESTROYPATH (VPG_VG11 + VG11_DESTROYPATH)
4278-#define VPC_VG11DRAWGLYPH (VPG_VG11 + VG11_DRAWGLYPH)
4279-#define VPC_VG11DRAWGLYPHS (VPG_VG11 + VG11_DRAWGLYPHS)
4280-#define VPC_VG11DRAWIMAGE (VPG_VG11 + VG11_DRAWIMAGE)
4281-#define VPC_VG11DRAWPATH (VPG_VG11 + VG11_DRAWPATH)
4282-#define VPC_VG11FILLMASKLAYER (VPG_VG11 + VG11_FILLMASKLAYER)
4283-#define VPC_VG11FINISH (VPG_VG11 + VG11_FINISH)
4284-#define VPC_VG11FLUSH (VPG_VG11 + VG11_FLUSH)
4285-#define VPC_VG11GAUSSIANBLUR (VPG_VG11 + VG11_GAUSSIANBLUR)
4286-#define VPC_VG11GETCOLOR (VPG_VG11 + VG11_GETCOLOR)
4287-#define VPC_VG11GETERROR (VPG_VG11 + VG11_GETERROR)
4288-#define VPC_VG11GETF (VPG_VG11 + VG11_GETF)
4289-#define VPC_VG11GETFV (VPG_VG11 + VG11_GETFV)
4290-#define VPC_VG11GETI (VPG_VG11 + VG11_GETI)
4291-#define VPC_VG11GETIMAGESUBDATA (VPG_VG11 + VG11_GETIMAGESUBDATA)
4292-#define VPC_VG11GETIV (VPG_VG11 + VG11_GETIV)
4293-#define VPC_VG11GETMATRIX (VPG_VG11 + VG11_GETMATRIX)
4294-#define VPC_VG11GETPAINT (VPG_VG11 + VG11_GETPAINT)
4295-#define VPC_VG11GETPARAMETERF (VPG_VG11 + VG11_GETPARAMETERF)
4296-#define VPC_VG11GETPARAMETERFV (VPG_VG11 + VG11_GETPARAMETERFV)
4297-#define VPC_VG11GETPARAMETERI (VPG_VG11 + VG11_GETPARAMETERI)
4298-#define VPC_VG11GETPARAMETERIV (VPG_VG11 + VG11_GETPARAMETERIV)
4299-#define VPC_VG11GETPARAMETERVECTORSIZE (VPG_VG11 + VG11_GETPARAMETERVECTORSIZE)
4300-#define VPC_VG11GETPARENT (VPG_VG11 + VG11_GETPARENT)
4301-#define VPC_VG11GETPATHCAPABILITIES (VPG_VG11 + VG11_GETPATHCAPABILITIES)
4302-#define VPC_VG11GETPIXELS (VPG_VG11 + VG11_GETPIXELS)
4303-#define VPC_VG11GETSTRING (VPG_VG11 + VG11_GETSTRING)
4304-#define VPC_VG11GETVECTORSIZE (VPG_VG11 + VG11_GETVECTORSIZE)
4305-#define VPC_VG11HARDWAREQUERY (VPG_VG11 + VG11_HARDWAREQUERY)
4306-#define VPC_VG11IMAGESUBDATA (VPG_VG11 + VG11_IMAGESUBDATA)
4307-#define VPC_VG11INTERPOLATEPATH (VPG_VG11 + VG11_INTERPOLATEPATH)
4308-#define VPC_VG11LOADIDENTITY (VPG_VG11 + VG11_LOADIDENTITY)
4309-#define VPC_VG11LOADMATRIX (VPG_VG11 + VG11_LOADMATRIX)
4310-#define VPC_VG11LOOKUP (VPG_VG11 + VG11_LOOKUP)
4311-#define VPC_VG11LOOKUPSINGLE (VPG_VG11 + VG11_LOOKUPSINGLE)
4312-#define VPC_VG11MASK (VPG_VG11 + VG11_MASK)
4313-#define VPC_VG11MODIFYPATHCOORDS (VPG_VG11 + VG11_MODIFYPATHCOORDS)
4314-#define VPC_VG11MULTMATRIX (VPG_VG11 + VG11_MULTMATRIX)
4315-#define VPC_VG11PAINTPATTERN (VPG_VG11 + VG11_PAINTPATTERN)
4316-#define VPC_VG11PATHBOUNDS (VPG_VG11 + VG11_PATHBOUNDS)
4317-#define VPC_VG11PATHLENGTH (VPG_VG11 + VG11_PATHLENGTH)
4318-#define VPC_VG11PATHTRANSFORMEDBOUNDS (VPG_VG11 + VG11_PATHTRANSFORMEDBOUNDS)
4319-#define VPC_VG11POINTALONGPATH (VPG_VG11 + VG11_POINTALONGPATH)
4320-#define VPC_VG11READPIXELS (VPG_VG11 + VG11_READPIXELS)
4321-#define VPC_VG11REMOVEPATHCAPABILITIES (VPG_VG11 + VG11_REMOVEPATHCAPABILITIES)
4322-#define VPC_VG11RENDERTOMASK (VPG_VG11 + VG11_RENDERTOMASK)
4323-#define VPC_VG11ROTATE (VPG_VG11 + VG11_ROTATE)
4324-#define VPC_VG11SCALE (VPG_VG11 + VG11_SCALE)
4325-#define VPC_VG11SEPARABLECONVOLVE (VPG_VG11 + VG11_SEPARABLECONVOLVE)
4326-#define VPC_VG11SETCOLOR (VPG_VG11 + VG11_SETCOLOR)
4327-#define VPC_VG11SETF (VPG_VG11 + VG11_SETF)
4328-#define VPC_VG11SETFV (VPG_VG11 + VG11_SETFV)
4329-#define VPC_VG11SETGLYPHTOIMAGE (VPG_VG11 + VG11_SETGLYPHTOIMAGE)
4330-#define VPC_VG11SETGLYPHTOPATH (VPG_VG11 + VG11_SETGLYPHTOPATH)
4331-#define VPC_VG11SETI (VPG_VG11 + VG11_SETI)
4332-#define VPC_VG11SETIV (VPG_VG11 + VG11_SETIV)
4333-#define VPC_VG11SETPAINT (VPG_VG11 + VG11_SETPAINT)
4334-#define VPC_VG11SETPARAMETERF (VPG_VG11 + VG11_SETPARAMETERF)
4335-#define VPC_VG11SETPARAMETERFV (VPG_VG11 + VG11_SETPARAMETERFV)
4336-#define VPC_VG11SETPARAMETERI (VPG_VG11 + VG11_SETPARAMETERI)
4337-#define VPC_VG11SETPARAMETERIV (VPG_VG11 + VG11_SETPARAMETERIV)
4338-#define VPC_VG11SETPIXELS (VPG_VG11 + VG11_SETPIXELS)
4339-#define VPC_VG11SHEAR (VPG_VG11 + VG11_SHEAR)
4340-#define VPC_VG11TRANSFORMPATH (VPG_VG11 + VG11_TRANSFORMPATH)
4341-#define VPC_VG11TRANSLATE (VPG_VG11 + VG11_TRANSLATE)
4342-#define VPC_VG11WRITEPIXELS (VPG_VG11 + VG11_WRITEPIXELS)
4343+#define VPC_ES20CALLS (VPG_ES20 + ES20_CALLS)
4344+#define VPC_ES20DRAWCALLS (VPG_ES20 + ES20_DRAWCALLS)
4345+#define VPC_ES20STATECHANGECALLS (VPG_ES20 + ES20_STATECHANGECALLS)
4346+#define VPC_ES20POINTCOUNT (VPG_ES20 + ES20_POINTCOUNT)
4347+#define VPC_ES20LINECOUNT (VPG_ES20 + ES20_LINECOUNT)
4348+#define VPC_ES20TRIANGLECOUNT (VPG_ES20 + ES20_TRIANGLECOUNT)
4349+
4350 /* OpenVG Statistics Counter IDs. */
4351-#define VPC_VG11CALLS (VPG_VG11 + VG11_CALLS)
4352-#define VPC_VG11DRAWCALLS (VPG_VG11 + VG11_DRAWCALLS)
4353-#define VPC_VG11STATECHANGECALLS (VPG_VG11 + VG11_STATECHANGECALLS)
4354-#define VPC_VG11FILLCOUNT (VPG_VG11 + VG11_FILLCOUNT)
4355-#define VPC_VG11STROKECOUNT (VPG_VG11 + VG11_STROKECOUNT)
4356+#define VPC_VG11CALLS (VPG_VG11 + VG11_CALLS)
4357+#define VPC_VG11DRAWCALLS (VPG_VG11 + VG11_DRAWCALLS)
4358+#define VPC_VG11STATECHANGECALLS (VPG_VG11 + VG11_STATECHANGECALLS)
4359+#define VPC_VG11FILLCOUNT (VPG_VG11 + VG11_FILLCOUNT)
4360+#define VPC_VG11STROKECOUNT (VPG_VG11 + VG11_STROKECOUNT)
4361
4362 /* HAL Counters. */
4363 #define VPC_HALVERTBUFNEWBYTEALLOC (VPG_HAL + HAL_VERTBUFNEWBYTEALLOC)
4364@@ -1018,7 +248,7 @@ extern "C" {
4365 #define VPC_GPUREAD64BYTE (VPG_GPU + GPU_READ64BYTE)
4366 #define VPC_GPUWRITE64BYTE (VPG_GPU + GPU_WRITE64BYTE)
4367 #define VPC_GPUTOTALCYCLES (VPG_GPU + GPU_TOTALCYCLES)
4368-#define VPC_GPUIDLECYCLES (VPG_GPU + GPU_IDLECYCLES)
4369+#define VPC_GPUIDLECYCLES (VPG_GPU + GPU_IDLECYCLES)
4370
4371 /* HW: Shader Counters. */
4372 #define VPC_VSINSTCOUNT (VPG_VS + VS_INSTCOUNT)
4373@@ -1026,9 +256,9 @@ extern "C" {
4374 #define VPC_VSTEXLDINSTCOUNT (VPG_VS + VS_TEXLDINSTCOUNT)
4375 #define VPC_VSRENDEREDVERTCOUNT (VPG_VS + VS_RENDEREDVERTCOUNT)
4376 /* HW: PS Count. */
4377-#define VPC_PSINSTCOUNT (VPG_PS + PS_INSTCOUNT)
4378-#define VPC_PSBRANCHINSTCOUNT (VPG_PS + PS_BRANCHINSTCOUNT)
4379-#define VPC_PSTEXLDINSTCOUNT (VPG_PS + PS_TEXLDINSTCOUNT)
4380+#define VPC_PSINSTCOUNT (VPG_PS + PS_INSTCOUNT)
4381+#define VPC_PSBRANCHINSTCOUNT (VPG_PS + PS_BRANCHINSTCOUNT)
4382+#define VPC_PSTEXLDINSTCOUNT (VPG_PS + PS_TEXLDINSTCOUNT)
4383 #define VPC_PSRENDEREDPIXCOUNT (VPG_PS + PS_RENDEREDPIXCOUNT)
4384
4385
4386@@ -1071,7 +301,7 @@ extern "C" {
4387 #define VPC_PEDRAWNBYDEPTH (VPG_PE + PE_DRAWNBYDEPTH)
4388
4389 /* HW: MC Counters. */
4390-#define VPC_MCREADREQ8BPIPE (VPG_MC + MC_READREQ8BPIPE)
4391+#define VPC_MCREADREQ8BPIPE (VPG_MC + MC_READREQ8BPIPE)
4392 #define VPC_MCREADREQ8BIP (VPG_MC + MC_READREQ8BIP)
4393 #define VPC_MCWRITEREQ8BPIPE (VPG_MC + MC_WRITEREQ8BPIPE)
4394
4395@@ -1087,6 +317,7 @@ extern "C" {
4396 #define VPC_PVSATTRIBCOUNT (VPG_PVS + PVS_ATTRIBCOUNT)
4397 #define VPC_PVSUNIFORMCOUNT (VPG_PVS + PVS_UNIFORMCOUNT)
4398 #define VPC_PVSFUNCTIONCOUNT (VPG_PVS + PVS_FUNCTIONCOUNT)
4399+#define VPC_PVSSOURCE (VPG_PVS + PVS_SOURCE)
4400
4401 #define VPC_PPSINSTRCOUNT (VPG_PPS + PPS_INSTRCOUNT)
4402 #define VPC_PPSALUINSTRCOUNT (VPG_PPS + PPS_ALUINSTRCOUNT)
4403@@ -1094,7 +325,9 @@ extern "C" {
4404 #define VPC_PPSATTRIBCOUNT (VPG_PPS + PPS_ATTRIBCOUNT)
4405 #define VPC_PPSUNIFORMCOUNT (VPG_PPS + PPS_UNIFORMCOUNT)
4406 #define VPC_PPSFUNCTIONCOUNT (VPG_PPS + PPS_FUNCTIONCOUNT)
4407+#define VPC_PPSSOURCE (VPG_PPS + PPS_SOURCE)
4408
4409+#define VPC_PROGRAMHANDLE (VPG_PROG + 1)
4410
4411 #define VPG_ES20_DRAW_NO (VPG_ES20_DRAW + 1)
4412 #define VPG_ES11_DRAW_NO (VPG_ES11_DRAW + 1)
4413@@ -1118,8 +351,8 @@ typedef struct _gcsPROFILER_COUNTERS
4414
4415 /* HW vairable counters. */
4416 gctUINT32 gpuCyclesCounter;
4417- gctUINT32 gpuTotalCyclesCounter;
4418- gctUINT32 gpuIdleCyclesCounter;
4419+ gctUINT32 gpuTotalCyclesCounter;
4420+ gctUINT32 gpuIdleCyclesCounter;
4421 gctUINT32 gpuTotalRead64BytesPerFrame;
4422 gctUINT32 gpuTotalWrite64BytesPerFrame;
4423
4424@@ -1158,7 +391,7 @@ typedef struct _gcsPROFILER_COUNTERS
4425 gctUINT32 ra_total_primitive_count;
4426 gctUINT32 ra_pipe_cache_miss_counter;
4427 gctUINT32 ra_prefetch_cache_miss_counter;
4428- gctUINT32 ra_eez_culled_counter;
4429+ gctUINT32 ra_eez_culled_counter;
4430
4431 /* TX */
4432 gctUINT32 tx_total_bilinear_requests;
4433@@ -1190,7 +423,7 @@ typedef struct _gcsPROFILER
4434 gctBOOL enableHal;
4435 gctBOOL enableHW;
4436 gctBOOL enableSH;
4437- gctBOOL isSyncMode;
4438+ gctBOOL isSyncMode;
4439
4440 gctBOOL useSocket;
4441 gctINT sockFd;
4442@@ -1234,14 +467,17 @@ typedef struct _gcsPROFILER
4443 gctUINT32 redundantStateChangeCalls;
4444 #endif
4445
4446- gctUINT32 prevVSInstCount;
4447- gctUINT32 prevVSBranchInstCount;
4448- gctUINT32 prevVSTexInstCount;
4449- gctUINT32 prevVSVertexCount;
4450- gctUINT32 prevPSInstCount;
4451- gctUINT32 prevPSBranchInstCount;
4452- gctUINT32 prevPSTexInstCount;
4453- gctUINT32 prevPSPixelCount;
4454+ gctUINT32 prevVSInstCount;
4455+ gctUINT32 prevVSBranchInstCount;
4456+ gctUINT32 prevVSTexInstCount;
4457+ gctUINT32 prevVSVertexCount;
4458+ gctUINT32 prevPSInstCount;
4459+ gctUINT32 prevPSBranchInstCount;
4460+ gctUINT32 prevPSTexInstCount;
4461+ gctUINT32 prevPSPixelCount;
4462+
4463+ char* psSource;
4464+ char* vsSource;
4465
4466 }
4467 gcsPROFILER;
4468@@ -1315,6 +551,18 @@ gcoPROFILER_Count(
4469 IN gctINT Value
4470 );
4471
4472+gceSTATUS
4473+gcoPROFILER_ShaderSourceFS(
4474+ IN gcoHAL Hal,
4475+ IN char* source
4476+ );
4477+
4478+gceSTATUS
4479+gcoPROFILER_ShaderSourceVS(
4480+ IN gcoHAL Hal,
4481+ IN char* source
4482+ );
4483+
4484 /* Profile input vertex shader. */
4485 gceSTATUS
4486 gcoPROFILER_ShaderVS(
4487diff --git a/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_raster.h b/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_raster.h
4488index bc4171e..6e4d830 100644
4489--- a/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_raster.h
4490+++ b/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_raster.h
4491@@ -568,6 +568,23 @@ gco2D_MonoBlit(
4492 IN gceSURF_FORMAT DestFormat
4493 );
4494
4495+gceSTATUS
4496+gco2D_MonoBlitEx(
4497+ IN gco2D Engine,
4498+ IN gctPOINTER StreamBits,
4499+ IN gctINT32 StreamStride,
4500+ IN gctINT32 StreamWidth,
4501+ IN gctINT32 StreamHeight,
4502+ IN gctINT32 StreamX,
4503+ IN gctINT32 StreamY,
4504+ IN gctUINT32 FgColor,
4505+ IN gctUINT32 BgColor,
4506+ IN gcsRECT_PTR SrcRect,
4507+ IN gcsRECT_PTR DstRect,
4508+ IN gctUINT8 FgRop,
4509+ IN gctUINT8 BgRop
4510+ );
4511+
4512 /* Set kernel size. */
4513 gceSTATUS
4514 gco2D_SetKernelSize(
4515@@ -942,6 +959,15 @@ gco2D_SetSourceTileStatus(
4516 );
4517
4518 gceSTATUS
4519+gco2D_SetTargetTileStatus(
4520+ IN gco2D Engine,
4521+ IN gce2D_TILE_STATUS_CONFIG TileStatusConfig,
4522+ IN gceSURF_FORMAT CompressedFormat,
4523+ IN gctUINT32 ClearValue,
4524+ IN gctUINT32 GpuAddress
4525+ );
4526+
4527+gceSTATUS
4528 gco2D_QueryU32(
4529 IN gco2D Engine,
4530 IN gce2D_QUERY Item,
4531@@ -955,6 +981,28 @@ gco2D_SetStateU32(
4532 IN gctUINT32 Value
4533 );
4534
4535+gceSTATUS
4536+gco2D_SetStateArrayI32(
4537+ IN gco2D Engine,
4538+ IN gce2D_STATE State,
4539+ IN gctINT32_PTR Array,
4540+ IN gctINT32 ArraySize
4541+ );
4542+
4543+gceSTATUS
4544+gco2D_SetStateArrayU32(
4545+ IN gco2D Engine,
4546+ IN gce2D_STATE State,
4547+ IN gctUINT32_PTR Array,
4548+ IN gctINT32 ArraySize
4549+ );
4550+
4551+gceSTATUS
4552+gco2D_SetTargetRect(
4553+ IN gco2D Engine,
4554+ IN gcsRECT_PTR Rect
4555+ );
4556+
4557 #ifdef __cplusplus
4558 }
4559 #endif
4560diff --git a/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_types.h b/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_types.h
4561index 5c0877d..14801aa 100644
4562--- a/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_types.h
4563+++ b/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_types.h
4564@@ -128,6 +128,7 @@ typedef int gctBOOL;
4565 typedef gctBOOL * gctBOOL_PTR;
4566
4567 typedef int gctINT;
4568+typedef long gctLONG;
4569 typedef signed char gctINT8;
4570 typedef signed short gctINT16;
4571 typedef signed int gctINT32;
4572@@ -171,6 +172,7 @@ typedef void * gctFILE;
4573 typedef void * gctSIGNAL;
4574 typedef void * gctWINDOW;
4575 typedef void * gctIMAGE;
4576+typedef void * gctSYNC_POINT;
4577
4578 typedef void * gctSEMAPHORE;
4579
4580@@ -941,12 +943,19 @@ typedef struct _gcsHAL_FRAME_INFO
4581 OUT gctUINT readRequests[8];
4582 OUT gctUINT writeRequests[8];
4583
4584+ /* FE counters. */
4585+ OUT gctUINT drawCount;
4586+ OUT gctUINT vertexOutCount;
4587+ OUT gctUINT vertexMissCount;
4588+
4589 /* 3D counters. */
4590 OUT gctUINT vertexCount;
4591 OUT gctUINT primitiveCount;
4592 OUT gctUINT rejectedPrimitives;
4593 OUT gctUINT culledPrimitives;
4594 OUT gctUINT clippedPrimitives;
4595+ OUT gctUINT droppedPrimitives;
4596+ OUT gctUINT frustumClippedPrimitives;
4597 OUT gctUINT outPrimitives;
4598 OUT gctUINT inPrimitives;
4599 OUT gctUINT culledQuadCount;
4600@@ -964,18 +973,86 @@ typedef struct _gcsHAL_FRAME_INFO
4601 OUT gctUINT shaderCycles;
4602 OUT gctUINT vsInstructionCount;
4603 OUT gctUINT vsTextureCount;
4604+ OUT gctUINT vsBranchCount;
4605+ OUT gctUINT vsVertices;
4606 OUT gctUINT psInstructionCount;
4607 OUT gctUINT psTextureCount;
4608+ OUT gctUINT psBranchCount;
4609+ OUT gctUINT psPixels;
4610
4611 /* Texture counters. */
4612 OUT gctUINT bilinearRequests;
4613 OUT gctUINT trilinearRequests;
4614- OUT gctUINT txBytes8;
4615+ OUT gctUINT txBytes8[2];
4616 OUT gctUINT txHitCount;
4617 OUT gctUINT txMissCount;
4618 }
4619 gcsHAL_FRAME_INFO;
4620
4621+typedef enum _gcePATCH_ID
4622+{
4623+ gcePATCH_UNKNOWN = 0xFFFFFFFF,
4624+
4625+ /* Benchmark list*/
4626+ gcePATCH_GLB11 = 0x0,
4627+ gcePATCH_GLB21,
4628+ gcePATCH_GLB25,
4629+ gcePATCH_GLB27,
4630+
4631+ gcePATCH_BM21,
4632+ gcePATCH_MM,
4633+ gcePATCH_MM06,
4634+ gcePATCH_MM07,
4635+ gcePATCH_QUADRANT,
4636+ gcePATCH_ANTUTU,
4637+ gcePATCH_SMARTBENCH,
4638+ gcePATCH_JPCT,
4639+ gcePATCH_NENAMARK,
4640+ gcePATCH_NENAMARK2,
4641+ gcePATCH_NEOCORE,
4642+ gcePATCH_GLB,
4643+ gcePATCH_GB,
4644+ gcePATCH_RTESTVA,
4645+ gcePATCH_BMX,
4646+ gcePATCH_BMGUI,
4647+
4648+ /* Game list */
4649+ gcePATCH_NBA2013,
4650+ gcePATCH_BARDTALE,
4651+ gcePATCH_BUSPARKING3D,
4652+ gcePATCH_FISHBOODLE,
4653+ gcePATCH_SUBWAYSURFER,
4654+ gcePATCH_HIGHWAYDRIVER,
4655+ gcePATCH_PREMIUM,
4656+ gcePATCH_RACEILLEGAL,
4657+ gcePATCH_BLABLA,
4658+ gcePATCH_MEGARUN,
4659+ gcePATCH_GALAXYONFIRE2,
4660+ gcePATCH_GLOFTR3HM,
4661+ gcePATCH_GLOFTSXHM,
4662+ gcePATCH_GLOFTF3HM,
4663+ gcePATCH_GLOFTGANG,
4664+ gcePATCH_XRUNNER,
4665+ gcePATCH_WP,
4666+ gcePATCH_DEVIL,
4667+ gcePATCH_HOLYARCH,
4668+ gcePATCH_MUSE,
4669+ gcePATCH_SG,
4670+ gcePATCH_SIEGECRAFT,
4671+ gcePATCH_CARCHALLENGE,
4672+ gcePATCH_HEROESCALL,
4673+ gcePATCH_MONOPOLY,
4674+ gcePATCH_CTGL20,
4675+ gcePATCH_FIREFOX,
4676+ gcePATCH_CHORME,
4677+ gcePATCH_DUOKANTV,
4678+ gcePATCH_TESTAPP,
4679+
4680+ /* Count enum*/
4681+ gcePATCH_COUNT,
4682+}
4683+gcePATCH_ID;
4684+
4685 #if gcdLINK_QUEUE_SIZE
4686 typedef struct _gckLINKDATA * gckLINKDATA;
4687 struct _gckLINKDATA
4688diff --git a/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_version.h b/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_version.h
4689index 03cb4d6..2eab666 100644
4690--- a/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_version.h
4691+++ b/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_version.h
4692@@ -28,7 +28,7 @@
4693
4694 #define gcvVERSION_PATCH 9
4695
4696-#define gcvVERSION_BUILD 6622
4697+#define gcvVERSION_BUILD 9754
4698
4699 #define gcvVERSION_DATE __DATE__
4700
4701diff --git a/drivers/mxc/gpu-viv/hal/os/linux/kernel/gc_hal_kernel_device.c b/drivers/mxc/gpu-viv/hal/os/linux/kernel/gc_hal_kernel_device.c
4702index 4d48bd5..b029428 100644
4703--- a/drivers/mxc/gpu-viv/hal/os/linux/kernel/gc_hal_kernel_device.c
4704+++ b/drivers/mxc/gpu-viv/hal/os/linux/kernel/gc_hal_kernel_device.c
4705@@ -25,7 +25,9 @@
4706 #include <linux/mm.h>
4707 #include <linux/mman.h>
4708 #include <linux/slab.h>
4709+#if LINUX_VERSION_CODE < KERNEL_VERSION(3,10,0)
4710 #include <mach/hardware.h>
4711+#endif
4712 #include <linux/pm_runtime.h>
4713
4714 #define _GC_OBJ_ZONE gcvZONE_DEVICE
4715@@ -305,6 +307,7 @@ gckGALDEVICE_Construct(
4716 IN gctUINT LogFileSize,
4717 IN struct device *pdev,
4718 IN gctINT PowerManagement,
4719+ IN gctINT GpuProfiler,
4720 OUT gckGALDEVICE *Device
4721 )
4722 {
4723@@ -369,6 +372,10 @@ gckGALDEVICE_Construct(
4724 #if LINUX_VERSION_CODE < KERNEL_VERSION(3,5,0)
4725 /*get gpu regulator*/
4726 device->gpu_regulator = regulator_get(pdev, "cpu_vddgpu");
4727+#elif LINUX_VERSION_CODE >= KERNEL_VERSION(3,10,0)
4728+ device->gpu_regulator = regulator_get(pdev, "vddpu");
4729+#endif
4730+#if LINUX_VERSION_CODE < KERNEL_VERSION(3,5,0) || LINUX_VERSION_CODE >= KERNEL_VERSION(3,10,0)
4731 if (IS_ERR(device->gpu_regulator)) {
4732 gcmkTRACE_ZONE(gcvLEVEL_ERROR, gcvZONE_DRIVER,
4733 "%s(%d): Failed to get gpu regulator %s/%s \n",
4734@@ -541,6 +548,10 @@ gckGALDEVICE_Construct(
4735 device->kernels[gcvCORE_MAJOR]->hardware, PowerManagement
4736 ));
4737
4738+ gcmkONERROR(gckHARDWARE_SetGpuProfiler(
4739+ device->kernels[gcvCORE_MAJOR]->hardware, GpuProfiler
4740+ ));
4741+
4742 #if COMMAND_PROCESSOR_VERSION == 1
4743 /* Start the command queue. */
4744 gcmkONERROR(gckCOMMAND_Start(device->kernels[gcvCORE_MAJOR]->command));
4745@@ -599,6 +610,7 @@ gckGALDEVICE_Construct(
4746 device->kernels[gcvCORE_2D]->hardware, PowerManagement
4747 ));
4748
4749+
4750 #if COMMAND_PROCESSOR_VERSION == 1
4751 /* Start the command queue. */
4752 gcmkONERROR(gckCOMMAND_Start(device->kernels[gcvCORE_2D]->command));
4753@@ -635,6 +647,7 @@ gckGALDEVICE_Construct(
4754 device->kernels[gcvCORE_VG]->vg->hardware,
4755 PowerManagement
4756 ));
4757+
4758 #endif
4759 }
4760 else
4761@@ -849,6 +862,7 @@ gckGALDEVICE_Construct(
4762 }
4763 else
4764 {
4765+#if LINUX_VERSION_CODE < KERNEL_VERSION(3,10,0)
4766 mem_region = request_mem_region(
4767 ContiguousBase, ContiguousSize, "galcore managed memory"
4768 );
4769@@ -864,6 +878,7 @@ gckGALDEVICE_Construct(
4770
4771 gcmkONERROR(gcvSTATUS_OUT_OF_RESOURCES);
4772 }
4773+#endif
4774
4775 device->requestedContiguousBase = ContiguousBase;
4776 device->requestedContiguousSize = ContiguousSize;
4777@@ -1107,7 +1122,7 @@ gckGALDEVICE_Destroy(
4778 pm_runtime_disable(Device->pmdev);
4779 #endif
4780
4781-#if LINUX_VERSION_CODE < KERNEL_VERSION(3,5,0)
4782+#if LINUX_VERSION_CODE < KERNEL_VERSION(3,5,0) || LINUX_VERSION_CODE >= KERNEL_VERSION(3,10,0)
4783 if (Device->gpu_regulator) {
4784 regulator_put(Device->gpu_regulator);
4785 Device->gpu_regulator = NULL;
4786diff --git a/drivers/mxc/gpu-viv/hal/os/linux/kernel/gc_hal_kernel_device.h b/drivers/mxc/gpu-viv/hal/os/linux/kernel/gc_hal_kernel_device.h
4787index dde4f03..c51432f 100644
4788--- a/drivers/mxc/gpu-viv/hal/os/linux/kernel/gc_hal_kernel_device.h
4789+++ b/drivers/mxc/gpu-viv/hal/os/linux/kernel/gc_hal_kernel_device.h
4790@@ -26,6 +26,15 @@
4791 ******************************* gckGALDEVICE Structure *******************************
4792 \******************************************************************************/
4793
4794+#if LINUX_VERSION_CODE >= KERNEL_VERSION(3,10,0)
4795+struct contiguous_mem_pool {
4796+ struct dma_attrs attrs;
4797+ dma_addr_t phys;
4798+ void *virt;
4799+ size_t size;
4800+};
4801+#endif
4802+
4803 typedef struct _gckGALDEVICE
4804 {
4805 /* Objects. */
4806@@ -91,12 +100,16 @@ typedef struct _gckGALDEVICE
4807 struct clk *clk_2d_axi;
4808 struct clk *clk_vg_axi;
4809
4810-#if LINUX_VERSION_CODE < KERNEL_VERSION(3,5,0)
4811+#if LINUX_VERSION_CODE < KERNEL_VERSION(3,5,0) || LINUX_VERSION_CODE >= KERNEL_VERSION(3,10,0)
4812 /*Power management.*/
4813 struct regulator *gpu_regulator;
4814 #endif
4815 /*Run time pm*/
4816 struct device *pmdev;
4817+#if LINUX_VERSION_CODE >= KERNEL_VERSION(3,10,0)
4818+ struct contiguous_mem_pool *pool;
4819+ struct reset_control *rstc[gcdMAX_GPU_COUNT];
4820+#endif
4821 }
4822 * gckGALDEVICE;
4823
4824@@ -171,6 +184,7 @@ gceSTATUS gckGALDEVICE_Construct(
4825 IN gctUINT LogFileSize,
4826 IN struct device *pdev,
4827 IN gctINT PowerManagement,
4828+ IN gctINT GpuProfiler,
4829 OUT gckGALDEVICE *Device
4830 );
4831
4832diff --git a/drivers/mxc/gpu-viv/hal/os/linux/kernel/gc_hal_kernel_driver.c b/drivers/mxc/gpu-viv/hal/os/linux/kernel/gc_hal_kernel_driver.c
4833index bacd531..88a7e4e6 100644
4834--- a/drivers/mxc/gpu-viv/hal/os/linux/kernel/gc_hal_kernel_driver.c
4835+++ b/drivers/mxc/gpu-viv/hal/os/linux/kernel/gc_hal_kernel_driver.c
4836@@ -1,7 +1,7 @@
4837 /****************************************************************************
4838 *
4839 * Copyright (C) 2005 - 2013 by Vivante Corp.
4840-* Copyright (C) 2011-2012 Freescale Semiconductor, Inc.
4841+* Copyright (C) 2011-2013 Freescale Semiconductor, Inc.
4842 *
4843 * This program is free software; you can redistribute it and/or modify
4844 * it under the terms of the GNU General Public License as published by
4845@@ -69,14 +69,26 @@ task_notify_func(struct notifier_block *self, unsigned long val, void *data)
4846 #include <mach/viv_gpu.h>
4847 #else
4848 #include <linux/pm_runtime.h>
4849+#if LINUX_VERSION_CODE < KERNEL_VERSION(3,10,0)
4850 #include <mach/busfreq.h>
4851+#else
4852+#include <linux/reset.h>
4853+#endif
4854 #endif
4855 /* Zone used for header/footer. */
4856 #define _GC_OBJ_ZONE gcvZONE_DRIVER
4857
4858 #if gcdENABLE_FSCALE_VAL_ADJUST
4859+#if LINUX_VERSION_CODE >= KERNEL_VERSION(3,10,0)
4860+#include <linux/device_cooling.h>
4861+#define REG_THERMAL_NOTIFIER(a) register_devfreq_cooling_notifier(a);
4862+#define UNREG_THERMAL_NOTIFIER(a) unregister_devfreq_cooling_notifier(a);
4863+#else
4864 extern int register_thermal_notifier(struct notifier_block *nb);
4865 extern int unregister_thermal_notifier(struct notifier_block *nb);
4866+#define REG_THERMAL_NOTIFIER(a) register_thermal_notifier(a);
4867+#define UNREG_THERMAL_NOTIFIER(a) unregister_thermal_notifier(a);
4868+#endif
4869 #endif
4870
4871 MODULE_DESCRIPTION("Vivante Graphics Driver");
4872@@ -116,7 +128,11 @@ module_param(registerMemBaseVG, ulong, 0644);
4873 static ulong registerMemSizeVG = 2 << 10;
4874 module_param(registerMemSizeVG, ulong, 0644);
4875
4876+#if gcdENABLE_FSCALE_VAL_ADJUST
4877+static ulong contiguousSize = 128 << 20;
4878+#else
4879 static ulong contiguousSize = 4 << 20;
4880+#endif
4881 module_param(contiguousSize, ulong, 0644);
4882
4883 static ulong contiguousBase = 0;
4884@@ -134,6 +150,9 @@ module_param(compression, int, 0644);
4885 static int powerManagement = 1;
4886 module_param(powerManagement, int, 0644);
4887
4888+static int gpuProfiler = 0;
4889+module_param(gpuProfiler, int, 0644);
4890+
4891 static int signal = 48;
4892 module_param(signal, int, 0644);
4893
4894@@ -786,7 +805,9 @@ static int drv_init(struct device *pdev)
4895
4896 printk(KERN_INFO "Galcore version %d.%d.%d.%d\n",
4897 gcvVERSION_MAJOR, gcvVERSION_MINOR, gcvVERSION_PATCH, gcvVERSION_BUILD);
4898-
4899+ /* when enable gpu profiler, we need to turn off gpu powerMangement */
4900+ if(gpuProfiler)
4901+ powerManagement = 0;
4902 if (showArgs)
4903 {
4904 printk("galcore options:\n");
4905@@ -818,6 +839,7 @@ static int drv_init(struct device *pdev)
4906 printk(" physSize = 0x%08lX\n", physSize);
4907 printk(" logFileSize = %d KB \n", logFileSize);
4908 printk(" powerManagement = %d\n", powerManagement);
4909+ printk(" gpuProfiler = %d\n", gpuProfiler);
4910 #if ENABLE_GPU_CLOCK_BY_DRIVER
4911 printk(" coreClock = %lu\n", coreClock);
4912 #endif
4913@@ -841,9 +863,14 @@ static int drv_init(struct device *pdev)
4914 logFileSize,
4915 pdev,
4916 powerManagement,
4917+ gpuProfiler,
4918 &device
4919 ));
4920
4921+#if LINUX_VERSION_CODE >= KERNEL_VERSION(3,10,0)
4922+ device->pool = dev_get_drvdata(pdev);
4923+#endif
4924+
4925 /* Start the GAL device. */
4926 gcmkONERROR(gckGALDEVICE_Start(device));
4927
4928@@ -1028,11 +1055,18 @@ static struct notifier_block thermal_hot_pm_notifier = {
4929
4930
4931
4932+#if LINUX_VERSION_CODE >= KERNEL_VERSION(3, 8, 0)
4933+static int gpu_probe(struct platform_device *pdev)
4934+#else
4935 static int __devinit gpu_probe(struct platform_device *pdev)
4936+#endif
4937 {
4938 int ret = -ENODEV;
4939 struct resource* res;
4940-#if LINUX_VERSION_CODE >= KERNEL_VERSION(3,5,0)
4941+#if LINUX_VERSION_CODE >= KERNEL_VERSION(3,10,0)
4942+ struct contiguous_mem_pool *pool;
4943+ struct reset_control *rstc;
4944+#elif LINUX_VERSION_CODE >= KERNEL_VERSION(3,5,0)
4945 struct device_node *dn =pdev->dev.of_node;
4946 const u32 *prop;
4947 #else
4948@@ -1077,7 +1111,22 @@ static int __devinit gpu_probe(struct platform_device *pdev)
4949 registerMemSizeVG = res->end - res->start + 1;
4950 }
4951
4952-#if LINUX_VERSION_CODE >= KERNEL_VERSION(3,5,0)
4953+#if LINUX_VERSION_CODE >= KERNEL_VERSION(3,10,0)
4954+ pool = devm_kzalloc(&pdev->dev, sizeof(*pool), GFP_KERNEL);
4955+ if (!pool)
4956+ return -ENOMEM;
4957+ pool->size = contiguousSize;
4958+ init_dma_attrs(&pool->attrs);
4959+ dma_set_attr(DMA_ATTR_WRITE_COMBINE, &pool->attrs);
4960+ pool->virt = dma_alloc_attrs(&pdev->dev, pool->size, &pool->phys,
4961+ GFP_KERNEL, &pool->attrs);
4962+ if (!pool->virt) {
4963+ dev_err(&pdev->dev, "Failed to allocate contiguous memory\n");
4964+ return -ENOMEM;
4965+ }
4966+ contiguousBase = pool->phys;
4967+ dev_set_drvdata(&pdev->dev, pool);
4968+#elif LINUX_VERSION_CODE >= KERNEL_VERSION(3,5,0)
4969 prop = of_get_property(dn, "contiguousbase", NULL);
4970 if(prop)
4971 contiguousBase = *prop;
4972@@ -1095,30 +1144,56 @@ static int __devinit gpu_probe(struct platform_device *pdev)
4973
4974 if (!ret)
4975 {
4976+#if LINUX_VERSION_CODE >= KERNEL_VERSION(3,10,0)
4977+ rstc = devm_reset_control_get(&pdev->dev, "gpu3d");
4978+ galDevice->rstc[gcvCORE_MAJOR] = IS_ERR(rstc) ? NULL : rstc;
4979+
4980+ rstc = devm_reset_control_get(&pdev->dev, "gpu2d");
4981+ galDevice->rstc[gcvCORE_2D] = IS_ERR(rstc) ? NULL : rstc;
4982+
4983+ rstc = devm_reset_control_get(&pdev->dev, "gpuvg");
4984+ galDevice->rstc[gcvCORE_VG] = IS_ERR(rstc) ? NULL : rstc;
4985+#endif
4986 platform_set_drvdata(pdev, galDevice);
4987
4988 #if gcdENABLE_FSCALE_VAL_ADJUST
4989- if(galDevice->kernels[gcvCORE_MAJOR])
4990- register_thermal_notifier(&thermal_hot_pm_notifier);
4991+ if (galDevice->kernels[gcvCORE_MAJOR])
4992+ REG_THERMAL_NOTIFIER(&thermal_hot_pm_notifier);
4993 #endif
4994 gcmkFOOTER_NO();
4995 return ret;
4996 }
4997 #if gcdENABLE_FSCALE_VAL_ADJUST
4998- unregister_thermal_notifier(&thermal_hot_pm_notifier);
4999+ UNREG_THERMAL_NOTIFIER(&thermal_hot_pm_notifier);
5000+#endif
5001+#if LINUX_VERSION_CODE >= KERNEL_VERSION(3,10,0)
5002+ dma_free_attrs(&pdev->dev, pool->size, pool->virt, pool->phys,
5003+ &pool->attrs);
5004 #endif
5005 gcmkFOOTER_ARG(KERN_INFO "Failed to register gpu driver: %d\n", ret);
5006 return ret;
5007 }
5008
5009+#if LINUX_VERSION_CODE >= KERNEL_VERSION(3, 8, 0)
5010+static int gpu_remove(struct platform_device *pdev)
5011+#else
5012 static int __devexit gpu_remove(struct platform_device *pdev)
5013+#endif
5014 {
5015+#if LINUX_VERSION_CODE >= KERNEL_VERSION(3,10,0)
5016+ gckGALDEVICE device = platform_get_drvdata(pdev);
5017+ struct contiguous_mem_pool *pool = device->pool;
5018+#endif
5019 gcmkHEADER();
5020 #if gcdENABLE_FSCALE_VAL_ADJUST
5021 if(galDevice->kernels[gcvCORE_MAJOR])
5022- unregister_thermal_notifier(&thermal_hot_pm_notifier);
5023+ UNREG_THERMAL_NOTIFIER(&thermal_hot_pm_notifier);
5024 #endif
5025 drv_exit();
5026+#if LINUX_VERSION_CODE >= KERNEL_VERSION(3,10,0)
5027+ dma_free_attrs(&pdev->dev, pool->size, pool->virt, pool->phys,
5028+ &pool->attrs);
5029+#endif
5030 gcmkFOOTER_NO();
5031 return 0;
5032 }
5033@@ -1254,13 +1329,17 @@ MODULE_DEVICE_TABLE(of, mxs_gpu_dt_ids);
5034 #ifdef CONFIG_PM
5035 static int gpu_runtime_suspend(struct device *dev)
5036 {
5037+#if LINUX_VERSION_CODE < KERNEL_VERSION(3,10,0)
5038 release_bus_freq(BUS_FREQ_HIGH);
5039+#endif
5040 return 0;
5041 }
5042
5043 static int gpu_runtime_resume(struct device *dev)
5044 {
5045+#if LINUX_VERSION_CODE < KERNEL_VERSION(3,10,0)
5046 request_bus_freq(BUS_FREQ_HIGH);
5047+#endif
5048 return 0;
5049 }
5050
5051@@ -1284,7 +1363,11 @@ static const struct dev_pm_ops gpu_pm_ops = {
5052
5053 static struct platform_driver gpu_driver = {
5054 .probe = gpu_probe,
5055+#if LINUX_VERSION_CODE >= KERNEL_VERSION(3, 8, 0)
5056+ .remove = gpu_remove,
5057+#else
5058 .remove = __devexit_p(gpu_remove),
5059+#endif
5060
5061 .suspend = gpu_suspend,
5062 .resume = gpu_resume,
5063diff --git a/drivers/mxc/gpu-viv/hal/os/linux/kernel/gc_hal_kernel_os.c b/drivers/mxc/gpu-viv/hal/os/linux/kernel/gc_hal_kernel_os.c
5064index e7edc39..331c73f 100644
5065--- a/drivers/mxc/gpu-viv/hal/os/linux/kernel/gc_hal_kernel_os.c
5066+++ b/drivers/mxc/gpu-viv/hal/os/linux/kernel/gc_hal_kernel_os.c
5067@@ -30,19 +30,30 @@
5068 #include <linux/dma-mapping.h>
5069 #include <linux/slab.h>
5070 #include <linux/idr.h>
5071+#if LINUX_VERSION_CODE < KERNEL_VERSION(3,10,0)
5072 #include <mach/hardware.h>
5073+#endif
5074 #include <linux/workqueue.h>
5075 #include <linux/idr.h>
5076 #if LINUX_VERSION_CODE > KERNEL_VERSION(2,6,23)
5077 #include <linux/math64.h>
5078 #endif
5079-#if LINUX_VERSION_CODE >= KERNEL_VERSION(3,5,0)
5080+#if LINUX_VERSION_CODE >= KERNEL_VERSION(3,10,0)
5081+#include <linux/reset.h>
5082+static inline void imx_gpc_power_up_pu(bool flag) {}
5083+#elif LINUX_VERSION_CODE >= KERNEL_VERSION(3,5,0)
5084 #include <mach/common.h>
5085 #endif
5086 #include <linux/delay.h>
5087 #include <linux/pm_runtime.h>
5088
5089
5090+#if gcdANDROID_NATIVE_FENCE_SYNC
5091+#include <linux/file.h>
5092+#include "gc_hal_kernel_sync.h"
5093+#endif
5094+
5095+
5096 #define _GC_OBJ_ZONE gcvZONE_OS
5097
5098 /*******************************************************************************
5099@@ -148,6 +159,7 @@ typedef struct _gcsINTEGER_DB
5100 {
5101 struct idr idr;
5102 spinlock_t lock;
5103+ gctINT curr;
5104 }
5105 gcsINTEGER_DB;
5106
5107@@ -180,6 +192,14 @@ struct _gckOS
5108 /* signal id database. */
5109 gcsINTEGER_DB signalDB;
5110
5111+#if gcdANDROID_NATIVE_FENCE_SYNC
5112+ /* Lock. */
5113+ gctPOINTER syncPointMutex;
5114+
5115+ /* sync point id database. */
5116+ gcsINTEGER_DB syncPointDB;
5117+#endif
5118+
5119 gcsUSER_MAPPING_PTR userMap;
5120 gctPOINTER debugLock;
5121
5122@@ -215,6 +235,25 @@ typedef struct _gcsSIGNAL
5123 }
5124 gcsSIGNAL;
5125
5126+#if gcdANDROID_NATIVE_FENCE_SYNC
5127+typedef struct _gcsSYNC_POINT * gcsSYNC_POINT_PTR;
5128+typedef struct _gcsSYNC_POINT
5129+{
5130+ /* The reference counter. */
5131+ atomic_t ref;
5132+
5133+ /* State. */
5134+ atomic_t state;
5135+
5136+ /* timeline. */
5137+ struct sync_timeline * timeline;
5138+
5139+ /* ID. */
5140+ gctUINT32 id;
5141+}
5142+gcsSYNC_POINT;
5143+#endif
5144+
5145 typedef struct _gcsPageInfo * gcsPageInfo_PTR;
5146 typedef struct _gcsPageInfo
5147 {
5148@@ -767,7 +806,32 @@ _AllocateIntegerId(
5149 )
5150 {
5151 int result;
5152+ gctINT next;
5153+
5154+#if LINUX_VERSION_CODE >= KERNEL_VERSION(3, 9, 0)
5155+ idr_preload(GFP_KERNEL | gcdNOWARN);
5156
5157+ spin_lock(&Database->lock);
5158+
5159+ next = (Database->curr + 1 <= 0) ? 1 : Database->curr + 1;
5160+ result = idr_alloc(&Database->idr, KernelPointer, next, 0, GFP_ATOMIC);
5161+
5162+ if (!result)
5163+ {
5164+ Database->curr = *Id;
5165+ }
5166+
5167+ spin_unlock(&Database->lock);
5168+
5169+ idr_preload_end();
5170+
5171+ if (result < 0)
5172+ {
5173+ return gcvSTATUS_OUT_OF_RESOURCES;
5174+ }
5175+
5176+ *Id = result;
5177+#else
5178 again:
5179 if (idr_pre_get(&Database->idr, GFP_KERNEL | gcdNOWARN) == 0)
5180 {
5181@@ -776,8 +840,15 @@ again:
5182
5183 spin_lock(&Database->lock);
5184
5185- /* Try to get a id greater than 0. */
5186- result = idr_get_new_above(&Database->idr, KernelPointer, 1, Id);
5187+ next = (Database->curr + 1 <= 0) ? 1 : Database->curr + 1;
5188+
5189+ /* Try to get a id greater than current id. */
5190+ result = idr_get_new_above(&Database->idr, KernelPointer, next, Id);
5191+
5192+ if (!result)
5193+ {
5194+ Database->curr = *Id;
5195+ }
5196
5197 spin_unlock(&Database->lock);
5198
5199@@ -790,6 +861,7 @@ again:
5200 {
5201 return gcvSTATUS_OUT_OF_RESOURCES;
5202 }
5203+#endif
5204
5205 return gcvSTATUS_OK;
5206 }
5207@@ -1008,6 +1080,21 @@ gckOS_Construct(
5208 /* Initialize signal id database. */
5209 idr_init(&os->signalDB.idr);
5210
5211+#if gcdANDROID_NATIVE_FENCE_SYNC
5212+ /*
5213+ * Initialize the sync point manager.
5214+ */
5215+
5216+ /* Initialize mutex. */
5217+ gcmkONERROR(gckOS_CreateMutex(os, &os->syncPointMutex));
5218+
5219+ /* Initialize sync point id database lock. */
5220+ spin_lock_init(&os->syncPointDB.lock);
5221+
5222+ /* Initialize sync point id database. */
5223+ idr_init(&os->syncPointDB.idr);
5224+#endif
5225+
5226 #if gcdUSE_NON_PAGED_MEMORY_CACHE
5227 os->cacheSize = 0;
5228 os->cacheHead = gcvNULL;
5229@@ -1031,6 +1118,15 @@ gckOS_Construct(
5230 return gcvSTATUS_OK;
5231
5232 OnError:
5233+
5234+#if gcdANDROID_NATIVE_FENCE_SYNC
5235+ if (os->syncPointMutex != gcvNULL)
5236+ {
5237+ gcmkVERIFY_OK(
5238+ gckOS_DeleteMutex(os, os->syncPointMutex));
5239+ }
5240+#endif
5241+
5242 if (os->signalMutex != gcvNULL)
5243 {
5244 gcmkVERIFY_OK(
5245@@ -1104,6 +1200,15 @@ gckOS_Destroy(
5246 _FreeAllNonPagedMemoryCache(Os);
5247 #endif
5248
5249+#if gcdANDROID_NATIVE_FENCE_SYNC
5250+ /*
5251+ * Destroy the sync point manager.
5252+ */
5253+
5254+ /* Destroy the mutex. */
5255+ gcmkVERIFY_OK(gckOS_DeleteMutex(Os, Os->syncPointMutex));
5256+#endif
5257+
5258 /*
5259 * Destroy the signal manager.
5260 */
5261@@ -1961,12 +2066,6 @@ gckOS_AllocateNonPagedMemory(
5262 gcmkONERROR(gcvSTATUS_OUT_OF_MEMORY);
5263 }
5264
5265- if ((Os->device->baseAddress & 0x80000000) != (mdl->dmaHandle & 0x80000000))
5266- {
5267- mdl->dmaHandle = (mdl->dmaHandle & ~0x80000000)
5268- | (Os->device->baseAddress & 0x80000000);
5269- }
5270-
5271 mdl->addr = addr;
5272
5273 /* Return allocated memory. */
5274@@ -2307,6 +2406,7 @@ gckOS_ReadRegisterEx(
5275
5276 /* Verify the arguments. */
5277 gcmkVERIFY_OBJECT(Os, gcvOBJ_OS);
5278+ gcmkVERIFY_ARGUMENT(Address < Os->device->requestedRegisterMemSizes[Core]);
5279 gcmkVERIFY_ARGUMENT(Data != gcvNULL);
5280
5281 *Data = readl((gctUINT8 *)Os->device->registerBases[Core] + Address);
5282@@ -2357,6 +2457,8 @@ gckOS_WriteRegisterEx(
5283 {
5284 gcmkHEADER_ARG("Os=0x%X Core=%d Address=0x%X Data=0x%08x", Os, Core, Address, Data);
5285
5286+ gcmkVERIFY_ARGUMENT(Address < Os->device->requestedRegisterMemSizes[Core]);
5287+
5288 writel(Data, (gctUINT8 *)Os->device->registerBases[Core] + Address);
5289
5290 /* Success. */
5291@@ -2799,16 +2901,25 @@ gckOS_MapPhysical(
5292
5293 if (mdl == gcvNULL)
5294 {
5295+#if LINUX_VERSION_CODE >= KERNEL_VERSION(3,10,0)
5296+ struct contiguous_mem_pool *pool = Os->device->pool;
5297+
5298+ if (Physical >= pool->phys && Physical < pool->phys + pool->size)
5299+ logical = (gctPOINTER)(Physical - pool->phys + pool->virt);
5300+ else
5301+ logical = gcvNULL;
5302+#else
5303 /* Map memory as cached memory. */
5304 request_mem_region(physical, Bytes, "MapRegion");
5305 logical = (gctPOINTER) ioremap_nocache(physical, Bytes);
5306+#endif
5307
5308 if (logical == gcvNULL)
5309 {
5310 gcmkTRACE_ZONE(
5311 gcvLEVEL_INFO, gcvZONE_OS,
5312- "%s(%d): Failed to ioremap",
5313- __FUNCTION__, __LINE__
5314+ "%s(%d): Failed to map physical address 0x%08x",
5315+ __FUNCTION__, __LINE__, Physical
5316 );
5317
5318 MEMORY_UNLOCK(Os);
5319@@ -3621,7 +3732,7 @@ gckOS_Delay(
5320 if (Delay > 0)
5321 {
5322 #if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 28)
5323- ktime_t delay = ktime_set(0, Delay * NSEC_PER_MSEC);
5324+ ktime_t delay = ktime_set(Delay/1000, (Delay%1000) * NSEC_PER_MSEC);
5325 __set_current_state(TASK_UNINTERRUPTIBLE);
5326 schedule_hrtimeout(&delay, HRTIMER_MODE_REL);
5327 #else
5328@@ -3881,8 +3992,13 @@ gckOS_AllocatePagedMemoryEx(
5329
5330 if (Contiguous)
5331 {
5332- /* Get contiguous pages, and suppress warning (stack dump) from kernel when
5333- we run out of memory. */
5334+ gctUINT32 order = get_order(bytes);
5335+
5336+ if (order >= MAX_ORDER)
5337+ {
5338+ gcmkONERROR(gcvSTATUS_OUT_OF_MEMORY);
5339+ }
5340+
5341 #if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 27)
5342 addr =
5343 alloc_pages_exact(numPages * PAGE_SIZE, GFP_KERNEL | gcdNOWARN | __GFP_NORETRY);
5344@@ -3894,12 +4010,12 @@ gckOS_AllocatePagedMemoryEx(
5345 mdl->exact = gcvTRUE;
5346 #else
5347 mdl->u.contiguousPages =
5348- alloc_pages(GFP_KERNEL | gcdNOWARN | __GFP_NORETRY, GetOrder(numPages));
5349+ alloc_pages(GFP_KERNEL | gcdNOWARN | __GFP_NORETRY, order);
5350 #endif
5351 if (mdl->u.contiguousPages == gcvNULL)
5352 {
5353 mdl->u.contiguousPages =
5354- alloc_pages(GFP_KERNEL | __GFP_HIGHMEM | gcdNOWARN, GetOrder(numPages));
5355+ alloc_pages(GFP_KERNEL | __GFP_HIGHMEM | gcdNOWARN, order);
5356
5357 #if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 27)
5358 mdl->exact = gcvFALSE;
5359@@ -4239,13 +4355,13 @@ gckOS_LockPages(
5360 }
5361
5362 mdlMap->vma->vm_flags |= gcdVM_FLAGS;
5363-#if !gcdPAGED_MEMORY_CACHEABLE
5364+
5365 if (Cacheable == gcvFALSE)
5366 {
5367 /* Make this mapping non-cached. */
5368 mdlMap->vma->vm_page_prot = gcmkPAGED_MEMROY_PROT(mdlMap->vma->vm_page_prot);
5369 }
5370-#endif
5371+
5372 addr = mdl->addr;
5373
5374 /* Now map all the vmalloc pages to this user address. */
5375@@ -5336,6 +5452,7 @@ OnError:
5376 {
5377 /* Get the user pages. */
5378 down_read(&current->mm->mmap_sem);
5379+
5380 result = get_user_pages(current,
5381 current->mm,
5382 memory & PAGE_MASK,
5383@@ -5345,105 +5462,127 @@ OnError:
5384 pages,
5385 gcvNULL
5386 );
5387+
5388 up_read(&current->mm->mmap_sem);
5389
5390 if (result <=0 || result < pageCount)
5391 {
5392 struct vm_area_struct *vma;
5393
5394- /* Free the page table. */
5395- if (pages != gcvNULL)
5396+ /* Release the pages if any. */
5397+ if (result > 0)
5398 {
5399- /* Release the pages if any. */
5400- if (result > 0)
5401+ for (i = 0; i < result; i++)
5402 {
5403- for (i = 0; i < result; i++)
5404+ if (pages[i] == gcvNULL)
5405 {
5406- if (pages[i] == gcvNULL)
5407- {
5408- break;
5409- }
5410-
5411- page_cache_release(pages[i]);
5412+ break;
5413 }
5414+
5415+ page_cache_release(pages[i]);
5416+ pages[i] = gcvNULL;
5417 }
5418
5419- kfree(pages);
5420- pages = gcvNULL;
5421+ result = 0;
5422 }
5423
5424 vma = find_vma(current->mm, memory);
5425
5426- if (vma && (vma->vm_flags & VM_PFNMAP) )
5427+ if (vma && (vma->vm_flags & VM_PFNMAP))
5428 {
5429 pte_t * pte;
5430 spinlock_t * ptl;
5431- unsigned long pfn;
5432+ gctUINTPTR_T logical = memory;
5433
5434- pgd_t * pgd = pgd_offset(current->mm, memory);
5435- pud_t * pud = pud_offset(pgd, memory);
5436- if (pud)
5437+ for (i = 0; i < pageCount; i++)
5438 {
5439- pmd_t * pmd = pmd_offset(pud, memory);
5440- pte = pte_offset_map_lock(current->mm, pmd, memory, &ptl);
5441- if (!pte)
5442+ pgd_t * pgd = pgd_offset(current->mm, logical);
5443+ pud_t * pud = pud_offset(pgd, logical);
5444+
5445+ if (pud)
5446+ {
5447+ pmd_t * pmd = pmd_offset(pud, logical);
5448+ pte = pte_offset_map_lock(current->mm, pmd, logical, &ptl);
5449+ if (!pte)
5450+ {
5451+ gcmkONERROR(gcvSTATUS_OUT_OF_RESOURCES);
5452+ }
5453+ }
5454+ else
5455 {
5456 gcmkONERROR(gcvSTATUS_OUT_OF_RESOURCES);
5457 }
5458+
5459+ pages[i] = pte_page(*pte);
5460+ pte_unmap_unlock(pte, ptl);
5461+
5462+ /* Advance to next. */
5463+ logical += PAGE_SIZE;
5464 }
5465- else
5466+ }
5467+ else
5468+ {
5469+ gcmkONERROR(gcvSTATUS_OUT_OF_RESOURCES);
5470+ }
5471+
5472+ /* Check if this memory is contiguous for old mmu. */
5473+ if (Os->device->kernels[Core]->hardware->mmuVersion == 0)
5474+ {
5475+ for (i = 1; i < pageCount; i++)
5476 {
5477- gcmkONERROR(gcvSTATUS_OUT_OF_RESOURCES);
5478+ if (pages[i] != nth_page(pages[0], i))
5479+ {
5480+ /* Non-contiguous. */
5481+ break;
5482+ }
5483 }
5484
5485- pfn = pte_pfn(*pte);
5486-
5487- physical = (pfn << PAGE_SHIFT) | (memory & ~PAGE_MASK);
5488+ if (i == pageCount)
5489+ {
5490+ /* Contiguous memory. */
5491+ physical = page_to_phys(pages[0]) | (memory & ~PAGE_MASK);
5492
5493- pte_unmap_unlock(pte, ptl);
5494+ if (!((physical - Os->device->baseAddress) & 0x80000000))
5495+ {
5496+ kfree(pages);
5497+ pages = gcvNULL;
5498
5499- if ((Os->device->kernels[Core]->hardware->mmuVersion == 0)
5500- && !((physical - Os->device->baseAddress) & 0x80000000))
5501- {
5502- info->pages = gcvNULL;
5503- info->pageTable = gcvNULL;
5504+ info->pages = gcvNULL;
5505+ info->pageTable = gcvNULL;
5506
5507- MEMORY_MAP_UNLOCK(Os);
5508+ MEMORY_MAP_UNLOCK(Os);
5509
5510- *Address = physical - Os->device->baseAddress;
5511- *Info = info;
5512+ *Address = physical - Os->device->baseAddress;
5513+ *Info = info;
5514
5515- gcmkFOOTER_ARG("*Info=0x%X *Address=0x%08x",
5516- *Info, *Address);
5517+ gcmkFOOTER_ARG("*Info=0x%X *Address=0x%08x",
5518+ *Info, *Address);
5519
5520- return gcvSTATUS_OK;
5521+ return gcvSTATUS_OK;
5522+ }
5523 }
5524 }
5525- else
5526+
5527+ /* Reference pages. */
5528+ for (i = 0; i < pageCount; i++)
5529 {
5530- gcmkONERROR(gcvSTATUS_OUT_OF_RESOURCES);
5531+ get_page(pages[i]);
5532 }
5533 }
5534 }
5535
5536- if (pages)
5537- {
5538- for (i = 0; i < pageCount; i++)
5539- {
5540- /* Flush(clean) the data cache. */
5541- gcmkONERROR(gckOS_CacheFlush(Os, _GetProcessID(), gcvNULL,
5542- (gctPOINTER)(gctUINTPTR_T)page_to_phys(pages[i]),
5543- (gctPOINTER)(memory & PAGE_MASK) + i*PAGE_SIZE,
5544- PAGE_SIZE));
5545- }
5546- }
5547- else
5548+ for (i = 0; i < pageCount; i++)
5549 {
5550+#ifdef CONFIG_ARM
5551+ gctUINT32 data;
5552+ get_user(data, (gctUINT32*)((memory & PAGE_MASK) + i * PAGE_SIZE));
5553+#endif
5554+
5555 /* Flush(clean) the data cache. */
5556 gcmkONERROR(gckOS_CacheFlush(Os, _GetProcessID(), gcvNULL,
5557- (gctPOINTER)(gctUINTPTR_T)(physical & PAGE_MASK),
5558- (gctPOINTER)(memory & PAGE_MASK),
5559- PAGE_SIZE * pageCount));
5560+ (gctPOINTER)(gctUINTPTR_T)page_to_phys(pages[i]),
5561+ (gctPOINTER)(memory & PAGE_MASK) + i*PAGE_SIZE,
5562+ PAGE_SIZE));
5563 }
5564
5565 #if gcdENABLE_VG
5566@@ -5464,20 +5603,14 @@ OnError:
5567 (gctPOINTER *) &pageTable,
5568 &address));
5569 }
5570+
5571 /* Fill the page table. */
5572 for (i = 0; i < pageCount; i++)
5573 {
5574 gctUINT32 phys;
5575 gctUINT32_PTR tab = pageTable + i * (PAGE_SIZE/4096);
5576
5577- if (pages)
5578- {
5579- phys = page_to_phys(pages[i]);
5580- }
5581- else
5582- {
5583- phys = (physical & PAGE_MASK) + i * PAGE_SIZE;
5584- }
5585+ phys = page_to_phys(pages[i]);
5586
5587 #if gcdENABLE_VG
5588 if (Core == gcvCORE_VG)
5589@@ -6126,7 +6259,7 @@ gckOS_CacheClean(
5590 #else
5591 dma_sync_single_for_device(
5592 gcvNULL,
5593- Physical,
5594+ (dma_addr_t)Physical,
5595 Bytes,
5596 DMA_TO_DEVICE);
5597 #endif
5598@@ -6205,7 +6338,7 @@ gckOS_CacheInvalidate(
5599 #else
5600 dma_sync_single_for_device(
5601 gcvNULL,
5602- Physical,
5603+ (dma_addr_t)Physical,
5604 Bytes,
5605 DMA_FROM_DEVICE);
5606 #endif
5607@@ -6279,7 +6412,7 @@ gckOS_CacheFlush(
5608 #else
5609 dma_sync_single_for_device(
5610 gcvNULL,
5611- Physical,
5612+ (dma_addr_t)Physical,
5613 Bytes,
5614 DMA_BIDIRECTIONAL);
5615 #endif
5616@@ -6827,6 +6960,9 @@ gckOS_SetGPUPower(
5617 struct clk *clk_2dcore = Os->device->clk_2d_core;
5618 struct clk *clk_2d_axi = Os->device->clk_2d_axi;
5619 struct clk *clk_vg_axi = Os->device->clk_vg_axi;
5620+#if LINUX_VERSION_CODE < KERNEL_VERSION(3,5,0) || LINUX_VERSION_CODE >= KERNEL_VERSION(3,10,0)
5621+ int ret;
5622+#endif
5623
5624 gctBOOL oldClockState = gcvFALSE;
5625 gctBOOL oldPowerState = gcvFALSE;
5626@@ -6852,9 +6988,13 @@ gckOS_SetGPUPower(
5627 }
5628 if((Power == gcvTRUE) && (oldPowerState == gcvFALSE))
5629 {
5630-#if LINUX_VERSION_CODE < KERNEL_VERSION(3,5,0)
5631- if(!IS_ERR(Os->device->gpu_regulator))
5632- regulator_enable(Os->device->gpu_regulator);
5633+#if LINUX_VERSION_CODE < KERNEL_VERSION(3,5,0) || LINUX_VERSION_CODE >= KERNEL_VERSION(3,10,0)
5634+ if(!IS_ERR(Os->device->gpu_regulator)) {
5635+ ret = regulator_enable(Os->device->gpu_regulator);
5636+ if (ret != 0)
5637+ gckOS_Print("%s(%d): fail to enable pu regulator %d!\n",
5638+ __FUNCTION__, __LINE__, ret);
5639+ }
5640 #else
5641 imx_gpc_power_up_pu(true);
5642 #endif
5643@@ -6969,7 +7109,7 @@ gckOS_SetGPUPower(
5644 pm_runtime_put_sync(Os->device->pmdev);
5645 #endif
5646
5647-#if LINUX_VERSION_CODE < KERNEL_VERSION(3,5,0)
5648+#if LINUX_VERSION_CODE < KERNEL_VERSION(3,5,0) || LINUX_VERSION_CODE >= KERNEL_VERSION(3,10,0)
5649 if(!IS_ERR(Os->device->gpu_regulator))
5650 regulator_disable(Os->device->gpu_regulator);
5651 #else
5652@@ -7033,6 +7173,10 @@ gckOS_ResetGPU(
5653 }
5654
5655 gcmkFOOTER_NO();
5656+#elif LINUX_VERSION_CODE >= KERNEL_VERSION(3,10,0)
5657+ struct reset_control *rstc = Os->device->rstc[Core];
5658+ if (rstc)
5659+ reset_control_reset(rstc);
5660 #else
5661 imx_src_reset_gpu((int)Core);
5662 #endif
5663@@ -8529,3 +8673,338 @@ gckOS_GetProcessNameByPid(
5664 return gcvSTATUS_OK;
5665 }
5666
5667+#if gcdANDROID_NATIVE_FENCE_SYNC
5668+
5669+gceSTATUS
5670+gckOS_CreateSyncPoint(
5671+ IN gckOS Os,
5672+ OUT gctSYNC_POINT * SyncPoint
5673+ )
5674+{
5675+ gceSTATUS status;
5676+ gcsSYNC_POINT_PTR syncPoint;
5677+
5678+ gcmkHEADER_ARG("Os=0x%X", Os);
5679+
5680+ /* Verify the arguments. */
5681+ gcmkVERIFY_OBJECT(Os, gcvOBJ_OS);
5682+
5683+ /* Create an sync point structure. */
5684+ syncPoint = (gcsSYNC_POINT_PTR) kmalloc(
5685+ sizeof(gcsSYNC_POINT), GFP_KERNEL | gcdNOWARN);
5686+
5687+ if (syncPoint == gcvNULL)
5688+ {
5689+ gcmkONERROR(gcvSTATUS_OUT_OF_MEMORY);
5690+ }
5691+
5692+ /* Initialize the sync point. */
5693+ atomic_set(&syncPoint->ref, 1);
5694+ atomic_set(&syncPoint->state, 0);
5695+
5696+ gcmkONERROR(_AllocateIntegerId(&Os->syncPointDB, syncPoint, &syncPoint->id));
5697+
5698+ *SyncPoint = (gctSYNC_POINT)(gctUINTPTR_T)syncPoint->id;
5699+
5700+ gcmkFOOTER_ARG("*SyncPonint=%d", syncPoint->id);
5701+ return gcvSTATUS_OK;
5702+
5703+OnError:
5704+ if (syncPoint != gcvNULL)
5705+ {
5706+ kfree(syncPoint);
5707+ }
5708+
5709+ gcmkFOOTER();
5710+ return status;
5711+}
5712+
5713+gceSTATUS
5714+gckOS_ReferenceSyncPoint(
5715+ IN gckOS Os,
5716+ IN gctSYNC_POINT SyncPoint
5717+ )
5718+{
5719+ gceSTATUS status;
5720+ gcsSYNC_POINT_PTR syncPoint;
5721+
5722+ gcmkHEADER_ARG("Os=0x%X", Os);
5723+
5724+ /* Verify the arguments. */
5725+ gcmkVERIFY_OBJECT(Os, gcvOBJ_OS);
5726+ gcmkVERIFY_ARGUMENT(SyncPoint != gcvNULL);
5727+
5728+ gcmkONERROR(
5729+ _QueryIntegerId(&Os->syncPointDB,
5730+ (gctUINT32)(gctUINTPTR_T)SyncPoint,
5731+ (gctPOINTER)&syncPoint));
5732+
5733+ /* Initialize the sync point. */
5734+ atomic_inc(&syncPoint->ref);
5735+
5736+ gcmkFOOTER_NO();
5737+ return gcvSTATUS_OK;
5738+
5739+OnError:
5740+ gcmkFOOTER();
5741+ return status;
5742+}
5743+
5744+gceSTATUS
5745+gckOS_DestroySyncPoint(
5746+ IN gckOS Os,
5747+ IN gctSYNC_POINT SyncPoint
5748+ )
5749+{
5750+ gceSTATUS status;
5751+ gcsSYNC_POINT_PTR syncPoint;
5752+ gctBOOL acquired = gcvFALSE;
5753+
5754+ gcmkHEADER_ARG("Os=0x%X SyncPoint=%d", Os, (gctUINT32)(gctUINTPTR_T)SyncPoint);
5755+
5756+ /* Verify the arguments. */
5757+ gcmkVERIFY_OBJECT(Os, gcvOBJ_OS);
5758+ gcmkVERIFY_ARGUMENT(SyncPoint != gcvNULL);
5759+
5760+ gcmkONERROR(gckOS_AcquireMutex(Os, Os->syncPointMutex, gcvINFINITE));
5761+ acquired = gcvTRUE;
5762+
5763+ gcmkONERROR(
5764+ _QueryIntegerId(&Os->syncPointDB,
5765+ (gctUINT32)(gctUINTPTR_T)SyncPoint,
5766+ (gctPOINTER)&syncPoint));
5767+
5768+ gcmkASSERT(syncPoint->id == (gctUINT32)(gctUINTPTR_T)SyncPoint);
5769+
5770+ if (atomic_dec_and_test(&syncPoint->ref))
5771+ {
5772+ gcmkVERIFY_OK(_DestroyIntegerId(&Os->syncPointDB, syncPoint->id));
5773+
5774+ /* Free the sgianl. */
5775+ syncPoint->timeline = gcvNULL;
5776+ kfree(syncPoint);
5777+ }
5778+
5779+ gcmkVERIFY_OK(gckOS_ReleaseMutex(Os, Os->syncPointMutex));
5780+ acquired = gcvFALSE;
5781+
5782+ /* Success. */
5783+ gcmkFOOTER_NO();
5784+ return gcvSTATUS_OK;
5785+
5786+OnError:
5787+ if (acquired)
5788+ {
5789+ /* Release the mutex. */
5790+ gcmkVERIFY_OK(gckOS_ReleaseMutex(Os, Os->syncPointMutex));
5791+ }
5792+
5793+ gcmkFOOTER();
5794+ return status;
5795+}
5796+
5797+gceSTATUS
5798+gckOS_SignalSyncPoint(
5799+ IN gckOS Os,
5800+ IN gctSYNC_POINT SyncPoint
5801+ )
5802+{
5803+ gceSTATUS status;
5804+ gcsSYNC_POINT_PTR syncPoint;
5805+ gctBOOL acquired = gcvFALSE;
5806+
5807+ gcmkHEADER_ARG("Os=0x%X SyncPoint=%d", Os, (gctUINT32)(gctUINTPTR_T)SyncPoint);
5808+
5809+ /* Verify the arguments. */
5810+ gcmkVERIFY_OBJECT(Os, gcvOBJ_OS);
5811+ gcmkVERIFY_ARGUMENT(SyncPoint != gcvNULL);
5812+
5813+ gcmkONERROR(gckOS_AcquireMutex(Os, Os->syncPointMutex, gcvINFINITE));
5814+ acquired = gcvTRUE;
5815+
5816+ gcmkONERROR(
5817+ _QueryIntegerId(&Os->syncPointDB,
5818+ (gctUINT32)(gctUINTPTR_T)SyncPoint,
5819+ (gctPOINTER)&syncPoint));
5820+
5821+ gcmkASSERT(syncPoint->id == (gctUINT32)(gctUINTPTR_T)SyncPoint);
5822+
5823+ /* Get state. */
5824+ atomic_set(&syncPoint->state, gcvTRUE);
5825+
5826+ /* Signal timeline. */
5827+ if (syncPoint->timeline)
5828+ {
5829+ sync_timeline_signal(syncPoint->timeline);
5830+ }
5831+
5832+ gcmkVERIFY_OK(gckOS_ReleaseMutex(Os, Os->syncPointMutex));
5833+ acquired = gcvFALSE;
5834+
5835+ /* Success. */
5836+ gcmkFOOTER_NO();
5837+ return gcvSTATUS_OK;
5838+
5839+OnError:
5840+ if (acquired)
5841+ {
5842+ /* Release the mutex. */
5843+ gcmkVERIFY_OK(gckOS_ReleaseMutex(Os, Os->syncPointMutex));
5844+ }
5845+
5846+ gcmkFOOTER();
5847+ return status;
5848+}
5849+
5850+gceSTATUS
5851+gckOS_QuerySyncPoint(
5852+ IN gckOS Os,
5853+ IN gctSYNC_POINT SyncPoint,
5854+ OUT gctBOOL_PTR State
5855+ )
5856+{
5857+ gceSTATUS status;
5858+ gcsSYNC_POINT_PTR syncPoint;
5859+
5860+ gcmkHEADER_ARG("Os=0x%X SyncPoint=%d", Os, (gctUINT32)(gctUINTPTR_T)SyncPoint);
5861+
5862+ /* Verify the arguments. */
5863+ gcmkVERIFY_OBJECT(Os, gcvOBJ_OS);
5864+ gcmkVERIFY_ARGUMENT(SyncPoint != gcvNULL);
5865+
5866+ gcmkONERROR(
5867+ _QueryIntegerId(&Os->syncPointDB,
5868+ (gctUINT32)(gctUINTPTR_T)SyncPoint,
5869+ (gctPOINTER)&syncPoint));
5870+
5871+ gcmkASSERT(syncPoint->id == (gctUINT32)(gctUINTPTR_T)SyncPoint);
5872+
5873+ /* Get state. */
5874+ *State = atomic_read(&syncPoint->state);
5875+
5876+ /* Success. */
5877+ gcmkFOOTER_ARG("*State=%d", *State);
5878+ return gcvSTATUS_OK;
5879+
5880+OnError:
5881+ gcmkFOOTER();
5882+ return status;
5883+}
5884+
5885+gceSTATUS
5886+gckOS_CreateSyncTimeline(
5887+ IN gckOS Os,
5888+ OUT gctHANDLE * Timeline
5889+ )
5890+{
5891+ struct viv_sync_timeline * timeline;
5892+
5893+ /* Create viv sync timeline. */
5894+ timeline = viv_sync_timeline_create("viv timeline", Os);
5895+
5896+ if (timeline == gcvNULL)
5897+ {
5898+ /* Out of memory. */
5899+ return gcvSTATUS_OUT_OF_MEMORY;
5900+ }
5901+
5902+ *Timeline = (gctHANDLE) timeline;
5903+ return gcvSTATUS_OK;
5904+}
5905+
5906+gceSTATUS
5907+gckOS_DestroySyncTimeline(
5908+ IN gckOS Os,
5909+ IN gctHANDLE Timeline
5910+ )
5911+{
5912+ struct viv_sync_timeline * timeline;
5913+ gcmkASSERT(Timeline != gcvNULL);
5914+
5915+ /* Destroy timeline. */
5916+ timeline = (struct viv_sync_timeline *) Timeline;
5917+ sync_timeline_destroy(&timeline->obj);
5918+
5919+ return gcvSTATUS_OK;
5920+}
5921+
5922+gceSTATUS
5923+gckOS_CreateNativeFence(
5924+ IN gckOS Os,
5925+ IN gctHANDLE Timeline,
5926+ IN gctSYNC_POINT SyncPoint,
5927+ OUT gctINT * FenceFD
5928+ )
5929+{
5930+ int fd = -1;
5931+ struct viv_sync_timeline *timeline;
5932+ struct sync_pt * pt = gcvNULL;
5933+ struct sync_fence * fence;
5934+ char name[32];
5935+ gcsSYNC_POINT_PTR syncPoint;
5936+ gceSTATUS status;
5937+
5938+ gcmkHEADER_ARG("Os=0x%X Timeline=0x%X SyncPoint=%d",
5939+ Os, Timeline, (gctUINT)(gctUINTPTR_T)SyncPoint);
5940+
5941+ gcmkONERROR(
5942+ _QueryIntegerId(&Os->syncPointDB,
5943+ (gctUINT32)(gctUINTPTR_T)SyncPoint,
5944+ (gctPOINTER)&syncPoint));
5945+
5946+ /* Cast timeline. */
5947+ timeline = (struct viv_sync_timeline *) Timeline;
5948+
5949+ fd = get_unused_fd();
5950+
5951+ if (fd < 0)
5952+ {
5953+ /* Out of resources. */
5954+ gcmkONERROR(gcvSTATUS_OUT_OF_RESOURCES);
5955+ }
5956+
5957+ /* Create viv_sync_pt. */
5958+ pt = viv_sync_pt_create(timeline, SyncPoint);
5959+
5960+ if (pt == gcvNULL)
5961+ {
5962+ gcmkONERROR(gcvSTATUS_OUT_OF_MEMORY);
5963+ }
5964+
5965+ /* Reference sync_timeline. */
5966+ syncPoint->timeline = &timeline->obj;
5967+
5968+ /* Build fence name. */
5969+ snprintf(name, 32, "viv sync_fence-%u", (gctUINT)(gctUINTPTR_T)SyncPoint);
5970+
5971+ /* Create sync_fence. */
5972+ fence = sync_fence_create(name, pt);
5973+
5974+ if (fence == NULL)
5975+ {
5976+ gcmkONERROR(gcvSTATUS_OUT_OF_MEMORY);
5977+ }
5978+
5979+ /* Install fence to fd. */
5980+ sync_fence_install(fence, fd);
5981+
5982+ *FenceFD = fd;
5983+ gcmkFOOTER_ARG("*FenceFD=%d", fd);
5984+ return gcvSTATUS_OK;
5985+
5986+OnError:
5987+ /* Error roll back. */
5988+ if (pt)
5989+ {
5990+ sync_pt_free(pt);
5991+ }
5992+
5993+ if (fd > 0)
5994+ {
5995+ put_unused_fd(fd);
5996+ }
5997+
5998+ gcmkFOOTER();
5999+ return status;
6000+}
6001+#endif
6002diff --git a/drivers/mxc/gpu-viv/hal/os/linux/kernel/gc_hal_kernel_sync.c b/drivers/mxc/gpu-viv/hal/os/linux/kernel/gc_hal_kernel_sync.c
6003new file mode 100644
6004index 0000000..7efae1c
6005--- /dev/null
6006+++ b/drivers/mxc/gpu-viv/hal/os/linux/kernel/gc_hal_kernel_sync.c
6007@@ -0,0 +1,174 @@
6008+/****************************************************************************
6009+*
6010+* Copyright (C) 2005 - 2013 by Vivante Corp.
6011+*
6012+* This program is free software; you can redistribute it and/or modify
6013+* it under the terms of the GNU General Public License as published by
6014+* the Free Software Foundation; either version 2 of the license, or
6015+* (at your option) any later version.
6016+*
6017+* This program is distributed in the hope that it will be useful,
6018+* but WITHOUT ANY WARRANTY; without even the implied warranty of
6019+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
6020+* GNU General Public License for more details.
6021+*
6022+* You should have received a copy of the GNU General Public License
6023+* along with this program; if not write to the Free Software
6024+* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
6025+*
6026+*****************************************************************************/
6027+
6028+
6029+#include <linux/kernel.h>
6030+#include <linux/file.h>
6031+#include <linux/fs.h>
6032+#include <linux/miscdevice.h>
6033+#include <linux/module.h>
6034+#include <linux/syscalls.h>
6035+#include <linux/uaccess.h>
6036+
6037+#include "gc_hal_kernel_sync.h"
6038+
6039+#if gcdANDROID_NATIVE_FENCE_SYNC
6040+
6041+static struct sync_pt *
6042+viv_sync_pt_dup(
6043+ struct sync_pt * sync_pt
6044+ )
6045+{
6046+ gceSTATUS status;
6047+ struct viv_sync_pt *pt;
6048+ struct viv_sync_pt *src;
6049+ struct viv_sync_timeline *obj;
6050+
6051+ src = (struct viv_sync_pt *) sync_pt;
6052+ obj = (struct viv_sync_timeline *) sync_pt->parent;
6053+
6054+ /* Create the new sync_pt. */
6055+ pt = (struct viv_sync_pt *)
6056+ sync_pt_create(&obj->obj, sizeof(struct viv_sync_pt));
6057+
6058+ pt->stamp = src->stamp;
6059+ pt->sync = src->sync;
6060+
6061+ /* Reference sync point. */
6062+ status = gckOS_ReferenceSyncPoint(obj->os, pt->sync);
6063+
6064+ if (gcmIS_ERROR(status))
6065+ {
6066+ sync_pt_free((struct sync_pt *)pt);
6067+ return NULL;
6068+ }
6069+
6070+ return (struct sync_pt *)pt;
6071+}
6072+
6073+static int
6074+viv_sync_pt_has_signaled(
6075+ struct sync_pt * sync_pt
6076+ )
6077+{
6078+ gceSTATUS status;
6079+ gctBOOL state;
6080+ struct viv_sync_pt * pt;
6081+ struct viv_sync_timeline * obj;
6082+
6083+ pt = (struct viv_sync_pt *)sync_pt;
6084+ obj = (struct viv_sync_timeline *)sync_pt->parent;
6085+
6086+ status = gckOS_QuerySyncPoint(obj->os, pt->sync, &state);
6087+
6088+ if (gcmIS_ERROR(status))
6089+ {
6090+ /* Error. */
6091+ return -1;
6092+ }
6093+
6094+ return state;
6095+}
6096+
6097+static int
6098+viv_sync_pt_compare(
6099+ struct sync_pt * a,
6100+ struct sync_pt * b
6101+ )
6102+{
6103+ int ret;
6104+ struct viv_sync_pt * pt1 = (struct viv_sync_pt *) a;
6105+ struct viv_sync_pt * pt2 = (struct viv_sync_pt *) b;
6106+
6107+ ret = (pt1->stamp < pt2->stamp) ? -1
6108+ : (pt1->stamp == pt2->stamp) ? 0
6109+ : 1;
6110+
6111+ return ret;
6112+}
6113+
6114+static void
6115+viv_sync_pt_free(
6116+ struct sync_pt * sync_pt
6117+ )
6118+{
6119+ struct viv_sync_pt * pt;
6120+ struct viv_sync_timeline * obj;
6121+
6122+ pt = (struct viv_sync_pt *) sync_pt;
6123+ obj = (struct viv_sync_timeline *) sync_pt->parent;
6124+
6125+ gckOS_DestroySyncPoint(obj->os, pt->sync);
6126+}
6127+
6128+static struct sync_timeline_ops viv_timeline_ops =
6129+{
6130+ .driver_name = "viv_sync",
6131+ .dup = viv_sync_pt_dup,
6132+ .has_signaled = viv_sync_pt_has_signaled,
6133+ .compare = viv_sync_pt_compare,
6134+ .free_pt = viv_sync_pt_free,
6135+};
6136+
6137+struct viv_sync_timeline *
6138+viv_sync_timeline_create(
6139+ const char * name,
6140+ gckOS os
6141+ )
6142+{
6143+ struct viv_sync_timeline * obj;
6144+
6145+ obj = (struct viv_sync_timeline *)
6146+ sync_timeline_create(&viv_timeline_ops, sizeof(struct viv_sync_timeline), name);
6147+
6148+ obj->os = os;
6149+ obj->stamp = 0;
6150+
6151+ return obj;
6152+}
6153+
6154+struct sync_pt *
6155+viv_sync_pt_create(
6156+ struct viv_sync_timeline * obj,
6157+ gctSYNC_POINT SyncPoint
6158+ )
6159+{
6160+ gceSTATUS status;
6161+ struct viv_sync_pt * pt;
6162+
6163+ pt = (struct viv_sync_pt *)
6164+ sync_pt_create(&obj->obj, sizeof(struct viv_sync_pt));
6165+
6166+ pt->stamp = obj->stamp++;
6167+ pt->sync = SyncPoint;
6168+
6169+ /* Dup signal. */
6170+ status = gckOS_ReferenceSyncPoint(obj->os, SyncPoint);
6171+
6172+ if (gcmIS_ERROR(status))
6173+ {
6174+ sync_pt_free((struct sync_pt *)pt);
6175+ return NULL;
6176+ }
6177+
6178+ return (struct sync_pt *) pt;
6179+}
6180+
6181+#endif
6182diff --git a/drivers/mxc/gpu-viv/hal/os/linux/kernel/gc_hal_kernel_sync.h b/drivers/mxc/gpu-viv/hal/os/linux/kernel/gc_hal_kernel_sync.h
6183new file mode 100644
6184index 0000000..6fc12e5
6185--- /dev/null
6186+++ b/drivers/mxc/gpu-viv/hal/os/linux/kernel/gc_hal_kernel_sync.h
6187@@ -0,0 +1,71 @@
6188+/****************************************************************************
6189+*
6190+* Copyright (C) 2005 - 2013 by Vivante Corp.
6191+*
6192+* This program is free software; you can redistribute it and/or modify
6193+* it under the terms of the GNU General Public License as published by
6194+* the Free Software Foundation; either version 2 of the license, or
6195+* (at your option) any later version.
6196+*
6197+* This program is distributed in the hope that it will be useful,
6198+* but WITHOUT ANY WARRANTY; without even the implied warranty of
6199+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
6200+* GNU General Public License for more details.
6201+*
6202+* You should have received a copy of the GNU General Public License
6203+* along with this program; if not write to the Free Software
6204+* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
6205+*
6206+*****************************************************************************/
6207+
6208+
6209+#ifndef __gc_hal_kernel_sync_h_
6210+#define __gc_hal_kernel_sync_h_
6211+
6212+#include <linux/types.h>
6213+
6214+#include <linux/sync.h>
6215+
6216+#include <gc_hal.h>
6217+#include <gc_hal_base.h>
6218+
6219+struct viv_sync_timeline
6220+{
6221+ /* Parent object. */
6222+ struct sync_timeline obj;
6223+
6224+ /* Timestamp when sync_pt is created. */
6225+ gctUINT stamp;
6226+
6227+ /* Pointer to os struct. */
6228+ gckOS os;
6229+};
6230+
6231+
6232+struct viv_sync_pt
6233+{
6234+ /* Parent object. */
6235+ struct sync_pt pt;
6236+
6237+ /* Reference sync point*/
6238+ gctSYNC_POINT sync;
6239+
6240+ /* Timestamp when sync_pt is created. */
6241+ gctUINT stamp;
6242+};
6243+
6244+/* Create viv_sync_timeline object. */
6245+struct viv_sync_timeline *
6246+viv_sync_timeline_create(
6247+ const char * Name,
6248+ gckOS Os
6249+ );
6250+
6251+/* Create viv_sync_pt object. */
6252+struct sync_pt *
6253+viv_sync_pt_create(
6254+ struct viv_sync_timeline * Obj,
6255+ gctSYNC_POINT SyncPoint
6256+ );
6257+
6258+#endif /* __gc_hal_kernel_sync_h_ */
6259--
62601.7.9.5
6261
diff --git a/recipes-kernel/linux/linux-boundary-3.0.35/drm-vivante-Add-00-sufix-in-returned-bus-Id.patch b/recipes-kernel/linux/linux-boundary-3.0.35/drm-vivante-Add-00-sufix-in-returned-bus-Id.patch
new file mode 100644
index 0000000..815d02c
--- /dev/null
+++ b/recipes-kernel/linux/linux-boundary-3.0.35/drm-vivante-Add-00-sufix-in-returned-bus-Id.patch
@@ -0,0 +1,31 @@
1From b37a944f55a5010bd08297a63db0275540922f32 Mon Sep 17 00:00:00 2001
2From: Otavio Salvador <otavio@ossystems.com.br>
3Date: Thu, 22 Aug 2013 16:31:29 -0300
4Subject: [PATCH] drm/vivante: Add ":00" sufix in returned bus Id
5
6This makes the 3.0.35 compatible with a Xorg driver build for 3.5.7 or
7newer kernels.
8
9Upstream-Status: Inapropriate [embedded specific]
10
11Signed-off-by: Otavio Salvador <otavio@ossystems.com.br>
12---
13 drivers/gpu/drm/vivante/vivante_drv.c | 2 +-
14 1 file changed, 1 insertion(+), 1 deletion(-)
15
16diff --git a/drivers/gpu/drm/vivante/vivante_drv.c b/drivers/gpu/drm/vivante/vivante_drv.c
17index 4224608..cea360d 100644
18--- a/drivers/gpu/drm/vivante/vivante_drv.c
19+++ b/drivers/gpu/drm/vivante/vivante_drv.c
20@@ -55,7 +55,7 @@
21
22 #include "drm_pciids.h"
23
24-static char platformdevicename[] = "Vivante GCCore";
25+static char platformdevicename[] = "Vivante GCCore:00";
26 static struct platform_device *pplatformdev;
27
28 static struct drm_driver driver = {
29--
301.8.4.rc1
31
diff --git a/recipes-kernel/linux/linux-boundary-3.0.35/nitrogen6x-lite/defconfig b/recipes-kernel/linux/linux-boundary-3.0.35/nitrogen6x-lite/defconfig
new file mode 100644
index 0000000..1d205fd
--- /dev/null
+++ b/recipes-kernel/linux/linux-boundary-3.0.35/nitrogen6x-lite/defconfig
@@ -0,0 +1,262 @@
1CONFIG_EXPERIMENTAL=y
2CONFIG_SYSVIPC=y
3CONFIG_FHANDLE=y
4CONFIG_IKCONFIG=y
5CONFIG_IKCONFIG_PROC=y
6CONFIG_LOG_BUF_SHIFT=14
7CONFIG_CGROUPS=y
8CONFIG_BLK_DEV_INITRD=y
9CONFIG_EMBEDDED=y
10CONFIG_PERF_EVENTS=y
11CONFIG_MODULES=y
12CONFIG_MODULE_UNLOAD=y
13CONFIG_MODULE_FORCE_UNLOAD=y
14CONFIG_MODVERSIONS=y
15CONFIG_ARCH_MXC=y
16CONFIG_GPIO_PCA953X=y
17CONFIG_ARCH_MX6=y
18CONFIG_FORCE_MAX_ZONEORDER=14
19CONFIG_MACH_MX6_NIT6XLITE=y
20CONFIG_IMX_PCIE=y
21CONFIG_PCIE_FORCE_GEN1=y
22CONFIG_USB_EHCI_ARC_H1=y
23CONFIG_USB_FSL_ARC_OTG=y
24CONFIG_MXC_PWM=y
25CONFIG_MXC_REBOOT_MFGMODE=y
26CONFIG_CLK_DEBUG=y
27CONFIG_DMA_ZONE_SIZE=184
28# CONFIG_SWP_EMULATE is not set
29CONFIG_ARM_ERRATA_743622=y
30CONFIG_ARM_ERRATA_751472=y
31CONFIG_ARM_ERRATA_754322=y
32CONFIG_ARM_ERRATA_775420=y
33CONFIG_PCI_MSI=y
34CONFIG_PCIEPORTBUS=y
35CONFIG_ARM_ERRATA_764369=y
36CONFIG_NO_HZ=y
37CONFIG_HIGH_RES_TIMERS=y
38CONFIG_SMP=y
39CONFIG_VMSPLIT_2G=y
40CONFIG_PREEMPT=y
41CONFIG_AEABI=y
42# CONFIG_OABI_COMPAT is not set
43CONFIG_HIGHMEM=y
44CONFIG_COMPACTION=y
45CONFIG_KSM=y
46CONFIG_SECCOMP=y
47CONFIG_ZBOOT_ROM_TEXT=0x0
48CONFIG_ZBOOT_ROM_BSS=0x0
49CONFIG_CMDLINE="noinitrd console=ttymxc0,115200 root=/dev/mtdblock2 rw rootfstype=jffs2 ip=off"
50CONFIG_CPU_FREQ=y
51CONFIG_CPU_FREQ_DEFAULT_GOV_INTERACTIVE=y
52CONFIG_CPU_FREQ_GOV_PERFORMANCE=y
53CONFIG_CPU_FREQ_GOV_POWERSAVE=y
54CONFIG_CPU_FREQ_GOV_USERSPACE=y
55CONFIG_CPU_FREQ_GOV_ONDEMAND=y
56CONFIG_CPU_FREQ_GOV_CONSERVATIVE=y
57CONFIG_CPU_FREQ_IMX=y
58CONFIG_VFP=y
59CONFIG_NEON=y
60# CONFIG_CORE_DUMP_DEFAULT_ELF_HEADERS is not set
61CONFIG_SUSPEND_DEVICE_TIME_DEBUG=y
62CONFIG_PM_RUNTIME=y
63CONFIG_PM_DEBUG=y
64CONFIG_APM_EMULATION=y
65CONFIG_NET=y
66CONFIG_PACKET=y
67CONFIG_UNIX=y
68CONFIG_INET=y
69CONFIG_IP_MULTICAST=y
70CONFIG_IP_PNP=y
71CONFIG_IP_PNP_DHCP=y
72CONFIG_IP_PNP_BOOTP=y
73# CONFIG_INET_LRO is not set
74CONFIG_IPV6=y
75CONFIG_NETFILTER=y
76CONFIG_LLC2=y
77CONFIG_CAN=y
78CONFIG_CAN_RAW=y
79CONFIG_CAN_BCM=y
80CONFIG_CAN_VCAN=y
81CONFIG_BT=y
82CONFIG_BT_L2CAP=y
83CONFIG_BT_SCO=y
84CONFIG_BT_RFCOMM=y
85CONFIG_BT_RFCOMM_TTY=y
86CONFIG_BT_BNEP=y
87CONFIG_BT_BNEP_MC_FILTER=y
88CONFIG_BT_BNEP_PROTO_FILTER=y
89CONFIG_BT_HIDP=y
90CONFIG_BT_HCIUART=y
91CONFIG_BT_HCIUART_H4=y
92CONFIG_CFG80211=y
93# CONFIG_WIRELESS_EXT_SYSFS is not set
94CONFIG_RFKILL=y
95CONFIG_RFKILL_INPUT=y
96CONFIG_DEVTMPFS=y
97CONFIG_DEVTMPFS_MOUNT=y
98CONFIG_CONNECTOR=y
99CONFIG_MTD=y
100CONFIG_MTD_CMDLINE_PARTS=y
101CONFIG_MTD_CHAR=y
102CONFIG_MTD_BLOCK=y
103CONFIG_MTD_M25P80=y
104CONFIG_MTD_NAND=y
105CONFIG_MTD_UBI=y
106CONFIG_BLK_DEV_LOOP=y
107CONFIG_MISC_DEVICES=y
108CONFIG_MXS_PERFMON=m
109CONFIG_MD=y
110CONFIG_BLK_DEV_DM=y
111CONFIG_NETDEVICES=y
112CONFIG_TUN=y
113CONFIG_MII=y
114CONFIG_MICREL_PHY=y
115CONFIG_NET_ETHERNET=y
116CONFIG_FEC_NAPI=y
117# CONFIG_NETDEV_1000 is not set
118# CONFIG_NETDEV_10000 is not set
119CONFIG_BCMDHD=m
120CONFIG_BCMDHD_FW_PATH="/lib/firmware/fw_bcmdhd.bin"
121CONFIG_BCMDHD_NVRAM_PATH="/lib/firmware/bcmdhd.cal"
122CONFIG_INPUT_POLLDEV=y
123CONFIG_INPUT_EVDEV=y
124CONFIG_KEYBOARD_GPIO=y
125# CONFIG_INPUT_MOUSE is not set
126CONFIG_INPUT_TOUCHSCREEN=y
127CONFIG_TOUCHSCREEN_EGALAX=y
128CONFIG_TOUCHSCREEN_EGALAX_SINGLE_TOUCH=y
129CONFIG_TOUCHSCREEN_FT5X06=y
130CONFIG_TOUCHSCREEN_FT5X06_SINGLE_TOUCH=y
131CONFIG_TOUCHSCREEN_TSC2004=y
132CONFIG_INPUT_MISC=y
133CONFIG_INPUT_UINPUT=y
134CONFIG_VT_HW_CONSOLE_BINDING=y
135CONFIG_SERIAL_IMX=y
136CONFIG_SERIAL_IMX_CONSOLE=y
137CONFIG_FSL_OTP=y
138CONFIG_HW_RANDOM=y
139CONFIG_MXS_VIIM=y
140CONFIG_I2C_CHARDEV=y
141CONFIG_I2C_MUX=y
142CONFIG_I2C_MUX_GPIO=y
143CONFIG_I2C_IMX=y
144CONFIG_SPI=y
145CONFIG_SPI_IMX=y
146CONFIG_GPIO_SYSFS=y
147CONFIG_SENSORS_MAX17135=y
148CONFIG_SENSORS_MAG3110=y
149# CONFIG_MXC_MMA8450 is not set
150CONFIG_WATCHDOG=y
151CONFIG_WATCHDOG_NOWAYOUT=y
152CONFIG_IMX2_WDT=y
153CONFIG_MFD_WM8994=y
154CONFIG_MFD_PFUZE=y
155CONFIG_MFD_MAX17135=y
156CONFIG_REGULATOR=y
157CONFIG_REGULATOR_FIXED_VOLTAGE=y
158CONFIG_REGULATOR_PFUZE100=y
159CONFIG_REGULATOR_MAX17135=y
160CONFIG_MEDIA_SUPPORT=y
161CONFIG_VIDEO_DEV=y
162# CONFIG_RC_CORE is not set
163# CONFIG_MEDIA_TUNER_CUSTOMISE is not set
164# CONFIG_VIDEO_MXC_CAMERA is not set
165# CONFIG_V4L_USB_DRIVERS is not set
166# CONFIG_RADIO_ADAPTERS is not set
167CONFIG_FB=y
168CONFIG_BACKLIGHT_LCD_SUPPORT=y
169# CONFIG_LCD_CLASS_DEVICE is not set
170CONFIG_BACKLIGHT_CLASS_DEVICE=y
171# CONFIG_BACKLIGHT_GENERIC is not set
172CONFIG_BACKLIGHT_PWM=y
173CONFIG_FB_MXC_LDB=y
174CONFIG_FB_MXC_HDMI=y
175CONFIG_LOGO=y
176CONFIG_SOUND=y
177CONFIG_SND=y
178# CONFIG_SND_DRIVERS is not set
179# CONFIG_SND_ARM is not set
180# CONFIG_SND_SPI is not set
181# CONFIG_SND_USB is not set
182CONFIG_SND_SOC=y
183CONFIG_SND_IMX_SOC=y
184CONFIG_SND_SOC_IMX_SGTL5000=y
185CONFIG_SND_SOC_IMX_SPDIF=y
186CONFIG_SND_SOC_IMX_HDMI=y
187CONFIG_HIDRAW=y
188CONFIG_HID_QUANTA=y
189CONFIG_USB=y
190CONFIG_USB_DEVICEFS=y
191# CONFIG_USB_DEVICE_CLASS is not set
192CONFIG_USB_SUSPEND=y
193# CONFIG_USB_OTG_WHITELIST is not set
194CONFIG_USB_EHCI_HCD=y
195CONFIG_USB_EHCI_ARC=y
196CONFIG_USB_EHCI_ROOT_HUB_TT=y
197# CONFIG_USB_EHCI_TT_NEWSCHED is not set
198CONFIG_USB_ACM=y
199CONFIG_USB_SERIAL=y
200CONFIG_USB_SERIAL_QUALCOMM=y
201CONFIG_USB_SERIAL_OPTION=y
202CONFIG_USB_GADGET=y
203CONFIG_USB_G_SERIAL=m
204CONFIG_MXC_OTG=y
205CONFIG_MMC=y
206CONFIG_MMC_UNSAFE_RESUME=y
207CONFIG_MMC_SDHCI=y
208CONFIG_MMC_SDHCI_PLTFM=y
209CONFIG_MMC_SDHCI_ESDHC_IMX=y
210CONFIG_NEW_LEDS=y
211CONFIG_LEDS_CLASS=y
212CONFIG_LEDS_GPIO=y
213CONFIG_LEDS_TRIGGERS=y
214CONFIG_LEDS_TRIGGER_GPIO=y
215CONFIG_LEDS_TRIGGER_DEFAULT_ON=y
216CONFIG_RTC_CLASS=y
217CONFIG_RTC_INTF_DEV_UIE_EMUL=y
218CONFIG_RTC_DRV_ISL1208=y
219CONFIG_DMADEVICES=y
220CONFIG_IMX_SDMA=y
221CONFIG_MXC_IPU=y
222# CONFIG_MXC_HMP4E is not set
223# CONFIG_MXC_HWEVENT is not set
224CONFIG_MXC_ASRC=y
225CONFIG_MXC_GPU_VIV=y
226CONFIG_EXT2_FS=y
227CONFIG_EXT3_FS=y
228# CONFIG_EXT3_DEFAULTS_TO_ORDERED is not set
229CONFIG_EXT4_FS=y
230CONFIG_AUTOFS4_FS=y
231CONFIG_MSDOS_FS=y
232CONFIG_VFAT_FS=y
233CONFIG_TMPFS=y
234CONFIG_TMPFS_POSIX_ACL=y
235CONFIG_SQUASHFS=y
236CONFIG_NFS_FS=y
237CONFIG_NFS_V3=y
238CONFIG_ROOT_NFS=y
239CONFIG_PARTITION_ADVANCED=y
240CONFIG_EFI_PARTITION=y
241CONFIG_NLS_CODEPAGE_437=y
242CONFIG_NLS_ASCII=y
243CONFIG_NLS_ISO8859_1=y
244CONFIG_NLS_UTF8=y
245CONFIG_MAGIC_SYSRQ=y
246CONFIG_DEBUG_FS=y
247CONFIG_SYSCTL_SYSCALL_CHECK=y
248# CONFIG_CRYPTO_MANAGER_DISABLE_TESTS is not set
249CONFIG_CRYPTO_TEST=m
250CONFIG_CRYPTO_CCM=y
251CONFIG_CRYPTO_GCM=y
252CONFIG_CRYPTO_CBC=y
253CONFIG_CRYPTO_CTS=y
254CONFIG_CRYPTO_LRW=y
255CONFIG_CRYPTO_PCBC=y
256CONFIG_CRYPTO_XTS=y
257CONFIG_CRYPTO_DES=y
258# CONFIG_CRYPTO_ANSI_CPRNG is not set
259CONFIG_CRYPTO_DEV_FSL_CAAM=y
260# CONFIG_CRYPTO_DEV_FSL_CAAM_AHASH_API is not set
261CONFIG_CRC_CCITT=m
262CONFIG_FHANDLE=y
diff --git a/recipes-kernel/linux/linux-boundary-3.0.35/nitrogen6x/defconfig b/recipes-kernel/linux/linux-boundary-3.0.35/nitrogen6x/defconfig
new file mode 100644
index 0000000..6567422
--- /dev/null
+++ b/recipes-kernel/linux/linux-boundary-3.0.35/nitrogen6x/defconfig
@@ -0,0 +1,281 @@
1CONFIG_EXPERIMENTAL=y
2CONFIG_SYSVIPC=y
3CONFIG_FHANDLE=y
4CONFIG_IKCONFIG=y
5CONFIG_IKCONFIG_PROC=y
6CONFIG_LOG_BUF_SHIFT=14
7CONFIG_CGROUPS=y
8CONFIG_BLK_DEV_INITRD=y
9CONFIG_EMBEDDED=y
10CONFIG_PERF_EVENTS=y
11CONFIG_MODULES=y
12CONFIG_MODULE_UNLOAD=y
13CONFIG_MODULE_FORCE_UNLOAD=y
14CONFIG_MODVERSIONS=y
15CONFIG_ARCH_MXC=y
16CONFIG_GPIO_PCA953X=y
17CONFIG_ARCH_MX6=y
18CONFIG_FORCE_MAX_ZONEORDER=14
19CONFIG_MACH_MX6_NITROGEN6X=y
20CONFIG_IMX_PCIE=y
21CONFIG_PCIE_FORCE_GEN1=y
22CONFIG_USB_EHCI_ARC_H1=y
23CONFIG_USB_FSL_ARC_OTG=y
24CONFIG_MXC_PWM=y
25CONFIG_MXC_REBOOT_MFGMODE=y
26CONFIG_CLK_DEBUG=y
27CONFIG_DMA_ZONE_SIZE=184
28# CONFIG_SWP_EMULATE is not set
29CONFIG_ARM_ERRATA_743622=y
30CONFIG_ARM_ERRATA_751472=y
31CONFIG_ARM_ERRATA_754322=y
32CONFIG_ARM_ERRATA_775420=y
33CONFIG_PCI_MSI=y
34CONFIG_PCIEPORTBUS=y
35CONFIG_ARM_ERRATA_764369=y
36CONFIG_NO_HZ=y
37CONFIG_HIGH_RES_TIMERS=y
38CONFIG_SMP=y
39CONFIG_PREEMPT=y
40CONFIG_AEABI=y
41# CONFIG_OABI_COMPAT is not set
42CONFIG_HIGHMEM=y
43CONFIG_COMPACTION=y
44CONFIG_KSM=y
45CONFIG_SECCOMP=y
46CONFIG_ZBOOT_ROM_TEXT=0x0
47CONFIG_ZBOOT_ROM_BSS=0x0
48CONFIG_CMDLINE="noinitrd console=ttymxc1,115200 root=/dev/mmcblk0p1"
49CONFIG_CPU_FREQ=y
50CONFIG_CPU_FREQ_DEFAULT_GOV_INTERACTIVE=y
51CONFIG_CPU_FREQ_GOV_PERFORMANCE=y
52CONFIG_CPU_FREQ_GOV_POWERSAVE=y
53CONFIG_CPU_FREQ_GOV_USERSPACE=y
54CONFIG_CPU_FREQ_GOV_ONDEMAND=y
55CONFIG_CPU_FREQ_GOV_CONSERVATIVE=y
56CONFIG_CPU_FREQ_IMX=y
57CONFIG_VFP=y
58CONFIG_NEON=y
59# CONFIG_CORE_DUMP_DEFAULT_ELF_HEADERS is not set
60CONFIG_SUSPEND_DEVICE_TIME_DEBUG=y
61CONFIG_PM_RUNTIME=y
62CONFIG_PM_DEBUG=y
63CONFIG_APM_EMULATION=y
64CONFIG_NET=y
65CONFIG_PACKET=y
66CONFIG_UNIX=y
67CONFIG_INET=y
68CONFIG_IP_MULTICAST=y
69CONFIG_IP_PNP=y
70CONFIG_IP_PNP_DHCP=y
71CONFIG_IP_PNP_BOOTP=y
72# CONFIG_INET_LRO is not set
73CONFIG_IPV6=y
74CONFIG_NETFILTER=y
75CONFIG_LLC2=y
76CONFIG_CAN=y
77CONFIG_CAN_RAW=y
78CONFIG_CAN_BCM=y
79CONFIG_CAN_VCAN=y
80CONFIG_CAN_FLEXCAN=y
81CONFIG_BT=y
82CONFIG_BT_L2CAP=y
83CONFIG_BT_SCO=y
84CONFIG_BT_RFCOMM=y
85CONFIG_BT_RFCOMM_TTY=y
86CONFIG_BT_BNEP=y
87CONFIG_BT_BNEP_MC_FILTER=y
88CONFIG_BT_BNEP_PROTO_FILTER=y
89CONFIG_BT_HIDP=y
90CONFIG_BT_HCIBTUSB=m
91CONFIG_BT_HCIUART=y
92CONFIG_BT_HCIUART_LL=y
93CONFIG_CFG80211=y
94CONFIG_MAC80211=y
95CONFIG_RFKILL=y
96CONFIG_RFKILL_INPUT=y
97CONFIG_DEVTMPFS=y
98CONFIG_DEVTMPFS_MOUNT=y
99CONFIG_CONNECTOR=y
100CONFIG_MTD=y
101CONFIG_MTD_CMDLINE_PARTS=y
102CONFIG_MTD_CHAR=y
103CONFIG_MTD_BLOCK=y
104CONFIG_MTD_M25P80=y
105CONFIG_BLK_DEV_LOOP=y
106CONFIG_MISC_DEVICES=y
107CONFIG_MXS_PERFMON=m
108CONFIG_BLK_DEV_SD=y
109CONFIG_SCSI_MULTI_LUN=y
110CONFIG_ATA=y
111# CONFIG_SATA_PMP is not set
112CONFIG_SATA_AHCI_PLATFORM=y
113CONFIG_MD=y
114CONFIG_BLK_DEV_DM=y
115CONFIG_NETDEVICES=y
116CONFIG_TUN=y
117CONFIG_MII=y
118CONFIG_MICREL_PHY=y
119CONFIG_NET_ETHERNET=y
120CONFIG_FEC_NAPI=y
121# CONFIG_NETDEV_1000 is not set
122# CONFIG_NETDEV_10000 is not set
123CONFIG_HOSTAP=y
124CONFIG_WL12XX_MENU=y
125CONFIG_WL12XX=y
126CONFIG_WL12XX_SDIO=m
127CONFIG_INPUT_POLLDEV=y
128CONFIG_INPUT_EVDEV=y
129CONFIG_KEYBOARD_GPIO=y
130# CONFIG_INPUT_MOUSE is not set
131CONFIG_INPUT_TOUCHSCREEN=y
132CONFIG_TOUCHSCREEN_EGALAX=y
133CONFIG_TOUCHSCREEN_EGALAX_SINGLE_TOUCH=y
134CONFIG_TOUCHSCREEN_FT5X06=y
135CONFIG_TOUCHSCREEN_FT5X06_SINGLE_TOUCH=y
136CONFIG_TOUCHSCREEN_TSC2004=y
137CONFIG_INPUT_MISC=y
138CONFIG_INPUT_UINPUT=y
139CONFIG_VT_HW_CONSOLE_BINDING=y
140CONFIG_SERIAL_IMX=y
141CONFIG_SERIAL_IMX_CONSOLE=y
142CONFIG_FSL_OTP=y
143CONFIG_HW_RANDOM=y
144CONFIG_MXS_VIIM=y
145CONFIG_I2C_CHARDEV=y
146CONFIG_I2C_IMX=y
147CONFIG_SPI=y
148CONFIG_SPI_IMX=y
149CONFIG_GPIO_SYSFS=y
150CONFIG_WATCHDOG=y
151CONFIG_WATCHDOG_NOWAYOUT=y
152CONFIG_IMX2_WDT=y
153CONFIG_REGULATOR=y
154CONFIG_REGULATOR_FIXED_VOLTAGE=y
155CONFIG_MEDIA_SUPPORT=y
156CONFIG_VIDEO_DEV=y
157# CONFIG_RC_CORE is not set
158# CONFIG_MEDIA_TUNER_CUSTOMISE is not set
159CONFIG_VIDEO_MXC_CAMERA=m
160CONFIG_MXC_CAMERA_OV5640=m
161CONFIG_MXC_CAMERA_OV5642=m
162CONFIG_MXC_IPU_DEVICE_QUEUE_SDC=m
163CONFIG_USB_VIDEO_CLASS=m
164# CONFIG_RADIO_ADAPTERS is not set
165CONFIG_DRM=m
166CONFIG_DRM_VIVANTE=m
167CONFIG_FB=y
168CONFIG_BACKLIGHT_LCD_SUPPORT=y
169# CONFIG_LCD_CLASS_DEVICE is not set
170CONFIG_BACKLIGHT_CLASS_DEVICE=y
171# CONFIG_BACKLIGHT_GENERIC is not set
172CONFIG_BACKLIGHT_PWM=y
173CONFIG_FB_MXC_LDB=y
174CONFIG_FB_MXC_BT656=y
175CONFIG_FB_MXC_MIPI_DSI=y
176CONFIG_FB_MXC_TRULY_WVGA_SYNC_PANEL=y
177CONFIG_FB_MXC_HDMI=y
178CONFIG_FRAMEBUFFER_CONSOLE=y
179CONFIG_FONTS=y
180CONFIG_FONT_8x16=y
181CONFIG_LOGO=y
182CONFIG_SOUND=y
183CONFIG_SND=y
184CONFIG_SND_USB_AUDIO=y
185CONFIG_SND_SOC=y
186CONFIG_SND_IMX_SOC=y
187CONFIG_SND_SOC_IMX_SGTL5000=y
188CONFIG_SND_SOC_IMX_SPDIF=y
189CONFIG_SND_SOC_IMX_HDMI=y
190CONFIG_HIDRAW=y
191CONFIG_HID_NTRIG=y
192CONFIG_HID_QUANTA=y
193CONFIG_USB=y
194CONFIG_USB_DEVICEFS=y
195# CONFIG_USB_DEVICE_CLASS is not set
196CONFIG_USB_SUSPEND=y
197# CONFIG_USB_OTG_WHITELIST is not set
198CONFIG_USB_XHCI_HCD=m
199CONFIG_USB_EHCI_HCD=y
200CONFIG_USB_EHCI_ARC=y
201CONFIG_USB_EHCI_ROOT_HUB_TT=y
202# CONFIG_USB_EHCI_TT_NEWSCHED is not set
203CONFIG_USB_ACM=y
204CONFIG_USB_STORAGE=y
205CONFIG_USB_SERIAL=y
206CONFIG_USB_SERIAL_FTDI_SIO=y
207CONFIG_USB_SERIAL_CP210X=y
208CONFIG_USB_SERIAL_PL2303=y
209CONFIG_USB_SERIAL_QUALCOMM=y
210CONFIG_USB_SERIAL_OPTION=y
211CONFIG_USB_SERIAL_KEYSPAN=y
212CONFIG_USB_GADGET=y
213CONFIG_USB_ETH=m
214CONFIG_USB_FILE_STORAGE=m
215CONFIG_USB_MASS_STORAGE=m
216CONFIG_USB_G_SERIAL=m
217CONFIG_USB_CDC_COMPOSITE=m
218CONFIG_MXC_OTG=y
219CONFIG_MMC=y
220CONFIG_MMC_UNSAFE_RESUME=y
221CONFIG_MMC_SDHCI=y
222CONFIG_MMC_SDHCI_PLTFM=y
223CONFIG_MMC_SDHCI_ESDHC_IMX=y
224CONFIG_NEW_LEDS=y
225CONFIG_LEDS_CLASS=y
226CONFIG_LEDS_GPIO=y
227CONFIG_LEDS_TRIGGERS=y
228CONFIG_LEDS_TRIGGER_GPIO=y
229CONFIG_LEDS_TRIGGER_DEFAULT_ON=y
230CONFIG_RTC_CLASS=y
231CONFIG_RTC_INTF_DEV_UIE_EMUL=y
232CONFIG_RTC_DRV_ISL1208=y
233CONFIG_RTC_DRV_SNVS=y
234CONFIG_DMADEVICES=y
235CONFIG_MXC_PXP_V2=y
236CONFIG_IMX_SDMA=y
237CONFIG_MXC_IPU=y
238# CONFIG_MXC_HMP4E is not set
239# CONFIG_MXC_HWEVENT is not set
240CONFIG_MXC_ASRC=y
241CONFIG_MXC_GPU_VIV=y
242CONFIG_MXC_MIPI_CSI2=y
243CONFIG_EXT2_FS=y
244CONFIG_EXT3_FS=y
245# CONFIG_EXT3_DEFAULTS_TO_ORDERED is not set
246CONFIG_EXT4_FS=y
247CONFIG_AUTOFS4_FS=y
248CONFIG_MSDOS_FS=y
249CONFIG_VFAT_FS=y
250CONFIG_TMPFS=y
251CONFIG_TMPFS_POSIX_ACL=y
252CONFIG_SQUASHFS=y
253CONFIG_NFS_FS=y
254CONFIG_NFS_V3=y
255CONFIG_ROOT_NFS=y
256CONFIG_PARTITION_ADVANCED=y
257CONFIG_EFI_PARTITION=y
258CONFIG_NLS_CODEPAGE_437=y
259CONFIG_NLS_ASCII=m
260CONFIG_NLS_ISO8859_1=y
261CONFIG_NLS_UTF8=m
262CONFIG_MAGIC_SYSRQ=y
263CONFIG_DEBUG_FS=y
264CONFIG_SYSCTL_SYSCALL_CHECK=y
265# CONFIG_CRYPTO_MANAGER_DISABLE_TESTS is not set
266CONFIG_CRYPTO_TEST=m
267CONFIG_CRYPTO_CCM=y
268CONFIG_CRYPTO_GCM=y
269CONFIG_CRYPTO_CBC=y
270CONFIG_CRYPTO_CTS=y
271CONFIG_CRYPTO_LRW=y
272CONFIG_CRYPTO_PCBC=y
273CONFIG_CRYPTO_XTS=y
274CONFIG_CRYPTO_DES=y
275CONFIG_CRYPTO_DEFLATE=y
276CONFIG_CRYPTO_LZO=y
277# CONFIG_CRYPTO_ANSI_CPRNG is not set
278CONFIG_CRYPTO_DEV_FSL_CAAM=y
279# CONFIG_CRYPTO_DEV_FSL_CAAM_AHASH_API is not set
280CONFIG_CRC_CCITT=m
281CONFIG_FHANDLE=y
diff --git a/recipes-kernel/linux/linux-boundary-3.10.17/Fix-imx6qsabrelite-perftop-crash.patch b/recipes-kernel/linux/linux-boundary-3.10.17/Fix-imx6qsabrelite-perftop-crash.patch
new file mode 100644
index 0000000..72a1629
--- /dev/null
+++ b/recipes-kernel/linux/linux-boundary-3.10.17/Fix-imx6qsabrelite-perftop-crash.patch
@@ -0,0 +1,21 @@
1Fix perf-top crash on imx6qsabrelite
2
3http://www.spinics.net/lists/arm-kernel/msg225176.html
4
5Signed-off-by: Liviu Gheorghisan <liviu.gheorghisan@enea.com>
6---
7diff --git a/arch/arm/boot/dts/imx6q.dtsi b/arch/arm/boot/dts/imx6q.dtsi
8index 5806312..9540094 100644
9--- a/arch/arm/boot/dts/imx6q.dtsi
10+++ b/arch/arm/boot/dts/imx6q.dtsi
11@@ -144,6 +144,10 @@
12 status = "disabled";
13 };
14
15+ pmu {
16+ compatible = "arm, cortex-a9-pmu";
17+ interrupts = <0 94 0x04>;
18+ };
19
20 aips-bus@02000000 { /* AIPS1 */
21 spba-bus@02000000 {
diff --git a/recipes-kernel/linux/linux-boundary-3.10.17/nitrogen6x-lite/defconfig b/recipes-kernel/linux/linux-boundary-3.10.17/nitrogen6x-lite/defconfig
new file mode 100644
index 0000000..dbe579e
--- /dev/null
+++ b/recipes-kernel/linux/linux-boundary-3.10.17/nitrogen6x-lite/defconfig
@@ -0,0 +1,312 @@
1CONFIG_KERNEL_LZO=y
2CONFIG_SYSVIPC=y
3CONFIG_FHANDLE=y
4CONFIG_NO_HZ=y
5CONFIG_HIGH_RES_TIMERS=y
6CONFIG_IKCONFIG=y
7CONFIG_IKCONFIG_PROC=y
8CONFIG_LOG_BUF_SHIFT=18
9CONFIG_CGROUPS=y
10CONFIG_RELAY=y
11CONFIG_BLK_DEV_INITRD=y
12CONFIG_EMBEDDED=y
13CONFIG_PERF_EVENTS=y
14# CONFIG_COMPAT_BRK is not set
15CONFIG_MODULES=y
16CONFIG_MODULE_UNLOAD=y
17CONFIG_MODVERSIONS=y
18CONFIG_MODULE_SRCVERSION_ALL=y
19CONFIG_GPIO_PCA953X=y
20CONFIG_ARCH_MXC=y
21CONFIG_SOC_IMX6Q=y
22CONFIG_SOC_IMX6SL=y
23CONFIG_PCI=y
24CONFIG_PCI_MSI=y
25CONFIG_PCI_IMX6=y
26CONFIG_RC_MODE_IN_EP_RC_SYS=y
27CONFIG_SMP=y
28CONFIG_PREEMPT_VOLUNTARY=y
29CONFIG_AEABI=y
30# CONFIG_OABI_COMPAT is not set
31CONFIG_KSM=y
32CONFIG_SECCOMP=y
33CONFIG_CMDLINE="noinitrd console=ttymxc0,115200"
34CONFIG_CPU_FREQ=y
35CONFIG_CPU_FREQ_DEFAULT_GOV_INTERACTIVE=y
36CONFIG_CPU_FREQ_GOV_POWERSAVE=y
37CONFIG_CPU_FREQ_GOV_USERSPACE=y
38CONFIG_CPU_FREQ_GOV_ONDEMAND=y
39CONFIG_CPU_FREQ_GOV_CONSERVATIVE=y
40CONFIG_ARM_IMX6_CPUFREQ=y
41CONFIG_CPU_IDLE=y
42CONFIG_VFP=y
43CONFIG_NEON=y
44CONFIG_BINFMT_MISC=m
45CONFIG_PM_RUNTIME=y
46CONFIG_PM_DEBUG=y
47CONFIG_PM_TEST_SUSPEND=y
48CONFIG_NET=y
49CONFIG_PACKET=y
50CONFIG_UNIX=y
51CONFIG_INET=y
52CONFIG_IP_PNP=y
53CONFIG_IP_PNP_DHCP=y
54# CONFIG_INET_XFRM_MODE_TRANSPORT is not set
55# CONFIG_INET_XFRM_MODE_TUNNEL is not set
56# CONFIG_INET_XFRM_MODE_BEET is not set
57# CONFIG_INET_LRO is not set
58CONFIG_IPV6=y
59CONFIG_NETFILTER=y
60CONFIG_BT=m
61CONFIG_BT_RFCOMM=m
62CONFIG_BT_RFCOMM_TTY=y
63CONFIG_BT_BNEP=m
64CONFIG_BT_BNEP_MC_FILTER=y
65CONFIG_BT_BNEP_PROTO_FILTER=y
66CONFIG_BT_HIDP=m
67CONFIG_BT_HCIBTUSB=m
68CONFIG_BT_HCIUART=m
69CONFIG_BT_HCIUART_H4=y
70CONFIG_CFG80211=m
71CONFIG_MAC80211=m
72CONFIG_RFKILL=y
73CONFIG_RFKILL_GPIO=y
74CONFIG_DEVTMPFS=y
75CONFIG_DEVTMPFS_MOUNT=y
76# CONFIG_STANDALONE is not set
77CONFIG_CMA=y
78CONFIG_CMA_SIZE_MBYTES=256
79CONFIG_IMX_WEIM=y
80CONFIG_CONNECTOR=y
81CONFIG_MTD=y
82CONFIG_MTD_CMDLINE_PARTS=y
83CONFIG_MTD_BLOCK=y
84CONFIG_MTD_CFI=y
85CONFIG_MTD_JEDECPROBE=y
86CONFIG_MTD_CFI_INTELEXT=y
87CONFIG_MTD_CFI_AMDSTD=y
88CONFIG_MTD_CFI_STAA=y
89CONFIG_MTD_PHYSMAP_OF=y
90CONFIG_MTD_M25P80=y
91CONFIG_MTD_SST25L=y
92CONFIG_MTD_UBI=y
93CONFIG_BLK_DEV_LOOP=y
94CONFIG_BLK_DEV_RAM=y
95CONFIG_BLK_DEV_RAM_SIZE=65536
96CONFIG_EEPROM_AT24=y
97CONFIG_EEPROM_AT25=y
98# CONFIG_SCSI_PROC_FS is not set
99CONFIG_BLK_DEV_SD=y
100CONFIG_SCSI_MULTI_LUN=y
101CONFIG_SCSI_CONSTANTS=y
102CONFIG_SCSI_LOGGING=y
103CONFIG_SCSI_SCAN_ASYNC=y
104# CONFIG_SCSI_LOWLEVEL is not set
105CONFIG_ATA=y
106CONFIG_SATA_AHCI_PLATFORM=y
107CONFIG_AHCI_IMX=y
108CONFIG_PATA_IMX=y
109CONFIG_NETDEVICES=y
110CONFIG_MII=y
111# CONFIG_NET_CADENCE is not set
112# CONFIG_NET_VENDOR_BROADCOM is not set
113# CONFIG_NET_VENDOR_CIRRUS is not set
114# CONFIG_NET_VENDOR_FARADAY is not set
115# CONFIG_NET_VENDOR_INTEL is not set
116# CONFIG_NET_VENDOR_MARVELL is not set
117# CONFIG_NET_VENDOR_MICREL is not set
118# CONFIG_NET_VENDOR_MICROCHIP is not set
119# CONFIG_NET_VENDOR_NATSEMI is not set
120# CONFIG_NET_VENDOR_SEEQ is not set
121# CONFIG_NET_VENDOR_SMSC is not set
122# CONFIG_NET_VENDOR_STMICRO is not set
123# CONFIG_NET_VENDOR_WIZNET is not set
124CONFIG_MICREL_PHY=y
125CONFIG_BRCMFMAC=m
126CONFIG_IWLWIFI=m
127CONFIG_INPUT_POLLDEV=y
128# CONFIG_INPUT_MOUSEDEV_PSAUX is not set
129CONFIG_INPUT_EVDEV=y
130CONFIG_KEYBOARD_GPIO=y
131CONFIG_KEYBOARD_IMX=y
132# CONFIG_MOUSE_PS2 is not set
133CONFIG_INPUT_TOUCHSCREEN=y
134CONFIG_TOUCHSCREEN_AR1020_I2C=y
135CONFIG_TOUCHSCREEN_EGALAX=y
136CONFIG_TOUCHSCREEN_EGALAX_SINGLE_TOUCH=y
137CONFIG_TOUCHSCREEN_FT5X06=y
138CONFIG_TOUCHSCREEN_FT5X06_SINGLE_TOUCH=y
139CONFIG_TOUCHSCREEN_TSC2004=y
140CONFIG_SERIO_SERPORT=m
141CONFIG_VT_HW_CONSOLE_BINDING=y
142# CONFIG_LEGACY_PTYS is not set
143# CONFIG_DEVKMEM is not set
144CONFIG_SERIAL_IMX=y
145CONFIG_SERIAL_IMX_CONSOLE=y
146CONFIG_SERIAL_FSL_LPUART=y
147CONFIG_SERIAL_FSL_LPUART_CONSOLE=y
148# CONFIG_I2C_COMPAT is not set
149CONFIG_I2C_CHARDEV=y
150# CONFIG_I2C_HELPER_AUTO is not set
151CONFIG_I2C_ALGOPCF=m
152CONFIG_I2C_ALGOPCA=m
153CONFIG_I2C_IMX=y
154CONFIG_SPI=y
155CONFIG_SPI_IMX=y
156CONFIG_GPIO_SYSFS=y
157CONFIG_POWER_SUPPLY=y
158CONFIG_SENSORS_MAG3110=y
159CONFIG_THERMAL=y
160CONFIG_CPU_THERMAL=y
161CONFIG_IMX_THERMAL=y
162CONFIG_DEVICE_THERMAL=y
163CONFIG_WATCHDOG=y
164CONFIG_IMX2_WDT=y
165CONFIG_REGULATOR=y
166CONFIG_REGULATOR_FIXED_VOLTAGE=y
167CONFIG_REGULATOR_ANATOP=y
168CONFIG_MEDIA_SUPPORT=y
169CONFIG_MEDIA_CAMERA_SUPPORT=y
170CONFIG_VIDEO_V4L2_INT_DEVICE=m
171CONFIG_V4L_PLATFORM_DRIVERS=y
172CONFIG_VIDEO_MXC_OUTPUT=y
173CONFIG_VIDEO_MXC_CAPTURE=m
174CONFIG_MXC_IPU_DEVICE_QUEUE_SDC=m
175CONFIG_VIDEO_MXC_IPU_OUTPUT=y
176CONFIG_SOC_CAMERA=y
177# CONFIG_MEDIA_SUBDRV_AUTOSELECT is not set
178# CONFIG_DVB_AU8522_V4L is not set
179# CONFIG_DVB_TUNER_DIB0070 is not set
180# CONFIG_DVB_TUNER_DIB0090 is not set
181CONFIG_DRM=y
182CONFIG_DRM_VIVANTE=y
183CONFIG_FB=y
184CONFIG_FB_MXS=y
185CONFIG_BACKLIGHT_LCD_SUPPORT=y
186CONFIG_LCD_CLASS_DEVICE=y
187CONFIG_LCD_L4F00242T03=y
188CONFIG_LCD_PLATFORM=y
189CONFIG_BACKLIGHT_CLASS_DEVICE=y
190CONFIG_BACKLIGHT_PWM=y
191CONFIG_FB_MXC_SYNC_PANEL=y
192CONFIG_FB_MXC_LDB=y
193CONFIG_FB_MXC_MIPI_DSI=y
194CONFIG_FB_MXC_TRULY_WVGA_SYNC_PANEL=y
195CONFIG_FB_MXC_HDMI=y
196CONFIG_FRAMEBUFFER_CONSOLE=y
197CONFIG_FRAMEBUFFER_CONSOLE_DETECT_PRIMARY=y
198CONFIG_FONTS=y
199CONFIG_FONT_8x8=y
200CONFIG_FONT_8x16=y
201CONFIG_LOGO=y
202CONFIG_SOUND=y
203CONFIG_SND=y
204# CONFIG_SND_DRIVERS is not set
205# CONFIG_SND_ARM is not set
206# CONFIG_SND_SPI is not set
207# CONFIG_SND_USB is not set
208CONFIG_SND_SOC=y
209CONFIG_SND_IMX_SOC=y
210CONFIG_SND_SOC_IMX_SGTL5000=y
211CONFIG_SND_SOC_IMX_HDMI=y
212CONFIG_USB=y
213CONFIG_USB_EHCI_HCD=y
214CONFIG_USB_STORAGE=y
215CONFIG_USB_CHIPIDEA=y
216CONFIG_USB_CHIPIDEA_UDC=y
217CONFIG_USB_CHIPIDEA_HOST=y
218CONFIG_USB_SERIAL=y
219CONFIG_USB_SERIAL_CP210X=y
220CONFIG_USB_SERIAL_FTDI_SIO=y
221CONFIG_USB_SERIAL_KEYSPAN=y
222CONFIG_USB_SERIAL_PL2303=y
223CONFIG_USB_SERIAL_QUALCOMM=y
224CONFIG_USB_SERIAL_OPTION=y
225CONFIG_USB_PHY=y
226CONFIG_USB_MXS_PHY=y
227CONFIG_USB_GADGET=y
228CONFIG_USB_ZERO=m
229CONFIG_USB_ETH=m
230CONFIG_USB_MASS_STORAGE=m
231CONFIG_USB_G_SERIAL=m
232CONFIG_MMC=y
233CONFIG_MMC_UNSAFE_RESUME=y
234CONFIG_MMC_SDHCI=y
235CONFIG_MMC_SDHCI_PLTFM=y
236CONFIG_MMC_SDHCI_ESDHC_IMX=y
237CONFIG_MXC_IPU=y
238CONFIG_MXC_GPU_VIV=y
239CONFIG_MXC_ASRC=y
240CONFIG_MXC_MIPI_CSI2=y
241CONFIG_LEDS_CLASS=y
242CONFIG_RTC_CLASS=y
243CONFIG_RTC_INTF_DEV_UIE_EMUL=y
244CONFIG_RTC_DRV_ISL1208=y
245CONFIG_RTC_DRV_SNVS=y
246CONFIG_DMADEVICES=y
247# CONFIG_MX3_IPU is not set
248CONFIG_MXC_PXP_V2=y
249CONFIG_IMX_SDMA=y
250CONFIG_STAGING=y
251CONFIG_COMMON_CLK_DEBUG=y
252# CONFIG_IOMMU_SUPPORT is not set
253CONFIG_PWM=y
254CONFIG_PWM_IMX=y
255CONFIG_EXT2_FS=y
256CONFIG_EXT2_FS_XATTR=y
257CONFIG_EXT2_FS_POSIX_ACL=y
258CONFIG_EXT2_FS_SECURITY=y
259CONFIG_EXT3_FS=y
260CONFIG_EXT3_FS_POSIX_ACL=y
261CONFIG_EXT3_FS_SECURITY=y
262CONFIG_EXT4_FS=y
263CONFIG_EXT4_FS_POSIX_ACL=y
264CONFIG_EXT4_FS_SECURITY=y
265CONFIG_QUOTA=y
266CONFIG_QUOTA_NETLINK_INTERFACE=y
267# CONFIG_PRINT_QUOTA_WARNING is not set
268CONFIG_AUTOFS4_FS=y
269CONFIG_FUSE_FS=y
270CONFIG_ISO9660_FS=m
271CONFIG_JOLIET=y
272CONFIG_ZISOFS=y
273CONFIG_UDF_FS=m
274CONFIG_MSDOS_FS=m
275CONFIG_VFAT_FS=y
276CONFIG_TMPFS=y
277CONFIG_TMPFS_POSIX_ACL=y
278CONFIG_JFFS2_FS=y
279CONFIG_UBIFS_FS=y
280CONFIG_SQUASHFS=y
281CONFIG_NFS_FS=y
282CONFIG_NFS_V3_ACL=y
283CONFIG_NFS_V4=y
284CONFIG_ROOT_NFS=y
285CONFIG_NLS_DEFAULT="cp437"
286CONFIG_NLS_CODEPAGE_437=y
287CONFIG_NLS_ASCII=y
288CONFIG_NLS_ISO8859_1=y
289CONFIG_NLS_ISO8859_15=m
290CONFIG_NLS_UTF8=y
291CONFIG_MAGIC_SYSRQ=y
292# CONFIG_SCHED_DEBUG is not set
293# CONFIG_DEBUG_BUGVERBOSE is not set
294# CONFIG_FTRACE is not set
295# CONFIG_ARM_UNWIND is not set
296CONFIG_SECURITYFS=y
297CONFIG_CRYPTO_USER=y
298CONFIG_CRYPTO_CCM=y
299CONFIG_CRYPTO_GCM=y
300CONFIG_CRYPTO_CBC=y
301CONFIG_CRYPTO_CTS=y
302CONFIG_CRYPTO_ECB=y
303CONFIG_CRYPTO_LRW=y
304# CONFIG_CRYPTO_ANSI_CPRNG is not set
305CONFIG_CRYPTO_DEV_FSL_CAAM=y
306CONFIG_CRYPTO_DEV_FSL_CAAM_SM=y
307CONFIG_CRYPTO_DEV_FSL_CAAM_SM_TEST=y
308CONFIG_CRYPTO_DEV_FSL_CAAM_SECVIO=y
309CONFIG_CRC_CCITT=m
310CONFIG_CRC_T10DIF=y
311CONFIG_CRC7=m
312CONFIG_LIBCRC32C=m
diff --git a/recipes-kernel/linux/linux-boundary-3.10.17/nitrogen6x/defconfig b/recipes-kernel/linux/linux-boundary-3.10.17/nitrogen6x/defconfig
new file mode 100644
index 0000000..6bb7159
--- /dev/null
+++ b/recipes-kernel/linux/linux-boundary-3.10.17/nitrogen6x/defconfig
@@ -0,0 +1,325 @@
1CONFIG_KERNEL_LZO=y
2CONFIG_SYSVIPC=y
3CONFIG_FHANDLE=y
4CONFIG_NO_HZ=y
5CONFIG_HIGH_RES_TIMERS=y
6CONFIG_IKCONFIG=y
7CONFIG_IKCONFIG_PROC=y
8CONFIG_LOG_BUF_SHIFT=18
9CONFIG_CGROUPS=y
10CONFIG_RELAY=y
11CONFIG_BLK_DEV_INITRD=y
12CONFIG_EMBEDDED=y
13CONFIG_PERF_EVENTS=y
14# CONFIG_COMPAT_BRK is not set
15CONFIG_MODULES=y
16CONFIG_MODULE_UNLOAD=y
17CONFIG_MODVERSIONS=y
18CONFIG_MODULE_SRCVERSION_ALL=y
19CONFIG_GPIO_PCA953X=y
20CONFIG_ARCH_MXC=y
21CONFIG_SOC_IMX6Q=y
22CONFIG_SOC_IMX6SL=y
23CONFIG_PCI=y
24CONFIG_PCI_MSI=y
25CONFIG_PCI_IMX6=y
26CONFIG_RC_MODE_IN_EP_RC_SYS=y
27CONFIG_SMP=y
28CONFIG_PREEMPT_VOLUNTARY=y
29CONFIG_AEABI=y
30# CONFIG_OABI_COMPAT is not set
31CONFIG_HIGHMEM=y
32CONFIG_KSM=y
33CONFIG_SECCOMP=y
34CONFIG_CMDLINE="noinitrd console=ttymxc0,115200"
35CONFIG_CPU_FREQ=y
36CONFIG_CPU_FREQ_DEFAULT_GOV_INTERACTIVE=y
37CONFIG_CPU_FREQ_GOV_POWERSAVE=y
38CONFIG_CPU_FREQ_GOV_USERSPACE=y
39CONFIG_CPU_FREQ_GOV_ONDEMAND=y
40CONFIG_CPU_FREQ_GOV_CONSERVATIVE=y
41CONFIG_ARM_IMX6_CPUFREQ=y
42CONFIG_CPU_IDLE=y
43CONFIG_VFP=y
44CONFIG_NEON=y
45CONFIG_BINFMT_MISC=m
46CONFIG_PM_RUNTIME=y
47CONFIG_PM_DEBUG=y
48CONFIG_PM_TEST_SUSPEND=y
49CONFIG_NET=y
50CONFIG_PACKET=y
51CONFIG_UNIX=y
52CONFIG_INET=y
53CONFIG_IP_PNP=y
54CONFIG_IP_PNP_DHCP=y
55# CONFIG_INET_XFRM_MODE_TRANSPORT is not set
56# CONFIG_INET_XFRM_MODE_TUNNEL is not set
57# CONFIG_INET_XFRM_MODE_BEET is not set
58# CONFIG_INET_LRO is not set
59CONFIG_IPV6=y
60CONFIG_NETFILTER=y
61CONFIG_CAN=m
62CONFIG_CAN_FLEXCAN=m
63CONFIG_BT=m
64CONFIG_BT_RFCOMM=m
65CONFIG_BT_RFCOMM_TTY=y
66CONFIG_BT_BNEP=m
67CONFIG_BT_BNEP_MC_FILTER=y
68CONFIG_BT_BNEP_PROTO_FILTER=y
69CONFIG_BT_HIDP=m
70CONFIG_BT_HCIBTUSB=m
71CONFIG_BT_HCIUART=m
72CONFIG_BT_HCIUART_LL=y
73CONFIG_CFG80211=m
74CONFIG_MAC80211=m
75CONFIG_RFKILL=y
76CONFIG_RFKILL_GPIO=y
77CONFIG_DEVTMPFS=y
78CONFIG_DEVTMPFS_MOUNT=y
79# CONFIG_STANDALONE is not set
80CONFIG_CMA=y
81CONFIG_CMA_SIZE_MBYTES=256
82CONFIG_IMX_WEIM=y
83CONFIG_CONNECTOR=y
84CONFIG_MTD=y
85CONFIG_MTD_CMDLINE_PARTS=y
86CONFIG_MTD_BLOCK=y
87CONFIG_MTD_CFI=y
88CONFIG_MTD_JEDECPROBE=y
89CONFIG_MTD_CFI_INTELEXT=y
90CONFIG_MTD_CFI_AMDSTD=y
91CONFIG_MTD_CFI_STAA=y
92CONFIG_MTD_PHYSMAP_OF=y
93CONFIG_MTD_M25P80=y
94CONFIG_MTD_SST25L=y
95CONFIG_MTD_UBI=y
96CONFIG_BLK_DEV_LOOP=y
97CONFIG_BLK_DEV_RAM=y
98CONFIG_BLK_DEV_RAM_SIZE=65536
99CONFIG_EEPROM_AT24=y
100CONFIG_EEPROM_AT25=y
101# CONFIG_SCSI_PROC_FS is not set
102CONFIG_BLK_DEV_SD=y
103CONFIG_SCSI_MULTI_LUN=y
104CONFIG_SCSI_CONSTANTS=y
105CONFIG_SCSI_LOGGING=y
106CONFIG_SCSI_SCAN_ASYNC=y
107# CONFIG_SCSI_LOWLEVEL is not set
108CONFIG_ATA=y
109CONFIG_SATA_AHCI_PLATFORM=y
110CONFIG_AHCI_IMX=y
111CONFIG_PATA_IMX=y
112CONFIG_NETDEVICES=y
113CONFIG_MII=y
114# CONFIG_NET_CADENCE is not set
115# CONFIG_NET_VENDOR_BROADCOM is not set
116# CONFIG_NET_VENDOR_CIRRUS is not set
117# CONFIG_NET_VENDOR_FARADAY is not set
118# CONFIG_NET_VENDOR_INTEL is not set
119# CONFIG_NET_VENDOR_MARVELL is not set
120# CONFIG_NET_VENDOR_MICREL is not set
121# CONFIG_NET_VENDOR_MICROCHIP is not set
122# CONFIG_NET_VENDOR_NATSEMI is not set
123# CONFIG_NET_VENDOR_SEEQ is not set
124# CONFIG_NET_VENDOR_SMSC is not set
125# CONFIG_NET_VENDOR_STMICRO is not set
126# CONFIG_NET_VENDOR_WIZNET is not set
127CONFIG_MICREL_PHY=y
128CONFIG_IWLWIFI=m
129CONFIG_WL_TI=y
130CONFIG_WL12XX=m
131CONFIG_WLCORE_SDIO=m
132# CONFIG_WILINK_PLATFORM_DATA is not set
133CONFIG_INPUT_POLLDEV=y
134# CONFIG_INPUT_MOUSEDEV_PSAUX is not set
135CONFIG_INPUT_EVDEV=y
136CONFIG_KEYBOARD_GPIO=y
137CONFIG_KEYBOARD_IMX=y
138# CONFIG_MOUSE_PS2 is not set
139CONFIG_INPUT_TOUCHSCREEN=y
140CONFIG_TOUCHSCREEN_AR1020_I2C=y
141CONFIG_TOUCHSCREEN_EGALAX=y
142CONFIG_TOUCHSCREEN_EGALAX_SINGLE_TOUCH=y
143CONFIG_TOUCHSCREEN_FT5X06=y
144CONFIG_TOUCHSCREEN_FT5X06_SINGLE_TOUCH=y
145CONFIG_TOUCHSCREEN_TSC2004=y
146CONFIG_SERIO_SERPORT=m
147CONFIG_VT_HW_CONSOLE_BINDING=y
148# CONFIG_LEGACY_PTYS is not set
149# CONFIG_DEVKMEM is not set
150CONFIG_SERIAL_IMX=y
151CONFIG_SERIAL_IMX_CONSOLE=y
152CONFIG_SERIAL_FSL_LPUART=y
153CONFIG_SERIAL_FSL_LPUART_CONSOLE=y
154# CONFIG_I2C_COMPAT is not set
155CONFIG_I2C_CHARDEV=y
156CONFIG_I2C_MUX=y
157CONFIG_I2C_MUX_GPIO=y
158# CONFIG_I2C_HELPER_AUTO is not set
159CONFIG_I2C_ALGOPCF=m
160CONFIG_I2C_ALGOPCA=m
161CONFIG_I2C_IMX=y
162CONFIG_SPI=y
163CONFIG_SPI_IMX=y
164CONFIG_GPIO_SYSFS=y
165CONFIG_POWER_SUPPLY=y
166CONFIG_SENSORS_MAG3110=y
167CONFIG_THERMAL=y
168CONFIG_CPU_THERMAL=y
169CONFIG_IMX_THERMAL=y
170CONFIG_DEVICE_THERMAL=y
171CONFIG_WATCHDOG=y
172CONFIG_IMX2_WDT=y
173CONFIG_REGULATOR=y
174CONFIG_REGULATOR_FIXED_VOLTAGE=y
175CONFIG_REGULATOR_ANATOP=y
176CONFIG_MEDIA_SUPPORT=y
177CONFIG_MEDIA_CAMERA_SUPPORT=y
178CONFIG_VIDEO_V4L2_INT_DEVICE=m
179CONFIG_V4L_PLATFORM_DRIVERS=y
180CONFIG_VIDEO_MXC_OUTPUT=y
181CONFIG_VIDEO_MXC_CAPTURE=m
182CONFIG_VIDEO_MXC_CSI_CAMERA=m
183CONFIG_MXC_CAMERA_OV5640=m
184CONFIG_MXC_CAMERA_OV5642=m
185CONFIG_MXC_CAMERA_OV5640_MIPI=m
186CONFIG_MXC_TVIN_ADV7180=m
187CONFIG_MXC_IPU_DEVICE_QUEUE_SDC=m
188CONFIG_VIDEO_MXC_IPU_OUTPUT=y
189CONFIG_SOC_CAMERA=y
190# CONFIG_MEDIA_SUBDRV_AUTOSELECT is not set
191# CONFIG_DVB_AU8522_V4L is not set
192# CONFIG_DVB_TUNER_DIB0070 is not set
193# CONFIG_DVB_TUNER_DIB0090 is not set
194CONFIG_DRM=y
195CONFIG_DRM_VIVANTE=y
196CONFIG_FB=y
197CONFIG_FB_MXS=y
198CONFIG_BACKLIGHT_LCD_SUPPORT=y
199CONFIG_LCD_CLASS_DEVICE=y
200CONFIG_LCD_L4F00242T03=y
201CONFIG_LCD_PLATFORM=y
202CONFIG_BACKLIGHT_CLASS_DEVICE=y
203CONFIG_BACKLIGHT_PWM=y
204CONFIG_FB_MXC_SYNC_PANEL=y
205CONFIG_FB_MXC_LDB=y
206CONFIG_FB_MXC_MIPI_DSI=y
207CONFIG_FB_MXC_TRULY_WVGA_SYNC_PANEL=y
208CONFIG_FB_MXC_HDMI=y
209CONFIG_FRAMEBUFFER_CONSOLE=y
210CONFIG_FRAMEBUFFER_CONSOLE_DETECT_PRIMARY=y
211CONFIG_FONTS=y
212CONFIG_FONT_8x8=y
213CONFIG_FONT_8x16=y
214CONFIG_LOGO=y
215CONFIG_SOUND=y
216CONFIG_SND=y
217# CONFIG_SND_DRIVERS is not set
218# CONFIG_SND_ARM is not set
219# CONFIG_SND_SPI is not set
220# CONFIG_SND_USB is not set
221CONFIG_SND_SOC=y
222CONFIG_SND_IMX_SOC=y
223CONFIG_SND_SOC_IMX_SGTL5000=y
224CONFIG_SND_SOC_IMX_HDMI=y
225CONFIG_USB=y
226CONFIG_USB_EHCI_HCD=y
227CONFIG_USB_STORAGE=y
228CONFIG_USB_CHIPIDEA=y
229CONFIG_USB_CHIPIDEA_UDC=y
230CONFIG_USB_CHIPIDEA_HOST=y
231CONFIG_USB_SERIAL=y
232CONFIG_USB_SERIAL_CP210X=y
233CONFIG_USB_SERIAL_FTDI_SIO=y
234CONFIG_USB_SERIAL_KEYSPAN=y
235CONFIG_USB_SERIAL_PL2303=y
236CONFIG_USB_SERIAL_QUALCOMM=y
237CONFIG_USB_SERIAL_OPTION=y
238CONFIG_USB_PHY=y
239CONFIG_USB_MXS_PHY=y
240CONFIG_USB_GADGET=y
241CONFIG_USB_ZERO=m
242CONFIG_USB_ETH=m
243CONFIG_USB_MASS_STORAGE=m
244CONFIG_USB_G_SERIAL=m
245CONFIG_MMC=y
246CONFIG_MMC_UNSAFE_RESUME=y
247CONFIG_MMC_SDHCI=y
248CONFIG_MMC_SDHCI_PLTFM=y
249CONFIG_MMC_SDHCI_ESDHC_IMX=y
250CONFIG_MXC_IPU=y
251CONFIG_MXC_GPU_VIV=y
252CONFIG_MXC_ASRC=y
253CONFIG_MXC_MIPI_CSI2=y
254CONFIG_LEDS_CLASS=y
255CONFIG_RTC_CLASS=y
256CONFIG_RTC_INTF_DEV_UIE_EMUL=y
257CONFIG_RTC_DRV_ISL1208=y
258CONFIG_RTC_DRV_SNVS=y
259CONFIG_DMADEVICES=y
260# CONFIG_MX3_IPU is not set
261CONFIG_MXC_PXP_V2=y
262CONFIG_IMX_SDMA=y
263CONFIG_STAGING=y
264CONFIG_COMMON_CLK_DEBUG=y
265# CONFIG_IOMMU_SUPPORT is not set
266CONFIG_PWM=y
267CONFIG_PWM_IMX=y
268CONFIG_EXT2_FS=y
269CONFIG_EXT2_FS_XATTR=y
270CONFIG_EXT2_FS_POSIX_ACL=y
271CONFIG_EXT2_FS_SECURITY=y
272CONFIG_EXT3_FS=y
273CONFIG_EXT3_FS_POSIX_ACL=y
274CONFIG_EXT3_FS_SECURITY=y
275CONFIG_EXT4_FS=y
276CONFIG_EXT4_FS_POSIX_ACL=y
277CONFIG_EXT4_FS_SECURITY=y
278CONFIG_QUOTA=y
279CONFIG_QUOTA_NETLINK_INTERFACE=y
280# CONFIG_PRINT_QUOTA_WARNING is not set
281CONFIG_AUTOFS4_FS=y
282CONFIG_FUSE_FS=y
283CONFIG_ISO9660_FS=m
284CONFIG_JOLIET=y
285CONFIG_ZISOFS=y
286CONFIG_UDF_FS=m
287CONFIG_MSDOS_FS=m
288CONFIG_VFAT_FS=y
289CONFIG_TMPFS=y
290CONFIG_TMPFS_POSIX_ACL=y
291CONFIG_JFFS2_FS=y
292CONFIG_UBIFS_FS=y
293CONFIG_SQUASHFS=y
294CONFIG_NFS_FS=y
295CONFIG_NFS_V3_ACL=y
296CONFIG_NFS_V4=y
297CONFIG_ROOT_NFS=y
298CONFIG_NLS_DEFAULT="cp437"
299CONFIG_NLS_CODEPAGE_437=y
300CONFIG_NLS_ASCII=y
301CONFIG_NLS_ISO8859_1=y
302CONFIG_NLS_ISO8859_15=m
303CONFIG_NLS_UTF8=y
304CONFIG_MAGIC_SYSRQ=y
305# CONFIG_SCHED_DEBUG is not set
306# CONFIG_DEBUG_BUGVERBOSE is not set
307# CONFIG_FTRACE is not set
308# CONFIG_ARM_UNWIND is not set
309CONFIG_SECURITYFS=y
310CONFIG_CRYPTO_USER=y
311CONFIG_CRYPTO_CCM=y
312CONFIG_CRYPTO_GCM=y
313CONFIG_CRYPTO_CBC=y
314CONFIG_CRYPTO_CTS=y
315CONFIG_CRYPTO_ECB=y
316CONFIG_CRYPTO_LRW=y
317# CONFIG_CRYPTO_ANSI_CPRNG is not set
318CONFIG_CRYPTO_DEV_FSL_CAAM=y
319CONFIG_CRYPTO_DEV_FSL_CAAM_SM=y
320CONFIG_CRYPTO_DEV_FSL_CAAM_SM_TEST=y
321CONFIG_CRYPTO_DEV_FSL_CAAM_SECVIO=y
322CONFIG_CRC_CCITT=m
323CONFIG_CRC_T10DIF=y
324CONFIG_CRC7=m
325CONFIG_LIBCRC32C=m
diff --git a/recipes-kernel/linux/linux-boundary_3.0.35.bb b/recipes-kernel/linux/linux-boundary_3.0.35.bb
new file mode 100644
index 0000000..6106260
--- /dev/null
+++ b/recipes-kernel/linux/linux-boundary_3.0.35.bb
@@ -0,0 +1,17 @@
1# Adapted from linux-imx.inc, copyright (C) 2013, 2014 O.S. Systems Software LTDA
2# Released under the MIT license (see COPYING.MIT for the terms)
3
4require recipes-kernel/linux/linux-imx.inc
5
6SUMMARY = "Linux kernel for Boundary Devices boards"
7
8SRC_URI = "git://github.com/boundarydevices/linux-imx6.git;branch=${SRCBRANCH} \
9 file://ENGR00278350-gpu-viante-4.6.9p13-kernel-part-integra.patch \
10 file://defconfig"
11
12LOCALVERSION = "-4.1.0+yocto"
13SRCBRANCH = "boundary-imx_3.0.35_4.1.0"
14SRCREV = "d9bc8a421bbcbd1860580e26833a20a375c951ef"
15
16COMPATIBLE_MACHINE = "(mx6)"
17COMPATIBLE_MACHINE = "(nitrogen6x|nitrogen6x-lite)"
diff --git a/recipes-kernel/linux/linux-boundary_3.10.17.bb b/recipes-kernel/linux/linux-boundary_3.10.17.bb
new file mode 100644
index 0000000..afb10e1
--- /dev/null
+++ b/recipes-kernel/linux/linux-boundary_3.10.17.bb
@@ -0,0 +1,19 @@
1# Adapted from linux-imx.inc, copyright (C) 2013, 2014 O.S. Systems Software LTDA
2# Released under the MIT license (see COPYING.MIT for the terms)
3
4require recipes-kernel/linux/linux-imx.inc
5require recipes-kernel/linux/linux-dtb.inc
6
7SUMMARY = "Linux kernel for Boundary Devices boards"
8
9SRC_URI = "git://github.com/boundarydevices/linux-imx6.git;branch=${SRCBRANCH} \
10 file://defconfig \
11 file://Fix-imx6qsabrelite-perftop-crash.patch \
12 "
13
14LOCALVERSION = "-1.0.0_ga+yocto"
15SRCBRANCH = "boundary-imx_3.10.17_1.0.0_ga"
16SRCREV = "ca882d5a8f09d4e0e7aecd754baab54bf04a8768"
17DEPENDS += "lzop-native "
18COMPATIBLE_MACHINE = "(mx6)"
19COMPATIBLE_MACHINE = "(nitrogen6x|nitrogen6x-lite)"
diff --git a/recipes-kernel/linux/linux-cfa-3.10/defconfig b/recipes-kernel/linux/linux-cfa-3.10/defconfig
new file mode 100644
index 0000000..ec0d3aa
--- /dev/null
+++ b/recipes-kernel/linux/linux-cfa-3.10/defconfig
@@ -0,0 +1,170 @@
1CONFIG_SYSVIPC=y
2CONFIG_NO_HZ=y
3CONFIG_HIGH_RES_TIMERS=y
4CONFIG_TASKSTATS=y
5CONFIG_TASK_DELAY_ACCT=y
6CONFIG_TASK_XACCT=y
7CONFIG_TASK_IO_ACCOUNTING=y
8CONFIG_IKCONFIG=y
9CONFIG_IKCONFIG_PROC=y
10# CONFIG_UTS_NS is not set
11# CONFIG_IPC_NS is not set
12# CONFIG_PID_NS is not set
13# CONFIG_NET_NS is not set
14CONFIG_KALLSYMS_ALL=y
15CONFIG_PERF_EVENTS=y
16# CONFIG_COMPAT_BRK is not set
17CONFIG_MODULES=y
18CONFIG_MODULE_FORCE_LOAD=y
19CONFIG_MODULE_UNLOAD=y
20CONFIG_MODULE_FORCE_UNLOAD=y
21CONFIG_MODVERSIONS=y
22CONFIG_BLK_DEV_INTEGRITY=y
23# CONFIG_IOSCHED_DEADLINE is not set
24# CONFIG_IOSCHED_CFQ is not set
25# CONFIG_ARCH_MULTI_V7 is not set
26CONFIG_GPIO_PCA953X=y
27CONFIG_ARCH_MXS=y
28# CONFIG_ARM_THUMB is not set
29CONFIG_PREEMPT_VOLUNTARY=y
30CONFIG_AEABI=y
31# CONFIG_COMPACTION is not set
32CONFIG_DEFAULT_MMAP_MIN_ADDR=65536
33CONFIG_FPE_NWFPE=y
34CONFIG_NET=y
35CONFIG_PACKET=y
36CONFIG_UNIX=y
37CONFIG_INET=y
38CONFIG_IP_PNP=y
39CONFIG_IP_PNP_DHCP=y
40CONFIG_SYN_COOKIES=y
41# CONFIG_INET_XFRM_MODE_TRANSPORT is not set
42# CONFIG_INET_XFRM_MODE_TUNNEL is not set
43# CONFIG_INET_XFRM_MODE_BEET is not set
44# CONFIG_INET_LRO is not set
45# CONFIG_INET_DIAG is not set
46# CONFIG_IPV6 is not set
47CONFIG_DEVTMPFS=y
48CONFIG_DEVTMPFS_MOUNT=y
49# CONFIG_FIRMWARE_IN_KERNEL is not set
50CONFIG_CMA=y
51# CONFIG_BLK_DEV is not set
52CONFIG_CFAFIQ=y
53CONFIG_SCSI=y
54CONFIG_BLK_DEV_SD=y
55CONFIG_NETDEVICES=y
56CONFIG_MII=y
57CONFIG_ENC28J60=y
58# CONFIG_WLAN is not set
59# CONFIG_INPUT_MOUSEDEV_PSAUX is not set
60CONFIG_INPUT_EVDEV=y
61# CONFIG_KEYBOARD_ATKBD is not set
62CONFIG_KEYBOARD_GPIO=y
63# CONFIG_INPUT_MOUSE is not set
64CONFIG_INPUT_MISC=y
65CONFIG_INPUT_GPIO_ROTARY_ENCODER=y
66# CONFIG_SERIO is not set
67CONFIG_VT_HW_CONSOLE_BINDING=y
68CONFIG_DEVPTS_MULTIPLE_INSTANCES=y
69# CONFIG_LEGACY_PTYS is not set
70# CONFIG_DEVKMEM is not set
71CONFIG_SERIAL_AMBA_PL011=y
72CONFIG_SERIAL_AMBA_PL011_CONSOLE=y
73# CONFIG_HW_RANDOM is not set
74CONFIG_I2C=y
75# CONFIG_I2C_COMPAT is not set
76CONFIG_I2C_CHARDEV=y
77CONFIG_I2C_MUX=y
78CONFIG_I2C_MUX_GPIO=y
79CONFIG_I2C_GPIO=y
80CONFIG_I2C_MXS=y
81CONFIG_SPI=y
82CONFIG_SPI_GPIO=y
83CONFIG_SPI_MXS=y
84CONFIG_SPI_SPIDEV=y
85CONFIG_GPIO_SYSFS=y
86CONFIG_GPIO_PCA953X_IRQ=y
87CONFIG_GPIO_74X164=y
88CONFIG_W1=y
89CONFIG_W1_MASTER_GPIO=y
90CONFIG_W1_SLAVE_THERM=y
91CONFIG_SENSORS_IIO_HWMON=y
92CONFIG_SENSORS_MXS_CPU=y
93CONFIG_REGULATOR=y
94CONFIG_REGULATOR_FIXED_VOLTAGE=y
95CONFIG_FB=y
96CONFIG_FB_MXS=y
97CONFIG_BACKLIGHT_LCD_SUPPORT=y
98CONFIG_LCD_CLASS_DEVICE=y
99CONFIG_LCD_HX8357=y
100CONFIG_BACKLIGHT_CLASS_DEVICE=y
101# CONFIG_BACKLIGHT_GENERIC is not set
102CONFIG_BACKLIGHT_PWM=y
103CONFIG_FB_SSD1307=y
104CONFIG_USB=y
105CONFIG_USB_ANNOUNCE_NEW_DEVICES=y
106CONFIG_USB_EHCI_HCD=y
107CONFIG_USB_ACM=y
108CONFIG_USB_STORAGE=y
109CONFIG_USB_STORAGE_DEBUG=y
110CONFIG_USB_CHIPIDEA=y
111CONFIG_USB_CHIPIDEA_UDC=y
112CONFIG_USB_CHIPIDEA_HOST=y
113CONFIG_USB_CHIPIDEA_DEBUG=y
114CONFIG_USB_PHY=y
115CONFIG_USB_MXS_PHY=y
116CONFIG_USB_GADGET=y
117CONFIG_USB_ETH=y
118CONFIG_USB_ETH_EEM=y
119CONFIG_MMC=y
120CONFIG_MMC_MXS=y
121CONFIG_NEW_LEDS=y
122CONFIG_LEDS_CLASS=y
123CONFIG_LEDS_GPIO=y
124CONFIG_LEDS_TRIGGERS=y
125CONFIG_LEDS_TRIGGER_HEARTBEAT=y
126CONFIG_LEDS_TRIGGER_DEFAULT_ON=y
127CONFIG_RTC_CLASS=y
128CONFIG_RTC_DRV_DS1307=m
129CONFIG_DMADEVICES=y
130CONFIG_MXS_DMA=y
131CONFIG_STAGING=y
132CONFIG_MXS_LRADC=y
133CONFIG_IIO=y
134CONFIG_NAU7802=y
135CONFIG_PWM_MXS=y
136CONFIG_EXT3_FS=y
137# CONFIG_DNOTIFY is not set
138CONFIG_FSCACHE=m
139CONFIG_FSCACHE_STATS=y
140CONFIG_CACHEFILES=m
141CONFIG_TMPFS=y
142CONFIG_TMPFS_POSIX_ACL=y
143# CONFIG_MISC_FILESYSTEMS is not set
144CONFIG_NFS_FS=y
145CONFIG_NFS_V3_ACL=y
146CONFIG_NFS_V4=y
147CONFIG_ROOT_NFS=y
148CONFIG_PRINTK_TIME=y
149CONFIG_FRAME_WARN=2048
150CONFIG_MAGIC_SYSRQ=y
151CONFIG_UNUSED_SYMBOLS=y
152CONFIG_DEBUG_KERNEL=y
153CONFIG_LOCKUP_DETECTOR=y
154CONFIG_SCHEDSTATS=y
155CONFIG_TIMER_STATS=y
156CONFIG_DEBUG_INFO=y
157CONFIG_BLK_DEV_IO_TRACE=y
158CONFIG_STRICT_DEVMEM=y
159CONFIG_DEBUG_USER=y
160CONFIG_DEBUG_LL=y
161CONFIG_DEBUG_IMX28_UART=y
162CONFIG_EARLY_PRINTK=y
163CONFIG_CRYPTO_CRC32C=m
164CONFIG_CRYPTO_ARC4=y
165# CONFIG_CRYPTO_ANSI_CPRNG is not set
166# CONFIG_CRYPTO_HW is not set
167CONFIG_CRC16=y
168CONFIG_CRC_ITU_T=m
169CONFIG_CRC7=m
170CONFIG_AVERAGE=y
diff --git a/recipes-kernel/linux/linux-cfa-3.12/defconfig b/recipes-kernel/linux/linux-cfa-3.12/defconfig
new file mode 100644
index 0000000..095b504
--- /dev/null
+++ b/recipes-kernel/linux/linux-cfa-3.12/defconfig
@@ -0,0 +1,169 @@
1CONFIG_SYSVIPC=y
2CONFIG_NO_HZ=y
3CONFIG_HIGH_RES_TIMERS=y
4CONFIG_TASKSTATS=y
5CONFIG_TASK_DELAY_ACCT=y
6CONFIG_TASK_XACCT=y
7CONFIG_TASK_IO_ACCOUNTING=y
8CONFIG_IKCONFIG=y
9CONFIG_IKCONFIG_PROC=y
10# CONFIG_UTS_NS is not set
11# CONFIG_IPC_NS is not set
12# CONFIG_PID_NS is not set
13# CONFIG_NET_NS is not set
14CONFIG_KALLSYMS_ALL=y
15CONFIG_PERF_EVENTS=y
16# CONFIG_COMPAT_BRK is not set
17CONFIG_MODULES=y
18CONFIG_MODULE_FORCE_LOAD=y
19CONFIG_MODULE_UNLOAD=y
20CONFIG_MODULE_FORCE_UNLOAD=y
21CONFIG_MODVERSIONS=y
22CONFIG_BLK_DEV_INTEGRITY=y
23# CONFIG_IOSCHED_DEADLINE is not set
24# CONFIG_IOSCHED_CFQ is not set
25# CONFIG_ARCH_MULTI_V7 is not set
26CONFIG_GPIO_PCA953X=y
27CONFIG_ARCH_MXS=y
28# CONFIG_ARM_THUMB is not set
29CONFIG_PREEMPT_VOLUNTARY=y
30CONFIG_AEABI=y
31# CONFIG_COMPACTION is not set
32CONFIG_DEFAULT_MMAP_MIN_ADDR=65536
33CONFIG_CMA=y
34CONFIG_FPE_NWFPE=y
35CONFIG_NET=y
36CONFIG_PACKET=y
37CONFIG_UNIX=y
38CONFIG_INET=y
39CONFIG_IP_PNP=y
40CONFIG_IP_PNP_DHCP=y
41CONFIG_SYN_COOKIES=y
42# CONFIG_INET_XFRM_MODE_TRANSPORT is not set
43# CONFIG_INET_XFRM_MODE_TUNNEL is not set
44# CONFIG_INET_XFRM_MODE_BEET is not set
45# CONFIG_INET_LRO is not set
46# CONFIG_INET_DIAG is not set
47# CONFIG_IPV6 is not set
48CONFIG_DEVTMPFS=y
49CONFIG_DEVTMPFS_MOUNT=y
50# CONFIG_FIRMWARE_IN_KERNEL is not set
51CONFIG_DMA_CMA=y
52# CONFIG_BLK_DEV is not set
53CONFIG_CFAFIQ=y
54CONFIG_SCSI=y
55CONFIG_BLK_DEV_SD=y
56CONFIG_NETDEVICES=y
57# CONFIG_NET_VENDOR_ARC is not set
58CONFIG_ENC28J60=y
59# CONFIG_NET_VENDOR_VIA is not set
60# CONFIG_WLAN is not set
61# CONFIG_INPUT_MOUSEDEV_PSAUX is not set
62CONFIG_INPUT_EVDEV=y
63# CONFIG_KEYBOARD_ATKBD is not set
64CONFIG_KEYBOARD_GPIO=y
65# CONFIG_INPUT_MOUSE is not set
66CONFIG_INPUT_MISC=y
67CONFIG_INPUT_GPIO_ROTARY_ENCODER=y
68# CONFIG_SERIO is not set
69CONFIG_VT_HW_CONSOLE_BINDING=y
70CONFIG_DEVPTS_MULTIPLE_INSTANCES=y
71# CONFIG_LEGACY_PTYS is not set
72# CONFIG_DEVKMEM is not set
73CONFIG_SERIAL_AMBA_PL011=y
74CONFIG_SERIAL_AMBA_PL011_CONSOLE=y
75# CONFIG_HW_RANDOM is not set
76CONFIG_I2C=y
77# CONFIG_I2C_COMPAT is not set
78CONFIG_I2C_CHARDEV=y
79CONFIG_I2C_MUX=y
80CONFIG_I2C_MUX_GPIO=y
81CONFIG_I2C_GPIO=y
82CONFIG_I2C_MXS=y
83CONFIG_SPI=y
84CONFIG_SPI_GPIO=y
85CONFIG_SPI_MXS=y
86CONFIG_SPI_SPIDEV=y
87CONFIG_GPIO_SYSFS=y
88CONFIG_GPIO_PCA953X_IRQ=y
89CONFIG_GPIO_74X164=y
90CONFIG_W1=y
91CONFIG_W1_MASTER_GPIO=y
92CONFIG_W1_SLAVE_THERM=y
93CONFIG_SENSORS_IIO_HWMON=y
94CONFIG_SENSORS_MXS_CPU=y
95CONFIG_REGULATOR=y
96CONFIG_REGULATOR_FIXED_VOLTAGE=y
97CONFIG_FB=y
98CONFIG_FB_MXS=y
99CONFIG_BACKLIGHT_LCD_SUPPORT=y
100CONFIG_LCD_CLASS_DEVICE=y
101CONFIG_LCD_HX8357=y
102CONFIG_BACKLIGHT_CLASS_DEVICE=y
103# CONFIG_BACKLIGHT_GENERIC is not set
104CONFIG_BACKLIGHT_PWM=y
105CONFIG_FB_SSD1307=y
106CONFIG_USB=y
107CONFIG_USB_ANNOUNCE_NEW_DEVICES=y
108CONFIG_USB_EHCI_HCD=y
109CONFIG_USB_ACM=y
110CONFIG_USB_STORAGE=y
111CONFIG_USB_CHIPIDEA=y
112CONFIG_USB_CHIPIDEA_UDC=y
113CONFIG_USB_CHIPIDEA_HOST=y
114CONFIG_USB_MXS_PHY=y
115CONFIG_USB_GADGET=y
116CONFIG_USB_ETH=y
117CONFIG_USB_ETH_EEM=y
118CONFIG_MMC=y
119CONFIG_MMC_MXS=y
120CONFIG_NEW_LEDS=y
121CONFIG_LEDS_CLASS=y
122CONFIG_LEDS_GPIO=y
123CONFIG_LEDS_TRIGGERS=y
124CONFIG_LEDS_TRIGGER_HEARTBEAT=y
125CONFIG_LEDS_TRIGGER_DEFAULT_ON=y
126CONFIG_RTC_CLASS=y
127CONFIG_RTC_DRV_DS1307=m
128CONFIG_DMADEVICES=y
129CONFIG_MXS_DMA=y
130CONFIG_STAGING=y
131CONFIG_MXS_LRADC=y
132CONFIG_IIO=y
133CONFIG_NAU7802=y
134CONFIG_PWM_MXS=y
135CONFIG_EXT3_FS=y
136# CONFIG_DNOTIFY is not set
137CONFIG_FSCACHE=m
138CONFIG_FSCACHE_STATS=y
139CONFIG_CACHEFILES=m
140CONFIG_TMPFS=y
141CONFIG_TMPFS_POSIX_ACL=y
142# CONFIG_MISC_FILESYSTEMS is not set
143CONFIG_NFS_FS=y
144CONFIG_NFS_V3_ACL=y
145CONFIG_NFS_V4=y
146CONFIG_ROOT_NFS=y
147CONFIG_PRINTK_TIME=y
148CONFIG_DEBUG_INFO=y
149CONFIG_FRAME_WARN=2048
150CONFIG_UNUSED_SYMBOLS=y
151CONFIG_MAGIC_SYSRQ=y
152CONFIG_DEBUG_KERNEL=y
153CONFIG_LOCKUP_DETECTOR=y
154CONFIG_SCHEDSTATS=y
155CONFIG_TIMER_STATS=y
156CONFIG_BLK_DEV_IO_TRACE=y
157CONFIG_STRICT_DEVMEM=y
158CONFIG_DEBUG_USER=y
159CONFIG_DEBUG_LL=y
160CONFIG_DEBUG_IMX28_UART=y
161CONFIG_EARLY_PRINTK=y
162CONFIG_CRYPTO_CRC32C=m
163CONFIG_CRYPTO_ARC4=y
164# CONFIG_CRYPTO_ANSI_CPRNG is not set
165# CONFIG_CRYPTO_HW is not set
166CONFIG_CRC16=y
167CONFIG_CRC_ITU_T=m
168CONFIG_CRC7=m
169CONFIG_AVERAGE=y
diff --git a/recipes-kernel/linux/linux-cfa.inc b/recipes-kernel/linux/linux-cfa.inc
new file mode 100644
index 0000000..96f934c
--- /dev/null
+++ b/recipes-kernel/linux/linux-cfa.inc
@@ -0,0 +1,29 @@
1SUMMARY = "Linux kernel for Crystalfontz boards"
2SECTION = "kernel"
3LICENSE = "GPLv2"
4
5LIC_FILES_CHKSUM = "file://COPYING;md5=d7810fab7487fb0aad327b76f1be7cd7"
6
7inherit kernel
8require recipes-kernel/linux/linux-dtb.inc
9
10SRC_URI = "git://github.com/crystalfontz/cfa_10036_kernel;branch=${SRCBRANCH} \
11 file://defconfig"
12
13S = "${WORKDIR}/git"
14
15# create symlinks that are the defaults of barebox
16pkg_postinst_kernel-devicetree_append () {
17 for DTB_FILE in ${KERNEL_DEVICETREE}
18 do
19 DTB_BASE_NAME=`basename ${DTB_FILE} | awk -F "." '{print $1}'`
20 DTB_BOARD_NAME=`echo ${DTB_BASE_NAME} | awk -F "-" '{print $2}'`
21 DTB_SYMLINK_NAME=`echo ${KERNEL_IMAGE_SYMLINK_NAME} | sed "s/${MACHINE}/${DTB_BASE_NAME}/g"`
22 update-alternatives --install /${KERNEL_IMAGEDEST}/oftree-${DTB_BOARD_NAME} oftree-${DTB_BOARD_NAME} devicetree-${DTB_SYMLINK_NAME}.dtb ${KERNEL_PRIORITY} || true
23 done
24}
25
26pkg_postinst_kernel-image_append () {
27 update-alternatives --install /${KERNEL_IMAGEDEST}/${KERNEL_IMAGETYPE}-cfa10036 ${KERNEL_IMAGETYPE}-cfa10036 ${KERNEL_IMAGETYPE}-${KERNEL_VERSION} ${KERNEL_PRIORITY} || true
28}
29
diff --git a/recipes-kernel/linux/linux-cfa_3.10.bb b/recipes-kernel/linux/linux-cfa_3.10.bb
new file mode 100644
index 0000000..4b285d8
--- /dev/null
+++ b/recipes-kernel/linux/linux-cfa_3.10.bb
@@ -0,0 +1,7 @@
1require linux-cfa.inc
2
3SRCBRANCH = "cfa-3.10.25"
4SRCREV = "61dbe8ef338ce4cc1c10d5a6cdd418c047fb136d"
5
6COMPATIBLE_MACHINE = "cfa10036"
7
diff --git a/recipes-kernel/linux/linux-cfa_3.12.bb b/recipes-kernel/linux/linux-cfa_3.12.bb
new file mode 100644
index 0000000..c14ccf3
--- /dev/null
+++ b/recipes-kernel/linux/linux-cfa_3.12.bb
@@ -0,0 +1,6 @@
1require linux-cfa.inc
2
3SRCBRANCH = "cfa-3.12.6"
4SRCREV = "ad5d68c1ccaf737fabfc12d476217ed046e7f6a1"
5
6COMPATIBLE_MACHINE = "cfa10036"
diff --git a/recipes-kernel/linux/linux-congatec-3.0.35/0001-Add-linux-support-for-congatec-evaluation-board-qmx6q.patch b/recipes-kernel/linux/linux-congatec-3.0.35/0001-Add-linux-support-for-congatec-evaluation-board-qmx6q.patch
new file mode 100644
index 0000000..1262df0
--- /dev/null
+++ b/recipes-kernel/linux/linux-congatec-3.0.35/0001-Add-linux-support-for-congatec-evaluation-board-qmx6q.patch
@@ -0,0 +1,7213 @@
1From 8848547bb783e01a9f00104b0d4fb1366893c245 Mon Sep 17 00:00:00 2001
2From: Leo Sartre <lsartre@adeneo-embedded.com>
3Date: Wed, 29 May 2013 09:46:23 +0200
4Subject: [PATCH] Add support for congatec evaluation board qmx6q and qmx6qdl
5Organization: O.S. Systems Software LTDA.
6
7Add support for congatec Qeval board, patch originaly written by
8Congatec team, some minor changes and cleanup were applied to make it
9work with the bsp 4.1 release.
10---
11 arch/arm/configs/qmx6_defconfig | 2659 +++++++++++++++++++++++++++
12 arch/arm/configs/qmx6_updater_defconfig | 2367 ++++++++++++++++++++++++
13 arch/arm/mach-mx6/Kconfig | 35 +
14 arch/arm/mach-mx6/Makefile | 2 +
15 arch/arm/mach-mx6/board-mx6dl_qmx6.h | 199 ++
16 arch/arm/mach-mx6/board-mx6q_qmx6.c | 979 ++++++++++
17 arch/arm/mach-mx6/board-mx6q_qmx6.h | 199 ++
18 arch/arm/mach-mx6/mx6q_qmx6_pmic_pfuze100.c | 422 +++++
19 arch/arm/plat-mxc/include/mach/esdhc.h | 1 +
20 arch/arm/tools/mach-types | 1 +
21 drivers/mmc/host/sdhci-esdhc-imx.c | 5 +-
22 drivers/net/fec.c | 32 +-
23 drivers/net/phy/micrel.c | 23 +
24 include/linux/micrel_phy.h | 1 +
25 sound/soc/imx/Kconfig | 2 +-
26 sound/soc/imx/imx-sgtl5000.c | 2 +-
27 16 files changed, 6910 insertions(+), 19 deletions(-)
28 create mode 100644 arch/arm/configs/qmx6_defconfig
29 create mode 100644 arch/arm/configs/qmx6_updater_defconfig
30 create mode 100644 arch/arm/mach-mx6/board-mx6dl_qmx6.h
31 create mode 100644 arch/arm/mach-mx6/board-mx6q_qmx6.c
32 create mode 100644 arch/arm/mach-mx6/board-mx6q_qmx6.h
33 create mode 100644 arch/arm/mach-mx6/mx6q_qmx6_pmic_pfuze100.c
34
35diff --git a/arch/arm/configs/qmx6_defconfig b/arch/arm/configs/qmx6_defconfig
36new file mode 100644
37index 0000000..9aeb4a5
38--- /dev/null
39+++ b/arch/arm/configs/qmx6_defconfig
40@@ -0,0 +1,2659 @@
41+#
42+# Automatically generated make config: don't edit
43+# Linux/arm 3.0.15 Kernel Configuration
44+#
45+CONFIG_ARM=y
46+CONFIG_HAVE_PWM=y
47+CONFIG_SYS_SUPPORTS_APM_EMULATION=y
48+CONFIG_HAVE_SCHED_CLOCK=y
49+CONFIG_GENERIC_GPIO=y
50+# CONFIG_ARCH_USES_GETTIMEOFFSET is not set
51+CONFIG_GENERIC_CLOCKEVENTS=y
52+CONFIG_GENERIC_CLOCKEVENTS_BROADCAST=y
53+CONFIG_KTIME_SCALAR=y
54+CONFIG_HAVE_PROC_CPU=y
55+CONFIG_STACKTRACE_SUPPORT=y
56+CONFIG_LOCKDEP_SUPPORT=y
57+CONFIG_TRACE_IRQFLAGS_SUPPORT=y
58+CONFIG_HARDIRQS_SW_RESEND=y
59+CONFIG_GENERIC_IRQ_PROBE=y
60+CONFIG_GENERIC_LOCKBREAK=y
61+CONFIG_RWSEM_GENERIC_SPINLOCK=y
62+CONFIG_ARCH_HAS_CPUFREQ=y
63+CONFIG_ARCH_HAS_CPU_IDLE_WAIT=y
64+CONFIG_GENERIC_HWEIGHT=y
65+CONFIG_GENERIC_CALIBRATE_DELAY=y
66+CONFIG_ZONE_DMA=y
67+CONFIG_NEED_DMA_MAP_STATE=y
68+CONFIG_FIQ=y
69+CONFIG_VECTORS_BASE=0xffff0000
70+# CONFIG_ARM_PATCH_PHYS_VIRT is not set
71+CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
72+CONFIG_HAVE_IRQ_WORK=y
73+CONFIG_IRQ_WORK=y
74+
75+#
76+# General setup
77+#
78+CONFIG_EXPERIMENTAL=y
79+CONFIG_INIT_ENV_ARG_LIMIT=32
80+CONFIG_CROSS_COMPILE=""
81+CONFIG_LOCALVERSION=""
82+CONFIG_LOCALVERSION_AUTO=y
83+CONFIG_HAVE_KERNEL_GZIP=y
84+CONFIG_HAVE_KERNEL_LZMA=y
85+CONFIG_HAVE_KERNEL_LZO=y
86+CONFIG_KERNEL_GZIP=y
87+# CONFIG_KERNEL_LZMA is not set
88+# CONFIG_KERNEL_LZO is not set
89+CONFIG_DEFAULT_HOSTNAME="(none)"
90+CONFIG_SWAP=y
91+CONFIG_SYSVIPC=y
92+CONFIG_SYSVIPC_SYSCTL=y
93+# CONFIG_POSIX_MQUEUE is not set
94+# CONFIG_BSD_PROCESS_ACCT is not set
95+# CONFIG_FHANDLE is not set
96+# CONFIG_TASKSTATS is not set
97+# CONFIG_AUDIT is not set
98+CONFIG_HAVE_GENERIC_HARDIRQS=y
99+
100+#
101+# IRQ subsystem
102+#
103+CONFIG_GENERIC_HARDIRQS=y
104+CONFIG_HAVE_SPARSE_IRQ=y
105+CONFIG_GENERIC_IRQ_SHOW=y
106+# CONFIG_SPARSE_IRQ is not set
107+
108+#
109+# RCU Subsystem
110+#
111+CONFIG_TREE_PREEMPT_RCU=y
112+CONFIG_PREEMPT_RCU=y
113+# CONFIG_RCU_TRACE is not set
114+CONFIG_RCU_FANOUT=32
115+# CONFIG_RCU_FANOUT_EXACT is not set
116+# CONFIG_TREE_RCU_TRACE is not set
117+# CONFIG_RCU_BOOST is not set
118+CONFIG_IKCONFIG=y
119+CONFIG_IKCONFIG_PROC=y
120+CONFIG_LOG_BUF_SHIFT=14
121+# CONFIG_CGROUPS is not set
122+# CONFIG_NAMESPACES is not set
123+# CONFIG_SCHED_AUTOGROUP is not set
124+# CONFIG_SYSFS_DEPRECATED is not set
125+# CONFIG_RELAY is not set
126+CONFIG_BLK_DEV_INITRD=y
127+CONFIG_INITRAMFS_SOURCE=""
128+CONFIG_RD_GZIP=y
129+# CONFIG_RD_BZIP2 is not set
130+# CONFIG_RD_LZMA is not set
131+# CONFIG_RD_XZ is not set
132+# CONFIG_RD_LZO is not set
133+# CONFIG_CC_OPTIMIZE_FOR_SIZE is not set
134+CONFIG_SYSCTL=y
135+CONFIG_ANON_INODES=y
136+CONFIG_EXPERT=y
137+CONFIG_UID16=y
138+CONFIG_SYSCTL_SYSCALL=y
139+CONFIG_KALLSYMS=y
140+CONFIG_HOTPLUG=y
141+CONFIG_PRINTK=y
142+CONFIG_BUG=y
143+CONFIG_ELF_CORE=y
144+CONFIG_BASE_FULL=y
145+CONFIG_FUTEX=y
146+CONFIG_EPOLL=y
147+CONFIG_SIGNALFD=y
148+CONFIG_TIMERFD=y
149+CONFIG_EVENTFD=y
150+CONFIG_SHMEM=y
151+CONFIG_AIO=y
152+CONFIG_EMBEDDED=y
153+CONFIG_HAVE_PERF_EVENTS=y
154+CONFIG_PERF_USE_VMALLOC=y
155+
156+#
157+# Kernel Performance Events And Counters
158+#
159+CONFIG_PERF_EVENTS=y
160+# CONFIG_PERF_COUNTERS is not set
161+CONFIG_VM_EVENT_COUNTERS=y
162+CONFIG_SLUB_DEBUG=y
163+CONFIG_COMPAT_BRK=y
164+# CONFIG_SLAB is not set
165+CONFIG_SLUB=y
166+# CONFIG_SLOB is not set
167+# CONFIG_PROFILING is not set
168+CONFIG_HAVE_OPROFILE=y
169+# CONFIG_KPROBES is not set
170+CONFIG_HAVE_KPROBES=y
171+CONFIG_HAVE_KRETPROBES=y
172+CONFIG_USE_GENERIC_SMP_HELPERS=y
173+CONFIG_HAVE_REGS_AND_STACK_ACCESS_API=y
174+CONFIG_HAVE_CLK=y
175+CONFIG_HAVE_DMA_API_DEBUG=y
176+CONFIG_HAVE_HW_BREAKPOINT=y
177+
178+#
179+# GCOV-based kernel profiling
180+#
181+# CONFIG_GCOV_KERNEL is not set
182+CONFIG_HAVE_GENERIC_DMA_COHERENT=y
183+CONFIG_SLABINFO=y
184+CONFIG_RT_MUTEXES=y
185+CONFIG_BASE_SMALL=0
186+CONFIG_MODULES=y
187+# CONFIG_MODULE_FORCE_LOAD is not set
188+CONFIG_MODULE_UNLOAD=y
189+CONFIG_MODULE_FORCE_UNLOAD=y
190+CONFIG_MODVERSIONS=y
191+# CONFIG_MODULE_SRCVERSION_ALL is not set
192+CONFIG_STOP_MACHINE=y
193+CONFIG_BLOCK=y
194+CONFIG_LBDAF=y
195+# CONFIG_BLK_DEV_BSG is not set
196+# CONFIG_BLK_DEV_INTEGRITY is not set
197+
198+#
199+# IO Schedulers
200+#
201+CONFIG_IOSCHED_NOOP=y
202+CONFIG_IOSCHED_DEADLINE=y
203+CONFIG_IOSCHED_CFQ=y
204+# CONFIG_DEFAULT_DEADLINE is not set
205+CONFIG_DEFAULT_CFQ=y
206+# CONFIG_DEFAULT_NOOP is not set
207+CONFIG_DEFAULT_IOSCHED="cfq"
208+# CONFIG_INLINE_SPIN_TRYLOCK is not set
209+# CONFIG_INLINE_SPIN_TRYLOCK_BH is not set
210+# CONFIG_INLINE_SPIN_LOCK is not set
211+# CONFIG_INLINE_SPIN_LOCK_BH is not set
212+# CONFIG_INLINE_SPIN_LOCK_IRQ is not set
213+# CONFIG_INLINE_SPIN_LOCK_IRQSAVE is not set
214+# CONFIG_INLINE_SPIN_UNLOCK is not set
215+# CONFIG_INLINE_SPIN_UNLOCK_BH is not set
216+# CONFIG_INLINE_SPIN_UNLOCK_IRQ is not set
217+# CONFIG_INLINE_SPIN_UNLOCK_IRQRESTORE is not set
218+# CONFIG_INLINE_READ_TRYLOCK is not set
219+# CONFIG_INLINE_READ_LOCK is not set
220+# CONFIG_INLINE_READ_LOCK_BH is not set
221+# CONFIG_INLINE_READ_LOCK_IRQ is not set
222+# CONFIG_INLINE_READ_LOCK_IRQSAVE is not set
223+# CONFIG_INLINE_READ_UNLOCK is not set
224+# CONFIG_INLINE_READ_UNLOCK_BH is not set
225+# CONFIG_INLINE_READ_UNLOCK_IRQ is not set
226+# CONFIG_INLINE_READ_UNLOCK_IRQRESTORE is not set
227+# CONFIG_INLINE_WRITE_TRYLOCK is not set
228+# CONFIG_INLINE_WRITE_LOCK is not set
229+# CONFIG_INLINE_WRITE_LOCK_BH is not set
230+# CONFIG_INLINE_WRITE_LOCK_IRQ is not set
231+# CONFIG_INLINE_WRITE_LOCK_IRQSAVE is not set
232+# CONFIG_INLINE_WRITE_UNLOCK is not set
233+# CONFIG_INLINE_WRITE_UNLOCK_BH is not set
234+# CONFIG_INLINE_WRITE_UNLOCK_IRQ is not set
235+# CONFIG_INLINE_WRITE_UNLOCK_IRQRESTORE is not set
236+CONFIG_MUTEX_SPIN_ON_OWNER=y
237+CONFIG_FREEZER=y
238+
239+#
240+# System Type
241+#
242+CONFIG_MMU=y
243+# CONFIG_ARCH_INTEGRATOR is not set
244+# CONFIG_ARCH_REALVIEW is not set
245+# CONFIG_ARCH_VERSATILE is not set
246+# CONFIG_ARCH_VEXPRESS is not set
247+# CONFIG_ARCH_AT91 is not set
248+# CONFIG_ARCH_BCMRING is not set
249+# CONFIG_ARCH_CLPS711X is not set
250+# CONFIG_ARCH_CNS3XXX is not set
251+# CONFIG_ARCH_GEMINI is not set
252+# CONFIG_ARCH_EBSA110 is not set
253+# CONFIG_ARCH_EP93XX is not set
254+# CONFIG_ARCH_FOOTBRIDGE is not set
255+CONFIG_ARCH_MXC=y
256+# CONFIG_ARCH_MXS is not set
257+# CONFIG_ARCH_NETX is not set
258+# CONFIG_ARCH_H720X is not set
259+# CONFIG_ARCH_IOP13XX is not set
260+# CONFIG_ARCH_IOP32X is not set
261+# CONFIG_ARCH_IOP33X is not set
262+# CONFIG_ARCH_IXP23XX is not set
263+# CONFIG_ARCH_IXP2000 is not set
264+# CONFIG_ARCH_IXP4XX is not set
265+# CONFIG_ARCH_DOVE is not set
266+# CONFIG_ARCH_KIRKWOOD is not set
267+# CONFIG_ARCH_LOKI is not set
268+# CONFIG_ARCH_LPC32XX is not set
269+# CONFIG_ARCH_MV78XX0 is not set
270+# CONFIG_ARCH_ORION5X is not set
271+# CONFIG_ARCH_MMP is not set
272+# CONFIG_ARCH_KS8695 is not set
273+# CONFIG_ARCH_W90X900 is not set
274+# CONFIG_ARCH_NUC93X is not set
275+# CONFIG_ARCH_TEGRA is not set
276+# CONFIG_ARCH_PNX4008 is not set
277+# CONFIG_ARCH_PXA is not set
278+# CONFIG_ARCH_MSM is not set
279+# CONFIG_ARCH_SHMOBILE is not set
280+# CONFIG_ARCH_RPC is not set
281+# CONFIG_ARCH_SA1100 is not set
282+# CONFIG_ARCH_S3C2410 is not set
283+# CONFIG_ARCH_S3C64XX is not set
284+# CONFIG_ARCH_S5P64X0 is not set
285+# CONFIG_ARCH_S5PC100 is not set
286+# CONFIG_ARCH_S5PV210 is not set
287+# CONFIG_ARCH_EXYNOS4 is not set
288+# CONFIG_ARCH_SHARK is not set
289+# CONFIG_ARCH_TCC_926 is not set
290+# CONFIG_ARCH_U300 is not set
291+# CONFIG_ARCH_U8500 is not set
292+# CONFIG_ARCH_NOMADIK is not set
293+# CONFIG_ARCH_DAVINCI is not set
294+# CONFIG_ARCH_OMAP is not set
295+# CONFIG_PLAT_SPEAR is not set
296+# CONFIG_ARCH_VT8500 is not set
297+CONFIG_GPIO_PCA953X=y
298+# CONFIG_KEYBOARD_GPIO_POLLED is not set
299+CONFIG_IMX_HAVE_PLATFORM_DMA=y
300+CONFIG_IMX_HAVE_PLATFORM_FEC=y
301+CONFIG_IMX_HAVE_PLATFORM_FLEXCAN=y
302+CONFIG_IMX_HAVE_PLATFORM_FSL_USB2_UDC=y
303+CONFIG_IMX_HAVE_PLATFORM_GPMI_NFC=y
304+CONFIG_IMX_HAVE_PLATFORM_IMX2_WDT=y
305+CONFIG_IMX_HAVE_PLATFORM_IMX_SNVS_RTC=y
306+CONFIG_IMX_HAVE_PLATFORM_IMX_I2C=y
307+CONFIG_IMX_HAVE_PLATFORM_IMX_SSI=y
308+CONFIG_IMX_HAVE_PLATFORM_IMX_UART=y
309+CONFIG_IMX_HAVE_PLATFORM_MXC_EHCI=y
310+CONFIG_IMX_HAVE_PLATFORM_MXC_PWM=y
311+CONFIG_IMX_HAVE_PLATFORM_SDHCI_ESDHC_IMX=y
312+CONFIG_IMX_HAVE_PLATFORM_SPI_IMX=y
313+CONFIG_IMX_HAVE_PLATFORM_IMX_IPUV3=y
314+CONFIG_IMX_HAVE_PLATFORM_IMX_VPU=y
315+CONFIG_IMX_HAVE_PLATFORM_IMX_DVFS=y
316+CONFIG_IMX_HAVE_PLATFORM_AHCI=y
317+CONFIG_IMX_HAVE_PLATFORM_IMX_OCOTP=y
318+CONFIG_IMX_HAVE_PLATFORM_IMX_VIIM=y
319+CONFIG_IMX_HAVE_PLATFORM_LDB=y
320+CONFIG_IMX_HAVE_PLATFORM_IMX_SPDIF=y
321+CONFIG_IMX_HAVE_PLATFORM_VIV_GPU=y
322+CONFIG_IMX_HAVE_PLATFORM_MXC_HDMI=y
323+CONFIG_IMX_HAVE_PLATFORM_IMX_ANATOP_THERMAL=y
324+CONFIG_IMX_HAVE_PLATFORM_FSL_OTG=y
325+CONFIG_IMX_HAVE_PLATFORM_FSL_USB_WAKEUP=y
326+CONFIG_IMX_HAVE_PLATFORM_IMX_PM=y
327+CONFIG_IMX_HAVE_PLATFORM_IMX_ASRC=y
328+CONFIG_IMX_HAVE_PLATFORM_IMX_MIPI_CSI2=y
329+CONFIG_IMX_HAVE_PLATFORM_IMX_VDOA=y
330+CONFIG_IMX_HAVE_PLATFORM_IMX_PCIE=y
331+
332+#
333+# Freescale MXC Implementations
334+#
335+# CONFIG_ARCH_MX1 is not set
336+# CONFIG_ARCH_MX2 is not set
337+# CONFIG_ARCH_MX25 is not set
338+# CONFIG_ARCH_MX3 is not set
339+# CONFIG_ARCH_MX503 is not set
340+# CONFIG_ARCH_MX51 is not set
341+CONFIG_ARCH_MX6=y
342+CONFIG_ARCH_MX6Q=y
343+CONFIG_FORCE_MAX_ZONEORDER=14
344+CONFIG_SOC_IMX6Q=y
345+# CONFIG_MACH_MX6Q_ARM2 is not set
346+# CONFIG_MACH_MX6Q_SABRELITE is not set
347+CONFIG_MACH_MX6Q_QMX6=y
348+# CONFIG_MACH_MX6Q_SABRESD is not set
349+# CONFIG_MACH_MX6Q_SABREAUTO is not set
350+
351+#
352+# MX6 Options:
353+#
354+# CONFIG_IMX_PCIE is not set
355+CONFIG_ISP1504_MXC=y
356+# CONFIG_MXC_IRQ_PRIOR is not set
357+CONFIG_MXC_PWM=y
358+# CONFIG_MXC_DEBUG_BOARD is not set
359+CONFIG_ARCH_MXC_IOMUX_V3=y
360+CONFIG_ARCH_MXC_AUDMUX_V2=y
361+CONFIG_IRAM_ALLOC=y
362+CONFIG_CLK_DEBUG=y
363+CONFIG_DMA_ZONE_SIZE=184
364+
365+#
366+# System MMU
367+#
368+
369+#
370+# Processor Type
371+#
372+CONFIG_CPU_V7=y
373+CONFIG_CPU_32v6K=y
374+CONFIG_CPU_32v7=y
375+CONFIG_CPU_ABRT_EV7=y
376+CONFIG_CPU_PABRT_V7=y
377+CONFIG_CPU_CACHE_V7=y
378+CONFIG_CPU_CACHE_VIPT=y
379+CONFIG_CPU_COPY_V6=y
380+CONFIG_CPU_TLB_V7=y
381+CONFIG_CPU_HAS_ASID=y
382+CONFIG_CPU_CP15=y
383+CONFIG_CPU_CP15_MMU=y
384+
385+#
386+# Processor Features
387+#
388+CONFIG_ARM_THUMB=y
389+# CONFIG_ARM_THUMBEE is not set
390+# CONFIG_SWP_EMULATE is not set
391+# CONFIG_CPU_ICACHE_DISABLE is not set
392+# CONFIG_CPU_DCACHE_DISABLE is not set
393+# CONFIG_CPU_BPREDICT_DISABLE is not set
394+CONFIG_OUTER_CACHE=y
395+CONFIG_OUTER_CACHE_SYNC=y
396+CONFIG_CACHE_L2X0=y
397+CONFIG_CACHE_PL310=y
398+CONFIG_ARM_L1_CACHE_SHIFT=5
399+CONFIG_ARM_DMA_MEM_BUFFERABLE=y
400+CONFIG_CPU_HAS_PMU=y
401+# CONFIG_ARM_ERRATA_430973 is not set
402+# CONFIG_ARM_ERRATA_458693 is not set
403+# CONFIG_ARM_ERRATA_460075 is not set
404+# CONFIG_ARM_ERRATA_742230 is not set
405+# CONFIG_ARM_ERRATA_742231 is not set
406+# CONFIG_PL310_ERRATA_588369 is not set
407+# CONFIG_ARM_ERRATA_720789 is not set
408+# CONFIG_PL310_ERRATA_727915 is not set
409+CONFIG_ARM_ERRATA_743622=y
410+CONFIG_ARM_ERRATA_751472=y
411+# CONFIG_ARM_ERRATA_753970 is not set
412+CONFIG_ARM_ERRATA_754322=y
413+# CONFIG_ARM_ERRATA_754327 is not set
414+CONFIG_ARM_GIC=y
415+
416+#
417+# Bus support
418+#
419+# CONFIG_PCI_SYSCALL is not set
420+# CONFIG_ARCH_SUPPORTS_MSI is not set
421+# CONFIG_PCCARD is not set
422+CONFIG_ARM_ERRATA_764369=y
423+# CONFIG_PL310_ERRATA_769419 is not set
424+
425+#
426+# Kernel Features
427+#
428+CONFIG_TICK_ONESHOT=y
429+CONFIG_NO_HZ=y
430+CONFIG_HIGH_RES_TIMERS=y
431+CONFIG_GENERIC_CLOCKEVENTS_BUILD=y
432+CONFIG_SMP=y
433+CONFIG_SMP_ON_UP=y
434+CONFIG_HAVE_ARM_SCU=y
435+CONFIG_HAVE_ARM_TWD=y
436+# CONFIG_VMSPLIT_3G is not set
437+CONFIG_VMSPLIT_2G=y
438+# CONFIG_VMSPLIT_1G is not set
439+CONFIG_PAGE_OFFSET=0x80000000
440+CONFIG_NR_CPUS=4
441+CONFIG_HOTPLUG_CPU=y
442+CONFIG_LOCAL_TIMERS=y
443+# CONFIG_PREEMPT_NONE is not set
444+# CONFIG_PREEMPT_VOLUNTARY is not set
445+CONFIG_PREEMPT=y
446+CONFIG_HZ=100
447+# CONFIG_THUMB2_KERNEL is not set
448+CONFIG_AEABI=y
449+# CONFIG_OABI_COMPAT is not set
450+# CONFIG_ARCH_SPARSEMEM_DEFAULT is not set
451+# CONFIG_ARCH_SELECT_MEMORY_MODEL is not set
452+CONFIG_HAVE_ARCH_PFN_VALID=y
453+CONFIG_HIGHMEM=y
454+# CONFIG_HIGHPTE is not set
455+CONFIG_HW_PERF_EVENTS=y
456+CONFIG_SELECT_MEMORY_MODEL=y
457+CONFIG_FLATMEM_MANUAL=y
458+CONFIG_FLATMEM=y
459+CONFIG_FLAT_NODE_MEM_MAP=y
460+CONFIG_HAVE_MEMBLOCK=y
461+CONFIG_PAGEFLAGS_EXTENDED=y
462+CONFIG_SPLIT_PTLOCK_CPUS=4
463+CONFIG_COMPACTION=y
464+CONFIG_MIGRATION=y
465+# CONFIG_PHYS_ADDR_T_64BIT is not set
466+CONFIG_ZONE_DMA_FLAG=1
467+CONFIG_BOUNCE=y
468+CONFIG_VIRT_TO_BUS=y
469+CONFIG_KSM=y
470+CONFIG_DEFAULT_MMAP_MIN_ADDR=4096
471+# CONFIG_CLEANCACHE is not set
472+CONFIG_ALIGNMENT_TRAP=y
473+# CONFIG_UACCESS_WITH_MEMCPY is not set
474+# CONFIG_SECCOMP is not set
475+# CONFIG_CC_STACKPROTECTOR is not set
476+# CONFIG_DEPRECATED_PARAM_STRUCT is not set
477+
478+#
479+# Boot options
480+#
481+# CONFIG_USE_OF is not set
482+CONFIG_ZBOOT_ROM_TEXT=0x0
483+CONFIG_ZBOOT_ROM_BSS=0x0
484+CONFIG_CMDLINE="noinitrd console=ttymxc0,115200 root=/dev/mtdblock2 rw rootfstype=jffs2 ip=off"
485+CONFIG_CMDLINE_FROM_BOOTLOADER=y
486+# CONFIG_CMDLINE_EXTEND is not set
487+# CONFIG_CMDLINE_FORCE is not set
488+# CONFIG_XIP_KERNEL is not set
489+# CONFIG_KEXEC is not set
490+# CONFIG_CRASH_DUMP is not set
491+# CONFIG_AUTO_ZRELADDR is not set
492+
493+#
494+# CPU Power Management
495+#
496+
497+#
498+# CPU Frequency scaling
499+#
500+CONFIG_CPU_FREQ=y
501+CONFIG_CPU_FREQ_TABLE=y
502+CONFIG_CPU_FREQ_STAT=y
503+# CONFIG_CPU_FREQ_STAT_DETAILS is not set
504+# CONFIG_CPU_FREQ_DEFAULT_GOV_PERFORMANCE is not set
505+# CONFIG_CPU_FREQ_DEFAULT_GOV_POWERSAVE is not set
506+# CONFIG_CPU_FREQ_DEFAULT_GOV_USERSPACE is not set
507+# CONFIG_CPU_FREQ_DEFAULT_GOV_ONDEMAND is not set
508+# CONFIG_CPU_FREQ_DEFAULT_GOV_CONSERVATIVE is not set
509+CONFIG_CPU_FREQ_DEFAULT_GOV_INTERACTIVE=y
510+# CONFIG_CPU_FREQ_GOV_PERFORMANCE is not set
511+CONFIG_CPU_FREQ_GOV_POWERSAVE=y
512+CONFIG_CPU_FREQ_GOV_USERSPACE=y
513+# CONFIG_CPU_FREQ_GOV_ONDEMAND is not set
514+CONFIG_CPU_FREQ_GOV_INTERACTIVE=y
515+CONFIG_CPU_FREQ_GOV_CONSERVATIVE=y
516+CONFIG_CPU_FREQ_IMX=y
517+# CONFIG_CPU_IDLE is not set
518+
519+#
520+# Floating point emulation
521+#
522+
523+#
524+# At least one emulation must be selected
525+#
526+CONFIG_VFP=y
527+CONFIG_VFPv3=y
528+CONFIG_NEON=y
529+
530+#
531+# Userspace binary formats
532+#
533+CONFIG_BINFMT_ELF=y
534+# CONFIG_CORE_DUMP_DEFAULT_ELF_HEADERS is not set
535+CONFIG_HAVE_AOUT=y
536+# CONFIG_BINFMT_AOUT is not set
537+# CONFIG_BINFMT_MISC is not set
538+
539+#
540+# Power management options
541+#
542+CONFIG_SUSPEND=y
543+# CONFIG_PM_TEST_SUSPEND is not set
544+CONFIG_SUSPEND_DEVICE_TIME_DEBUG=y
545+CONFIG_SUSPEND_FREEZER=y
546+CONFIG_PM_SLEEP=y
547+CONFIG_PM_SLEEP_SMP=y
548+CONFIG_PM_RUNTIME=y
549+CONFIG_PM=y
550+CONFIG_PM_DEBUG=y
551+# CONFIG_PM_ADVANCED_DEBUG is not set
552+CONFIG_CAN_PM_TRACE=y
553+CONFIG_APM_EMULATION=y
554+CONFIG_PM_RUNTIME_CLK=y
555+CONFIG_ARCH_SUSPEND_POSSIBLE=y
556+CONFIG_NET=y
557+
558+#
559+# Networking options
560+#
561+CONFIG_PACKET=y
562+CONFIG_UNIX=y
563+CONFIG_XFRM=y
564+# CONFIG_XFRM_USER is not set
565+# CONFIG_XFRM_SUB_POLICY is not set
566+# CONFIG_XFRM_MIGRATE is not set
567+# CONFIG_XFRM_STATISTICS is not set
568+# CONFIG_NET_KEY is not set
569+CONFIG_INET=y
570+CONFIG_IP_MULTICAST=y
571+# CONFIG_IP_ADVANCED_ROUTER is not set
572+CONFIG_IP_PNP=y
573+CONFIG_IP_PNP_DHCP=y
574+CONFIG_IP_PNP_BOOTP=y
575+# CONFIG_IP_PNP_RARP is not set
576+# CONFIG_NET_IPIP is not set
577+# CONFIG_NET_IPGRE_DEMUX is not set
578+# CONFIG_IP_MROUTE is not set
579+# CONFIG_ARPD is not set
580+# CONFIG_SYN_COOKIES is not set
581+# CONFIG_INET_AH is not set
582+# CONFIG_INET_ESP is not set
583+# CONFIG_INET_IPCOMP is not set
584+# CONFIG_INET_XFRM_TUNNEL is not set
585+# CONFIG_INET_TUNNEL is not set
586+CONFIG_INET_XFRM_MODE_TRANSPORT=y
587+CONFIG_INET_XFRM_MODE_TUNNEL=y
588+CONFIG_INET_XFRM_MODE_BEET=y
589+# CONFIG_INET_LRO is not set
590+CONFIG_INET_DIAG=y
591+CONFIG_INET_TCP_DIAG=y
592+# CONFIG_TCP_CONG_ADVANCED is not set
593+CONFIG_TCP_CONG_CUBIC=y
594+CONFIG_DEFAULT_TCP_CONG="cubic"
595+# CONFIG_TCP_MD5SIG is not set
596+# CONFIG_IPV6 is not set
597+# CONFIG_NETWORK_SECMARK is not set
598+# CONFIG_NETWORK_PHY_TIMESTAMPING is not set
599+# CONFIG_NETFILTER is not set
600+# CONFIG_IP_DCCP is not set
601+# CONFIG_IP_SCTP is not set
602+# CONFIG_RDS is not set
603+# CONFIG_TIPC is not set
604+# CONFIG_ATM is not set
605+# CONFIG_L2TP is not set
606+# CONFIG_BRIDGE is not set
607+# CONFIG_NET_DSA is not set
608+# CONFIG_VLAN_8021Q is not set
609+# CONFIG_DECNET is not set
610+# CONFIG_LLC2 is not set
611+# CONFIG_IPX is not set
612+# CONFIG_ATALK is not set
613+# CONFIG_X25 is not set
614+# CONFIG_LAPB is not set
615+# CONFIG_ECONET is not set
616+# CONFIG_WAN_ROUTER is not set
617+# CONFIG_PHONET is not set
618+# CONFIG_IEEE802154 is not set
619+# CONFIG_NET_SCHED is not set
620+# CONFIG_DCB is not set
621+# CONFIG_BATMAN_ADV is not set
622+CONFIG_RPS=y
623+CONFIG_RFS_ACCEL=y
624+CONFIG_XPS=y
625+
626+#
627+# Network testing
628+#
629+# CONFIG_NET_PKTGEN is not set
630+# CONFIG_HAMRADIO is not set
631+CONFIG_CAN=y
632+CONFIG_CAN_RAW=y
633+CONFIG_CAN_BCM=y
634+
635+#
636+# CAN Device Drivers
637+#
638+CONFIG_CAN_VCAN=y
639+# CONFIG_CAN_SLCAN is not set
640+CONFIG_CAN_DEV=y
641+CONFIG_CAN_CALC_BITTIMING=y
642+# CONFIG_CAN_MCP251X is not set
643+CONFIG_HAVE_CAN_FLEXCAN=y
644+CONFIG_CAN_FLEXCAN=y
645+# CONFIG_CAN_SJA1000 is not set
646+# CONFIG_CAN_C_CAN is not set
647+
648+#
649+# CAN USB interfaces
650+#
651+# CONFIG_CAN_EMS_USB is not set
652+# CONFIG_CAN_ESD_USB2 is not set
653+# CONFIG_CAN_SOFTING is not set
654+# CONFIG_CAN_DEBUG_DEVICES is not set
655+# CONFIG_IRDA is not set
656+CONFIG_BT=y
657+CONFIG_BT_L2CAP=y
658+CONFIG_BT_SCO=y
659+CONFIG_BT_RFCOMM=y
660+CONFIG_BT_RFCOMM_TTY=y
661+CONFIG_BT_BNEP=y
662+CONFIG_BT_BNEP_MC_FILTER=y
663+CONFIG_BT_BNEP_PROTO_FILTER=y
664+CONFIG_BT_HIDP=y
665+
666+#
667+# Bluetooth device drivers
668+#
669+CONFIG_BT_HCIBTUSB=y
670+# CONFIG_BT_HCIBTSDIO is not set
671+CONFIG_BT_HCIUART=y
672+# CONFIG_BT_HCIUART_H4 is not set
673+# CONFIG_BT_HCIUART_BCSP is not set
674+CONFIG_BT_HCIUART_ATH3K=y
675+# CONFIG_BT_HCIUART_LL is not set
676+# CONFIG_BT_HCIBCM203X is not set
677+# CONFIG_BT_HCIBPA10X is not set
678+# CONFIG_BT_HCIBFUSB is not set
679+CONFIG_BT_HCIVHCI=y
680+# CONFIG_BT_MRVL is not set
681+# CONFIG_BT_ATH3K is not set
682+# CONFIG_AF_RXRPC is not set
683+CONFIG_WIRELESS=y
684+CONFIG_WIRELESS_EXT=y
685+CONFIG_WEXT_CORE=y
686+CONFIG_WEXT_PROC=y
687+CONFIG_WEXT_SPY=y
688+CONFIG_WEXT_PRIV=y
689+CONFIG_CFG80211=y
690+# CONFIG_NL80211_TESTMODE is not set
691+# CONFIG_CFG80211_DEVELOPER_WARNINGS is not set
692+# CONFIG_CFG80211_REG_DEBUG is not set
693+CONFIG_CFG80211_DEFAULT_PS=y
694+# CONFIG_CFG80211_DEBUGFS is not set
695+# CONFIG_CFG80211_INTERNAL_REGDB is not set
696+CONFIG_CFG80211_WEXT=y
697+CONFIG_WIRELESS_EXT_SYSFS=y
698+CONFIG_LIB80211=y
699+CONFIG_LIB80211_CRYPT_WEP=y
700+CONFIG_LIB80211_CRYPT_CCMP=y
701+CONFIG_LIB80211_CRYPT_TKIP=y
702+# CONFIG_LIB80211_DEBUG is not set
703+# CONFIG_MAC80211 is not set
704+# CONFIG_WIMAX is not set
705+CONFIG_RFKILL=y
706+CONFIG_RFKILL_INPUT=y
707+# CONFIG_RFKILL_REGULATOR is not set
708+# CONFIG_RFKILL_GPIO is not set
709+# CONFIG_NET_9P is not set
710+# CONFIG_CAIF is not set
711+# CONFIG_CEPH_LIB is not set
712+
713+#
714+# Device Drivers
715+#
716+
717+#
718+# Generic Driver Options
719+#
720+CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug"
721+# CONFIG_DEVTMPFS is not set
722+CONFIG_STANDALONE=y
723+CONFIG_PREVENT_FIRMWARE_BUILD=y
724+CONFIG_FW_LOADER=y
725+CONFIG_FIRMWARE_IN_KERNEL=y
726+CONFIG_EXTRA_FIRMWARE=""
727+# CONFIG_SYS_HYPERVISOR is not set
728+CONFIG_CONNECTOR=y
729+CONFIG_PROC_EVENTS=y
730+CONFIG_MTD=y
731+# CONFIG_MTD_DEBUG is not set
732+# CONFIG_MTD_TESTS is not set
733+# CONFIG_MTD_REDBOOT_PARTS is not set
734+CONFIG_MTD_CMDLINE_PARTS=y
735+# CONFIG_MTD_AFS_PARTS is not set
736+# CONFIG_MTD_AR7_PARTS is not set
737+
738+#
739+# User Modules And Translation Layers
740+#
741+CONFIG_MTD_CHAR=y
742+CONFIG_MTD_BLKDEVS=y
743+CONFIG_MTD_BLOCK=y
744+# CONFIG_FTL is not set
745+# CONFIG_NFTL is not set
746+# CONFIG_INFTL is not set
747+# CONFIG_RFD_FTL is not set
748+# CONFIG_SSFDC is not set
749+# CONFIG_SM_FTL is not set
750+# CONFIG_MTD_OOPS is not set
751+# CONFIG_MTD_SWAP is not set
752+
753+#
754+# RAM/ROM/Flash chip drivers
755+#
756+# CONFIG_MTD_CFI is not set
757+# CONFIG_MTD_JEDECPROBE is not set
758+CONFIG_MTD_MAP_BANK_WIDTH_1=y
759+CONFIG_MTD_MAP_BANK_WIDTH_2=y
760+CONFIG_MTD_MAP_BANK_WIDTH_4=y
761+# CONFIG_MTD_MAP_BANK_WIDTH_8 is not set
762+# CONFIG_MTD_MAP_BANK_WIDTH_16 is not set
763+# CONFIG_MTD_MAP_BANK_WIDTH_32 is not set
764+CONFIG_MTD_CFI_I1=y
765+CONFIG_MTD_CFI_I2=y
766+# CONFIG_MTD_CFI_I4 is not set
767+# CONFIG_MTD_CFI_I8 is not set
768+# CONFIG_MTD_RAM is not set
769+# CONFIG_MTD_ROM is not set
770+# CONFIG_MTD_ABSENT is not set
771+
772+#
773+# Mapping drivers for chip access
774+#
775+# CONFIG_MTD_COMPLEX_MAPPINGS is not set
776+# CONFIG_MTD_PLATRAM is not set
777+
778+#
779+# Self-contained MTD device drivers
780+#
781+# CONFIG_MTD_DATAFLASH is not set
782+CONFIG_MTD_M25P80=y
783+CONFIG_M25PXX_USE_FAST_READ=y
784+# CONFIG_MTD_SST25L is not set
785+# CONFIG_MTD_SLRAM is not set
786+# CONFIG_MTD_PHRAM is not set
787+# CONFIG_MTD_MTDRAM is not set
788+# CONFIG_MTD_BLOCK2MTD is not set
789+
790+#
791+# Disk-On-Chip Device Drivers
792+#
793+# CONFIG_MTD_DOC2000 is not set
794+# CONFIG_MTD_DOC2001 is not set
795+# CONFIG_MTD_DOC2001PLUS is not set
796+CONFIG_MTD_NAND_ECC=y
797+# CONFIG_MTD_NAND_ECC_SMC is not set
798+CONFIG_MTD_NAND=y
799+# CONFIG_MTD_NAND_VERIFY_WRITE is not set
800+# CONFIG_MTD_NAND_ECC_BCH is not set
801+# CONFIG_MTD_SM_COMMON is not set
802+# CONFIG_MTD_NAND_MUSEUM_IDS is not set
803+# CONFIG_MTD_NAND_GPIO is not set
804+CONFIG_MTD_NAND_IDS=y
805+# CONFIG_MTD_NAND_DISKONCHIP is not set
806+# CONFIG_MTD_NAND_NANDSIM is not set
807+# CONFIG_MTD_NAND_GPMI_NAND is not set
808+# CONFIG_MTD_NAND_PLATFORM is not set
809+# CONFIG_MTD_ALAUDA is not set
810+# CONFIG_MTD_ONENAND is not set
811+
812+#
813+# LPDDR flash memory drivers
814+#
815+# CONFIG_MTD_LPDDR is not set
816+CONFIG_MTD_UBI=y
817+CONFIG_MTD_UBI_WL_THRESHOLD=4096
818+CONFIG_MTD_UBI_BEB_RESERVE=1
819+# CONFIG_MTD_UBI_GLUEBI is not set
820+# CONFIG_MTD_UBI_DEBUG is not set
821+# CONFIG_PARPORT is not set
822+CONFIG_BLK_DEV=y
823+# CONFIG_BLK_DEV_COW_COMMON is not set
824+CONFIG_BLK_DEV_LOOP=y
825+# CONFIG_BLK_DEV_CRYPTOLOOP is not set
826+# CONFIG_BLK_DEV_DRBD is not set
827+# CONFIG_BLK_DEV_NBD is not set
828+# CONFIG_BLK_DEV_UB is not set
829+CONFIG_BLK_DEV_RAM=y
830+CONFIG_BLK_DEV_RAM_COUNT=16
831+CONFIG_BLK_DEV_RAM_SIZE=4096
832+# CONFIG_BLK_DEV_XIP is not set
833+# CONFIG_CDROM_PKTCDVD is not set
834+# CONFIG_ATA_OVER_ETH is not set
835+# CONFIG_MG_DISK is not set
836+# CONFIG_BLK_DEV_RBD is not set
837+# CONFIG_SENSORS_LIS3LV02D is not set
838+CONFIG_MISC_DEVICES=y
839+# CONFIG_AD525X_DPOT is not set
840+# CONFIG_INTEL_MID_PTI is not set
841+# CONFIG_ICS932S401 is not set
842+# CONFIG_ENCLOSURE_SERVICES is not set
843+# CONFIG_APDS9802ALS is not set
844+# CONFIG_ISL29003 is not set
845+# CONFIG_ISL29020 is not set
846+# CONFIG_SENSORS_TSL2550 is not set
847+# CONFIG_SENSORS_BH1780 is not set
848+# CONFIG_SENSORS_BH1770 is not set
849+# CONFIG_SENSORS_APDS990X is not set
850+# CONFIG_HMC6352 is not set
851+# CONFIG_DS1682 is not set
852+# CONFIG_TI_DAC7512 is not set
853+# CONFIG_BMP085 is not set
854+CONFIG_MXS_PERFMON=m
855+# CONFIG_C2PORT is not set
856+
857+#
858+# EEPROM support
859+#
860+# CONFIG_EEPROM_AT24 is not set
861+# CONFIG_EEPROM_AT25 is not set
862+# CONFIG_EEPROM_LEGACY is not set
863+# CONFIG_EEPROM_MAX6875 is not set
864+# CONFIG_EEPROM_93CX6 is not set
865+# CONFIG_IWMC3200TOP is not set
866+
867+#
868+# Texas Instruments shared transport line discipline
869+#
870+# CONFIG_TI_ST is not set
871+# CONFIG_SENSORS_LIS3_SPI is not set
872+# CONFIG_SENSORS_LIS3_I2C is not set
873+CONFIG_HAVE_IDE=y
874+# CONFIG_IDE is not set
875+
876+#
877+# SCSI device support
878+#
879+CONFIG_SCSI_MOD=y
880+# CONFIG_RAID_ATTRS is not set
881+CONFIG_SCSI=y
882+CONFIG_SCSI_DMA=y
883+# CONFIG_SCSI_TGT is not set
884+# CONFIG_SCSI_NETLINK is not set
885+CONFIG_SCSI_PROC_FS=y
886+
887+#
888+# SCSI support type (disk, tape, CD-ROM)
889+#
890+CONFIG_BLK_DEV_SD=y
891+# CONFIG_CHR_DEV_ST is not set
892+# CONFIG_CHR_DEV_OSST is not set
893+# CONFIG_BLK_DEV_SR is not set
894+# CONFIG_CHR_DEV_SG is not set
895+# CONFIG_CHR_DEV_SCH is not set
896+CONFIG_SCSI_MULTI_LUN=y
897+# CONFIG_SCSI_CONSTANTS is not set
898+# CONFIG_SCSI_LOGGING is not set
899+# CONFIG_SCSI_SCAN_ASYNC is not set
900+CONFIG_SCSI_WAIT_SCAN=m
901+
902+#
903+# SCSI Transports
904+#
905+# CONFIG_SCSI_SPI_ATTRS is not set
906+# CONFIG_SCSI_FC_ATTRS is not set
907+# CONFIG_SCSI_ISCSI_ATTRS is not set
908+# CONFIG_SCSI_SAS_ATTRS is not set
909+# CONFIG_SCSI_SAS_LIBSAS is not set
910+# CONFIG_SCSI_SRP_ATTRS is not set
911+CONFIG_SCSI_LOWLEVEL=y
912+# CONFIG_ISCSI_TCP is not set
913+# CONFIG_ISCSI_BOOT_SYSFS is not set
914+# CONFIG_LIBFC is not set
915+# CONFIG_LIBFCOE is not set
916+# CONFIG_SCSI_DEBUG is not set
917+# CONFIG_SCSI_DH is not set
918+# CONFIG_SCSI_OSD_INITIATOR is not set
919+CONFIG_ATA=y
920+# CONFIG_ATA_NONSTANDARD is not set
921+CONFIG_ATA_VERBOSE_ERROR=y
922+# CONFIG_SATA_PMP is not set
923+
924+#
925+# Controllers with non-SFF native interface
926+#
927+CONFIG_SATA_AHCI_PLATFORM=y
928+CONFIG_ATA_SFF=y
929+
930+#
931+# SFF controllers with custom DMA interface
932+#
933+CONFIG_ATA_BMDMA=y
934+
935+#
936+# SATA SFF controllers with BMDMA
937+#
938+# CONFIG_SATA_MV is not set
939+
940+#
941+# PATA SFF controllers with BMDMA
942+#
943+# CONFIG_PATA_ARASAN_CF is not set
944+
945+#
946+# PIO-only SFF controllers
947+#
948+# CONFIG_PATA_PLATFORM is not set
949+
950+#
951+# Generic fallback / legacy drivers
952+#
953+# CONFIG_MD is not set
954+# CONFIG_TARGET_CORE is not set
955+CONFIG_NETDEVICES=y
956+# CONFIG_DUMMY is not set
957+# CONFIG_BONDING is not set
958+# CONFIG_MACVLAN is not set
959+# CONFIG_EQUALIZER is not set
960+# CONFIG_TUN is not set
961+# CONFIG_VETH is not set
962+CONFIG_MII=y
963+CONFIG_PHYLIB=y
964+
965+#
966+# MII PHY device drivers
967+#
968+# CONFIG_MARVELL_PHY is not set
969+# CONFIG_DAVICOM_PHY is not set
970+# CONFIG_QSEMI_PHY is not set
971+# CONFIG_LXT_PHY is not set
972+# CONFIG_CICADA_PHY is not set
973+# CONFIG_VITESSE_PHY is not set
974+# CONFIG_SMSC_PHY is not set
975+# CONFIG_BROADCOM_PHY is not set
976+# CONFIG_ICPLUS_PHY is not set
977+# CONFIG_REALTEK_PHY is not set
978+# CONFIG_NATIONAL_PHY is not set
979+# CONFIG_STE10XP is not set
980+# CONFIG_LSI_ET1011C_PHY is not set
981+CONFIG_MICREL_PHY=y
982+# CONFIG_FIXED_PHY is not set
983+# CONFIG_MDIO_BITBANG is not set
984+CONFIG_NET_ETHERNET=y
985+# CONFIG_AX88796 is not set
986+# CONFIG_SMC91X is not set
987+# CONFIG_DM9000 is not set
988+# CONFIG_ENC28J60 is not set
989+# CONFIG_ETHOC is not set
990+# CONFIG_SMC911X is not set
991+CONFIG_SMSC911X=y
992+# CONFIG_SMSC911X_ARCH_HOOKS is not set
993+# CONFIG_DNET is not set
994+# CONFIG_IBM_NEW_EMAC_ZMII is not set
995+# CONFIG_IBM_NEW_EMAC_RGMII is not set
996+# CONFIG_IBM_NEW_EMAC_TAH is not set
997+# CONFIG_IBM_NEW_EMAC_EMAC4 is not set
998+# CONFIG_IBM_NEW_EMAC_NO_FLOW_CTRL is not set
999+# CONFIG_IBM_NEW_EMAC_MAL_CLR_ICINTSTAT is not set
1000+# CONFIG_IBM_NEW_EMAC_MAL_COMMON_ERR is not set
1001+# CONFIG_B44 is not set
1002+# CONFIG_KS8842 is not set
1003+# CONFIG_KS8851 is not set
1004+# CONFIG_KS8851_MLL is not set
1005+CONFIG_FEC=y
1006+# CONFIG_FEC_1588 is not set
1007+# CONFIG_FTMAC100 is not set
1008+# CONFIG_NETDEV_1000 is not set
1009+# CONFIG_NETDEV_10000 is not set
1010+CONFIG_WLAN=y
1011+# CONFIG_USB_ZD1201 is not set
1012+# CONFIG_USB_NET_RNDIS_WLAN is not set
1013+CONFIG_ATH_COMMON=m
1014+# CONFIG_ATH_DEBUG is not set
1015+CONFIG_ATH6KL=m
1016+# CONFIG_ATH6KL_DEBUG is not set
1017+CONFIG_HOSTAP=y
1018+# CONFIG_HOSTAP_FIRMWARE is not set
1019+# CONFIG_IWM is not set
1020+# CONFIG_LIBERTAS is not set
1021+# CONFIG_MWIFIEX is not set
1022+
1023+#
1024+# Enable WiMAX (Networking options) to see the WiMAX drivers
1025+#
1026+
1027+#
1028+# USB Network Adapters
1029+#
1030+# CONFIG_USB_CATC is not set
1031+# CONFIG_USB_KAWETH is not set
1032+# CONFIG_USB_PEGASUS is not set
1033+# CONFIG_USB_RTL8150 is not set
1034+# CONFIG_USB_USBNET is not set
1035+# CONFIG_USB_HSO is not set
1036+# CONFIG_USB_IPHETH is not set
1037+# CONFIG_WAN is not set
1038+
1039+#
1040+# CAIF transport drivers
1041+#
1042+# CONFIG_PPP is not set
1043+# CONFIG_SLIP is not set
1044+# CONFIG_NETCONSOLE is not set
1045+# CONFIG_NETPOLL is not set
1046+# CONFIG_NET_POLL_CONTROLLER is not set
1047+# CONFIG_ISDN is not set
1048+# CONFIG_PHONE is not set
1049+
1050+#
1051+# Input device support
1052+#
1053+CONFIG_INPUT=y
1054+# CONFIG_INPUT_FF_MEMLESS is not set
1055+CONFIG_INPUT_POLLDEV=y
1056+# CONFIG_INPUT_SPARSEKMAP is not set
1057+
1058+#
1059+# Userland interfaces
1060+#
1061+CONFIG_INPUT_MOUSEDEV=y
1062+CONFIG_INPUT_MOUSEDEV_PSAUX=y
1063+CONFIG_INPUT_MOUSEDEV_SCREEN_X=1024
1064+CONFIG_INPUT_MOUSEDEV_SCREEN_Y=768
1065+# CONFIG_INPUT_JOYDEV is not set
1066+CONFIG_INPUT_EVDEV=y
1067+# CONFIG_INPUT_EVBUG is not set
1068+# CONFIG_INPUT_APMPOWER is not set
1069+
1070+#
1071+# Input Device Drivers
1072+#
1073+CONFIG_INPUT_KEYBOARD=y
1074+# CONFIG_KEYBOARD_ADP5588 is not set
1075+# CONFIG_KEYBOARD_ADP5589 is not set
1076+CONFIG_KEYBOARD_ATKBD=y
1077+# CONFIG_KEYBOARD_QT1070 is not set
1078+# CONFIG_KEYBOARD_QT2160 is not set
1079+# CONFIG_KEYBOARD_LKKBD is not set
1080+CONFIG_KEYBOARD_GPIO=y
1081+# CONFIG_KEYBOARD_TCA6416 is not set
1082+# CONFIG_KEYBOARD_MATRIX is not set
1083+# CONFIG_KEYBOARD_LM8323 is not set
1084+# CONFIG_KEYBOARD_MAX7359 is not set
1085+# CONFIG_KEYBOARD_MCS is not set
1086+# CONFIG_KEYBOARD_MPR121 is not set
1087+# CONFIG_KEYBOARD_IMX is not set
1088+# CONFIG_KEYBOARD_NEWTON is not set
1089+# CONFIG_KEYBOARD_OPENCORES is not set
1090+# CONFIG_KEYBOARD_STOWAWAY is not set
1091+# CONFIG_KEYBOARD_SUNKBD is not set
1092+# CONFIG_KEYBOARD_XTKBD is not set
1093+# CONFIG_KEYBOARD_MXC is not set
1094+# CONFIG_INPUT_MOUSE is not set
1095+# CONFIG_INPUT_JOYSTICK is not set
1096+# CONFIG_INPUT_TABLET is not set
1097+CONFIG_INPUT_TOUCHSCREEN=y
1098+# CONFIG_TOUCHSCREEN_ADS7846 is not set
1099+# CONFIG_TOUCHSCREEN_AD7877 is not set
1100+# CONFIG_TOUCHSCREEN_AD7879 is not set
1101+# CONFIG_TOUCHSCREEN_ATMEL_MXT is not set
1102+# CONFIG_TOUCHSCREEN_BU21013 is not set
1103+# CONFIG_TOUCHSCREEN_CY8CTMG110 is not set
1104+# CONFIG_TOUCHSCREEN_DYNAPRO is not set
1105+# CONFIG_TOUCHSCREEN_HAMPSHIRE is not set
1106+# CONFIG_TOUCHSCREEN_EETI is not set
1107+CONFIG_TOUCHSCREEN_EGALAX=y
1108+# CONFIG_TOUCHSCREEN_FUJITSU is not set
1109+# CONFIG_TOUCHSCREEN_GUNZE is not set
1110+# CONFIG_TOUCHSCREEN_ELO is not set
1111+# CONFIG_TOUCHSCREEN_WACOM_W8001 is not set
1112+# CONFIG_TOUCHSCREEN_MAX11801 is not set
1113+# CONFIG_TOUCHSCREEN_MCS5000 is not set
1114+# CONFIG_TOUCHSCREEN_MTOUCH is not set
1115+# CONFIG_TOUCHSCREEN_INEXIO is not set
1116+# CONFIG_TOUCHSCREEN_MK712 is not set
1117+# CONFIG_TOUCHSCREEN_PENMOUNT is not set
1118+# CONFIG_TOUCHSCREEN_TOUCHRIGHT is not set
1119+# CONFIG_TOUCHSCREEN_TOUCHWIN is not set
1120+# CONFIG_TOUCHSCREEN_WM97XX is not set
1121+# CONFIG_TOUCHSCREEN_USB_COMPOSITE is not set
1122+# CONFIG_TOUCHSCREEN_TOUCHIT213 is not set
1123+# CONFIG_TOUCHSCREEN_TSC2005 is not set
1124+# CONFIG_TOUCHSCREEN_TSC2007 is not set
1125+# CONFIG_TOUCHSCREEN_W90X900 is not set
1126+# CONFIG_TOUCHSCREEN_ST1232 is not set
1127+# CONFIG_TOUCHSCREEN_P1003 is not set
1128+# CONFIG_TOUCHSCREEN_TPS6507X is not set
1129+CONFIG_INPUT_MISC=y
1130+# CONFIG_INPUT_AD714X is not set
1131+# CONFIG_INPUT_ATI_REMOTE is not set
1132+# CONFIG_INPUT_ATI_REMOTE2 is not set
1133+# CONFIG_INPUT_KEYSPAN_REMOTE is not set
1134+# CONFIG_INPUT_POWERMATE is not set
1135+# CONFIG_INPUT_YEALINK is not set
1136+# CONFIG_INPUT_CM109 is not set
1137+CONFIG_INPUT_UINPUT=y
1138+# CONFIG_INPUT_PCF8574 is not set
1139+# CONFIG_INPUT_PWM_BEEPER is not set
1140+# CONFIG_INPUT_GPIO_ROTARY_ENCODER is not set
1141+# CONFIG_INPUT_ADXL34X is not set
1142+# CONFIG_INPUT_CMA3000 is not set
1143+CONFIG_INPUT_ISL29023=y
1144+
1145+#
1146+# Hardware I/O ports
1147+#
1148+CONFIG_SERIO=y
1149+CONFIG_SERIO_SERPORT=y
1150+CONFIG_SERIO_LIBPS2=y
1151+# CONFIG_SERIO_RAW is not set
1152+# CONFIG_SERIO_ALTERA_PS2 is not set
1153+# CONFIG_SERIO_PS2MULT is not set
1154+# CONFIG_GAMEPORT is not set
1155+
1156+#
1157+# Character devices
1158+#
1159+CONFIG_VT=y
1160+CONFIG_CONSOLE_TRANSLATIONS=y
1161+CONFIG_VT_CONSOLE=y
1162+CONFIG_HW_CONSOLE=y
1163+# CONFIG_VT_HW_CONSOLE_BINDING is not set
1164+CONFIG_UNIX98_PTYS=y
1165+# CONFIG_DEVPTS_MULTIPLE_INSTANCES is not set
1166+CONFIG_LEGACY_PTYS=y
1167+CONFIG_LEGACY_PTY_COUNT=256
1168+# CONFIG_SERIAL_NONSTANDARD is not set
1169+# CONFIG_N_GSM is not set
1170+# CONFIG_TRACE_SINK is not set
1171+CONFIG_DEVKMEM=y
1172+
1173+#
1174+# Serial drivers
1175+#
1176+# CONFIG_SERIAL_8250 is not set
1177+
1178+#
1179+# Non-8250 serial port support
1180+#
1181+# CONFIG_SERIAL_MAX3100 is not set
1182+# CONFIG_SERIAL_MAX3107 is not set
1183+CONFIG_SERIAL_IMX=y
1184+CONFIG_SERIAL_IMX_CONSOLE=y
1185+CONFIG_SERIAL_CORE=y
1186+CONFIG_SERIAL_CORE_CONSOLE=y
1187+# CONFIG_SERIAL_TIMBERDALE is not set
1188+# CONFIG_SERIAL_ALTERA_JTAGUART is not set
1189+# CONFIG_SERIAL_ALTERA_UART is not set
1190+# CONFIG_SERIAL_IFX6X60 is not set
1191+# CONFIG_SERIAL_XILINX_PS_UART is not set
1192+# CONFIG_TTY_PRINTK is not set
1193+CONFIG_FSL_OTP=y
1194+# CONFIG_HVC_DCC is not set
1195+# CONFIG_IPMI_HANDLER is not set
1196+CONFIG_HW_RANDOM=y
1197+# CONFIG_HW_RANDOM_TIMERIOMEM is not set
1198+# CONFIG_R3964 is not set
1199+# CONFIG_RAW_DRIVER is not set
1200+# CONFIG_TCG_TPM is not set
1201+# CONFIG_RAMOOPS is not set
1202+CONFIG_MXS_VIIM=y
1203+CONFIG_I2C=y
1204+CONFIG_I2C_BOARDINFO=y
1205+CONFIG_I2C_COMPAT=y
1206+CONFIG_I2C_CHARDEV=y
1207+# CONFIG_I2C_MUX is not set
1208+CONFIG_I2C_HELPER_AUTO=y
1209+
1210+#
1211+# I2C Hardware Bus support
1212+#
1213+
1214+#
1215+# I2C system bus drivers (mostly embedded / system-on-chip)
1216+#
1217+# CONFIG_I2C_DESIGNWARE is not set
1218+# CONFIG_I2C_GPIO is not set
1219+CONFIG_I2C_IMX=y
1220+# CONFIG_I2C_OCORES is not set
1221+# CONFIG_I2C_PCA_PLATFORM is not set
1222+# CONFIG_I2C_PXA_PCI is not set
1223+# CONFIG_I2C_SIMTEC is not set
1224+# CONFIG_I2C_XILINX is not set
1225+
1226+#
1227+# External I2C/SMBus adapter drivers
1228+#
1229+# CONFIG_I2C_DIOLAN_U2C is not set
1230+# CONFIG_I2C_PARPORT_LIGHT is not set
1231+# CONFIG_I2C_TAOS_EVM is not set
1232+# CONFIG_I2C_TINY_USB is not set
1233+
1234+#
1235+# Other I2C/SMBus bus drivers
1236+#
1237+# CONFIG_I2C_STUB is not set
1238+# CONFIG_I2C_DEBUG_CORE is not set
1239+# CONFIG_I2C_DEBUG_ALGO is not set
1240+# CONFIG_I2C_DEBUG_BUS is not set
1241+CONFIG_SPI=y
1242+CONFIG_SPI_MASTER=y
1243+
1244+#
1245+# SPI Master Controller Drivers
1246+#
1247+# CONFIG_SPI_ALTERA is not set
1248+CONFIG_SPI_BITBANG=y
1249+# CONFIG_SPI_GPIO is not set
1250+CONFIG_SPI_IMX_VER_2_3=y
1251+CONFIG_SPI_IMX=y
1252+# CONFIG_SPI_OC_TINY is not set
1253+# CONFIG_SPI_PXA2XX_PCI is not set
1254+# CONFIG_SPI_XILINX is not set
1255+# CONFIG_SPI_DESIGNWARE is not set
1256+
1257+#
1258+# SPI Protocol Masters
1259+#
1260+# CONFIG_SPI_SPIDEV is not set
1261+# CONFIG_SPI_TLE62X0 is not set
1262+
1263+#
1264+# PPS support
1265+#
1266+# CONFIG_PPS is not set
1267+
1268+#
1269+# PPS generators support
1270+#
1271+
1272+#
1273+# PTP clock support
1274+#
1275+
1276+#
1277+# Enable Device Drivers -> PPS to see the PTP clock options.
1278+#
1279+CONFIG_ARCH_REQUIRE_GPIOLIB=y
1280+CONFIG_GPIOLIB=y
1281+CONFIG_GPIO_SYSFS=y
1282+
1283+#
1284+# Memory mapped GPIO drivers:
1285+#
1286+# CONFIG_GPIO_BASIC_MMIO is not set
1287+# CONFIG_GPIO_IT8761E is not set
1288+
1289+#
1290+# I2C GPIO expanders:
1291+#
1292+# CONFIG_GPIO_MAX7300 is not set
1293+# CONFIG_GPIO_MAX732X is not set
1294+# CONFIG_GPIO_PCA953X_IRQ is not set
1295+# CONFIG_GPIO_PCF857X is not set
1296+# CONFIG_GPIO_SX150X is not set
1297+# CONFIG_GPIO_WM8994 is not set
1298+# CONFIG_GPIO_ADP5588 is not set
1299+
1300+#
1301+# PCI GPIO expanders:
1302+#
1303+
1304+#
1305+# SPI GPIO expanders:
1306+#
1307+# CONFIG_GPIO_MAX7301 is not set
1308+# CONFIG_GPIO_MCP23S08 is not set
1309+# CONFIG_GPIO_MC33880 is not set
1310+# CONFIG_GPIO_74X164 is not set
1311+
1312+#
1313+# AC97 GPIO expanders:
1314+#
1315+
1316+#
1317+# MODULbus GPIO expanders:
1318+#
1319+# CONFIG_W1 is not set
1320+CONFIG_POWER_SUPPLY=y
1321+# CONFIG_POWER_SUPPLY_DEBUG is not set
1322+# CONFIG_PDA_POWER is not set
1323+# CONFIG_APM_POWER is not set
1324+# CONFIG_TEST_POWER is not set
1325+# CONFIG_BATTERY_DS2780 is not set
1326+# CONFIG_BATTERY_DS2782 is not set
1327+# CONFIG_BATTERY_BQ20Z75 is not set
1328+# CONFIG_BATTERY_BQ27x00 is not set
1329+# CONFIG_BATTERY_MAX17040 is not set
1330+# CONFIG_BATTERY_MAX17042 is not set
1331+# CONFIG_CHARGER_ISP1704 is not set
1332+CONFIG_CHARGER_MAX8903=y
1333+# CONFIG_CHARGER_GPIO is not set
1334+CONFIG_HWMON=y
1335+# CONFIG_HWMON_VID is not set
1336+# CONFIG_HWMON_DEBUG_CHIP is not set
1337+
1338+#
1339+# Native drivers
1340+#
1341+# CONFIG_SENSORS_AD7414 is not set
1342+# CONFIG_SENSORS_AD7418 is not set
1343+# CONFIG_SENSORS_ADCXX is not set
1344+# CONFIG_SENSORS_ADM1021 is not set
1345+# CONFIG_SENSORS_ADM1025 is not set
1346+# CONFIG_SENSORS_ADM1026 is not set
1347+# CONFIG_SENSORS_ADM1029 is not set
1348+# CONFIG_SENSORS_ADM1031 is not set
1349+# CONFIG_SENSORS_ADM9240 is not set
1350+# CONFIG_SENSORS_ADT7411 is not set
1351+# CONFIG_SENSORS_ADT7462 is not set
1352+# CONFIG_SENSORS_ADT7470 is not set
1353+# CONFIG_SENSORS_ADT7475 is not set
1354+# CONFIG_SENSORS_ASC7621 is not set
1355+# CONFIG_SENSORS_ATXP1 is not set
1356+# CONFIG_SENSORS_DS620 is not set
1357+# CONFIG_SENSORS_DS1621 is not set
1358+# CONFIG_SENSORS_F71805F is not set
1359+# CONFIG_SENSORS_F71882FG is not set
1360+# CONFIG_SENSORS_F75375S is not set
1361+# CONFIG_SENSORS_G760A is not set
1362+# CONFIG_SENSORS_GL518SM is not set
1363+# CONFIG_SENSORS_GL520SM is not set
1364+# CONFIG_SENSORS_GPIO_FAN is not set
1365+# CONFIG_SENSORS_IT87 is not set
1366+# CONFIG_SENSORS_JC42 is not set
1367+# CONFIG_SENSORS_LINEAGE is not set
1368+# CONFIG_SENSORS_LM63 is not set
1369+# CONFIG_SENSORS_LM70 is not set
1370+# CONFIG_SENSORS_LM73 is not set
1371+# CONFIG_SENSORS_LM75 is not set
1372+# CONFIG_SENSORS_LM77 is not set
1373+# CONFIG_SENSORS_LM78 is not set
1374+# CONFIG_SENSORS_LM80 is not set
1375+# CONFIG_SENSORS_LM83 is not set
1376+# CONFIG_SENSORS_LM85 is not set
1377+# CONFIG_SENSORS_LM87 is not set
1378+# CONFIG_SENSORS_LM90 is not set
1379+# CONFIG_SENSORS_LM92 is not set
1380+# CONFIG_SENSORS_LM93 is not set
1381+# CONFIG_SENSORS_LTC4151 is not set
1382+# CONFIG_SENSORS_LTC4215 is not set
1383+# CONFIG_SENSORS_LTC4245 is not set
1384+# CONFIG_SENSORS_LTC4261 is not set
1385+# CONFIG_SENSORS_LM95241 is not set
1386+# CONFIG_SENSORS_MAX1111 is not set
1387+# CONFIG_SENSORS_MAX16065 is not set
1388+# CONFIG_SENSORS_MAX1619 is not set
1389+# CONFIG_SENSORS_MAX6639 is not set
1390+# CONFIG_SENSORS_MAX6642 is not set
1391+# CONFIG_SENSORS_MAX17135 is not set
1392+# CONFIG_SENSORS_MAX6650 is not set
1393+# CONFIG_SENSORS_PC87360 is not set
1394+# CONFIG_SENSORS_PC87427 is not set
1395+# CONFIG_SENSORS_PCF8591 is not set
1396+# CONFIG_PMBUS is not set
1397+# CONFIG_SENSORS_SHT15 is not set
1398+# CONFIG_SENSORS_SHT21 is not set
1399+# CONFIG_SENSORS_SMM665 is not set
1400+# CONFIG_SENSORS_DME1737 is not set
1401+# CONFIG_SENSORS_EMC1403 is not set
1402+# CONFIG_SENSORS_EMC2103 is not set
1403+# CONFIG_SENSORS_EMC6W201 is not set
1404+# CONFIG_SENSORS_SMSC47M1 is not set
1405+# CONFIG_SENSORS_SMSC47M192 is not set
1406+# CONFIG_SENSORS_SMSC47B397 is not set
1407+# CONFIG_SENSORS_SCH5627 is not set
1408+# CONFIG_SENSORS_ADS1015 is not set
1409+# CONFIG_SENSORS_ADS7828 is not set
1410+# CONFIG_SENSORS_ADS7871 is not set
1411+# CONFIG_SENSORS_AMC6821 is not set
1412+# CONFIG_SENSORS_THMC50 is not set
1413+# CONFIG_SENSORS_TMP102 is not set
1414+# CONFIG_SENSORS_TMP401 is not set
1415+# CONFIG_SENSORS_TMP421 is not set
1416+# CONFIG_SENSORS_VT1211 is not set
1417+# CONFIG_SENSORS_W83781D is not set
1418+# CONFIG_SENSORS_W83791D is not set
1419+# CONFIG_SENSORS_W83792D is not set
1420+# CONFIG_SENSORS_W83793 is not set
1421+# CONFIG_SENSORS_W83795 is not set
1422+# CONFIG_SENSORS_W83L785TS is not set
1423+# CONFIG_SENSORS_W83L786NG is not set
1424+# CONFIG_SENSORS_W83627HF is not set
1425+# CONFIG_SENSORS_W83627EHF is not set
1426+CONFIG_SENSORS_MAG3110=y
1427+# CONFIG_MXC_MMA8450 is not set
1428+CONFIG_MXC_MMA8451=y
1429+CONFIG_THERMAL=y
1430+# CONFIG_THERMAL_HWMON is not set
1431+CONFIG_WATCHDOG=y
1432+CONFIG_WATCHDOG_NOWAYOUT=y
1433+
1434+#
1435+# Watchdog Device Drivers
1436+#
1437+# CONFIG_SOFT_WATCHDOG is not set
1438+# CONFIG_MPCORE_WATCHDOG is not set
1439+# CONFIG_MAX63XX_WATCHDOG is not set
1440+CONFIG_IMX2_WDT=y
1441+
1442+#
1443+# USB-based Watchdog Cards
1444+#
1445+# CONFIG_USBPCWATCHDOG is not set
1446+CONFIG_SSB_POSSIBLE=y
1447+
1448+#
1449+# Sonics Silicon Backplane
1450+#
1451+# CONFIG_SSB is not set
1452+CONFIG_BCMA_POSSIBLE=y
1453+
1454+#
1455+# Broadcom specific AMBA
1456+#
1457+# CONFIG_BCMA is not set
1458+CONFIG_MFD_SUPPORT=y
1459+CONFIG_MFD_CORE=y
1460+# CONFIG_MFD_88PM860X is not set
1461+# CONFIG_MFD_SM501 is not set
1462+# CONFIG_MFD_ASIC3 is not set
1463+# CONFIG_HTC_EGPIO is not set
1464+# CONFIG_HTC_PASIC3 is not set
1465+# CONFIG_HTC_I2CPLD is not set
1466+# CONFIG_UCB1400_CORE is not set
1467+# CONFIG_TPS6105X is not set
1468+# CONFIG_TPS65010 is not set
1469+# CONFIG_TPS6507X is not set
1470+# CONFIG_MFD_TPS6586X is not set
1471+# CONFIG_TWL4030_CORE is not set
1472+# CONFIG_MFD_STMPE is not set
1473+# CONFIG_MFD_TC3589X is not set
1474+# CONFIG_MFD_TMIO is not set
1475+# CONFIG_MFD_T7L66XB is not set
1476+# CONFIG_MFD_TC6387XB is not set
1477+# CONFIG_MFD_TC6393XB is not set
1478+# CONFIG_PMIC_DA903X is not set
1479+# CONFIG_PMIC_ADP5520 is not set
1480+# CONFIG_MFD_MAX8925 is not set
1481+# CONFIG_MFD_MAX8997 is not set
1482+# CONFIG_MFD_MAX8998 is not set
1483+# CONFIG_MFD_WM8400 is not set
1484+# CONFIG_MFD_WM831X_I2C is not set
1485+# CONFIG_MFD_WM831X_SPI is not set
1486+# CONFIG_MFD_WM8350_I2C is not set
1487+CONFIG_MFD_WM8994=y
1488+# CONFIG_MFD_PCF50633 is not set
1489+# CONFIG_PMIC_DIALOG is not set
1490+# CONFIG_MFD_MC_PMIC is not set
1491+# CONFIG_MFD_MC34708 is not set
1492+CONFIG_MFD_PFUZE=y
1493+# CONFIG_MFD_MC13XXX is not set
1494+# CONFIG_ABX500_CORE is not set
1495+# CONFIG_EZX_PCAP is not set
1496+# CONFIG_MFD_WL1273_CORE is not set
1497+# CONFIG_MFD_TPS65910 is not set
1498+# CONFIG_MFD_MAX17135 is not set
1499+CONFIG_MFD_MXC_HDMI=y
1500+CONFIG_REGULATOR=y
1501+# CONFIG_REGULATOR_DEBUG is not set
1502+# CONFIG_REGULATOR_DUMMY is not set
1503+CONFIG_REGULATOR_FIXED_VOLTAGE=y
1504+# CONFIG_REGULATOR_VIRTUAL_CONSUMER is not set
1505+# CONFIG_REGULATOR_USERSPACE_CONSUMER is not set
1506+# CONFIG_REGULATOR_BQ24022 is not set
1507+# CONFIG_REGULATOR_MAX1586 is not set
1508+# CONFIG_REGULATOR_MAX8649 is not set
1509+# CONFIG_REGULATOR_MAX8660 is not set
1510+# CONFIG_REGULATOR_MAX8952 is not set
1511+# CONFIG_REGULATOR_WM8994 is not set
1512+# CONFIG_REGULATOR_LP3971 is not set
1513+# CONFIG_REGULATOR_LP3972 is not set
1514+# CONFIG_REGULATOR_MC34708 is not set
1515+CONFIG_REGULATOR_PFUZE100=y
1516+# CONFIG_REGULATOR_TPS65023 is not set
1517+# CONFIG_REGULATOR_TPS6507X is not set
1518+# CONFIG_REGULATOR_ISL6271A is not set
1519+# CONFIG_REGULATOR_AD5398 is not set
1520+CONFIG_REGULATOR_ANATOP=y
1521+# CONFIG_REGULATOR_TPS6524X is not set
1522+CONFIG_MEDIA_SUPPORT=y
1523+
1524+#
1525+# Multimedia core support
1526+#
1527+# CONFIG_MEDIA_CONTROLLER is not set
1528+CONFIG_VIDEO_DEV=y
1529+CONFIG_VIDEO_V4L2_COMMON=y
1530+# CONFIG_DVB_CORE is not set
1531+CONFIG_VIDEO_MEDIA=y
1532+
1533+#
1534+# Multimedia drivers
1535+#
1536+# CONFIG_RC_CORE is not set
1537+# CONFIG_MEDIA_ATTACH is not set
1538+CONFIG_MEDIA_TUNER=y
1539+# CONFIG_MEDIA_TUNER_CUSTOMISE is not set
1540+CONFIG_MEDIA_TUNER_SIMPLE=y
1541+CONFIG_MEDIA_TUNER_TDA8290=y
1542+CONFIG_MEDIA_TUNER_TDA827X=y
1543+CONFIG_MEDIA_TUNER_TDA18271=y
1544+CONFIG_MEDIA_TUNER_TDA9887=y
1545+CONFIG_MEDIA_TUNER_TEA5761=y
1546+CONFIG_MEDIA_TUNER_TEA5767=y
1547+CONFIG_MEDIA_TUNER_MT20XX=y
1548+CONFIG_MEDIA_TUNER_XC2028=y
1549+CONFIG_MEDIA_TUNER_XC5000=y
1550+CONFIG_MEDIA_TUNER_MC44S803=y
1551+CONFIG_VIDEO_V4L2=y
1552+CONFIG_VIDEOBUF_GEN=y
1553+CONFIG_VIDEOBUF_DMA_CONTIG=y
1554+CONFIG_VIDEO_CAPTURE_DRIVERS=y
1555+# CONFIG_VIDEO_ADV_DEBUG is not set
1556+# CONFIG_VIDEO_FIXED_MINOR_RANGES is not set
1557+# CONFIG_VIDEO_HELPER_CHIPS_AUTO is not set
1558+
1559+#
1560+# Encoders, decoders, sensors and other helper chips
1561+#
1562+
1563+#
1564+# Audio decoders, processors and mixers
1565+#
1566+# CONFIG_VIDEO_TVAUDIO is not set
1567+# CONFIG_VIDEO_TDA7432 is not set
1568+# CONFIG_VIDEO_TDA9840 is not set
1569+# CONFIG_VIDEO_TEA6415C is not set
1570+# CONFIG_VIDEO_TEA6420 is not set
1571+# CONFIG_VIDEO_MSP3400 is not set
1572+# CONFIG_VIDEO_CS5345 is not set
1573+# CONFIG_VIDEO_CS53L32A is not set
1574+# CONFIG_VIDEO_TLV320AIC23B is not set
1575+# CONFIG_VIDEO_WM8775 is not set
1576+# CONFIG_VIDEO_WM8739 is not set
1577+# CONFIG_VIDEO_VP27SMPX is not set
1578+
1579+#
1580+# RDS decoders
1581+#
1582+# CONFIG_VIDEO_SAA6588 is not set
1583+
1584+#
1585+# Video decoders
1586+#
1587+# CONFIG_VIDEO_ADV7180 is not set
1588+# CONFIG_VIDEO_BT819 is not set
1589+# CONFIG_VIDEO_BT856 is not set
1590+# CONFIG_VIDEO_BT866 is not set
1591+# CONFIG_VIDEO_KS0127 is not set
1592+# CONFIG_VIDEO_SAA7110 is not set
1593+# CONFIG_VIDEO_SAA711X is not set
1594+# CONFIG_VIDEO_SAA7191 is not set
1595+# CONFIG_VIDEO_TVP514X is not set
1596+# CONFIG_VIDEO_TVP5150 is not set
1597+# CONFIG_VIDEO_TVP7002 is not set
1598+# CONFIG_VIDEO_VPX3220 is not set
1599+
1600+#
1601+# Video and audio decoders
1602+#
1603+# CONFIG_VIDEO_SAA717X is not set
1604+# CONFIG_VIDEO_CX25840 is not set
1605+
1606+#
1607+# MPEG video encoders
1608+#
1609+# CONFIG_VIDEO_CX2341X is not set
1610+
1611+#
1612+# Video encoders
1613+#
1614+# CONFIG_VIDEO_SAA7127 is not set
1615+# CONFIG_VIDEO_SAA7185 is not set
1616+# CONFIG_VIDEO_ADV7170 is not set
1617+# CONFIG_VIDEO_ADV7175 is not set
1618+# CONFIG_VIDEO_ADV7343 is not set
1619+# CONFIG_VIDEO_AK881X is not set
1620+
1621+#
1622+# Camera sensor devices
1623+#
1624+# CONFIG_VIDEO_OV7670 is not set
1625+# CONFIG_VIDEO_MT9V011 is not set
1626+# CONFIG_VIDEO_TCM825X is not set
1627+
1628+#
1629+# Video improvement chips
1630+#
1631+# CONFIG_VIDEO_UPD64031A is not set
1632+# CONFIG_VIDEO_UPD64083 is not set
1633+
1634+#
1635+# Miscelaneous helper chips
1636+#
1637+# CONFIG_VIDEO_THS7303 is not set
1638+# CONFIG_VIDEO_M52790 is not set
1639+# CONFIG_VIDEO_VIVI is not set
1640+CONFIG_VIDEO_MXC_CAMERA=m
1641+
1642+#
1643+# MXC Camera/V4L2 PRP Features support
1644+#
1645+CONFIG_VIDEO_MXC_IPU_CAMERA=y
1646+# CONFIG_VIDEO_MXC_CSI_CAMERA is not set
1647+# CONFIG_MXC_CAMERA_MICRON111 is not set
1648+# CONFIG_MXC_CAMERA_OV2640 is not set
1649+CONFIG_MXC_CAMERA_OV3640=m
1650+CONFIG_MXC_CAMERA_OV5640=m
1651+CONFIG_MXC_CAMERA_OV5640_MIPI=m
1652+CONFIG_MXC_CAMERA_OV8820_MIPI=m
1653+CONFIG_MXC_CAMERA_OV5642=m
1654+CONFIG_MXC_CAMERA_SENSOR_CLK=m
1655+CONFIG_MXC_IPU_PRP_VF_SDC=m
1656+CONFIG_MXC_IPU_PRP_ENC=m
1657+CONFIG_MXC_IPU_CSI_ENC=m
1658+CONFIG_VIDEO_MXC_OUTPUT=y
1659+CONFIG_VIDEO_MXC_IPU_OUTPUT=y
1660+# CONFIG_VIDEO_MXC_IPUV1_WVGA_OUTPUT is not set
1661+# CONFIG_VIDEO_MXC_OPL is not set
1662+# CONFIG_VIDEO_CPIA2 is not set
1663+# CONFIG_VIDEO_TIMBERDALE is not set
1664+# CONFIG_VIDEO_SR030PC30 is not set
1665+# CONFIG_VIDEO_NOON010PC30 is not set
1666+# CONFIG_SOC_CAMERA is not set
1667+CONFIG_V4L_USB_DRIVERS=y
1668+CONFIG_USB_VIDEO_CLASS=m
1669+CONFIG_USB_VIDEO_CLASS_INPUT_EVDEV=y
1670+CONFIG_USB_GSPCA=m
1671+# CONFIG_USB_M5602 is not set
1672+# CONFIG_USB_STV06XX is not set
1673+# CONFIG_USB_GL860 is not set
1674+# CONFIG_USB_GSPCA_BENQ is not set
1675+# CONFIG_USB_GSPCA_CONEX is not set
1676+# CONFIG_USB_GSPCA_CPIA1 is not set
1677+# CONFIG_USB_GSPCA_ETOMS is not set
1678+# CONFIG_USB_GSPCA_FINEPIX is not set
1679+# CONFIG_USB_GSPCA_JEILINJ is not set
1680+# CONFIG_USB_GSPCA_KINECT is not set
1681+# CONFIG_USB_GSPCA_KONICA is not set
1682+# CONFIG_USB_GSPCA_MARS is not set
1683+# CONFIG_USB_GSPCA_MR97310A is not set
1684+# CONFIG_USB_GSPCA_NW80X is not set
1685+# CONFIG_USB_GSPCA_OV519 is not set
1686+# CONFIG_USB_GSPCA_OV534 is not set
1687+# CONFIG_USB_GSPCA_OV534_9 is not set
1688+# CONFIG_USB_GSPCA_PAC207 is not set
1689+# CONFIG_USB_GSPCA_PAC7302 is not set
1690+# CONFIG_USB_GSPCA_PAC7311 is not set
1691+# CONFIG_USB_GSPCA_SN9C2028 is not set
1692+# CONFIG_USB_GSPCA_SN9C20X is not set
1693+# CONFIG_USB_GSPCA_SONIXB is not set
1694+# CONFIG_USB_GSPCA_SONIXJ is not set
1695+# CONFIG_USB_GSPCA_SPCA500 is not set
1696+# CONFIG_USB_GSPCA_SPCA501 is not set
1697+# CONFIG_USB_GSPCA_SPCA505 is not set
1698+# CONFIG_USB_GSPCA_SPCA506 is not set
1699+# CONFIG_USB_GSPCA_SPCA508 is not set
1700+# CONFIG_USB_GSPCA_SPCA561 is not set
1701+# CONFIG_USB_GSPCA_SPCA1528 is not set
1702+# CONFIG_USB_GSPCA_SQ905 is not set
1703+# CONFIG_USB_GSPCA_SQ905C is not set
1704+# CONFIG_USB_GSPCA_SQ930X is not set
1705+# CONFIG_USB_GSPCA_STK014 is not set
1706+# CONFIG_USB_GSPCA_STV0680 is not set
1707+# CONFIG_USB_GSPCA_SUNPLUS is not set
1708+# CONFIG_USB_GSPCA_T613 is not set
1709+# CONFIG_USB_GSPCA_TV8532 is not set
1710+# CONFIG_USB_GSPCA_VC032X is not set
1711+# CONFIG_USB_GSPCA_VICAM is not set
1712+# CONFIG_USB_GSPCA_XIRLINK_CIT is not set
1713+# CONFIG_USB_GSPCA_ZC3XX is not set
1714+# CONFIG_VIDEO_PVRUSB2 is not set
1715+# CONFIG_VIDEO_HDPVR is not set
1716+# CONFIG_VIDEO_USBVISION is not set
1717+# CONFIG_USB_ET61X251 is not set
1718+# CONFIG_USB_SN9C102 is not set
1719+# CONFIG_USB_PWC is not set
1720+# CONFIG_USB_ZR364XX is not set
1721+# CONFIG_USB_STKWEBCAM is not set
1722+# CONFIG_USB_S2255 is not set
1723+# CONFIG_V4L_MEM2MEM_DRIVERS is not set
1724+# CONFIG_RADIO_ADAPTERS is not set
1725+
1726+#
1727+# Graphics support
1728+#
1729+# CONFIG_DRM is not set
1730+# CONFIG_VGASTATE is not set
1731+# CONFIG_VIDEO_OUTPUT_CONTROL is not set
1732+CONFIG_FB=y
1733+# CONFIG_FIRMWARE_EDID is not set
1734+# CONFIG_FB_DDC is not set
1735+# CONFIG_FB_BOOT_VESA_SUPPORT is not set
1736+CONFIG_FB_CFB_FILLRECT=y
1737+CONFIG_FB_CFB_COPYAREA=y
1738+CONFIG_FB_CFB_IMAGEBLIT=y
1739+# CONFIG_FB_CFB_REV_PIXELS_IN_BYTE is not set
1740+# CONFIG_FB_SYS_FILLRECT is not set
1741+# CONFIG_FB_SYS_COPYAREA is not set
1742+# CONFIG_FB_SYS_IMAGEBLIT is not set
1743+# CONFIG_FB_FOREIGN_ENDIAN is not set
1744+# CONFIG_FB_SYS_FOPS is not set
1745+# CONFIG_FB_WMT_GE_ROPS is not set
1746+CONFIG_FB_DEFERRED_IO=y
1747+# CONFIG_FB_SVGALIB is not set
1748+# CONFIG_FB_MACMODES is not set
1749+# CONFIG_FB_BACKLIGHT is not set
1750+CONFIG_FB_MODE_HELPERS=y
1751+# CONFIG_FB_TILEBLITTING is not set
1752+
1753+#
1754+# Frame buffer hardware drivers
1755+#
1756+# CONFIG_FB_UVESA is not set
1757+# CONFIG_FB_S1D13XXX is not set
1758+# CONFIG_FB_TMIO is not set
1759+# CONFIG_FB_UDL is not set
1760+# CONFIG_FB_VIRTUAL is not set
1761+# CONFIG_FB_METRONOME is not set
1762+# CONFIG_FB_BROADSHEET is not set
1763+CONFIG_BACKLIGHT_LCD_SUPPORT=y
1764+# CONFIG_LCD_CLASS_DEVICE is not set
1765+CONFIG_BACKLIGHT_CLASS_DEVICE=y
1766+# CONFIG_BACKLIGHT_GENERIC is not set
1767+CONFIG_BACKLIGHT_PWM=y
1768+# CONFIG_BACKLIGHT_ADP8860 is not set
1769+# CONFIG_BACKLIGHT_ADP8870 is not set
1770+
1771+#
1772+# Display device support
1773+#
1774+# CONFIG_DISPLAY_SUPPORT is not set
1775+CONFIG_FB_MXC=y
1776+CONFIG_FB_MXC_EDID=y
1777+CONFIG_FB_MXC_SYNC_PANEL=y
1778+# CONFIG_FB_MXC_EPSON_VGA_SYNC_PANEL is not set
1779+CONFIG_FB_MXC_LDB=y
1780+CONFIG_FB_MXC_MIPI_DSI=y
1781+CONFIG_FB_MXC_TRULY_WVGA_SYNC_PANEL=y
1782+# CONFIG_FB_MXC_CLAA_WVGA_SYNC_PANEL is not set
1783+# CONFIG_FB_MXC_SEIKO_WVGA_SYNC_PANEL is not set
1784+# CONFIG_FB_MXC_SII902X is not set
1785+# CONFIG_FB_MXC_CH7026 is not set
1786+# CONFIG_FB_MXC_TVOUT_CH7024 is not set
1787+# CONFIG_FB_MXC_ASYNC_PANEL is not set
1788+CONFIG_FB_MXC_EINK_PANEL=y
1789+# CONFIG_FB_MXC_EINK_AUTO_UPDATE_MODE is not set
1790+# CONFIG_FB_MXC_ELCDIF_FB is not set
1791+CONFIG_FB_MXC_HDMI=y
1792+
1793+#
1794+# Console display driver support
1795+#
1796+CONFIG_DUMMY_CONSOLE=y
1797+CONFIG_FRAMEBUFFER_CONSOLE=y
1798+# CONFIG_FRAMEBUFFER_CONSOLE_DETECT_PRIMARY is not set
1799+# CONFIG_FRAMEBUFFER_CONSOLE_ROTATION is not set
1800+CONFIG_FONTS=y
1801+# CONFIG_FONT_8x8 is not set
1802+CONFIG_FONT_8x16=y
1803+# CONFIG_FONT_6x11 is not set
1804+# CONFIG_FONT_7x14 is not set
1805+# CONFIG_FONT_PEARL_8x8 is not set
1806+# CONFIG_FONT_ACORN_8x8 is not set
1807+# CONFIG_FONT_MINI_4x6 is not set
1808+# CONFIG_FONT_SUN8x16 is not set
1809+# CONFIG_FONT_SUN12x22 is not set
1810+# CONFIG_FONT_10x18 is not set
1811+CONFIG_LOGO=y
1812+CONFIG_LOGO_LINUX_MONO=y
1813+CONFIG_LOGO_LINUX_VGA16=y
1814+CONFIG_LOGO_LINUX_CLUT224=y
1815+CONFIG_SOUND=y
1816+# CONFIG_SOUND_OSS_CORE is not set
1817+CONFIG_SND=y
1818+CONFIG_SND_TIMER=y
1819+CONFIG_SND_PCM=y
1820+CONFIG_SND_HWDEP=y
1821+CONFIG_SND_RAWMIDI=y
1822+CONFIG_SND_JACK=y
1823+# CONFIG_SND_SEQUENCER is not set
1824+# CONFIG_SND_MIXER_OSS is not set
1825+# CONFIG_SND_PCM_OSS is not set
1826+# CONFIG_SND_HRTIMER is not set
1827+# CONFIG_SND_DYNAMIC_MINORS is not set
1828+CONFIG_SND_SUPPORT_OLD_API=y
1829+CONFIG_SND_VERBOSE_PROCFS=y
1830+# CONFIG_SND_VERBOSE_PRINTK is not set
1831+# CONFIG_SND_DEBUG is not set
1832+# CONFIG_SND_RAWMIDI_SEQ is not set
1833+# CONFIG_SND_OPL3_LIB_SEQ is not set
1834+# CONFIG_SND_OPL4_LIB_SEQ is not set
1835+# CONFIG_SND_SBAWE_SEQ is not set
1836+# CONFIG_SND_EMU10K1_SEQ is not set
1837+CONFIG_SND_DRIVERS=y
1838+# CONFIG_SND_DUMMY is not set
1839+# CONFIG_SND_ALOOP is not set
1840+# CONFIG_SND_MTPAV is not set
1841+# CONFIG_SND_SERIAL_U16550 is not set
1842+# CONFIG_SND_MPU401 is not set
1843+CONFIG_SND_ARM=y
1844+CONFIG_SND_SPI=y
1845+CONFIG_SND_USB=y
1846+CONFIG_SND_USB_AUDIO=y
1847+# CONFIG_SND_USB_UA101 is not set
1848+# CONFIG_SND_USB_CAIAQ is not set
1849+# CONFIG_SND_USB_6FIRE is not set
1850+CONFIG_SND_SOC=y
1851+# CONFIG_SND_SOC_CACHE_LZO is not set
1852+CONFIG_SND_SOC_AC97_BUS=y
1853+CONFIG_SND_IMX_SOC=y
1854+CONFIG_SND_MXC_SOC_MX2=y
1855+CONFIG_SND_MXC_SOC_SPDIF_DAI=y
1856+CONFIG_SND_SOC_IMX_SGTL5000=y
1857+CONFIG_SND_SOC_IMX_WM8958=y
1858+CONFIG_SND_SOC_IMX_WM8962=y
1859+CONFIG_SND_SOC_IMX_SPDIF=y
1860+CONFIG_SND_SOC_IMX_HDMI=y
1861+CONFIG_SND_SOC_I2C_AND_SPI=y
1862+# CONFIG_SND_SOC_ALL_CODECS is not set
1863+CONFIG_SND_SOC_WM_HUBS=y
1864+CONFIG_SND_SOC_MXC_HDMI=y
1865+CONFIG_SND_SOC_MXC_SPDIF=y
1866+CONFIG_SND_SOC_SGTL5000=y
1867+CONFIG_SND_SOC_WM8962=y
1868+CONFIG_SND_SOC_WM8994=y
1869+# CONFIG_SOUND_PRIME is not set
1870+CONFIG_AC97_BUS=y
1871+CONFIG_HID_SUPPORT=y
1872+CONFIG_HID=y
1873+CONFIG_HIDRAW=y
1874+
1875+#
1876+# USB Input Devices
1877+#
1878+CONFIG_USB_HID=y
1879+# CONFIG_HID_PID is not set
1880+# CONFIG_USB_HIDDEV is not set
1881+
1882+#
1883+# Special HID drivers
1884+#
1885+CONFIG_HID_A4TECH=m
1886+# CONFIG_HID_ACRUX is not set
1887+CONFIG_HID_APPLE=m
1888+CONFIG_HID_BELKIN=m
1889+CONFIG_HID_CHERRY=m
1890+CONFIG_HID_CHICONY=m
1891+# CONFIG_HID_PRODIKEYS is not set
1892+CONFIG_HID_CYPRESS=m
1893+# CONFIG_HID_DRAGONRISE is not set
1894+# CONFIG_HID_EMS_FF is not set
1895+# CONFIG_HID_ELECOM is not set
1896+CONFIG_HID_EZKEY=m
1897+# CONFIG_HID_KEYTOUCH is not set
1898+# CONFIG_HID_KYE is not set
1899+# CONFIG_HID_UCLOGIC is not set
1900+# CONFIG_HID_WALTOP is not set
1901+CONFIG_HID_GYRATION=m
1902+# CONFIG_HID_TWINHAN is not set
1903+# CONFIG_HID_KENSINGTON is not set
1904+# CONFIG_HID_LCPOWER is not set
1905+CONFIG_HID_LOGITECH=m
1906+# CONFIG_LOGITECH_FF is not set
1907+# CONFIG_LOGIRUMBLEPAD2_FF is not set
1908+# CONFIG_LOGIG940_FF is not set
1909+# CONFIG_LOGIWII_FF is not set
1910+# CONFIG_HID_MAGICMOUSE is not set
1911+CONFIG_HID_MICROSOFT=m
1912+CONFIG_HID_MONTEREY=m
1913+# CONFIG_HID_MULTITOUCH is not set
1914+# CONFIG_HID_NTRIG is not set
1915+# CONFIG_HID_ORTEK is not set
1916+CONFIG_HID_PANTHERLORD=m
1917+# CONFIG_PANTHERLORD_FF is not set
1918+CONFIG_HID_PETALYNX=m
1919+# CONFIG_HID_PICOLCD is not set
1920+# CONFIG_HID_QUANTA is not set
1921+# CONFIG_HID_ROCCAT is not set
1922+# CONFIG_HID_ROCCAT_ARVO is not set
1923+# CONFIG_HID_ROCCAT_KONE is not set
1924+# CONFIG_HID_ROCCAT_KONEPLUS is not set
1925+# CONFIG_HID_ROCCAT_KOVAPLUS is not set
1926+# CONFIG_HID_ROCCAT_PYRA is not set
1927+CONFIG_HID_SAMSUNG=m
1928+CONFIG_HID_SONY=m
1929+CONFIG_HID_SUNPLUS=m
1930+# CONFIG_HID_GREENASIA is not set
1931+# CONFIG_HID_SMARTJOYPLUS is not set
1932+# CONFIG_HID_TOPSEED is not set
1933+# CONFIG_HID_THRUSTMASTER is not set
1934+# CONFIG_HID_WACOM is not set
1935+# CONFIG_HID_ZEROPLUS is not set
1936+# CONFIG_HID_ZYDACRON is not set
1937+CONFIG_USB_SUPPORT=y
1938+CONFIG_USB_ARCH_HAS_HCD=y
1939+# CONFIG_USB_ARCH_HAS_OHCI is not set
1940+CONFIG_USB_ARCH_HAS_EHCI=y
1941+CONFIG_USB=y
1942+# CONFIG_USB_DEBUG is not set
1943+# CONFIG_USB_ANNOUNCE_NEW_DEVICES is not set
1944+
1945+#
1946+# Miscellaneous USB options
1947+#
1948+# CONFIG_USB_DEVICEFS is not set
1949+# CONFIG_USB_DEVICE_CLASS is not set
1950+# CONFIG_USB_DYNAMIC_MINORS is not set
1951+CONFIG_USB_SUSPEND=y
1952+CONFIG_USB_OTG=y
1953+# CONFIG_USB_OTG_WHITELIST is not set
1954+# CONFIG_USB_OTG_BLACKLIST_HUB is not set
1955+# CONFIG_USB_MON is not set
1956+# CONFIG_USB_WUSB is not set
1957+# CONFIG_USB_WUSB_CBAF is not set
1958+
1959+#
1960+# USB Host Controller Drivers
1961+#
1962+# CONFIG_USB_C67X00_HCD is not set
1963+CONFIG_USB_EHCI_HCD=y
1964+CONFIG_USB_EHCI_ARC=y
1965+CONFIG_USB_EHCI_ARC_OTG=y
1966+# CONFIG_USB_EHCI_ARC_HSIC is not set
1967+# CONFIG_USB_STATIC_IRAM is not set
1968+CONFIG_USB_EHCI_ROOT_HUB_TT=y
1969+# CONFIG_USB_EHCI_TT_NEWSCHED is not set
1970+# CONFIG_USB_EHCI_MXC is not set
1971+# CONFIG_USB_OXU210HP_HCD is not set
1972+# CONFIG_USB_ISP116X_HCD is not set
1973+# CONFIG_USB_ISP1760_HCD is not set
1974+# CONFIG_USB_ISP1362_HCD is not set
1975+# CONFIG_USB_SL811_HCD is not set
1976+# CONFIG_USB_R8A66597_HCD is not set
1977+# CONFIG_USB_HWA_HCD is not set
1978+# CONFIG_USB_MUSB_HDRC is not set
1979+
1980+#
1981+# USB Device Class drivers
1982+#
1983+# CONFIG_USB_ACM is not set
1984+# CONFIG_USB_PRINTER is not set
1985+# CONFIG_USB_WDM is not set
1986+# CONFIG_USB_TMC is not set
1987+
1988+#
1989+# NOTE: USB_STORAGE depends on SCSI but BLK_DEV_SD may
1990+#
1991+
1992+#
1993+# also be needed; see USB_STORAGE Help for more info
1994+#
1995+CONFIG_USB_STORAGE=y
1996+# CONFIG_USB_STORAGE_DEBUG is not set
1997+# CONFIG_USB_STORAGE_REALTEK is not set
1998+# CONFIG_USB_STORAGE_DATAFAB is not set
1999+# CONFIG_USB_STORAGE_FREECOM is not set
2000+# CONFIG_USB_STORAGE_ISD200 is not set
2001+# CONFIG_USB_STORAGE_USBAT is not set
2002+# CONFIG_USB_STORAGE_SDDR09 is not set
2003+# CONFIG_USB_STORAGE_SDDR55 is not set
2004+# CONFIG_USB_STORAGE_JUMPSHOT is not set
2005+# CONFIG_USB_STORAGE_ALAUDA is not set
2006+# CONFIG_USB_STORAGE_ONETOUCH is not set
2007+# CONFIG_USB_STORAGE_KARMA is not set
2008+# CONFIG_USB_STORAGE_CYPRESS_ATACB is not set
2009+# CONFIG_USB_STORAGE_ENE_UB6250 is not set
2010+# CONFIG_USB_UAS is not set
2011+# CONFIG_USB_LIBUSUAL is not set
2012+
2013+#
2014+# USB Imaging devices
2015+#
2016+# CONFIG_USB_MDC800 is not set
2017+# CONFIG_USB_MICROTEK is not set
2018+
2019+#
2020+# USB port drivers
2021+#
2022+# CONFIG_USB_SERIAL is not set
2023+
2024+#
2025+# USB Miscellaneous drivers
2026+#
2027+# CONFIG_USB_EMI62 is not set
2028+# CONFIG_USB_EMI26 is not set
2029+# CONFIG_USB_ADUTUX is not set
2030+# CONFIG_USB_SEVSEG is not set
2031+# CONFIG_USB_RIO500 is not set
2032+# CONFIG_USB_LEGOTOWER is not set
2033+# CONFIG_USB_LCD is not set
2034+# CONFIG_USB_LED is not set
2035+# CONFIG_USB_CYPRESS_CY7C63 is not set
2036+# CONFIG_USB_CYTHERM is not set
2037+# CONFIG_USB_IDMOUSE is not set
2038+# CONFIG_USB_FTDI_ELAN is not set
2039+# CONFIG_USB_APPLEDISPLAY is not set
2040+# CONFIG_USB_SISUSBVGA is not set
2041+# CONFIG_USB_LD is not set
2042+# CONFIG_USB_TRANCEVIBRATOR is not set
2043+# CONFIG_USB_IOWARRIOR is not set
2044+# CONFIG_USB_TEST is not set
2045+# CONFIG_USB_ISIGHTFW is not set
2046+# CONFIG_USB_YUREX is not set
2047+CONFIG_USB_GADGET=y
2048+# CONFIG_USB_GADGET_DEBUG_FILES is not set
2049+# CONFIG_USB_GADGET_DEBUG_FS is not set
2050+CONFIG_USB_GADGET_VBUS_DRAW=2
2051+CONFIG_USB_GADGET_SELECTED=y
2052+CONFIG_USB_GADGET_ARC=y
2053+CONFIG_USB_ARC=y
2054+# CONFIG_USB_GADGET_FSL_USB2 is not set
2055+# CONFIG_USB_GADGET_FUSB300 is not set
2056+# CONFIG_USB_GADGET_R8A66597 is not set
2057+# CONFIG_USB_GADGET_PXA_U2O is not set
2058+# CONFIG_USB_GADGET_M66592 is not set
2059+# CONFIG_USB_GADGET_DUMMY_HCD is not set
2060+CONFIG_USB_GADGET_DUALSPEED=y
2061+# CONFIG_USB_ZERO is not set
2062+CONFIG_USB_AUDIO=m
2063+CONFIG_USB_ETH=m
2064+CONFIG_USB_ETH_RNDIS=y
2065+# CONFIG_USB_ETH_EEM is not set
2066+# CONFIG_USB_G_NCM is not set
2067+# CONFIG_USB_GADGETFS is not set
2068+# CONFIG_USB_FUNCTIONFS is not set
2069+CONFIG_USB_FILE_STORAGE=m
2070+# CONFIG_FSL_UTP is not set
2071+# CONFIG_USB_FILE_STORAGE_TEST is not set
2072+# CONFIG_USB_MASS_STORAGE is not set
2073+CONFIG_USB_G_SERIAL=m
2074+# CONFIG_USB_MIDI_GADGET is not set
2075+# CONFIG_USB_G_PRINTER is not set
2076+# CONFIG_USB_CDC_COMPOSITE is not set
2077+# CONFIG_USB_G_MULTI is not set
2078+# CONFIG_USB_G_HID is not set
2079+# CONFIG_USB_G_DBGP is not set
2080+# CONFIG_USB_G_WEBCAM is not set
2081+
2082+#
2083+# OTG and related infrastructure
2084+#
2085+CONFIG_USB_OTG_UTILS=y
2086+# CONFIG_USB_GPIO_VBUS is not set
2087+# CONFIG_USB_ULPI is not set
2088+# CONFIG_NOP_USB_XCEIV is not set
2089+CONFIG_MXC_OTG=y
2090+CONFIG_MMC=y
2091+# CONFIG_MMC_DEBUG is not set
2092+CONFIG_MMC_UNSAFE_RESUME=y
2093+# CONFIG_MMC_CLKGATE is not set
2094+
2095+#
2096+# MMC/SD/SDIO Card Drivers
2097+#
2098+CONFIG_MMC_BLOCK=y
2099+CONFIG_MMC_BLOCK_MINORS=8
2100+CONFIG_MMC_BLOCK_BOUNCE=y
2101+# CONFIG_SDIO_UART is not set
2102+# CONFIG_MMC_TEST is not set
2103+
2104+#
2105+# MMC/SD/SDIO Host Controller Drivers
2106+#
2107+CONFIG_MMC_SDHCI=y
2108+CONFIG_MMC_SDHCI_IO_ACCESSORS=y
2109+CONFIG_MMC_SDHCI_PLTFM=y
2110+CONFIG_MMC_SDHCI_ESDHC_IMX=y
2111+# CONFIG_MMC_DW is not set
2112+# CONFIG_MMC_VUB300 is not set
2113+# CONFIG_MMC_USHC is not set
2114+# CONFIG_MEMSTICK is not set
2115+CONFIG_NEW_LEDS=y
2116+CONFIG_LEDS_CLASS=y
2117+
2118+#
2119+# LED drivers
2120+#
2121+# CONFIG_LEDS_LM3530 is not set
2122+# CONFIG_LEDS_PCA9532 is not set
2123+# CONFIG_LEDS_GPIO is not set
2124+# CONFIG_LEDS_LP3944 is not set
2125+# CONFIG_LEDS_LP5521 is not set
2126+# CONFIG_LEDS_LP5523 is not set
2127+# CONFIG_LEDS_PCA955X is not set
2128+# CONFIG_LEDS_DAC124S085 is not set
2129+# CONFIG_LEDS_PWM is not set
2130+# CONFIG_LEDS_REGULATOR is not set
2131+# CONFIG_LEDS_BD2802 is not set
2132+# CONFIG_LEDS_LT3593 is not set
2133+# CONFIG_LEDS_TRIGGERS is not set
2134+
2135+#
2136+# LED Triggers
2137+#
2138+
2139+#
2140+# LED Triggers
2141+#
2142+# CONFIG_NFC_DEVICES is not set
2143+# CONFIG_ACCESSIBILITY is not set
2144+CONFIG_RTC_LIB=y
2145+CONFIG_RTC_CLASS=y
2146+CONFIG_RTC_HCTOSYS=y
2147+CONFIG_RTC_HCTOSYS_DEVICE="rtc0"
2148+# CONFIG_RTC_DEBUG is not set
2149+
2150+#
2151+# RTC interfaces
2152+#
2153+CONFIG_RTC_INTF_SYSFS=y
2154+CONFIG_RTC_INTF_PROC=y
2155+CONFIG_RTC_INTF_DEV=y
2156+CONFIG_RTC_INTF_DEV_UIE_EMUL=y
2157+# CONFIG_RTC_DRV_TEST is not set
2158+
2159+#
2160+# I2C RTC drivers
2161+#
2162+# CONFIG_RTC_DRV_DS1307 is not set
2163+# CONFIG_RTC_DRV_DS1374 is not set
2164+# CONFIG_RTC_DRV_DS1672 is not set
2165+# CONFIG_RTC_DRV_DS3232 is not set
2166+# CONFIG_RTC_DRV_MAX6900 is not set
2167+# CONFIG_RTC_DRV_RS5C372 is not set
2168+# CONFIG_RTC_DRV_ISL1208 is not set
2169+# CONFIG_RTC_DRV_ISL12022 is not set
2170+# CONFIG_RTC_DRV_X1205 is not set
2171+# CONFIG_RTC_DRV_PCF8563 is not set
2172+# CONFIG_RTC_DRV_PCF8583 is not set
2173+# CONFIG_RTC_DRV_M41T80 is not set
2174+# CONFIG_RTC_DRV_BQ32K is not set
2175+# CONFIG_RTC_DRV_S35390A is not set
2176+# CONFIG_RTC_DRV_FM3130 is not set
2177+# CONFIG_RTC_DRV_RX8581 is not set
2178+# CONFIG_RTC_DRV_RX8025 is not set
2179+# CONFIG_RTC_DRV_EM3027 is not set
2180+# CONFIG_RTC_DRV_RV3029C2 is not set
2181+
2182+#
2183+# SPI RTC drivers
2184+#
2185+# CONFIG_RTC_DRV_M41T93 is not set
2186+# CONFIG_RTC_DRV_M41T94 is not set
2187+# CONFIG_RTC_DRV_DS1305 is not set
2188+# CONFIG_RTC_DRV_DS1390 is not set
2189+# CONFIG_RTC_DRV_MAX6902 is not set
2190+# CONFIG_RTC_DRV_R9701 is not set
2191+# CONFIG_RTC_DRV_RS5C348 is not set
2192+# CONFIG_RTC_DRV_DS3234 is not set
2193+# CONFIG_RTC_DRV_PCF2123 is not set
2194+
2195+#
2196+# Platform RTC drivers
2197+#
2198+# CONFIG_RTC_DRV_CMOS is not set
2199+# CONFIG_RTC_DRV_DS1286 is not set
2200+# CONFIG_RTC_DRV_DS1511 is not set
2201+# CONFIG_RTC_DRV_DS1553 is not set
2202+# CONFIG_RTC_DRV_DS1742 is not set
2203+# CONFIG_RTC_DRV_STK17TA8 is not set
2204+# CONFIG_RTC_DRV_M48T86 is not set
2205+# CONFIG_RTC_DRV_M48T35 is not set
2206+# CONFIG_RTC_DRV_M48T59 is not set
2207+# CONFIG_RTC_DRV_MSM6242 is not set
2208+# CONFIG_RTC_MXC is not set
2209+# CONFIG_RTC_DRV_MXC_V2 is not set
2210+CONFIG_RTC_DRV_SNVS=y
2211+# CONFIG_RTC_DRV_BQ4802 is not set
2212+# CONFIG_RTC_DRV_RP5C01 is not set
2213+# CONFIG_RTC_DRV_V3020 is not set
2214+
2215+#
2216+# on-CPU RTC drivers
2217+#
2218+CONFIG_DMADEVICES=y
2219+# CONFIG_DMADEVICES_DEBUG is not set
2220+
2221+#
2222+# DMA Devices
2223+#
2224+# CONFIG_DW_DMAC is not set
2225+CONFIG_MXC_PXP_V2=y
2226+CONFIG_MXC_PXP_CLIENT_DEVICE=y
2227+# CONFIG_TIMB_DMA is not set
2228+CONFIG_IMX_SDMA=y
2229+# CONFIG_MXS_DMA is not set
2230+CONFIG_DMA_ENGINE=y
2231+
2232+#
2233+# DMA Clients
2234+#
2235+# CONFIG_NET_DMA is not set
2236+# CONFIG_ASYNC_TX_DMA is not set
2237+# CONFIG_DMATEST is not set
2238+# CONFIG_AUXDISPLAY is not set
2239+# CONFIG_UIO is not set
2240+# CONFIG_STAGING is not set
2241+CONFIG_CLKDEV_LOOKUP=y
2242+CONFIG_CLKSRC_MMIO=y
2243+
2244+#
2245+# MXC support drivers
2246+#
2247+CONFIG_MXC_IPU=y
2248+CONFIG_MXC_IPU_V3=y
2249+CONFIG_MXC_IPU_V3H=y
2250+
2251+#
2252+# MXC SSI support
2253+#
2254+# CONFIG_MXC_SSI is not set
2255+
2256+#
2257+# MXC Digital Audio Multiplexer support
2258+#
2259+# CONFIG_MXC_DAM is not set
2260+
2261+#
2262+# MXC PMIC support
2263+#
2264+# CONFIG_MXC_PMIC_MC13783 is not set
2265+# CONFIG_MXC_PMIC_MC13892 is not set
2266+# CONFIG_MXC_PMIC_MC34704 is not set
2267+# CONFIG_MXC_PMIC_MC9SDZ60 is not set
2268+# CONFIG_MXC_PMIC_MC9S08DZ60 is not set
2269+
2270+#
2271+# MXC Security Drivers
2272+#
2273+# CONFIG_MXC_SECURITY_SCC is not set
2274+# CONFIG_MXC_SECURITY_RNG is not set
2275+
2276+#
2277+# MXC MPEG4 Encoder Kernel module support
2278+#
2279+# CONFIG_MXC_HMP4E is not set
2280+
2281+#
2282+# MXC HARDWARE EVENT
2283+#
2284+# CONFIG_MXC_HWEVENT is not set
2285+
2286+#
2287+# MXC VPU(Video Processing Unit) support
2288+#
2289+CONFIG_MXC_VPU=y
2290+# CONFIG_MXC_VPU_DEBUG is not set
2291+
2292+#
2293+# MXC Asynchronous Sample Rate Converter support
2294+#
2295+CONFIG_MXC_ASRC=y
2296+
2297+#
2298+# MXC Bluetooth support
2299+#
2300+
2301+#
2302+# Broadcom GPS ioctrl support
2303+#
2304+
2305+#
2306+# MXC Media Local Bus Driver
2307+#
2308+CONFIG_MXC_MLB=y
2309+CONFIG_MXC_MLB150=m
2310+
2311+#
2312+# i.MX ADC support
2313+#
2314+# CONFIG_IMX_ADC is not set
2315+
2316+#
2317+# MXC Vivante GPU support
2318+#
2319+CONFIG_MXC_GPU_VIV=m
2320+
2321+#
2322+# ANATOP_THERMAL
2323+#
2324+CONFIG_ANATOP_THERMAL=y
2325+
2326+#
2327+# MXC MIPI Support
2328+#
2329+CONFIG_MXC_MIPI_CSI2=y
2330+
2331+#
2332+# File systems
2333+#
2334+CONFIG_EXT2_FS=y
2335+# CONFIG_EXT2_FS_XATTR is not set
2336+# CONFIG_EXT2_FS_XIP is not set
2337+CONFIG_EXT3_FS=y
2338+# CONFIG_EXT3_DEFAULTS_TO_ORDERED is not set
2339+CONFIG_EXT3_FS_XATTR=y
2340+# CONFIG_EXT3_FS_POSIX_ACL is not set
2341+# CONFIG_EXT3_FS_SECURITY is not set
2342+CONFIG_EXT4_FS=y
2343+CONFIG_EXT4_FS_XATTR=y
2344+# CONFIG_EXT4_FS_POSIX_ACL is not set
2345+# CONFIG_EXT4_FS_SECURITY is not set
2346+# CONFIG_EXT4_DEBUG is not set
2347+CONFIG_JBD=y
2348+# CONFIG_JBD_DEBUG is not set
2349+CONFIG_JBD2=y
2350+# CONFIG_JBD2_DEBUG is not set
2351+CONFIG_FS_MBCACHE=y
2352+# CONFIG_REISERFS_FS is not set
2353+# CONFIG_JFS_FS is not set
2354+# CONFIG_XFS_FS is not set
2355+# CONFIG_GFS2_FS is not set
2356+# CONFIG_BTRFS_FS is not set
2357+# CONFIG_NILFS2_FS is not set
2358+# CONFIG_FS_POSIX_ACL is not set
2359+CONFIG_FILE_LOCKING=y
2360+CONFIG_FSNOTIFY=y
2361+CONFIG_DNOTIFY=y
2362+CONFIG_INOTIFY_USER=y
2363+# CONFIG_FANOTIFY is not set
2364+# CONFIG_QUOTA is not set
2365+# CONFIG_QUOTACTL is not set
2366+CONFIG_AUTOFS4_FS=m
2367+# CONFIG_FUSE_FS is not set
2368+
2369+#
2370+# Caches
2371+#
2372+# CONFIG_FSCACHE is not set
2373+
2374+#
2375+# CD-ROM/DVD Filesystems
2376+#
2377+# CONFIG_ISO9660_FS is not set
2378+# CONFIG_UDF_FS is not set
2379+
2380+#
2381+# DOS/FAT/NT Filesystems
2382+#
2383+CONFIG_FAT_FS=y
2384+CONFIG_MSDOS_FS=y
2385+CONFIG_VFAT_FS=y
2386+CONFIG_FAT_DEFAULT_CODEPAGE=437
2387+CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1"
2388+# CONFIG_NTFS_FS is not set
2389+
2390+#
2391+# Pseudo filesystems
2392+#
2393+CONFIG_PROC_FS=y
2394+CONFIG_PROC_SYSCTL=y
2395+CONFIG_PROC_PAGE_MONITOR=y
2396+CONFIG_SYSFS=y
2397+CONFIG_TMPFS=y
2398+# CONFIG_TMPFS_POSIX_ACL is not set
2399+# CONFIG_TMPFS_XATTR is not set
2400+# CONFIG_HUGETLB_PAGE is not set
2401+# CONFIG_CONFIGFS_FS is not set
2402+CONFIG_MISC_FILESYSTEMS=y
2403+# CONFIG_ADFS_FS is not set
2404+# CONFIG_AFFS_FS is not set
2405+# CONFIG_HFS_FS is not set
2406+# CONFIG_HFSPLUS_FS is not set
2407+# CONFIG_BEFS_FS is not set
2408+# CONFIG_BFS_FS is not set
2409+# CONFIG_EFS_FS is not set
2410+CONFIG_JFFS2_FS=y
2411+CONFIG_JFFS2_FS_DEBUG=0
2412+CONFIG_JFFS2_FS_WRITEBUFFER=y
2413+# CONFIG_JFFS2_FS_WBUF_VERIFY is not set
2414+# CONFIG_JFFS2_SUMMARY is not set
2415+# CONFIG_JFFS2_FS_XATTR is not set
2416+# CONFIG_JFFS2_COMPRESSION_OPTIONS is not set
2417+CONFIG_JFFS2_ZLIB=y
2418+# CONFIG_JFFS2_LZO is not set
2419+CONFIG_JFFS2_RTIME=y
2420+# CONFIG_JFFS2_RUBIN is not set
2421+CONFIG_UBIFS_FS=y
2422+# CONFIG_UBIFS_FS_XATTR is not set
2423+# CONFIG_UBIFS_FS_ADVANCED_COMPR is not set
2424+CONFIG_UBIFS_FS_LZO=y
2425+CONFIG_UBIFS_FS_ZLIB=y
2426+# CONFIG_UBIFS_FS_DEBUG is not set
2427+# CONFIG_LOGFS is not set
2428+CONFIG_CRAMFS=y
2429+# CONFIG_SQUASHFS is not set
2430+# CONFIG_VXFS_FS is not set
2431+# CONFIG_MINIX_FS is not set
2432+# CONFIG_OMFS_FS is not set
2433+# CONFIG_HPFS_FS is not set
2434+# CONFIG_QNX4FS_FS is not set
2435+# CONFIG_ROMFS_FS is not set
2436+# CONFIG_PSTORE is not set
2437+# CONFIG_SYSV_FS is not set
2438+# CONFIG_UFS_FS is not set
2439+CONFIG_NETWORK_FILESYSTEMS=y
2440+CONFIG_NFS_FS=y
2441+CONFIG_NFS_V3=y
2442+# CONFIG_NFS_V3_ACL is not set
2443+# CONFIG_NFS_V4 is not set
2444+CONFIG_ROOT_NFS=y
2445+# CONFIG_NFSD is not set
2446+CONFIG_LOCKD=y
2447+CONFIG_LOCKD_V4=y
2448+CONFIG_NFS_COMMON=y
2449+CONFIG_SUNRPC=y
2450+# CONFIG_CEPH_FS is not set
2451+# CONFIG_CIFS is not set
2452+# CONFIG_NCP_FS is not set
2453+# CONFIG_CODA_FS is not set
2454+# CONFIG_AFS_FS is not set
2455+
2456+#
2457+# Partition Types
2458+#
2459+CONFIG_PARTITION_ADVANCED=y
2460+# CONFIG_ACORN_PARTITION is not set
2461+# CONFIG_OSF_PARTITION is not set
2462+# CONFIG_AMIGA_PARTITION is not set
2463+# CONFIG_ATARI_PARTITION is not set
2464+# CONFIG_MAC_PARTITION is not set
2465+CONFIG_MSDOS_PARTITION=y
2466+# CONFIG_BSD_DISKLABEL is not set
2467+# CONFIG_MINIX_SUBPARTITION is not set
2468+# CONFIG_SOLARIS_X86_PARTITION is not set
2469+# CONFIG_UNIXWARE_DISKLABEL is not set
2470+# CONFIG_LDM_PARTITION is not set
2471+# CONFIG_SGI_PARTITION is not set
2472+# CONFIG_ULTRIX_PARTITION is not set
2473+# CONFIG_SUN_PARTITION is not set
2474+# CONFIG_KARMA_PARTITION is not set
2475+CONFIG_EFI_PARTITION=y
2476+# CONFIG_SYSV68_PARTITION is not set
2477+CONFIG_NLS=y
2478+CONFIG_NLS_DEFAULT="iso8859-1"
2479+CONFIG_NLS_CODEPAGE_437=y
2480+# CONFIG_NLS_CODEPAGE_737 is not set
2481+# CONFIG_NLS_CODEPAGE_775 is not set
2482+# CONFIG_NLS_CODEPAGE_850 is not set
2483+# CONFIG_NLS_CODEPAGE_852 is not set
2484+# CONFIG_NLS_CODEPAGE_855 is not set
2485+# CONFIG_NLS_CODEPAGE_857 is not set
2486+# CONFIG_NLS_CODEPAGE_860 is not set
2487+# CONFIG_NLS_CODEPAGE_861 is not set
2488+# CONFIG_NLS_CODEPAGE_862 is not set
2489+# CONFIG_NLS_CODEPAGE_863 is not set
2490+# CONFIG_NLS_CODEPAGE_864 is not set
2491+# CONFIG_NLS_CODEPAGE_865 is not set
2492+# CONFIG_NLS_CODEPAGE_866 is not set
2493+# CONFIG_NLS_CODEPAGE_869 is not set
2494+# CONFIG_NLS_CODEPAGE_936 is not set
2495+# CONFIG_NLS_CODEPAGE_950 is not set
2496+# CONFIG_NLS_CODEPAGE_932 is not set
2497+# CONFIG_NLS_CODEPAGE_949 is not set
2498+# CONFIG_NLS_CODEPAGE_874 is not set
2499+# CONFIG_NLS_ISO8859_8 is not set
2500+# CONFIG_NLS_CODEPAGE_1250 is not set
2501+# CONFIG_NLS_CODEPAGE_1251 is not set
2502+CONFIG_NLS_ASCII=m
2503+CONFIG_NLS_ISO8859_1=y
2504+# CONFIG_NLS_ISO8859_2 is not set
2505+# CONFIG_NLS_ISO8859_3 is not set
2506+# CONFIG_NLS_ISO8859_4 is not set
2507+# CONFIG_NLS_ISO8859_5 is not set
2508+# CONFIG_NLS_ISO8859_6 is not set
2509+# CONFIG_NLS_ISO8859_7 is not set
2510+# CONFIG_NLS_ISO8859_9 is not set
2511+# CONFIG_NLS_ISO8859_13 is not set
2512+# CONFIG_NLS_ISO8859_14 is not set
2513+# CONFIG_NLS_ISO8859_15 is not set
2514+# CONFIG_NLS_KOI8_R is not set
2515+# CONFIG_NLS_KOI8_U is not set
2516+CONFIG_NLS_UTF8=m
2517+
2518+#
2519+# Kernel hacking
2520+#
2521+# CONFIG_PRINTK_TIME is not set
2522+CONFIG_DEFAULT_MESSAGE_LOGLEVEL=4
2523+CONFIG_ENABLE_WARN_DEPRECATED=y
2524+CONFIG_ENABLE_MUST_CHECK=y
2525+CONFIG_FRAME_WARN=1024
2526+# CONFIG_MAGIC_SYSRQ is not set
2527+# CONFIG_STRIP_ASM_SYMS is not set
2528+# CONFIG_UNUSED_SYMBOLS is not set
2529+CONFIG_DEBUG_FS=y
2530+# CONFIG_HEADERS_CHECK is not set
2531+# CONFIG_DEBUG_SECTION_MISMATCH is not set
2532+# CONFIG_DEBUG_KERNEL is not set
2533+# CONFIG_HARDLOCKUP_DETECTOR is not set
2534+# CONFIG_SLUB_DEBUG_ON is not set
2535+# CONFIG_SLUB_STATS is not set
2536+# CONFIG_SPARSE_RCU_POINTER is not set
2537+CONFIG_DEBUG_BUGVERBOSE=y
2538+# CONFIG_DEBUG_MEMORY_INIT is not set
2539+CONFIG_RCU_CPU_STALL_TIMEOUT=60
2540+CONFIG_RCU_CPU_STALL_VERBOSE=y
2541+# CONFIG_LKDTM is not set
2542+CONFIG_SYSCTL_SYSCALL_CHECK=y
2543+CONFIG_HAVE_FUNCTION_TRACER=y
2544+CONFIG_HAVE_FUNCTION_GRAPH_TRACER=y
2545+CONFIG_HAVE_DYNAMIC_FTRACE=y
2546+CONFIG_HAVE_FTRACE_MCOUNT_RECORD=y
2547+CONFIG_HAVE_C_RECORDMCOUNT=y
2548+CONFIG_TRACING_SUPPORT=y
2549+# CONFIG_FTRACE is not set
2550+# CONFIG_DYNAMIC_DEBUG is not set
2551+# CONFIG_DMA_API_DEBUG is not set
2552+# CONFIG_ATOMIC64_SELFTEST is not set
2553+# CONFIG_SAMPLES is not set
2554+CONFIG_HAVE_ARCH_KGDB=y
2555+# CONFIG_TEST_KSTRTOX is not set
2556+# CONFIG_STRICT_DEVMEM is not set
2557+CONFIG_ARM_UNWIND=y
2558+# CONFIG_DEBUG_USER is not set
2559+# CONFIG_OC_ETM is not set
2560+
2561+#
2562+# Security options
2563+#
2564+# CONFIG_KEYS is not set
2565+# CONFIG_SECURITY_DMESG_RESTRICT is not set
2566+# CONFIG_SECURITY is not set
2567+# CONFIG_SECURITYFS is not set
2568+CONFIG_DEFAULT_SECURITY_DAC=y
2569+CONFIG_DEFAULT_SECURITY=""
2570+CONFIG_CRYPTO=y
2571+
2572+#
2573+# Crypto core or helper
2574+#
2575+CONFIG_CRYPTO_ALGAPI=y
2576+CONFIG_CRYPTO_ALGAPI2=y
2577+CONFIG_CRYPTO_AEAD2=y
2578+CONFIG_CRYPTO_BLKCIPHER=y
2579+CONFIG_CRYPTO_BLKCIPHER2=y
2580+CONFIG_CRYPTO_HASH=y
2581+CONFIG_CRYPTO_HASH2=y
2582+CONFIG_CRYPTO_RNG2=y
2583+CONFIG_CRYPTO_PCOMP2=y
2584+CONFIG_CRYPTO_MANAGER=y
2585+CONFIG_CRYPTO_MANAGER2=y
2586+CONFIG_CRYPTO_MANAGER_DISABLE_TESTS=y
2587+# CONFIG_CRYPTO_GF128MUL is not set
2588+# CONFIG_CRYPTO_NULL is not set
2589+# CONFIG_CRYPTO_PCRYPT is not set
2590+CONFIG_CRYPTO_WORKQUEUE=y
2591+# CONFIG_CRYPTO_CRYPTD is not set
2592+# CONFIG_CRYPTO_AUTHENC is not set
2593+CONFIG_CRYPTO_TEST=m
2594+# CONFIG_CRYPTO_CRYPTODEV is not set
2595+
2596+#
2597+# Authenticated Encryption with Associated Data
2598+#
2599+# CONFIG_CRYPTO_CCM is not set
2600+# CONFIG_CRYPTO_GCM is not set
2601+# CONFIG_CRYPTO_SEQIV is not set
2602+
2603+#
2604+# Block modes
2605+#
2606+CONFIG_CRYPTO_CBC=y
2607+# CONFIG_CRYPTO_CTR is not set
2608+# CONFIG_CRYPTO_CTS is not set
2609+CONFIG_CRYPTO_ECB=y
2610+# CONFIG_CRYPTO_LRW is not set
2611+# CONFIG_CRYPTO_PCBC is not set
2612+# CONFIG_CRYPTO_XTS is not set
2613+
2614+#
2615+# Hash modes
2616+#
2617+# CONFIG_CRYPTO_HMAC is not set
2618+# CONFIG_CRYPTO_XCBC is not set
2619+# CONFIG_CRYPTO_VMAC is not set
2620+
2621+#
2622+# Digest
2623+#
2624+# CONFIG_CRYPTO_CRC32C is not set
2625+# CONFIG_CRYPTO_GHASH is not set
2626+# CONFIG_CRYPTO_MD4 is not set
2627+# CONFIG_CRYPTO_MD5 is not set
2628+CONFIG_CRYPTO_MICHAEL_MIC=y
2629+# CONFIG_CRYPTO_RMD128 is not set
2630+# CONFIG_CRYPTO_RMD160 is not set
2631+# CONFIG_CRYPTO_RMD256 is not set
2632+# CONFIG_CRYPTO_RMD320 is not set
2633+# CONFIG_CRYPTO_SHA1 is not set
2634+# CONFIG_CRYPTO_SHA256 is not set
2635+# CONFIG_CRYPTO_SHA512 is not set
2636+# CONFIG_CRYPTO_TGR192 is not set
2637+# CONFIG_CRYPTO_WP512 is not set
2638+
2639+#
2640+# Ciphers
2641+#
2642+CONFIG_CRYPTO_AES=y
2643+# CONFIG_CRYPTO_ANUBIS is not set
2644+CONFIG_CRYPTO_ARC4=y
2645+# CONFIG_CRYPTO_BLOWFISH is not set
2646+# CONFIG_CRYPTO_CAMELLIA is not set
2647+# CONFIG_CRYPTO_CAST5 is not set
2648+# CONFIG_CRYPTO_CAST6 is not set
2649+# CONFIG_CRYPTO_DES is not set
2650+# CONFIG_CRYPTO_FCRYPT is not set
2651+# CONFIG_CRYPTO_KHAZAD is not set
2652+# CONFIG_CRYPTO_SALSA20 is not set
2653+# CONFIG_CRYPTO_SEED is not set
2654+# CONFIG_CRYPTO_SERPENT is not set
2655+# CONFIG_CRYPTO_TEA is not set
2656+# CONFIG_CRYPTO_TWOFISH is not set
2657+
2658+#
2659+# Compression
2660+#
2661+CONFIG_CRYPTO_DEFLATE=y
2662+# CONFIG_CRYPTO_ZLIB is not set
2663+CONFIG_CRYPTO_LZO=y
2664+
2665+#
2666+# Random Number Generation
2667+#
2668+# CONFIG_CRYPTO_ANSI_CPRNG is not set
2669+# CONFIG_CRYPTO_USER_API_HASH is not set
2670+# CONFIG_CRYPTO_USER_API_SKCIPHER is not set
2671+CONFIG_CRYPTO_HW=y
2672+# CONFIG_BINARY_PRINTF is not set
2673+
2674+#
2675+# Library routines
2676+#
2677+CONFIG_BITREVERSE=y
2678+CONFIG_RATIONAL=y
2679+CONFIG_CRC_CCITT=m
2680+CONFIG_CRC16=y
2681+# CONFIG_CRC_T10DIF is not set
2682+# CONFIG_CRC_ITU_T is not set
2683+CONFIG_CRC32=y
2684+# CONFIG_CRC7 is not set
2685+# CONFIG_LIBCRC32C is not set
2686+CONFIG_ZLIB_INFLATE=y
2687+CONFIG_ZLIB_DEFLATE=y
2688+CONFIG_LZO_COMPRESS=y
2689+CONFIG_LZO_DECOMPRESS=y
2690+# CONFIG_XZ_DEC is not set
2691+# CONFIG_XZ_DEC_BCJ is not set
2692+CONFIG_DECOMPRESS_GZIP=y
2693+CONFIG_GENERIC_ALLOCATOR=y
2694+CONFIG_HAS_IOMEM=y
2695+CONFIG_HAS_IOPORT=y
2696+CONFIG_HAS_DMA=y
2697+CONFIG_CPU_RMAP=y
2698+CONFIG_NLATTR=y
2699+# CONFIG_AVERAGE is not set
2700diff --git a/arch/arm/configs/qmx6_updater_defconfig b/arch/arm/configs/qmx6_updater_defconfig
2701new file mode 100644
2702index 0000000..0b0c165
2703--- /dev/null
2704+++ b/arch/arm/configs/qmx6_updater_defconfig
2705@@ -0,0 +1,2367 @@
2706+#
2707+# Automatically generated make config: don't edit
2708+# Linux/arm 3.0.15 Kernel Configuration
2709+#
2710+CONFIG_ARM=y
2711+CONFIG_HAVE_PWM=y
2712+CONFIG_SYS_SUPPORTS_APM_EMULATION=y
2713+CONFIG_HAVE_SCHED_CLOCK=y
2714+CONFIG_GENERIC_GPIO=y
2715+# CONFIG_ARCH_USES_GETTIMEOFFSET is not set
2716+CONFIG_GENERIC_CLOCKEVENTS=y
2717+CONFIG_GENERIC_CLOCKEVENTS_BROADCAST=y
2718+CONFIG_KTIME_SCALAR=y
2719+CONFIG_HAVE_PROC_CPU=y
2720+CONFIG_STACKTRACE_SUPPORT=y
2721+CONFIG_LOCKDEP_SUPPORT=y
2722+CONFIG_TRACE_IRQFLAGS_SUPPORT=y
2723+CONFIG_HARDIRQS_SW_RESEND=y
2724+CONFIG_GENERIC_IRQ_PROBE=y
2725+CONFIG_GENERIC_LOCKBREAK=y
2726+CONFIG_RWSEM_GENERIC_SPINLOCK=y
2727+CONFIG_ARCH_HAS_CPUFREQ=y
2728+CONFIG_ARCH_HAS_CPU_IDLE_WAIT=y
2729+CONFIG_GENERIC_HWEIGHT=y
2730+CONFIG_GENERIC_CALIBRATE_DELAY=y
2731+CONFIG_ZONE_DMA=y
2732+CONFIG_NEED_DMA_MAP_STATE=y
2733+CONFIG_FIQ=y
2734+CONFIG_VECTORS_BASE=0xffff0000
2735+# CONFIG_ARM_PATCH_PHYS_VIRT is not set
2736+CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
2737+CONFIG_HAVE_IRQ_WORK=y
2738+CONFIG_IRQ_WORK=y
2739+
2740+#
2741+# General setup
2742+#
2743+CONFIG_EXPERIMENTAL=y
2744+CONFIG_INIT_ENV_ARG_LIMIT=32
2745+CONFIG_CROSS_COMPILE=""
2746+CONFIG_LOCALVERSION=""
2747+CONFIG_LOCALVERSION_AUTO=y
2748+CONFIG_HAVE_KERNEL_GZIP=y
2749+CONFIG_HAVE_KERNEL_LZMA=y
2750+CONFIG_HAVE_KERNEL_LZO=y
2751+CONFIG_KERNEL_GZIP=y
2752+# CONFIG_KERNEL_LZMA is not set
2753+# CONFIG_KERNEL_LZO is not set
2754+CONFIG_DEFAULT_HOSTNAME="(none)"
2755+CONFIG_SWAP=y
2756+CONFIG_SYSVIPC=y
2757+CONFIG_SYSVIPC_SYSCTL=y
2758+# CONFIG_POSIX_MQUEUE is not set
2759+# CONFIG_BSD_PROCESS_ACCT is not set
2760+# CONFIG_FHANDLE is not set
2761+# CONFIG_TASKSTATS is not set
2762+# CONFIG_AUDIT is not set
2763+CONFIG_HAVE_GENERIC_HARDIRQS=y
2764+
2765+#
2766+# IRQ subsystem
2767+#
2768+CONFIG_GENERIC_HARDIRQS=y
2769+CONFIG_HAVE_SPARSE_IRQ=y
2770+CONFIG_GENERIC_IRQ_SHOW=y
2771+# CONFIG_SPARSE_IRQ is not set
2772+
2773+#
2774+# RCU Subsystem
2775+#
2776+CONFIG_TREE_PREEMPT_RCU=y
2777+CONFIG_PREEMPT_RCU=y
2778+# CONFIG_RCU_TRACE is not set
2779+CONFIG_RCU_FANOUT=32
2780+# CONFIG_RCU_FANOUT_EXACT is not set
2781+# CONFIG_TREE_RCU_TRACE is not set
2782+# CONFIG_RCU_BOOST is not set
2783+CONFIG_IKCONFIG=y
2784+CONFIG_IKCONFIG_PROC=y
2785+CONFIG_LOG_BUF_SHIFT=14
2786+# CONFIG_CGROUPS is not set
2787+# CONFIG_NAMESPACES is not set
2788+# CONFIG_SCHED_AUTOGROUP is not set
2789+# CONFIG_SYSFS_DEPRECATED is not set
2790+# CONFIG_RELAY is not set
2791+CONFIG_BLK_DEV_INITRD=y
2792+CONFIG_INITRAMFS_SOURCE=""
2793+CONFIG_RD_GZIP=y
2794+# CONFIG_RD_BZIP2 is not set
2795+# CONFIG_RD_LZMA is not set
2796+# CONFIG_RD_XZ is not set
2797+# CONFIG_RD_LZO is not set
2798+# CONFIG_CC_OPTIMIZE_FOR_SIZE is not set
2799+CONFIG_SYSCTL=y
2800+CONFIG_ANON_INODES=y
2801+CONFIG_EXPERT=y
2802+CONFIG_UID16=y
2803+CONFIG_SYSCTL_SYSCALL=y
2804+CONFIG_KALLSYMS=y
2805+CONFIG_HOTPLUG=y
2806+CONFIG_PRINTK=y
2807+CONFIG_BUG=y
2808+CONFIG_ELF_CORE=y
2809+CONFIG_BASE_FULL=y
2810+CONFIG_FUTEX=y
2811+CONFIG_EPOLL=y
2812+CONFIG_SIGNALFD=y
2813+CONFIG_TIMERFD=y
2814+CONFIG_EVENTFD=y
2815+CONFIG_SHMEM=y
2816+CONFIG_AIO=y
2817+CONFIG_EMBEDDED=y
2818+CONFIG_HAVE_PERF_EVENTS=y
2819+CONFIG_PERF_USE_VMALLOC=y
2820+
2821+#
2822+# Kernel Performance Events And Counters
2823+#
2824+CONFIG_PERF_EVENTS=y
2825+# CONFIG_PERF_COUNTERS is not set
2826+CONFIG_VM_EVENT_COUNTERS=y
2827+CONFIG_SLUB_DEBUG=y
2828+CONFIG_COMPAT_BRK=y
2829+# CONFIG_SLAB is not set
2830+CONFIG_SLUB=y
2831+# CONFIG_SLOB is not set
2832+# CONFIG_PROFILING is not set
2833+CONFIG_HAVE_OPROFILE=y
2834+# CONFIG_KPROBES is not set
2835+CONFIG_HAVE_KPROBES=y
2836+CONFIG_HAVE_KRETPROBES=y
2837+CONFIG_USE_GENERIC_SMP_HELPERS=y
2838+CONFIG_HAVE_REGS_AND_STACK_ACCESS_API=y
2839+CONFIG_HAVE_CLK=y
2840+CONFIG_HAVE_DMA_API_DEBUG=y
2841+CONFIG_HAVE_HW_BREAKPOINT=y
2842+
2843+#
2844+# GCOV-based kernel profiling
2845+#
2846+# CONFIG_GCOV_KERNEL is not set
2847+CONFIG_HAVE_GENERIC_DMA_COHERENT=y
2848+CONFIG_SLABINFO=y
2849+CONFIG_RT_MUTEXES=y
2850+CONFIG_BASE_SMALL=0
2851+CONFIG_MODULES=y
2852+# CONFIG_MODULE_FORCE_LOAD is not set
2853+CONFIG_MODULE_UNLOAD=y
2854+CONFIG_MODULE_FORCE_UNLOAD=y
2855+CONFIG_MODVERSIONS=y
2856+# CONFIG_MODULE_SRCVERSION_ALL is not set
2857+CONFIG_STOP_MACHINE=y
2858+CONFIG_BLOCK=y
2859+CONFIG_LBDAF=y
2860+# CONFIG_BLK_DEV_BSG is not set
2861+# CONFIG_BLK_DEV_INTEGRITY is not set
2862+
2863+#
2864+# IO Schedulers
2865+#
2866+CONFIG_IOSCHED_NOOP=y
2867+CONFIG_IOSCHED_DEADLINE=y
2868+CONFIG_IOSCHED_CFQ=y
2869+# CONFIG_DEFAULT_DEADLINE is not set
2870+CONFIG_DEFAULT_CFQ=y
2871+# CONFIG_DEFAULT_NOOP is not set
2872+CONFIG_DEFAULT_IOSCHED="cfq"
2873+# CONFIG_INLINE_SPIN_TRYLOCK is not set
2874+# CONFIG_INLINE_SPIN_TRYLOCK_BH is not set
2875+# CONFIG_INLINE_SPIN_LOCK is not set
2876+# CONFIG_INLINE_SPIN_LOCK_BH is not set
2877+# CONFIG_INLINE_SPIN_LOCK_IRQ is not set
2878+# CONFIG_INLINE_SPIN_LOCK_IRQSAVE is not set
2879+# CONFIG_INLINE_SPIN_UNLOCK is not set
2880+# CONFIG_INLINE_SPIN_UNLOCK_BH is not set
2881+# CONFIG_INLINE_SPIN_UNLOCK_IRQ is not set
2882+# CONFIG_INLINE_SPIN_UNLOCK_IRQRESTORE is not set
2883+# CONFIG_INLINE_READ_TRYLOCK is not set
2884+# CONFIG_INLINE_READ_LOCK is not set
2885+# CONFIG_INLINE_READ_LOCK_BH is not set
2886+# CONFIG_INLINE_READ_LOCK_IRQ is not set
2887+# CONFIG_INLINE_READ_LOCK_IRQSAVE is not set
2888+# CONFIG_INLINE_READ_UNLOCK is not set
2889+# CONFIG_INLINE_READ_UNLOCK_BH is not set
2890+# CONFIG_INLINE_READ_UNLOCK_IRQ is not set
2891+# CONFIG_INLINE_READ_UNLOCK_IRQRESTORE is not set
2892+# CONFIG_INLINE_WRITE_TRYLOCK is not set
2893+# CONFIG_INLINE_WRITE_LOCK is not set
2894+# CONFIG_INLINE_WRITE_LOCK_BH is not set
2895+# CONFIG_INLINE_WRITE_LOCK_IRQ is not set
2896+# CONFIG_INLINE_WRITE_LOCK_IRQSAVE is not set
2897+# CONFIG_INLINE_WRITE_UNLOCK is not set
2898+# CONFIG_INLINE_WRITE_UNLOCK_BH is not set
2899+# CONFIG_INLINE_WRITE_UNLOCK_IRQ is not set
2900+# CONFIG_INLINE_WRITE_UNLOCK_IRQRESTORE is not set
2901+CONFIG_MUTEX_SPIN_ON_OWNER=y
2902+CONFIG_FREEZER=y
2903+
2904+#
2905+# System Type
2906+#
2907+CONFIG_MMU=y
2908+# CONFIG_ARCH_INTEGRATOR is not set
2909+# CONFIG_ARCH_REALVIEW is not set
2910+# CONFIG_ARCH_VERSATILE is not set
2911+# CONFIG_ARCH_VEXPRESS is not set
2912+# CONFIG_ARCH_AT91 is not set
2913+# CONFIG_ARCH_BCMRING is not set
2914+# CONFIG_ARCH_CLPS711X is not set
2915+# CONFIG_ARCH_CNS3XXX is not set
2916+# CONFIG_ARCH_GEMINI is not set
2917+# CONFIG_ARCH_EBSA110 is not set
2918+# CONFIG_ARCH_EP93XX is not set
2919+# CONFIG_ARCH_FOOTBRIDGE is not set
2920+CONFIG_ARCH_MXC=y
2921+# CONFIG_ARCH_MXS is not set
2922+# CONFIG_ARCH_NETX is not set
2923+# CONFIG_ARCH_H720X is not set
2924+# CONFIG_ARCH_IOP13XX is not set
2925+# CONFIG_ARCH_IOP32X is not set
2926+# CONFIG_ARCH_IOP33X is not set
2927+# CONFIG_ARCH_IXP23XX is not set
2928+# CONFIG_ARCH_IXP2000 is not set
2929+# CONFIG_ARCH_IXP4XX is not set
2930+# CONFIG_ARCH_DOVE is not set
2931+# CONFIG_ARCH_KIRKWOOD is not set
2932+# CONFIG_ARCH_LOKI is not set
2933+# CONFIG_ARCH_LPC32XX is not set
2934+# CONFIG_ARCH_MV78XX0 is not set
2935+# CONFIG_ARCH_ORION5X is not set
2936+# CONFIG_ARCH_MMP is not set
2937+# CONFIG_ARCH_KS8695 is not set
2938+# CONFIG_ARCH_W90X900 is not set
2939+# CONFIG_ARCH_NUC93X is not set
2940+# CONFIG_ARCH_TEGRA is not set
2941+# CONFIG_ARCH_PNX4008 is not set
2942+# CONFIG_ARCH_PXA is not set
2943+# CONFIG_ARCH_MSM is not set
2944+# CONFIG_ARCH_SHMOBILE is not set
2945+# CONFIG_ARCH_RPC is not set
2946+# CONFIG_ARCH_SA1100 is not set
2947+# CONFIG_ARCH_S3C2410 is not set
2948+# CONFIG_ARCH_S3C64XX is not set
2949+# CONFIG_ARCH_S5P64X0 is not set
2950+# CONFIG_ARCH_S5PC100 is not set
2951+# CONFIG_ARCH_S5PV210 is not set
2952+# CONFIG_ARCH_EXYNOS4 is not set
2953+# CONFIG_ARCH_SHARK is not set
2954+# CONFIG_ARCH_TCC_926 is not set
2955+# CONFIG_ARCH_U300 is not set
2956+# CONFIG_ARCH_U8500 is not set
2957+# CONFIG_ARCH_NOMADIK is not set
2958+# CONFIG_ARCH_DAVINCI is not set
2959+# CONFIG_ARCH_OMAP is not set
2960+# CONFIG_PLAT_SPEAR is not set
2961+# CONFIG_ARCH_VT8500 is not set
2962+CONFIG_GPIO_PCA953X=y
2963+CONFIG_IMX_HAVE_PLATFORM_DMA=y
2964+CONFIG_IMX_HAVE_PLATFORM_MXC_MLB=y
2965+CONFIG_IMX_HAVE_PLATFORM_FEC=y
2966+CONFIG_IMX_HAVE_PLATFORM_FLEXCAN=y
2967+CONFIG_IMX_HAVE_PLATFORM_FSL_USB2_UDC=y
2968+CONFIG_IMX_HAVE_PLATFORM_GPMI_NFC=y
2969+CONFIG_IMX_HAVE_PLATFORM_IMX2_WDT=y
2970+CONFIG_IMX_HAVE_PLATFORM_IMX_SNVS_RTC=y
2971+CONFIG_IMX_HAVE_PLATFORM_IMX_I2C=y
2972+CONFIG_IMX_HAVE_PLATFORM_IMX_SSI=y
2973+CONFIG_IMX_HAVE_PLATFORM_IMX_ESAI=y
2974+CONFIG_IMX_HAVE_PLATFORM_IMX_UART=y
2975+CONFIG_IMX_HAVE_PLATFORM_MXC_EHCI=y
2976+CONFIG_IMX_HAVE_PLATFORM_MXC_PWM=y
2977+CONFIG_IMX_HAVE_PLATFORM_SDHCI_ESDHC_IMX=y
2978+CONFIG_IMX_HAVE_PLATFORM_SPI_IMX=y
2979+CONFIG_IMX_HAVE_PLATFORM_IMX_IPUV3=y
2980+CONFIG_IMX_HAVE_PLATFORM_IMX_VPU=y
2981+CONFIG_IMX_HAVE_PLATFORM_IMX_DVFS=y
2982+CONFIG_IMX_HAVE_PLATFORM_AHCI=y
2983+CONFIG_IMX_HAVE_PLATFORM_IMX_OCOTP=y
2984+CONFIG_IMX_HAVE_PLATFORM_IMX_VIIM=y
2985+CONFIG_IMX_HAVE_PLATFORM_PERFMON=y
2986+CONFIG_IMX_HAVE_PLATFORM_LDB=y
2987+CONFIG_IMX_HAVE_PLATFORM_IMX_PXP=y
2988+# CONFIG_IMX_HAVE_PLATFORM_IMX_EPDC is not set
2989+CONFIG_IMX_HAVE_PLATFORM_IMX_SPDIF=y
2990+CONFIG_IMX_HAVE_PLATFORM_VIV_GPU=y
2991+CONFIG_IMX_HAVE_PLATFORM_MXC_HDMI=y
2992+CONFIG_IMX_HAVE_PLATFORM_IMX_ANATOP_THERMAL=y
2993+CONFIG_IMX_HAVE_PLATFORM_FSL_OTG=y
2994+CONFIG_IMX_HAVE_PLATFORM_FSL_USB_WAKEUP=y
2995+CONFIG_IMX_HAVE_PLATFORM_IMX_PM=y
2996+CONFIG_IMX_HAVE_PLATFORM_IMX_ASRC=y
2997+CONFIG_IMX_HAVE_PLATFORM_IMX_MIPI_DSI=y
2998+CONFIG_IMX_HAVE_PLATFORM_IMX_MIPI_CSI2=y
2999+
3000+#
3001+# Freescale MXC Implementations
3002+#
3003+# CONFIG_ARCH_MX1 is not set
3004+# CONFIG_ARCH_MX2 is not set
3005+# CONFIG_ARCH_MX25 is not set
3006+# CONFIG_ARCH_MX3 is not set
3007+# CONFIG_ARCH_MX503 is not set
3008+# CONFIG_ARCH_MX51 is not set
3009+CONFIG_ARCH_MX6=y
3010+CONFIG_ARCH_MX6Q=y
3011+CONFIG_FORCE_MAX_ZONEORDER=13
3012+CONFIG_SOC_IMX6Q=y
3013+# CONFIG_MACH_MX6Q_ARM2 is not set
3014+# CONFIG_MACH_MX6Q_SABRELITE is not set
3015+# CONFIG_MACH_MX6Q_SABRESD is not set
3016+# CONFIG_MACH_MX6Q_SABREAUTO is not set
3017+CONFIG_MACH_MX6Q_QMX6=y
3018+
3019+#
3020+# MX6 Options:
3021+#
3022+# CONFIG_IMX_PCIE is not set
3023+CONFIG_ISP1504_MXC=y
3024+# CONFIG_MXC_IRQ_PRIOR is not set
3025+CONFIG_MXC_PWM=y
3026+# CONFIG_MXC_DEBUG_BOARD is not set
3027+CONFIG_ARCH_MXC_IOMUX_V3=y
3028+CONFIG_ARCH_MXC_AUDMUX_V2=y
3029+CONFIG_IRAM_ALLOC=y
3030+CONFIG_CLK_DEBUG=y
3031+CONFIG_DMA_ZONE_SIZE=184
3032+
3033+#
3034+# System MMU
3035+#
3036+
3037+#
3038+# Processor Type
3039+#
3040+CONFIG_CPU_V7=y
3041+CONFIG_CPU_32v6K=y
3042+CONFIG_CPU_32v7=y
3043+CONFIG_CPU_ABRT_EV7=y
3044+CONFIG_CPU_PABRT_V7=y
3045+CONFIG_CPU_CACHE_V7=y
3046+CONFIG_CPU_CACHE_VIPT=y
3047+CONFIG_CPU_COPY_V6=y
3048+CONFIG_CPU_TLB_V7=y
3049+CONFIG_CPU_HAS_ASID=y
3050+CONFIG_CPU_CP15=y
3051+CONFIG_CPU_CP15_MMU=y
3052+
3053+#
3054+# Processor Features
3055+#
3056+CONFIG_ARM_THUMB=y
3057+# CONFIG_ARM_THUMBEE is not set
3058+# CONFIG_SWP_EMULATE is not set
3059+# CONFIG_CPU_ICACHE_DISABLE is not set
3060+# CONFIG_CPU_DCACHE_DISABLE is not set
3061+# CONFIG_CPU_BPREDICT_DISABLE is not set
3062+CONFIG_OUTER_CACHE=y
3063+CONFIG_OUTER_CACHE_SYNC=y
3064+CONFIG_CACHE_L2X0=y
3065+CONFIG_CACHE_PL310=y
3066+CONFIG_ARM_L1_CACHE_SHIFT=5
3067+CONFIG_ARM_DMA_MEM_BUFFERABLE=y
3068+CONFIG_CPU_HAS_PMU=y
3069+# CONFIG_ARM_ERRATA_430973 is not set
3070+# CONFIG_ARM_ERRATA_458693 is not set
3071+# CONFIG_ARM_ERRATA_460075 is not set
3072+# CONFIG_ARM_ERRATA_742230 is not set
3073+# CONFIG_ARM_ERRATA_742231 is not set
3074+# CONFIG_PL310_ERRATA_588369 is not set
3075+# CONFIG_ARM_ERRATA_720789 is not set
3076+# CONFIG_PL310_ERRATA_727915 is not set
3077+CONFIG_ARM_ERRATA_743622=y
3078+CONFIG_ARM_ERRATA_751472=y
3079+# CONFIG_ARM_ERRATA_753970 is not set
3080+CONFIG_ARM_ERRATA_754322=y
3081+# CONFIG_ARM_ERRATA_754327 is not set
3082+CONFIG_ARM_GIC=y
3083+
3084+#
3085+# Bus support
3086+#
3087+# CONFIG_PCI_SYSCALL is not set
3088+# CONFIG_ARCH_SUPPORTS_MSI is not set
3089+# CONFIG_PCCARD is not set
3090+# CONFIG_ARM_ERRATA_764369 is not set
3091+# CONFIG_PL310_ERRATA_769419 is not set
3092+
3093+#
3094+# Kernel Features
3095+#
3096+CONFIG_TICK_ONESHOT=y
3097+CONFIG_NO_HZ=y
3098+CONFIG_HIGH_RES_TIMERS=y
3099+CONFIG_GENERIC_CLOCKEVENTS_BUILD=y
3100+CONFIG_SMP=y
3101+CONFIG_SMP_ON_UP=y
3102+CONFIG_HAVE_ARM_SCU=y
3103+CONFIG_HAVE_ARM_TWD=y
3104+# CONFIG_VMSPLIT_3G is not set
3105+CONFIG_VMSPLIT_2G=y
3106+# CONFIG_VMSPLIT_1G is not set
3107+CONFIG_PAGE_OFFSET=0x80000000
3108+CONFIG_NR_CPUS=4
3109+CONFIG_HOTPLUG_CPU=y
3110+CONFIG_LOCAL_TIMERS=y
3111+# CONFIG_PREEMPT_NONE is not set
3112+# CONFIG_PREEMPT_VOLUNTARY is not set
3113+CONFIG_PREEMPT=y
3114+CONFIG_HZ=100
3115+# CONFIG_THUMB2_KERNEL is not set
3116+CONFIG_AEABI=y
3117+# CONFIG_OABI_COMPAT is not set
3118+# CONFIG_ARCH_SPARSEMEM_DEFAULT is not set
3119+# CONFIG_ARCH_SELECT_MEMORY_MODEL is not set
3120+CONFIG_HAVE_ARCH_PFN_VALID=y
3121+CONFIG_HIGHMEM=y
3122+# CONFIG_HIGHPTE is not set
3123+CONFIG_HW_PERF_EVENTS=y
3124+CONFIG_SELECT_MEMORY_MODEL=y
3125+CONFIG_FLATMEM_MANUAL=y
3126+CONFIG_FLATMEM=y
3127+CONFIG_FLAT_NODE_MEM_MAP=y
3128+CONFIG_HAVE_MEMBLOCK=y
3129+CONFIG_PAGEFLAGS_EXTENDED=y
3130+CONFIG_SPLIT_PTLOCK_CPUS=4
3131+# CONFIG_COMPACTION is not set
3132+# CONFIG_PHYS_ADDR_T_64BIT is not set
3133+CONFIG_ZONE_DMA_FLAG=1
3134+CONFIG_BOUNCE=y
3135+CONFIG_VIRT_TO_BUS=y
3136+# CONFIG_KSM is not set
3137+CONFIG_DEFAULT_MMAP_MIN_ADDR=4096
3138+# CONFIG_CLEANCACHE is not set
3139+CONFIG_ALIGNMENT_TRAP=y
3140+# CONFIG_UACCESS_WITH_MEMCPY is not set
3141+# CONFIG_SECCOMP is not set
3142+# CONFIG_CC_STACKPROTECTOR is not set
3143+# CONFIG_DEPRECATED_PARAM_STRUCT is not set
3144+
3145+#
3146+# Boot options
3147+#
3148+# CONFIG_USE_OF is not set
3149+CONFIG_ZBOOT_ROM_TEXT=0x0
3150+CONFIG_ZBOOT_ROM_BSS=0x0
3151+CONFIG_CMDLINE="noinitrd console=ttymxc0,115200 root=/dev/mtdblock2 rw rootfstype=jffs2 ip=off"
3152+CONFIG_CMDLINE_FROM_BOOTLOADER=y
3153+# CONFIG_CMDLINE_EXTEND is not set
3154+# CONFIG_CMDLINE_FORCE is not set
3155+# CONFIG_XIP_KERNEL is not set
3156+# CONFIG_KEXEC is not set
3157+# CONFIG_CRASH_DUMP is not set
3158+# CONFIG_AUTO_ZRELADDR is not set
3159+
3160+#
3161+# CPU Power Management
3162+#
3163+
3164+#
3165+# CPU Frequency scaling
3166+#
3167+CONFIG_CPU_FREQ=y
3168+CONFIG_CPU_FREQ_TABLE=y
3169+CONFIG_CPU_FREQ_STAT=y
3170+# CONFIG_CPU_FREQ_STAT_DETAILS is not set
3171+# CONFIG_CPU_FREQ_DEFAULT_GOV_PERFORMANCE is not set
3172+# CONFIG_CPU_FREQ_DEFAULT_GOV_POWERSAVE is not set
3173+CONFIG_CPU_FREQ_DEFAULT_GOV_USERSPACE=y
3174+# CONFIG_CPU_FREQ_DEFAULT_GOV_ONDEMAND is not set
3175+# CONFIG_CPU_FREQ_DEFAULT_GOV_CONSERVATIVE is not set
3176+# CONFIG_CPU_FREQ_GOV_PERFORMANCE is not set
3177+CONFIG_CPU_FREQ_GOV_POWERSAVE=y
3178+CONFIG_CPU_FREQ_GOV_USERSPACE=y
3179+# CONFIG_CPU_FREQ_GOV_ONDEMAND is not set
3180+CONFIG_CPU_FREQ_GOV_CONSERVATIVE=y
3181+CONFIG_CPU_FREQ_IMX=y
3182+# CONFIG_CPU_IDLE is not set
3183+
3184+#
3185+# Floating point emulation
3186+#
3187+
3188+#
3189+# At least one emulation must be selected
3190+#
3191+CONFIG_VFP=y
3192+CONFIG_VFPv3=y
3193+CONFIG_NEON=y
3194+
3195+#
3196+# Userspace binary formats
3197+#
3198+CONFIG_BINFMT_ELF=y
3199+# CONFIG_CORE_DUMP_DEFAULT_ELF_HEADERS is not set
3200+CONFIG_HAVE_AOUT=y
3201+# CONFIG_BINFMT_AOUT is not set
3202+# CONFIG_BINFMT_MISC is not set
3203+
3204+#
3205+# Power management options
3206+#
3207+CONFIG_SUSPEND=y
3208+# CONFIG_PM_TEST_SUSPEND is not set
3209+CONFIG_SUSPEND_DEVICE_TIME_DEBUG=y
3210+CONFIG_SUSPEND_FREEZER=y
3211+CONFIG_PM_SLEEP=y
3212+CONFIG_PM_SLEEP_SMP=y
3213+CONFIG_PM_RUNTIME=y
3214+CONFIG_PM=y
3215+CONFIG_PM_DEBUG=y
3216+# CONFIG_PM_ADVANCED_DEBUG is not set
3217+CONFIG_CAN_PM_TRACE=y
3218+CONFIG_APM_EMULATION=y
3219+CONFIG_PM_RUNTIME_CLK=y
3220+CONFIG_ARCH_SUSPEND_POSSIBLE=y
3221+CONFIG_NET=y
3222+
3223+#
3224+# Networking options
3225+#
3226+CONFIG_PACKET=y
3227+CONFIG_UNIX=y
3228+CONFIG_XFRM=y
3229+# CONFIG_XFRM_USER is not set
3230+# CONFIG_XFRM_SUB_POLICY is not set
3231+# CONFIG_XFRM_MIGRATE is not set
3232+# CONFIG_XFRM_STATISTICS is not set
3233+# CONFIG_NET_KEY is not set
3234+CONFIG_INET=y
3235+CONFIG_IP_MULTICAST=y
3236+# CONFIG_IP_ADVANCED_ROUTER is not set
3237+CONFIG_IP_PNP=y
3238+CONFIG_IP_PNP_DHCP=y
3239+CONFIG_IP_PNP_BOOTP=y
3240+# CONFIG_IP_PNP_RARP is not set
3241+# CONFIG_NET_IPIP is not set
3242+# CONFIG_NET_IPGRE_DEMUX is not set
3243+# CONFIG_IP_MROUTE is not set
3244+# CONFIG_ARPD is not set
3245+# CONFIG_SYN_COOKIES is not set
3246+# CONFIG_INET_AH is not set
3247+# CONFIG_INET_ESP is not set
3248+# CONFIG_INET_IPCOMP is not set
3249+# CONFIG_INET_XFRM_TUNNEL is not set
3250+# CONFIG_INET_TUNNEL is not set
3251+CONFIG_INET_XFRM_MODE_TRANSPORT=y
3252+CONFIG_INET_XFRM_MODE_TUNNEL=y
3253+CONFIG_INET_XFRM_MODE_BEET=y
3254+# CONFIG_INET_LRO is not set
3255+CONFIG_INET_DIAG=y
3256+CONFIG_INET_TCP_DIAG=y
3257+# CONFIG_TCP_CONG_ADVANCED is not set
3258+CONFIG_TCP_CONG_CUBIC=y
3259+CONFIG_DEFAULT_TCP_CONG="cubic"
3260+# CONFIG_TCP_MD5SIG is not set
3261+# CONFIG_IPV6 is not set
3262+# CONFIG_NETWORK_SECMARK is not set
3263+# CONFIG_NETWORK_PHY_TIMESTAMPING is not set
3264+# CONFIG_NETFILTER is not set
3265+# CONFIG_IP_DCCP is not set
3266+# CONFIG_IP_SCTP is not set
3267+# CONFIG_RDS is not set
3268+# CONFIG_TIPC is not set
3269+# CONFIG_ATM is not set
3270+# CONFIG_L2TP is not set
3271+# CONFIG_BRIDGE is not set
3272+# CONFIG_NET_DSA is not set
3273+# CONFIG_VLAN_8021Q is not set
3274+# CONFIG_DECNET is not set
3275+# CONFIG_LLC2 is not set
3276+# CONFIG_IPX is not set
3277+# CONFIG_ATALK is not set
3278+# CONFIG_X25 is not set
3279+# CONFIG_LAPB is not set
3280+# CONFIG_ECONET is not set
3281+# CONFIG_WAN_ROUTER is not set
3282+# CONFIG_PHONET is not set
3283+# CONFIG_IEEE802154 is not set
3284+# CONFIG_NET_SCHED is not set
3285+# CONFIG_DCB is not set
3286+# CONFIG_BATMAN_ADV is not set
3287+CONFIG_RPS=y
3288+CONFIG_RFS_ACCEL=y
3289+CONFIG_XPS=y
3290+
3291+#
3292+# Network testing
3293+#
3294+# CONFIG_NET_PKTGEN is not set
3295+# CONFIG_HAMRADIO is not set
3296+CONFIG_CAN=y
3297+CONFIG_CAN_RAW=y
3298+CONFIG_CAN_BCM=y
3299+
3300+#
3301+# CAN Device Drivers
3302+#
3303+CONFIG_CAN_VCAN=y
3304+# CONFIG_CAN_SLCAN is not set
3305+# CONFIG_CAN_DEV is not set
3306+CONFIG_HAVE_CAN_FLEXCAN=y
3307+CONFIG_CAN_DEBUG_DEVICES=y
3308+# CONFIG_IRDA is not set
3309+CONFIG_BT=y
3310+CONFIG_BT_L2CAP=y
3311+CONFIG_BT_SCO=y
3312+CONFIG_BT_RFCOMM=y
3313+CONFIG_BT_RFCOMM_TTY=y
3314+CONFIG_BT_BNEP=y
3315+CONFIG_BT_BNEP_MC_FILTER=y
3316+CONFIG_BT_BNEP_PROTO_FILTER=y
3317+CONFIG_BT_HIDP=y
3318+
3319+#
3320+# Bluetooth device drivers
3321+#
3322+CONFIG_BT_HCIBTUSB=y
3323+# CONFIG_BT_HCIBTSDIO is not set
3324+# CONFIG_BT_HCIUART is not set
3325+# CONFIG_BT_HCIBCM203X is not set
3326+# CONFIG_BT_HCIBPA10X is not set
3327+# CONFIG_BT_HCIBFUSB is not set
3328+CONFIG_BT_HCIVHCI=y
3329+# CONFIG_BT_MRVL is not set
3330+# CONFIG_BT_ATH3K is not set
3331+# CONFIG_AF_RXRPC is not set
3332+CONFIG_WIRELESS=y
3333+# CONFIG_CFG80211 is not set
3334+# CONFIG_LIB80211 is not set
3335+
3336+#
3337+# CFG80211 needs to be enabled for MAC80211
3338+#
3339+# CONFIG_WIMAX is not set
3340+CONFIG_RFKILL=y
3341+CONFIG_RFKILL_INPUT=y
3342+# CONFIG_RFKILL_REGULATOR is not set
3343+# CONFIG_RFKILL_GPIO is not set
3344+# CONFIG_NET_9P is not set
3345+# CONFIG_CAIF is not set
3346+# CONFIG_CEPH_LIB is not set
3347+
3348+#
3349+# Device Drivers
3350+#
3351+
3352+#
3353+# Generic Driver Options
3354+#
3355+CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug"
3356+# CONFIG_DEVTMPFS is not set
3357+CONFIG_STANDALONE=y
3358+CONFIG_PREVENT_FIRMWARE_BUILD=y
3359+CONFIG_FW_LOADER=y
3360+CONFIG_FIRMWARE_IN_KERNEL=y
3361+CONFIG_EXTRA_FIRMWARE=""
3362+# CONFIG_SYS_HYPERVISOR is not set
3363+CONFIG_CONNECTOR=y
3364+CONFIG_PROC_EVENTS=y
3365+CONFIG_MTD=y
3366+# CONFIG_MTD_DEBUG is not set
3367+# CONFIG_MTD_TESTS is not set
3368+# CONFIG_MTD_REDBOOT_PARTS is not set
3369+CONFIG_MTD_CMDLINE_PARTS=y
3370+# CONFIG_MTD_AFS_PARTS is not set
3371+# CONFIG_MTD_AR7_PARTS is not set
3372+
3373+#
3374+# User Modules And Translation Layers
3375+#
3376+CONFIG_MTD_CHAR=y
3377+CONFIG_MTD_BLKDEVS=y
3378+CONFIG_MTD_BLOCK=y
3379+# CONFIG_FTL is not set
3380+# CONFIG_NFTL is not set
3381+# CONFIG_INFTL is not set
3382+# CONFIG_RFD_FTL is not set
3383+# CONFIG_SSFDC is not set
3384+# CONFIG_SM_FTL is not set
3385+# CONFIG_MTD_OOPS is not set
3386+# CONFIG_MTD_SWAP is not set
3387+
3388+#
3389+# RAM/ROM/Flash chip drivers
3390+#
3391+# CONFIG_MTD_CFI is not set
3392+# CONFIG_MTD_JEDECPROBE is not set
3393+CONFIG_MTD_MAP_BANK_WIDTH_1=y
3394+CONFIG_MTD_MAP_BANK_WIDTH_2=y
3395+CONFIG_MTD_MAP_BANK_WIDTH_4=y
3396+# CONFIG_MTD_MAP_BANK_WIDTH_8 is not set
3397+# CONFIG_MTD_MAP_BANK_WIDTH_16 is not set
3398+# CONFIG_MTD_MAP_BANK_WIDTH_32 is not set
3399+CONFIG_MTD_CFI_I1=y
3400+CONFIG_MTD_CFI_I2=y
3401+# CONFIG_MTD_CFI_I4 is not set
3402+# CONFIG_MTD_CFI_I8 is not set
3403+# CONFIG_MTD_RAM is not set
3404+# CONFIG_MTD_ROM is not set
3405+# CONFIG_MTD_ABSENT is not set
3406+
3407+#
3408+# Mapping drivers for chip access
3409+#
3410+# CONFIG_MTD_COMPLEX_MAPPINGS is not set
3411+# CONFIG_MTD_PLATRAM is not set
3412+
3413+#
3414+# Self-contained MTD device drivers
3415+#
3416+# CONFIG_MTD_DATAFLASH is not set
3417+CONFIG_MTD_M25P80=y
3418+CONFIG_M25PXX_USE_FAST_READ=y
3419+# CONFIG_MTD_SST25L is not set
3420+# CONFIG_MTD_SLRAM is not set
3421+# CONFIG_MTD_PHRAM is not set
3422+# CONFIG_MTD_MTDRAM is not set
3423+# CONFIG_MTD_BLOCK2MTD is not set
3424+
3425+#
3426+# Disk-On-Chip Device Drivers
3427+#
3428+# CONFIG_MTD_DOC2000 is not set
3429+# CONFIG_MTD_DOC2001 is not set
3430+# CONFIG_MTD_DOC2001PLUS is not set
3431+CONFIG_MTD_NAND_ECC=y
3432+# CONFIG_MTD_NAND_ECC_SMC is not set
3433+CONFIG_MTD_NAND=y
3434+# CONFIG_MTD_NAND_VERIFY_WRITE is not set
3435+# CONFIG_MTD_NAND_ECC_BCH is not set
3436+# CONFIG_MTD_SM_COMMON is not set
3437+# CONFIG_MTD_NAND_MUSEUM_IDS is not set
3438+# CONFIG_MTD_NAND_GPIO is not set
3439+CONFIG_MTD_NAND_IDS=y
3440+# CONFIG_MTD_NAND_DISKONCHIP is not set
3441+# CONFIG_MTD_NAND_NANDSIM is not set
3442+# CONFIG_MTD_NAND_GPMI_NAND is not set
3443+# CONFIG_MTD_NAND_PLATFORM is not set
3444+# CONFIG_MTD_ALAUDA is not set
3445+# CONFIG_MTD_ONENAND is not set
3446+
3447+#
3448+# LPDDR flash memory drivers
3449+#
3450+# CONFIG_MTD_LPDDR is not set
3451+CONFIG_MTD_UBI=y
3452+CONFIG_MTD_UBI_WL_THRESHOLD=4096
3453+CONFIG_MTD_UBI_BEB_RESERVE=1
3454+# CONFIG_MTD_UBI_GLUEBI is not set
3455+# CONFIG_MTD_UBI_DEBUG is not set
3456+# CONFIG_PARPORT is not set
3457+CONFIG_BLK_DEV=y
3458+# CONFIG_BLK_DEV_COW_COMMON is not set
3459+CONFIG_BLK_DEV_LOOP=y
3460+# CONFIG_BLK_DEV_CRYPTOLOOP is not set
3461+# CONFIG_BLK_DEV_DRBD is not set
3462+# CONFIG_BLK_DEV_NBD is not set
3463+# CONFIG_BLK_DEV_UB is not set
3464+# CONFIG_BLK_DEV_RAM is not set
3465+# CONFIG_CDROM_PKTCDVD is not set
3466+# CONFIG_ATA_OVER_ETH is not set
3467+# CONFIG_MG_DISK is not set
3468+# CONFIG_BLK_DEV_RBD is not set
3469+# CONFIG_SENSORS_LIS3LV02D is not set
3470+# CONFIG_MISC_DEVICES is not set
3471+CONFIG_HAVE_IDE=y
3472+# CONFIG_IDE is not set
3473+
3474+#
3475+# SCSI device support
3476+#
3477+CONFIG_SCSI_MOD=y
3478+# CONFIG_RAID_ATTRS is not set
3479+CONFIG_SCSI=y
3480+CONFIG_SCSI_DMA=y
3481+# CONFIG_SCSI_TGT is not set
3482+# CONFIG_SCSI_NETLINK is not set
3483+CONFIG_SCSI_PROC_FS=y
3484+
3485+#
3486+# SCSI support type (disk, tape, CD-ROM)
3487+#
3488+CONFIG_BLK_DEV_SD=y
3489+# CONFIG_CHR_DEV_ST is not set
3490+# CONFIG_CHR_DEV_OSST is not set
3491+# CONFIG_BLK_DEV_SR is not set
3492+# CONFIG_CHR_DEV_SG is not set
3493+# CONFIG_CHR_DEV_SCH is not set
3494+CONFIG_SCSI_MULTI_LUN=y
3495+# CONFIG_SCSI_CONSTANTS is not set
3496+# CONFIG_SCSI_LOGGING is not set
3497+# CONFIG_SCSI_SCAN_ASYNC is not set
3498+CONFIG_SCSI_WAIT_SCAN=m
3499+
3500+#
3501+# SCSI Transports
3502+#
3503+# CONFIG_SCSI_SPI_ATTRS is not set
3504+# CONFIG_SCSI_FC_ATTRS is not set
3505+# CONFIG_SCSI_ISCSI_ATTRS is not set
3506+# CONFIG_SCSI_SAS_ATTRS is not set
3507+# CONFIG_SCSI_SAS_LIBSAS is not set
3508+# CONFIG_SCSI_SRP_ATTRS is not set
3509+CONFIG_SCSI_LOWLEVEL=y
3510+# CONFIG_ISCSI_TCP is not set
3511+# CONFIG_ISCSI_BOOT_SYSFS is not set
3512+# CONFIG_LIBFC is not set
3513+# CONFIG_LIBFCOE is not set
3514+# CONFIG_SCSI_DEBUG is not set
3515+# CONFIG_SCSI_DH is not set
3516+# CONFIG_SCSI_OSD_INITIATOR is not set
3517+CONFIG_ATA=m
3518+# CONFIG_ATA_NONSTANDARD is not set
3519+CONFIG_ATA_VERBOSE_ERROR=y
3520+# CONFIG_SATA_PMP is not set
3521+
3522+#
3523+# Controllers with non-SFF native interface
3524+#
3525+CONFIG_SATA_AHCI_PLATFORM=m
3526+CONFIG_ATA_SFF=y
3527+
3528+#
3529+# SFF controllers with custom DMA interface
3530+#
3531+CONFIG_ATA_BMDMA=y
3532+
3533+#
3534+# SATA SFF controllers with BMDMA
3535+#
3536+# CONFIG_SATA_MV is not set
3537+
3538+#
3539+# PATA SFF controllers with BMDMA
3540+#
3541+# CONFIG_PATA_ARASAN_CF is not set
3542+
3543+#
3544+# PIO-only SFF controllers
3545+#
3546+# CONFIG_PATA_PLATFORM is not set
3547+
3548+#
3549+# Generic fallback / legacy drivers
3550+#
3551+# CONFIG_MD is not set
3552+# CONFIG_TARGET_CORE is not set
3553+CONFIG_NETDEVICES=y
3554+# CONFIG_DUMMY is not set
3555+# CONFIG_BONDING is not set
3556+# CONFIG_MACVLAN is not set
3557+# CONFIG_EQUALIZER is not set
3558+# CONFIG_TUN is not set
3559+# CONFIG_VETH is not set
3560+CONFIG_MII=y
3561+CONFIG_PHYLIB=y
3562+
3563+#
3564+# MII PHY device drivers
3565+#
3566+# CONFIG_MARVELL_PHY is not set
3567+# CONFIG_DAVICOM_PHY is not set
3568+# CONFIG_QSEMI_PHY is not set
3569+# CONFIG_LXT_PHY is not set
3570+# CONFIG_CICADA_PHY is not set
3571+# CONFIG_VITESSE_PHY is not set
3572+# CONFIG_SMSC_PHY is not set
3573+# CONFIG_BROADCOM_PHY is not set
3574+# CONFIG_ICPLUS_PHY is not set
3575+# CONFIG_REALTEK_PHY is not set
3576+# CONFIG_NATIONAL_PHY is not set
3577+# CONFIG_STE10XP is not set
3578+# CONFIG_LSI_ET1011C_PHY is not set
3579+CONFIG_MICREL_PHY=y
3580+# CONFIG_FIXED_PHY is not set
3581+# CONFIG_MDIO_BITBANG is not set
3582+CONFIG_NET_ETHERNET=y
3583+# CONFIG_AX88796 is not set
3584+# CONFIG_SMC91X is not set
3585+# CONFIG_DM9000 is not set
3586+# CONFIG_ENC28J60 is not set
3587+# CONFIG_ETHOC is not set
3588+# CONFIG_SMC911X is not set
3589+CONFIG_SMSC911X=y
3590+# CONFIG_SMSC911X_ARCH_HOOKS is not set
3591+# CONFIG_DNET is not set
3592+# CONFIG_IBM_NEW_EMAC_ZMII is not set
3593+# CONFIG_IBM_NEW_EMAC_RGMII is not set
3594+# CONFIG_IBM_NEW_EMAC_TAH is not set
3595+# CONFIG_IBM_NEW_EMAC_EMAC4 is not set
3596+# CONFIG_IBM_NEW_EMAC_NO_FLOW_CTRL is not set
3597+# CONFIG_IBM_NEW_EMAC_MAL_CLR_ICINTSTAT is not set
3598+# CONFIG_IBM_NEW_EMAC_MAL_COMMON_ERR is not set
3599+# CONFIG_B44 is not set
3600+# CONFIG_KS8842 is not set
3601+# CONFIG_KS8851 is not set
3602+# CONFIG_KS8851_MLL is not set
3603+CONFIG_FEC=y
3604+# CONFIG_FEC_1588 is not set
3605+# CONFIG_FTMAC100 is not set
3606+# CONFIG_NETDEV_1000 is not set
3607+# CONFIG_NETDEV_10000 is not set
3608+CONFIG_WLAN=y
3609+# CONFIG_USB_ZD1201 is not set
3610+# CONFIG_HOSTAP is not set
3611+
3612+#
3613+# Enable WiMAX (Networking options) to see the WiMAX drivers
3614+#
3615+
3616+#
3617+# USB Network Adapters
3618+#
3619+# CONFIG_USB_CATC is not set
3620+# CONFIG_USB_KAWETH is not set
3621+# CONFIG_USB_PEGASUS is not set
3622+# CONFIG_USB_RTL8150 is not set
3623+# CONFIG_USB_USBNET is not set
3624+# CONFIG_USB_HSO is not set
3625+# CONFIG_USB_IPHETH is not set
3626+# CONFIG_WAN is not set
3627+
3628+#
3629+# CAIF transport drivers
3630+#
3631+# CONFIG_PPP is not set
3632+# CONFIG_SLIP is not set
3633+# CONFIG_NETCONSOLE is not set
3634+# CONFIG_NETPOLL is not set
3635+# CONFIG_NET_POLL_CONTROLLER is not set
3636+# CONFIG_ISDN is not set
3637+# CONFIG_PHONE is not set
3638+
3639+#
3640+# Input device support
3641+#
3642+CONFIG_INPUT=y
3643+# CONFIG_INPUT_FF_MEMLESS is not set
3644+CONFIG_INPUT_POLLDEV=y
3645+# CONFIG_INPUT_SPARSEKMAP is not set
3646+
3647+#
3648+# Userland interfaces
3649+#
3650+CONFIG_INPUT_MOUSEDEV=y
3651+CONFIG_INPUT_MOUSEDEV_PSAUX=y
3652+CONFIG_INPUT_MOUSEDEV_SCREEN_X=1024
3653+CONFIG_INPUT_MOUSEDEV_SCREEN_Y=768
3654+# CONFIG_INPUT_JOYDEV is not set
3655+CONFIG_INPUT_EVDEV=y
3656+# CONFIG_INPUT_EVBUG is not set
3657+# CONFIG_INPUT_APMPOWER is not set
3658+
3659+#
3660+# Input Device Drivers
3661+#
3662+# CONFIG_INPUT_KEYBOARD is not set
3663+# CONFIG_INPUT_MOUSE is not set
3664+# CONFIG_INPUT_JOYSTICK is not set
3665+# CONFIG_INPUT_TABLET is not set
3666+CONFIG_INPUT_TOUCHSCREEN=y
3667+# CONFIG_TOUCHSCREEN_ADS7846 is not set
3668+# CONFIG_TOUCHSCREEN_AD7877 is not set
3669+# CONFIG_TOUCHSCREEN_AD7879 is not set
3670+# CONFIG_TOUCHSCREEN_ATMEL_MXT is not set
3671+# CONFIG_TOUCHSCREEN_BU21013 is not set
3672+# CONFIG_TOUCHSCREEN_CY8CTMG110 is not set
3673+# CONFIG_TOUCHSCREEN_DYNAPRO is not set
3674+# CONFIG_TOUCHSCREEN_HAMPSHIRE is not set
3675+# CONFIG_TOUCHSCREEN_EETI is not set
3676+CONFIG_TOUCHSCREEN_EGALAX=y
3677+# CONFIG_TOUCHSCREEN_FUJITSU is not set
3678+# CONFIG_TOUCHSCREEN_GUNZE is not set
3679+# CONFIG_TOUCHSCREEN_ELO is not set
3680+# CONFIG_TOUCHSCREEN_WACOM_W8001 is not set
3681+# CONFIG_TOUCHSCREEN_MAX11801 is not set
3682+# CONFIG_TOUCHSCREEN_MCS5000 is not set
3683+# CONFIG_TOUCHSCREEN_MTOUCH is not set
3684+# CONFIG_TOUCHSCREEN_INEXIO is not set
3685+# CONFIG_TOUCHSCREEN_MK712 is not set
3686+# CONFIG_TOUCHSCREEN_PENMOUNT is not set
3687+# CONFIG_TOUCHSCREEN_TOUCHRIGHT is not set
3688+# CONFIG_TOUCHSCREEN_TOUCHWIN is not set
3689+# CONFIG_TOUCHSCREEN_WM97XX is not set
3690+# CONFIG_TOUCHSCREEN_USB_COMPOSITE is not set
3691+# CONFIG_TOUCHSCREEN_TOUCHIT213 is not set
3692+# CONFIG_TOUCHSCREEN_TSC2005 is not set
3693+# CONFIG_TOUCHSCREEN_TSC2007 is not set
3694+# CONFIG_TOUCHSCREEN_W90X900 is not set
3695+# CONFIG_TOUCHSCREEN_ST1232 is not set
3696+# CONFIG_TOUCHSCREEN_P1003 is not set
3697+# CONFIG_TOUCHSCREEN_TPS6507X is not set
3698+CONFIG_INPUT_MISC=y
3699+# CONFIG_INPUT_AD714X is not set
3700+# CONFIG_INPUT_ATI_REMOTE is not set
3701+# CONFIG_INPUT_ATI_REMOTE2 is not set
3702+# CONFIG_INPUT_KEYSPAN_REMOTE is not set
3703+# CONFIG_INPUT_POWERMATE is not set
3704+# CONFIG_INPUT_YEALINK is not set
3705+# CONFIG_INPUT_CM109 is not set
3706+CONFIG_INPUT_UINPUT=y
3707+# CONFIG_INPUT_PCF8574 is not set
3708+# CONFIG_INPUT_PWM_BEEPER is not set
3709+# CONFIG_INPUT_GPIO_ROTARY_ENCODER is not set
3710+# CONFIG_INPUT_ADXL34X is not set
3711+# CONFIG_INPUT_CMA3000 is not set
3712+# CONFIG_INPUT_ISL29023 is not set
3713+
3714+#
3715+# Hardware I/O ports
3716+#
3717+# CONFIG_SERIO is not set
3718+# CONFIG_GAMEPORT is not set
3719+
3720+#
3721+# Character devices
3722+#
3723+CONFIG_VT=y
3724+CONFIG_CONSOLE_TRANSLATIONS=y
3725+CONFIG_VT_CONSOLE=y
3726+CONFIG_HW_CONSOLE=y
3727+# CONFIG_VT_HW_CONSOLE_BINDING is not set
3728+CONFIG_UNIX98_PTYS=y
3729+# CONFIG_DEVPTS_MULTIPLE_INSTANCES is not set
3730+CONFIG_LEGACY_PTYS=y
3731+CONFIG_LEGACY_PTY_COUNT=256
3732+# CONFIG_SERIAL_NONSTANDARD is not set
3733+# CONFIG_N_GSM is not set
3734+# CONFIG_TRACE_SINK is not set
3735+CONFIG_DEVKMEM=y
3736+
3737+#
3738+# Serial drivers
3739+#
3740+# CONFIG_SERIAL_8250 is not set
3741+
3742+#
3743+# Non-8250 serial port support
3744+#
3745+# CONFIG_SERIAL_MAX3100 is not set
3746+# CONFIG_SERIAL_MAX3107 is not set
3747+CONFIG_SERIAL_IMX=y
3748+CONFIG_SERIAL_IMX_CONSOLE=y
3749+CONFIG_SERIAL_CORE=y
3750+CONFIG_SERIAL_CORE_CONSOLE=y
3751+# CONFIG_SERIAL_TIMBERDALE is not set
3752+# CONFIG_SERIAL_ALTERA_JTAGUART is not set
3753+# CONFIG_SERIAL_ALTERA_UART is not set
3754+# CONFIG_SERIAL_IFX6X60 is not set
3755+# CONFIG_SERIAL_XILINX_PS_UART is not set
3756+# CONFIG_TTY_PRINTK is not set
3757+CONFIG_FSL_OTP=y
3758+# CONFIG_HVC_DCC is not set
3759+# CONFIG_IPMI_HANDLER is not set
3760+CONFIG_HW_RANDOM=y
3761+# CONFIG_HW_RANDOM_TIMERIOMEM is not set
3762+# CONFIG_R3964 is not set
3763+# CONFIG_RAW_DRIVER is not set
3764+# CONFIG_TCG_TPM is not set
3765+# CONFIG_RAMOOPS is not set
3766+CONFIG_MXS_VIIM=y
3767+CONFIG_I2C=y
3768+CONFIG_I2C_BOARDINFO=y
3769+CONFIG_I2C_COMPAT=y
3770+CONFIG_I2C_CHARDEV=y
3771+# CONFIG_I2C_MUX is not set
3772+CONFIG_I2C_HELPER_AUTO=y
3773+
3774+#
3775+# I2C Hardware Bus support
3776+#
3777+
3778+#
3779+# I2C system bus drivers (mostly embedded / system-on-chip)
3780+#
3781+# CONFIG_I2C_DESIGNWARE is not set
3782+# CONFIG_I2C_GPIO is not set
3783+CONFIG_I2C_IMX=y
3784+# CONFIG_I2C_OCORES is not set
3785+# CONFIG_I2C_PCA_PLATFORM is not set
3786+# CONFIG_I2C_PXA_PCI is not set
3787+# CONFIG_I2C_SIMTEC is not set
3788+# CONFIG_I2C_XILINX is not set
3789+
3790+#
3791+# External I2C/SMBus adapter drivers
3792+#
3793+# CONFIG_I2C_DIOLAN_U2C is not set
3794+# CONFIG_I2C_PARPORT_LIGHT is not set
3795+# CONFIG_I2C_TAOS_EVM is not set
3796+# CONFIG_I2C_TINY_USB is not set
3797+
3798+#
3799+# Other I2C/SMBus bus drivers
3800+#
3801+# CONFIG_I2C_STUB is not set
3802+# CONFIG_I2C_DEBUG_CORE is not set
3803+# CONFIG_I2C_DEBUG_ALGO is not set
3804+# CONFIG_I2C_DEBUG_BUS is not set
3805+CONFIG_SPI=y
3806+CONFIG_SPI_MASTER=y
3807+
3808+#
3809+# SPI Master Controller Drivers
3810+#
3811+# CONFIG_SPI_ALTERA is not set
3812+CONFIG_SPI_BITBANG=y
3813+# CONFIG_SPI_GPIO is not set
3814+CONFIG_SPI_IMX_VER_2_3=y
3815+CONFIG_SPI_IMX=y
3816+# CONFIG_SPI_OC_TINY is not set
3817+# CONFIG_SPI_PXA2XX_PCI is not set
3818+# CONFIG_SPI_XILINX is not set
3819+# CONFIG_SPI_DESIGNWARE is not set
3820+
3821+#
3822+# SPI Protocol Masters
3823+#
3824+# CONFIG_SPI_SPIDEV is not set
3825+# CONFIG_SPI_TLE62X0 is not set
3826+
3827+#
3828+# PPS support
3829+#
3830+# CONFIG_PPS is not set
3831+
3832+#
3833+# PPS generators support
3834+#
3835+
3836+#
3837+# PTP clock support
3838+#
3839+
3840+#
3841+# Enable Device Drivers -> PPS to see the PTP clock options.
3842+#
3843+CONFIG_ARCH_REQUIRE_GPIOLIB=y
3844+CONFIG_GPIOLIB=y
3845+# CONFIG_GPIO_SYSFS is not set
3846+
3847+#
3848+# Memory mapped GPIO drivers:
3849+#
3850+# CONFIG_GPIO_BASIC_MMIO is not set
3851+# CONFIG_GPIO_IT8761E is not set
3852+
3853+#
3854+# I2C GPIO expanders:
3855+#
3856+# CONFIG_GPIO_MAX7300 is not set
3857+# CONFIG_GPIO_MAX732X is not set
3858+# CONFIG_GPIO_PCA953X_IRQ is not set
3859+# CONFIG_GPIO_PCF857X is not set
3860+# CONFIG_GPIO_SX150X is not set
3861+# CONFIG_GPIO_ADP5588 is not set
3862+
3863+#
3864+# PCI GPIO expanders:
3865+#
3866+
3867+#
3868+# SPI GPIO expanders:
3869+#
3870+# CONFIG_GPIO_MAX7301 is not set
3871+# CONFIG_GPIO_MCP23S08 is not set
3872+# CONFIG_GPIO_MC33880 is not set
3873+# CONFIG_GPIO_74X164 is not set
3874+
3875+#
3876+# AC97 GPIO expanders:
3877+#
3878+
3879+#
3880+# MODULbus GPIO expanders:
3881+#
3882+# CONFIG_W1 is not set
3883+# CONFIG_POWER_SUPPLY is not set
3884+# CONFIG_HWMON is not set
3885+CONFIG_THERMAL=y
3886+CONFIG_WATCHDOG=y
3887+CONFIG_WATCHDOG_NOWAYOUT=y
3888+
3889+#
3890+# Watchdog Device Drivers
3891+#
3892+# CONFIG_SOFT_WATCHDOG is not set
3893+# CONFIG_MAX63XX_WATCHDOG is not set
3894+CONFIG_IMX2_WDT=y
3895+
3896+#
3897+# USB-based Watchdog Cards
3898+#
3899+# CONFIG_USBPCWATCHDOG is not set
3900+CONFIG_SSB_POSSIBLE=y
3901+
3902+#
3903+# Sonics Silicon Backplane
3904+#
3905+# CONFIG_SSB is not set
3906+CONFIG_BCMA_POSSIBLE=y
3907+
3908+#
3909+# Broadcom specific AMBA
3910+#
3911+# CONFIG_BCMA is not set
3912+CONFIG_MFD_SUPPORT=y
3913+CONFIG_MFD_CORE=y
3914+# CONFIG_MFD_88PM860X is not set
3915+# CONFIG_MFD_SM501 is not set
3916+# CONFIG_MFD_ASIC3 is not set
3917+# CONFIG_HTC_EGPIO is not set
3918+# CONFIG_HTC_PASIC3 is not set
3919+# CONFIG_HTC_I2CPLD is not set
3920+# CONFIG_UCB1400_CORE is not set
3921+# CONFIG_TPS6105X is not set
3922+# CONFIG_TPS65010 is not set
3923+# CONFIG_TPS6507X is not set
3924+# CONFIG_MFD_TPS6586X is not set
3925+# CONFIG_TWL4030_CORE is not set
3926+# CONFIG_MFD_STMPE is not set
3927+# CONFIG_MFD_TC3589X is not set
3928+# CONFIG_MFD_TMIO is not set
3929+# CONFIG_MFD_T7L66XB is not set
3930+# CONFIG_MFD_TC6387XB is not set
3931+# CONFIG_MFD_TC6393XB is not set
3932+# CONFIG_PMIC_DA903X is not set
3933+# CONFIG_PMIC_ADP5520 is not set
3934+# CONFIG_MFD_MAX8925 is not set
3935+# CONFIG_MFD_MAX8997 is not set
3936+# CONFIG_MFD_MAX8998 is not set
3937+# CONFIG_MFD_WM8400 is not set
3938+# CONFIG_MFD_WM831X_I2C is not set
3939+# CONFIG_MFD_WM831X_SPI is not set
3940+# CONFIG_MFD_WM8350_I2C is not set
3941+# CONFIG_MFD_WM8994 is not set
3942+# CONFIG_MFD_PCF50633 is not set
3943+# CONFIG_PMIC_DIALOG is not set
3944+# CONFIG_MFD_MC_PMIC is not set
3945+# CONFIG_MFD_MC34708 is not set
3946+CONFIG_MFD_PFUZE=y
3947+# CONFIG_MFD_MC13XXX is not set
3948+# CONFIG_ABX500_CORE is not set
3949+# CONFIG_EZX_PCAP is not set
3950+# CONFIG_MFD_WL1273_CORE is not set
3951+# CONFIG_MFD_TPS65910 is not set
3952+# CONFIG_MFD_MAX17135 is not set
3953+CONFIG_MFD_MXC_HDMI=y
3954+CONFIG_REGULATOR=y
3955+# CONFIG_REGULATOR_DEBUG is not set
3956+# CONFIG_REGULATOR_DUMMY is not set
3957+CONFIG_REGULATOR_FIXED_VOLTAGE=y
3958+# CONFIG_REGULATOR_VIRTUAL_CONSUMER is not set
3959+# CONFIG_REGULATOR_USERSPACE_CONSUMER is not set
3960+# CONFIG_REGULATOR_BQ24022 is not set
3961+# CONFIG_REGULATOR_MAX1586 is not set
3962+# CONFIG_REGULATOR_MAX8649 is not set
3963+# CONFIG_REGULATOR_MAX8660 is not set
3964+# CONFIG_REGULATOR_MAX8952 is not set
3965+# CONFIG_REGULATOR_LP3971 is not set
3966+# CONFIG_REGULATOR_LP3972 is not set
3967+# CONFIG_REGULATOR_MC34708 is not set
3968+CONFIG_REGULATOR_PFUZE100=y
3969+# CONFIG_REGULATOR_TPS65023 is not set
3970+# CONFIG_REGULATOR_TPS6507X is not set
3971+# CONFIG_REGULATOR_ISL6271A is not set
3972+# CONFIG_REGULATOR_AD5398 is not set
3973+CONFIG_REGULATOR_ANATOP=y
3974+# CONFIG_REGULATOR_TPS6524X is not set
3975+# CONFIG_REGULATOR_MAX17135 is not set
3976+CONFIG_MEDIA_SUPPORT=y
3977+
3978+#
3979+# Multimedia core support
3980+#
3981+# CONFIG_MEDIA_CONTROLLER is not set
3982+CONFIG_VIDEO_DEV=y
3983+CONFIG_VIDEO_V4L2_COMMON=y
3984+# CONFIG_DVB_CORE is not set
3985+CONFIG_VIDEO_MEDIA=y
3986+
3987+#
3988+# Multimedia drivers
3989+#
3990+# CONFIG_RC_CORE is not set
3991+# CONFIG_MEDIA_ATTACH is not set
3992+CONFIG_MEDIA_TUNER=y
3993+# CONFIG_MEDIA_TUNER_CUSTOMISE is not set
3994+CONFIG_MEDIA_TUNER_SIMPLE=y
3995+CONFIG_MEDIA_TUNER_TDA8290=y
3996+CONFIG_MEDIA_TUNER_TDA827X=y
3997+CONFIG_MEDIA_TUNER_TDA18271=y
3998+CONFIG_MEDIA_TUNER_TDA9887=y
3999+CONFIG_MEDIA_TUNER_TEA5761=y
4000+CONFIG_MEDIA_TUNER_TEA5767=y
4001+CONFIG_MEDIA_TUNER_MT20XX=y
4002+CONFIG_MEDIA_TUNER_XC2028=y
4003+CONFIG_MEDIA_TUNER_XC5000=y
4004+CONFIG_MEDIA_TUNER_MC44S803=y
4005+CONFIG_VIDEO_V4L2=y
4006+CONFIG_VIDEOBUF_GEN=y
4007+CONFIG_VIDEOBUF_DMA_CONTIG=y
4008+CONFIG_VIDEO_CAPTURE_DRIVERS=y
4009+# CONFIG_VIDEO_ADV_DEBUG is not set
4010+# CONFIG_VIDEO_FIXED_MINOR_RANGES is not set
4011+# CONFIG_VIDEO_HELPER_CHIPS_AUTO is not set
4012+
4013+#
4014+# Encoders, decoders, sensors and other helper chips
4015+#
4016+
4017+#
4018+# Audio decoders, processors and mixers
4019+#
4020+# CONFIG_VIDEO_TVAUDIO is not set
4021+# CONFIG_VIDEO_TDA7432 is not set
4022+# CONFIG_VIDEO_TDA9840 is not set
4023+# CONFIG_VIDEO_TEA6415C is not set
4024+# CONFIG_VIDEO_TEA6420 is not set
4025+# CONFIG_VIDEO_MSP3400 is not set
4026+# CONFIG_VIDEO_CS5345 is not set
4027+# CONFIG_VIDEO_CS53L32A is not set
4028+# CONFIG_VIDEO_TLV320AIC23B is not set
4029+# CONFIG_VIDEO_WM8775 is not set
4030+# CONFIG_VIDEO_WM8739 is not set
4031+# CONFIG_VIDEO_VP27SMPX is not set
4032+
4033+#
4034+# RDS decoders
4035+#
4036+# CONFIG_VIDEO_SAA6588 is not set
4037+
4038+#
4039+# Video decoders
4040+#
4041+# CONFIG_VIDEO_ADV7180 is not set
4042+# CONFIG_VIDEO_BT819 is not set
4043+# CONFIG_VIDEO_BT856 is not set
4044+# CONFIG_VIDEO_BT866 is not set
4045+# CONFIG_VIDEO_KS0127 is not set
4046+# CONFIG_VIDEO_SAA7110 is not set
4047+# CONFIG_VIDEO_SAA711X is not set
4048+# CONFIG_VIDEO_SAA7191 is not set
4049+# CONFIG_VIDEO_TVP514X is not set
4050+# CONFIG_VIDEO_TVP5150 is not set
4051+# CONFIG_VIDEO_TVP7002 is not set
4052+# CONFIG_VIDEO_VPX3220 is not set
4053+
4054+#
4055+# Video and audio decoders
4056+#
4057+# CONFIG_VIDEO_SAA717X is not set
4058+# CONFIG_VIDEO_CX25840 is not set
4059+
4060+#
4061+# MPEG video encoders
4062+#
4063+# CONFIG_VIDEO_CX2341X is not set
4064+
4065+#
4066+# Video encoders
4067+#
4068+# CONFIG_VIDEO_SAA7127 is not set
4069+# CONFIG_VIDEO_SAA7185 is not set
4070+# CONFIG_VIDEO_ADV7170 is not set
4071+# CONFIG_VIDEO_ADV7175 is not set
4072+# CONFIG_VIDEO_ADV7343 is not set
4073+# CONFIG_VIDEO_AK881X is not set
4074+
4075+#
4076+# Camera sensor devices
4077+#
4078+# CONFIG_VIDEO_OV7670 is not set
4079+# CONFIG_VIDEO_MT9V011 is not set
4080+# CONFIG_VIDEO_TCM825X is not set
4081+
4082+#
4083+# Video improvement chips
4084+#
4085+# CONFIG_VIDEO_UPD64031A is not set
4086+# CONFIG_VIDEO_UPD64083 is not set
4087+
4088+#
4089+# Miscelaneous helper chips
4090+#
4091+# CONFIG_VIDEO_THS7303 is not set
4092+# CONFIG_VIDEO_M52790 is not set
4093+# CONFIG_VIDEO_VIVI is not set
4094+CONFIG_VIDEO_MXC_CAMERA=m
4095+
4096+#
4097+# MXC Camera/V4L2 PRP Features support
4098+#
4099+CONFIG_VIDEO_MXC_IPU_CAMERA=y
4100+# CONFIG_VIDEO_MXC_CSI_CAMERA is not set
4101+# CONFIG_MXC_CAMERA_MICRON111 is not set
4102+# CONFIG_MXC_CAMERA_OV2640 is not set
4103+CONFIG_MXC_CAMERA_OV3640=m
4104+CONFIG_MXC_CAMERA_OV5640=m
4105+# CONFIG_MXC_CAMERA_OV5640_MIPI is not set
4106+# CONFIG_MXC_CAMERA_OV8820_MIPI is not set
4107+CONFIG_MXC_CAMERA_OV5642=m
4108+# CONFIG_MXC_TVIN_ADV7180 is not set
4109+CONFIG_MXC_CAMERA_SENSOR_CLK=m
4110+CONFIG_MXC_IPU_PRP_VF_SDC=m
4111+CONFIG_MXC_IPU_PRP_ENC=m
4112+CONFIG_MXC_IPU_CSI_ENC=m
4113+CONFIG_VIDEO_MXC_OUTPUT=y
4114+CONFIG_VIDEO_MXC_IPU_OUTPUT=y
4115+# CONFIG_VIDEO_MXC_IPUV1_WVGA_OUTPUT is not set
4116+# CONFIG_VIDEO_MXC_OPL is not set
4117+# CONFIG_VIDEO_CPIA2 is not set
4118+# CONFIG_VIDEO_TIMBERDALE is not set
4119+# CONFIG_VIDEO_SR030PC30 is not set
4120+# CONFIG_VIDEO_NOON010PC30 is not set
4121+# CONFIG_SOC_CAMERA is not set
4122+# CONFIG_V4L_USB_DRIVERS is not set
4123+# CONFIG_V4L_MEM2MEM_DRIVERS is not set
4124+# CONFIG_RADIO_ADAPTERS is not set
4125+
4126+#
4127+# Graphics support
4128+#
4129+# CONFIG_DRM is not set
4130+# CONFIG_VGASTATE is not set
4131+# CONFIG_VIDEO_OUTPUT_CONTROL is not set
4132+CONFIG_FB=y
4133+# CONFIG_FIRMWARE_EDID is not set
4134+# CONFIG_FB_DDC is not set
4135+# CONFIG_FB_BOOT_VESA_SUPPORT is not set
4136+CONFIG_FB_CFB_FILLRECT=y
4137+CONFIG_FB_CFB_COPYAREA=y
4138+CONFIG_FB_CFB_IMAGEBLIT=y
4139+# CONFIG_FB_CFB_REV_PIXELS_IN_BYTE is not set
4140+# CONFIG_FB_SYS_FILLRECT is not set
4141+# CONFIG_FB_SYS_COPYAREA is not set
4142+# CONFIG_FB_SYS_IMAGEBLIT is not set
4143+# CONFIG_FB_FOREIGN_ENDIAN is not set
4144+# CONFIG_FB_SYS_FOPS is not set
4145+# CONFIG_FB_WMT_GE_ROPS is not set
4146+# CONFIG_FB_SVGALIB is not set
4147+# CONFIG_FB_MACMODES is not set
4148+# CONFIG_FB_BACKLIGHT is not set
4149+CONFIG_FB_MODE_HELPERS=y
4150+# CONFIG_FB_TILEBLITTING is not set
4151+
4152+#
4153+# Frame buffer hardware drivers
4154+#
4155+# CONFIG_FB_UVESA is not set
4156+# CONFIG_FB_S1D13XXX is not set
4157+# CONFIG_FB_TMIO is not set
4158+# CONFIG_FB_UDL is not set
4159+# CONFIG_FB_VIRTUAL is not set
4160+# CONFIG_FB_METRONOME is not set
4161+# CONFIG_FB_BROADSHEET is not set
4162+# CONFIG_BACKLIGHT_LCD_SUPPORT is not set
4163+
4164+#
4165+# Display device support
4166+#
4167+# CONFIG_DISPLAY_SUPPORT is not set
4168+CONFIG_FB_MXC=y
4169+CONFIG_FB_MXC_EDID=y
4170+CONFIG_FB_MXC_SYNC_PANEL=y
4171+# CONFIG_FB_MXC_EPSON_VGA_SYNC_PANEL is not set
4172+CONFIG_FB_MXC_LDB=y
4173+# CONFIG_FB_MXC_MIPI_DSI is not set
4174+# CONFIG_FB_MXC_CLAA_WVGA_SYNC_PANEL is not set
4175+# CONFIG_FB_MXC_SEIKO_WVGA_SYNC_PANEL is not set
4176+# CONFIG_FB_MXC_SII902X is not set
4177+# CONFIG_FB_MXC_CH7026 is not set
4178+# CONFIG_FB_MXC_TVOUT_CH7024 is not set
4179+# CONFIG_FB_MXC_ASYNC_PANEL is not set
4180+# CONFIG_FB_MXC_EINK_PANEL is not set
4181+# CONFIG_FB_MXC_ELCDIF_FB is not set
4182+CONFIG_FB_MXC_HDMI=y
4183+
4184+#
4185+# Console display driver support
4186+#
4187+CONFIG_DUMMY_CONSOLE=y
4188+CONFIG_FRAMEBUFFER_CONSOLE=y
4189+# CONFIG_FRAMEBUFFER_CONSOLE_DETECT_PRIMARY is not set
4190+# CONFIG_FRAMEBUFFER_CONSOLE_ROTATION is not set
4191+CONFIG_FONTS=y
4192+# CONFIG_FONT_8x8 is not set
4193+CONFIG_FONT_8x16=y
4194+# CONFIG_FONT_6x11 is not set
4195+# CONFIG_FONT_7x14 is not set
4196+# CONFIG_FONT_PEARL_8x8 is not set
4197+# CONFIG_FONT_ACORN_8x8 is not set
4198+# CONFIG_FONT_MINI_4x6 is not set
4199+# CONFIG_FONT_SUN8x16 is not set
4200+# CONFIG_FONT_SUN12x22 is not set
4201+# CONFIG_FONT_10x18 is not set
4202+CONFIG_LOGO=y
4203+CONFIG_LOGO_LINUX_MONO=y
4204+CONFIG_LOGO_LINUX_VGA16=y
4205+CONFIG_LOGO_LINUX_CLUT224=y
4206+CONFIG_SOUND=y
4207+# CONFIG_SOUND_OSS_CORE is not set
4208+CONFIG_SND=y
4209+CONFIG_SND_TIMER=y
4210+CONFIG_SND_PCM=y
4211+CONFIG_SND_JACK=y
4212+# CONFIG_SND_SEQUENCER is not set
4213+# CONFIG_SND_MIXER_OSS is not set
4214+# CONFIG_SND_PCM_OSS is not set
4215+# CONFIG_SND_HRTIMER is not set
4216+# CONFIG_SND_DYNAMIC_MINORS is not set
4217+CONFIG_SND_SUPPORT_OLD_API=y
4218+CONFIG_SND_VERBOSE_PROCFS=y
4219+# CONFIG_SND_VERBOSE_PRINTK is not set
4220+# CONFIG_SND_DEBUG is not set
4221+# CONFIG_SND_RAWMIDI_SEQ is not set
4222+# CONFIG_SND_OPL3_LIB_SEQ is not set
4223+# CONFIG_SND_OPL4_LIB_SEQ is not set
4224+# CONFIG_SND_SBAWE_SEQ is not set
4225+# CONFIG_SND_EMU10K1_SEQ is not set
4226+CONFIG_SND_DRIVERS=y
4227+# CONFIG_SND_DUMMY is not set
4228+# CONFIG_SND_ALOOP is not set
4229+# CONFIG_SND_MTPAV is not set
4230+# CONFIG_SND_SERIAL_U16550 is not set
4231+# CONFIG_SND_MPU401 is not set
4232+CONFIG_SND_ARM=y
4233+CONFIG_SND_SPI=y
4234+CONFIG_SND_USB=y
4235+# CONFIG_SND_USB_AUDIO is not set
4236+# CONFIG_SND_USB_UA101 is not set
4237+# CONFIG_SND_USB_CAIAQ is not set
4238+# CONFIG_SND_USB_6FIRE is not set
4239+CONFIG_SND_SOC=y
4240+# CONFIG_SND_SOC_CACHE_LZO is not set
4241+CONFIG_SND_SOC_AC97_BUS=y
4242+CONFIG_SND_IMX_SOC=y
4243+CONFIG_SND_MXC_SOC_MX2=y
4244+# CONFIG_SND_SOC_IMX_SGTL5000 is not set
4245+CONFIG_SND_SOC_IMX_CS42888=y
4246+# CONFIG_SND_SOC_IMX_SPDIF is not set
4247+# CONFIG_SND_SOC_IMX_HDMI is not set
4248+CONFIG_SND_SOC_I2C_AND_SPI=y
4249+# CONFIG_SND_SOC_ALL_CODECS is not set
4250+CONFIG_SND_SOC_CS42888=y
4251+# CONFIG_SOUND_PRIME is not set
4252+CONFIG_AC97_BUS=y
4253+CONFIG_HID_SUPPORT=y
4254+CONFIG_HID=y
4255+# CONFIG_HIDRAW is not set
4256+
4257+#
4258+# USB Input Devices
4259+#
4260+CONFIG_USB_HID=y
4261+# CONFIG_HID_PID is not set
4262+# CONFIG_USB_HIDDEV is not set
4263+
4264+#
4265+# Special HID drivers
4266+#
4267+CONFIG_HID_A4TECH=m
4268+# CONFIG_HID_ACRUX is not set
4269+CONFIG_HID_APPLE=m
4270+CONFIG_HID_BELKIN=m
4271+CONFIG_HID_CHERRY=m
4272+CONFIG_HID_CHICONY=m
4273+# CONFIG_HID_PRODIKEYS is not set
4274+CONFIG_HID_CYPRESS=m
4275+# CONFIG_HID_DRAGONRISE is not set
4276+# CONFIG_HID_EMS_FF is not set
4277+# CONFIG_HID_ELECOM is not set
4278+CONFIG_HID_EZKEY=m
4279+# CONFIG_HID_KEYTOUCH is not set
4280+# CONFIG_HID_KYE is not set
4281+# CONFIG_HID_UCLOGIC is not set
4282+# CONFIG_HID_WALTOP is not set
4283+CONFIG_HID_GYRATION=m
4284+# CONFIG_HID_TWINHAN is not set
4285+# CONFIG_HID_KENSINGTON is not set
4286+# CONFIG_HID_LCPOWER is not set
4287+CONFIG_HID_LOGITECH=m
4288+# CONFIG_LOGITECH_FF is not set
4289+# CONFIG_LOGIRUMBLEPAD2_FF is not set
4290+# CONFIG_LOGIG940_FF is not set
4291+# CONFIG_LOGIWII_FF is not set
4292+# CONFIG_HID_MAGICMOUSE is not set
4293+CONFIG_HID_MICROSOFT=m
4294+CONFIG_HID_MONTEREY=m
4295+# CONFIG_HID_MULTITOUCH is not set
4296+# CONFIG_HID_NTRIG is not set
4297+# CONFIG_HID_ORTEK is not set
4298+CONFIG_HID_PANTHERLORD=m
4299+# CONFIG_PANTHERLORD_FF is not set
4300+CONFIG_HID_PETALYNX=m
4301+# CONFIG_HID_PICOLCD is not set
4302+# CONFIG_HID_QUANTA is not set
4303+# CONFIG_HID_ROCCAT is not set
4304+# CONFIG_HID_ROCCAT_ARVO is not set
4305+# CONFIG_HID_ROCCAT_KONE is not set
4306+# CONFIG_HID_ROCCAT_KONEPLUS is not set
4307+# CONFIG_HID_ROCCAT_KOVAPLUS is not set
4308+# CONFIG_HID_ROCCAT_PYRA is not set
4309+CONFIG_HID_SAMSUNG=m
4310+CONFIG_HID_SONY=m
4311+CONFIG_HID_SUNPLUS=m
4312+# CONFIG_HID_GREENASIA is not set
4313+# CONFIG_HID_SMARTJOYPLUS is not set
4314+# CONFIG_HID_TOPSEED is not set
4315+# CONFIG_HID_THRUSTMASTER is not set
4316+# CONFIG_HID_WACOM is not set
4317+# CONFIG_HID_ZEROPLUS is not set
4318+# CONFIG_HID_ZYDACRON is not set
4319+CONFIG_USB_SUPPORT=y
4320+CONFIG_USB_ARCH_HAS_HCD=y
4321+# CONFIG_USB_ARCH_HAS_OHCI is not set
4322+CONFIG_USB_ARCH_HAS_EHCI=y
4323+CONFIG_USB=y
4324+# CONFIG_USB_DEBUG is not set
4325+# CONFIG_USB_ANNOUNCE_NEW_DEVICES is not set
4326+
4327+#
4328+# Miscellaneous USB options
4329+#
4330+# CONFIG_USB_DEVICEFS is not set
4331+# CONFIG_USB_DEVICE_CLASS is not set
4332+# CONFIG_USB_DYNAMIC_MINORS is not set
4333+CONFIG_USB_SUSPEND=y
4334+# CONFIG_USB_OTG is not set
4335+# CONFIG_USB_OTG_WHITELIST is not set
4336+# CONFIG_USB_OTG_BLACKLIST_HUB is not set
4337+# CONFIG_USB_MON is not set
4338+# CONFIG_USB_WUSB is not set
4339+# CONFIG_USB_WUSB_CBAF is not set
4340+
4341+#
4342+# USB Host Controller Drivers
4343+#
4344+# CONFIG_USB_C67X00_HCD is not set
4345+# CONFIG_USB_EHCI_HCD is not set
4346+# CONFIG_USB_OXU210HP_HCD is not set
4347+# CONFIG_USB_ISP116X_HCD is not set
4348+# CONFIG_USB_ISP1760_HCD is not set
4349+# CONFIG_USB_ISP1362_HCD is not set
4350+# CONFIG_USB_SL811_HCD is not set
4351+# CONFIG_USB_R8A66597_HCD is not set
4352+# CONFIG_USB_HWA_HCD is not set
4353+# CONFIG_USB_MUSB_HDRC is not set
4354+
4355+#
4356+# USB Device Class drivers
4357+#
4358+# CONFIG_USB_ACM is not set
4359+# CONFIG_USB_PRINTER is not set
4360+# CONFIG_USB_WDM is not set
4361+# CONFIG_USB_TMC is not set
4362+
4363+#
4364+# NOTE: USB_STORAGE depends on SCSI but BLK_DEV_SD may
4365+#
4366+
4367+#
4368+# also be needed; see USB_STORAGE Help for more info
4369+#
4370+CONFIG_USB_STORAGE=y
4371+# CONFIG_USB_STORAGE_DEBUG is not set
4372+# CONFIG_USB_STORAGE_REALTEK is not set
4373+# CONFIG_USB_STORAGE_DATAFAB is not set
4374+# CONFIG_USB_STORAGE_FREECOM is not set
4375+# CONFIG_USB_STORAGE_ISD200 is not set
4376+# CONFIG_USB_STORAGE_USBAT is not set
4377+# CONFIG_USB_STORAGE_SDDR09 is not set
4378+# CONFIG_USB_STORAGE_SDDR55 is not set
4379+# CONFIG_USB_STORAGE_JUMPSHOT is not set
4380+# CONFIG_USB_STORAGE_ALAUDA is not set
4381+# CONFIG_USB_STORAGE_ONETOUCH is not set
4382+# CONFIG_USB_STORAGE_KARMA is not set
4383+# CONFIG_USB_STORAGE_CYPRESS_ATACB is not set
4384+# CONFIG_USB_STORAGE_ENE_UB6250 is not set
4385+# CONFIG_USB_UAS is not set
4386+# CONFIG_USB_LIBUSUAL is not set
4387+
4388+#
4389+# USB Imaging devices
4390+#
4391+# CONFIG_USB_MDC800 is not set
4392+# CONFIG_USB_MICROTEK is not set
4393+
4394+#
4395+# USB port drivers
4396+#
4397+# CONFIG_USB_SERIAL is not set
4398+
4399+#
4400+# USB Miscellaneous drivers
4401+#
4402+# CONFIG_USB_EMI62 is not set
4403+# CONFIG_USB_EMI26 is not set
4404+# CONFIG_USB_ADUTUX is not set
4405+# CONFIG_USB_SEVSEG is not set
4406+# CONFIG_USB_RIO500 is not set
4407+# CONFIG_USB_LEGOTOWER is not set
4408+# CONFIG_USB_LCD is not set
4409+# CONFIG_USB_LED is not set
4410+# CONFIG_USB_CYPRESS_CY7C63 is not set
4411+# CONFIG_USB_CYTHERM is not set
4412+# CONFIG_USB_IDMOUSE is not set
4413+# CONFIG_USB_FTDI_ELAN is not set
4414+# CONFIG_USB_APPLEDISPLAY is not set
4415+# CONFIG_USB_LD is not set
4416+# CONFIG_USB_TRANCEVIBRATOR is not set
4417+# CONFIG_USB_IOWARRIOR is not set
4418+# CONFIG_USB_TEST is not set
4419+# CONFIG_USB_ISIGHTFW is not set
4420+# CONFIG_USB_YUREX is not set
4421+CONFIG_USB_GADGET=y
4422+# CONFIG_USB_GADGET_DEBUG_FILES is not set
4423+# CONFIG_USB_GADGET_DEBUG_FS is not set
4424+CONFIG_USB_GADGET_VBUS_DRAW=2
4425+CONFIG_USB_GADGET_SELECTED=y
4426+CONFIG_USB_GADGET_ARC=y
4427+CONFIG_USB_ARC=y
4428+# CONFIG_USB_GADGET_FSL_USB2 is not set
4429+# CONFIG_USB_GADGET_FUSB300 is not set
4430+# CONFIG_USB_GADGET_R8A66597 is not set
4431+# CONFIG_USB_GADGET_PXA_U2O is not set
4432+# CONFIG_USB_GADGET_M66592 is not set
4433+# CONFIG_USB_GADGET_DUMMY_HCD is not set
4434+CONFIG_USB_GADGET_DUALSPEED=y
4435+# CONFIG_USB_ZERO is not set
4436+# CONFIG_USB_AUDIO is not set
4437+# CONFIG_USB_ETH is not set
4438+# CONFIG_USB_G_NCM is not set
4439+# CONFIG_USB_GADGETFS is not set
4440+# CONFIG_USB_FUNCTIONFS is not set
4441+CONFIG_USB_FILE_STORAGE=y
4442+CONFIG_FSL_UTP=y
4443+# CONFIG_USB_FILE_STORAGE_TEST is not set
4444+# CONFIG_USB_MASS_STORAGE is not set
4445+# CONFIG_USB_G_SERIAL is not set
4446+# CONFIG_USB_MIDI_GADGET is not set
4447+# CONFIG_USB_G_PRINTER is not set
4448+# CONFIG_USB_CDC_COMPOSITE is not set
4449+# CONFIG_USB_G_MULTI is not set
4450+# CONFIG_USB_G_HID is not set
4451+# CONFIG_USB_G_DBGP is not set
4452+# CONFIG_USB_G_WEBCAM is not set
4453+
4454+#
4455+# OTG and related infrastructure
4456+#
4457+CONFIG_USB_OTG_UTILS=y
4458+# CONFIG_USB_GPIO_VBUS is not set
4459+# CONFIG_USB_ULPI is not set
4460+# CONFIG_NOP_USB_XCEIV is not set
4461+CONFIG_MMC=y
4462+# CONFIG_MMC_DEBUG is not set
4463+CONFIG_MMC_UNSAFE_RESUME=y
4464+# CONFIG_MMC_CLKGATE is not set
4465+
4466+#
4467+# MMC/SD/SDIO Card Drivers
4468+#
4469+CONFIG_MMC_BLOCK=y
4470+CONFIG_MMC_BLOCK_MINORS=8
4471+CONFIG_MMC_BLOCK_BOUNCE=y
4472+# CONFIG_SDIO_UART is not set
4473+# CONFIG_MMC_TEST is not set
4474+
4475+#
4476+# MMC/SD/SDIO Host Controller Drivers
4477+#
4478+CONFIG_MMC_SDHCI=y
4479+CONFIG_MMC_SDHCI_IO_ACCESSORS=y
4480+CONFIG_MMC_SDHCI_PLTFM=y
4481+CONFIG_MMC_SDHCI_ESDHC_IMX=y
4482+# CONFIG_MMC_DW is not set
4483+# CONFIG_MMC_VUB300 is not set
4484+# CONFIG_MMC_USHC is not set
4485+# CONFIG_MEMSTICK is not set
4486+# CONFIG_NEW_LEDS is not set
4487+# CONFIG_NFC_DEVICES is not set
4488+# CONFIG_ACCESSIBILITY is not set
4489+CONFIG_RTC_LIB=y
4490+CONFIG_RTC_CLASS=y
4491+CONFIG_RTC_HCTOSYS=y
4492+CONFIG_RTC_HCTOSYS_DEVICE="rtc0"
4493+# CONFIG_RTC_DEBUG is not set
4494+
4495+#
4496+# RTC interfaces
4497+#
4498+CONFIG_RTC_INTF_SYSFS=y
4499+CONFIG_RTC_INTF_PROC=y
4500+CONFIG_RTC_INTF_DEV=y
4501+CONFIG_RTC_INTF_DEV_UIE_EMUL=y
4502+# CONFIG_RTC_DRV_TEST is not set
4503+
4504+#
4505+# I2C RTC drivers
4506+#
4507+# CONFIG_RTC_DRV_DS1307 is not set
4508+# CONFIG_RTC_DRV_DS1374 is not set
4509+# CONFIG_RTC_DRV_DS1672 is not set
4510+# CONFIG_RTC_DRV_DS3232 is not set
4511+# CONFIG_RTC_DRV_MAX6900 is not set
4512+# CONFIG_RTC_DRV_RS5C372 is not set
4513+# CONFIG_RTC_DRV_ISL1208 is not set
4514+# CONFIG_RTC_DRV_ISL12022 is not set
4515+# CONFIG_RTC_DRV_X1205 is not set
4516+# CONFIG_RTC_DRV_PCF8563 is not set
4517+# CONFIG_RTC_DRV_PCF8583 is not set
4518+# CONFIG_RTC_DRV_M41T80 is not set
4519+# CONFIG_RTC_DRV_BQ32K is not set
4520+# CONFIG_RTC_DRV_S35390A is not set
4521+# CONFIG_RTC_DRV_FM3130 is not set
4522+# CONFIG_RTC_DRV_RX8581 is not set
4523+# CONFIG_RTC_DRV_RX8025 is not set
4524+# CONFIG_RTC_DRV_EM3027 is not set
4525+# CONFIG_RTC_DRV_RV3029C2 is not set
4526+
4527+#
4528+# SPI RTC drivers
4529+#
4530+# CONFIG_RTC_DRV_M41T93 is not set
4531+# CONFIG_RTC_DRV_M41T94 is not set
4532+# CONFIG_RTC_DRV_DS1305 is not set
4533+# CONFIG_RTC_DRV_DS1390 is not set
4534+# CONFIG_RTC_DRV_MAX6902 is not set
4535+# CONFIG_RTC_DRV_R9701 is not set
4536+# CONFIG_RTC_DRV_RS5C348 is not set
4537+# CONFIG_RTC_DRV_DS3234 is not set
4538+# CONFIG_RTC_DRV_PCF2123 is not set
4539+
4540+#
4541+# Platform RTC drivers
4542+#
4543+# CONFIG_RTC_DRV_CMOS is not set
4544+# CONFIG_RTC_DRV_DS1286 is not set
4545+# CONFIG_RTC_DRV_DS1511 is not set
4546+# CONFIG_RTC_DRV_DS1553 is not set
4547+# CONFIG_RTC_DRV_DS1742 is not set
4548+# CONFIG_RTC_DRV_STK17TA8 is not set
4549+# CONFIG_RTC_DRV_M48T86 is not set
4550+# CONFIG_RTC_DRV_M48T35 is not set
4551+# CONFIG_RTC_DRV_M48T59 is not set
4552+# CONFIG_RTC_DRV_MSM6242 is not set
4553+# CONFIG_RTC_MXC is not set
4554+# CONFIG_RTC_DRV_MXC_V2 is not set
4555+CONFIG_RTC_DRV_SNVS=y
4556+# CONFIG_RTC_DRV_BQ4802 is not set
4557+# CONFIG_RTC_DRV_RP5C01 is not set
4558+# CONFIG_RTC_DRV_V3020 is not set
4559+
4560+#
4561+# on-CPU RTC drivers
4562+#
4563+CONFIG_DMADEVICES=y
4564+# CONFIG_DMADEVICES_DEBUG is not set
4565+
4566+#
4567+# DMA Devices
4568+#
4569+# CONFIG_DW_DMAC is not set
4570+# CONFIG_MXC_PXP is not set
4571+# CONFIG_MXC_PXP_V2 is not set
4572+# CONFIG_TIMB_DMA is not set
4573+CONFIG_IMX_SDMA=y
4574+# CONFIG_MXS_DMA is not set
4575+CONFIG_DMA_ENGINE=y
4576+
4577+#
4578+# DMA Clients
4579+#
4580+# CONFIG_NET_DMA is not set
4581+# CONFIG_ASYNC_TX_DMA is not set
4582+# CONFIG_DMATEST is not set
4583+# CONFIG_AUXDISPLAY is not set
4584+# CONFIG_UIO is not set
4585+CONFIG_STAGING=y
4586+# CONFIG_USBIP_CORE is not set
4587+# CONFIG_ECHO is not set
4588+# CONFIG_BRCMUTIL is not set
4589+# CONFIG_ASUS_OLED is not set
4590+# CONFIG_R8712U is not set
4591+# CONFIG_TRANZPORT is not set
4592+# CONFIG_POHMELFS is not set
4593+# CONFIG_LINE6_USB is not set
4594+# CONFIG_VT6656 is not set
4595+# CONFIG_IIO is not set
4596+# CONFIG_XVMALLOC is not set
4597+# CONFIG_ZRAM is not set
4598+# CONFIG_FB_SM7XX is not set
4599+# CONFIG_EASYCAP is not set
4600+CONFIG_MACH_NO_WESTBRIDGE=y
4601+# CONFIG_USB_ENESTORAGE is not set
4602+# CONFIG_BCM_WIMAX is not set
4603+# CONFIG_FT1000 is not set
4604+
4605+#
4606+# Speakup console speech
4607+#
4608+# CONFIG_SPEAKUP is not set
4609+# CONFIG_TOUCHSCREEN_CLEARPAD_TM1217 is not set
4610+# CONFIG_TOUCHSCREEN_SYNAPTICS_I2C_RMI4 is not set
4611+
4612+#
4613+# Altera FPGA firmware download module
4614+#
4615+# CONFIG_ALTERA_STAPL is not set
4616+CONFIG_CLKDEV_LOOKUP=y
4617+CONFIG_CLKSRC_MMIO=y
4618+
4619+#
4620+# MXC support drivers
4621+#
4622+CONFIG_MXC_IPU=y
4623+CONFIG_MXC_IPU_V3=y
4624+CONFIG_MXC_IPU_V3H=y
4625+
4626+#
4627+# MXC SSI support
4628+#
4629+# CONFIG_MXC_SSI is not set
4630+
4631+#
4632+# MXC Digital Audio Multiplexer support
4633+#
4634+# CONFIG_MXC_DAM is not set
4635+
4636+#
4637+# MXC PMIC support
4638+#
4639+# CONFIG_MXC_PMIC_MC13783 is not set
4640+# CONFIG_MXC_PMIC_MC13892 is not set
4641+# CONFIG_MXC_PMIC_MC34704 is not set
4642+# CONFIG_MXC_PMIC_MC9SDZ60 is not set
4643+# CONFIG_MXC_PMIC_MC9S08DZ60 is not set
4644+
4645+#
4646+# MXC Security Drivers
4647+#
4648+# CONFIG_MXC_SECURITY_SCC is not set
4649+# CONFIG_MXC_SECURITY_RNG is not set
4650+
4651+#
4652+# MXC MPEG4 Encoder Kernel module support
4653+#
4654+# CONFIG_MXC_HMP4E is not set
4655+
4656+#
4657+# MXC HARDWARE EVENT
4658+#
4659+# CONFIG_MXC_HWEVENT is not set
4660+
4661+#
4662+# MXC VPU(Video Processing Unit) support
4663+#
4664+CONFIG_MXC_VPU=y
4665+# CONFIG_MXC_VPU_DEBUG is not set
4666+
4667+#
4668+# MXC Asynchronous Sample Rate Converter support
4669+#
4670+CONFIG_MXC_ASRC=y
4671+
4672+#
4673+# MXC Bluetooth support
4674+#
4675+
4676+#
4677+# Broadcom GPS ioctrl support
4678+#
4679+
4680+#
4681+# MXC Media Local Bus Driver
4682+#
4683+# CONFIG_MXC_MLB150 is not set
4684+
4685+#
4686+# i.MX ADC support
4687+#
4688+# CONFIG_IMX_ADC is not set
4689+
4690+#
4691+# MXC Vivante GPU support
4692+#
4693+# CONFIG_MXC_GPU_VIV is not set
4694+
4695+#
4696+# ANATOP_THERMAL
4697+#
4698+# CONFIG_ANATOP_THERMAL is not set
4699+
4700+#
4701+# MXC MIPI Support
4702+#
4703+# CONFIG_MXC_MIPI_CSI2 is not set
4704+
4705+#
4706+# File systems
4707+#
4708+CONFIG_EXT2_FS=y
4709+# CONFIG_EXT2_FS_XATTR is not set
4710+# CONFIG_EXT2_FS_XIP is not set
4711+CONFIG_EXT3_FS=y
4712+# CONFIG_EXT3_DEFAULTS_TO_ORDERED is not set
4713+CONFIG_EXT3_FS_XATTR=y
4714+# CONFIG_EXT3_FS_POSIX_ACL is not set
4715+# CONFIG_EXT3_FS_SECURITY is not set
4716+CONFIG_EXT4_FS=y
4717+CONFIG_EXT4_FS_XATTR=y
4718+# CONFIG_EXT4_FS_POSIX_ACL is not set
4719+# CONFIG_EXT4_FS_SECURITY is not set
4720+# CONFIG_EXT4_DEBUG is not set
4721+CONFIG_JBD=y
4722+# CONFIG_JBD_DEBUG is not set
4723+CONFIG_JBD2=y
4724+# CONFIG_JBD2_DEBUG is not set
4725+CONFIG_FS_MBCACHE=y
4726+# CONFIG_REISERFS_FS is not set
4727+# CONFIG_JFS_FS is not set
4728+# CONFIG_XFS_FS is not set
4729+# CONFIG_GFS2_FS is not set
4730+# CONFIG_BTRFS_FS is not set
4731+# CONFIG_NILFS2_FS is not set
4732+# CONFIG_FS_POSIX_ACL is not set
4733+CONFIG_FILE_LOCKING=y
4734+CONFIG_FSNOTIFY=y
4735+CONFIG_DNOTIFY=y
4736+CONFIG_INOTIFY_USER=y
4737+# CONFIG_FANOTIFY is not set
4738+# CONFIG_QUOTA is not set
4739+# CONFIG_QUOTACTL is not set
4740+CONFIG_AUTOFS4_FS=m
4741+# CONFIG_FUSE_FS is not set
4742+
4743+#
4744+# Caches
4745+#
4746+# CONFIG_FSCACHE is not set
4747+
4748+#
4749+# CD-ROM/DVD Filesystems
4750+#
4751+# CONFIG_ISO9660_FS is not set
4752+# CONFIG_UDF_FS is not set
4753+
4754+#
4755+# DOS/FAT/NT Filesystems
4756+#
4757+CONFIG_FAT_FS=y
4758+CONFIG_MSDOS_FS=y
4759+CONFIG_VFAT_FS=y
4760+CONFIG_FAT_DEFAULT_CODEPAGE=437
4761+CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1"
4762+# CONFIG_NTFS_FS is not set
4763+
4764+#
4765+# Pseudo filesystems
4766+#
4767+CONFIG_PROC_FS=y
4768+CONFIG_PROC_SYSCTL=y
4769+CONFIG_PROC_PAGE_MONITOR=y
4770+CONFIG_SYSFS=y
4771+CONFIG_TMPFS=y
4772+# CONFIG_TMPFS_POSIX_ACL is not set
4773+# CONFIG_TMPFS_XATTR is not set
4774+# CONFIG_HUGETLB_PAGE is not set
4775+# CONFIG_CONFIGFS_FS is not set
4776+CONFIG_MISC_FILESYSTEMS=y
4777+# CONFIG_ADFS_FS is not set
4778+# CONFIG_AFFS_FS is not set
4779+# CONFIG_HFS_FS is not set
4780+# CONFIG_HFSPLUS_FS is not set
4781+# CONFIG_BEFS_FS is not set
4782+# CONFIG_BFS_FS is not set
4783+# CONFIG_EFS_FS is not set
4784+CONFIG_JFFS2_FS=y
4785+CONFIG_JFFS2_FS_DEBUG=0
4786+CONFIG_JFFS2_FS_WRITEBUFFER=y
4787+# CONFIG_JFFS2_FS_WBUF_VERIFY is not set
4788+# CONFIG_JFFS2_SUMMARY is not set
4789+# CONFIG_JFFS2_FS_XATTR is not set
4790+# CONFIG_JFFS2_COMPRESSION_OPTIONS is not set
4791+CONFIG_JFFS2_ZLIB=y
4792+# CONFIG_JFFS2_LZO is not set
4793+CONFIG_JFFS2_RTIME=y
4794+# CONFIG_JFFS2_RUBIN is not set
4795+CONFIG_UBIFS_FS=y
4796+# CONFIG_UBIFS_FS_XATTR is not set
4797+# CONFIG_UBIFS_FS_ADVANCED_COMPR is not set
4798+CONFIG_UBIFS_FS_LZO=y
4799+CONFIG_UBIFS_FS_ZLIB=y
4800+# CONFIG_UBIFS_FS_DEBUG is not set
4801+# CONFIG_LOGFS is not set
4802+CONFIG_CRAMFS=y
4803+# CONFIG_SQUASHFS is not set
4804+# CONFIG_VXFS_FS is not set
4805+# CONFIG_MINIX_FS is not set
4806+# CONFIG_OMFS_FS is not set
4807+# CONFIG_HPFS_FS is not set
4808+# CONFIG_QNX4FS_FS is not set
4809+# CONFIG_ROMFS_FS is not set
4810+# CONFIG_PSTORE is not set
4811+# CONFIG_SYSV_FS is not set
4812+# CONFIG_UFS_FS is not set
4813+CONFIG_NETWORK_FILESYSTEMS=y
4814+CONFIG_NFS_FS=y
4815+CONFIG_NFS_V3=y
4816+# CONFIG_NFS_V3_ACL is not set
4817+# CONFIG_NFS_V4 is not set
4818+CONFIG_ROOT_NFS=y
4819+# CONFIG_NFSD is not set
4820+CONFIG_LOCKD=y
4821+CONFIG_LOCKD_V4=y
4822+CONFIG_NFS_COMMON=y
4823+CONFIG_SUNRPC=y
4824+# CONFIG_CEPH_FS is not set
4825+# CONFIG_CIFS is not set
4826+# CONFIG_NCP_FS is not set
4827+# CONFIG_CODA_FS is not set
4828+# CONFIG_AFS_FS is not set
4829+
4830+#
4831+# Partition Types
4832+#
4833+CONFIG_PARTITION_ADVANCED=y
4834+# CONFIG_ACORN_PARTITION is not set
4835+# CONFIG_OSF_PARTITION is not set
4836+# CONFIG_AMIGA_PARTITION is not set
4837+# CONFIG_ATARI_PARTITION is not set
4838+# CONFIG_MAC_PARTITION is not set
4839+CONFIG_MSDOS_PARTITION=y
4840+# CONFIG_BSD_DISKLABEL is not set
4841+# CONFIG_MINIX_SUBPARTITION is not set
4842+# CONFIG_SOLARIS_X86_PARTITION is not set
4843+# CONFIG_UNIXWARE_DISKLABEL is not set
4844+# CONFIG_LDM_PARTITION is not set
4845+# CONFIG_SGI_PARTITION is not set
4846+# CONFIG_ULTRIX_PARTITION is not set
4847+# CONFIG_SUN_PARTITION is not set
4848+# CONFIG_KARMA_PARTITION is not set
4849+CONFIG_EFI_PARTITION=y
4850+# CONFIG_SYSV68_PARTITION is not set
4851+CONFIG_NLS=y
4852+CONFIG_NLS_DEFAULT="iso8859-1"
4853+CONFIG_NLS_CODEPAGE_437=y
4854+# CONFIG_NLS_CODEPAGE_737 is not set
4855+# CONFIG_NLS_CODEPAGE_775 is not set
4856+# CONFIG_NLS_CODEPAGE_850 is not set
4857+# CONFIG_NLS_CODEPAGE_852 is not set
4858+# CONFIG_NLS_CODEPAGE_855 is not set
4859+# CONFIG_NLS_CODEPAGE_857 is not set
4860+# CONFIG_NLS_CODEPAGE_860 is not set
4861+# CONFIG_NLS_CODEPAGE_861 is not set
4862+# CONFIG_NLS_CODEPAGE_862 is not set
4863+# CONFIG_NLS_CODEPAGE_863 is not set
4864+# CONFIG_NLS_CODEPAGE_864 is not set
4865+# CONFIG_NLS_CODEPAGE_865 is not set
4866+# CONFIG_NLS_CODEPAGE_866 is not set
4867+# CONFIG_NLS_CODEPAGE_869 is not set
4868+# CONFIG_NLS_CODEPAGE_936 is not set
4869+# CONFIG_NLS_CODEPAGE_950 is not set
4870+# CONFIG_NLS_CODEPAGE_932 is not set
4871+# CONFIG_NLS_CODEPAGE_949 is not set
4872+# CONFIG_NLS_CODEPAGE_874 is not set
4873+# CONFIG_NLS_ISO8859_8 is not set
4874+# CONFIG_NLS_CODEPAGE_1250 is not set
4875+# CONFIG_NLS_CODEPAGE_1251 is not set
4876+CONFIG_NLS_ASCII=m
4877+CONFIG_NLS_ISO8859_1=y
4878+# CONFIG_NLS_ISO8859_2 is not set
4879+# CONFIG_NLS_ISO8859_3 is not set
4880+# CONFIG_NLS_ISO8859_4 is not set
4881+# CONFIG_NLS_ISO8859_5 is not set
4882+# CONFIG_NLS_ISO8859_6 is not set
4883+# CONFIG_NLS_ISO8859_7 is not set
4884+# CONFIG_NLS_ISO8859_9 is not set
4885+# CONFIG_NLS_ISO8859_13 is not set
4886+# CONFIG_NLS_ISO8859_14 is not set
4887+# CONFIG_NLS_ISO8859_15 is not set
4888+# CONFIG_NLS_KOI8_R is not set
4889+# CONFIG_NLS_KOI8_U is not set
4890+CONFIG_NLS_UTF8=m
4891+
4892+#
4893+# Kernel hacking
4894+#
4895+# CONFIG_PRINTK_TIME is not set
4896+CONFIG_DEFAULT_MESSAGE_LOGLEVEL=4
4897+CONFIG_ENABLE_WARN_DEPRECATED=y
4898+CONFIG_ENABLE_MUST_CHECK=y
4899+CONFIG_FRAME_WARN=1024
4900+# CONFIG_MAGIC_SYSRQ is not set
4901+# CONFIG_STRIP_ASM_SYMS is not set
4902+# CONFIG_UNUSED_SYMBOLS is not set
4903+CONFIG_DEBUG_FS=y
4904+# CONFIG_HEADERS_CHECK is not set
4905+# CONFIG_DEBUG_SECTION_MISMATCH is not set
4906+# CONFIG_DEBUG_KERNEL is not set
4907+# CONFIG_HARDLOCKUP_DETECTOR is not set
4908+# CONFIG_SLUB_DEBUG_ON is not set
4909+# CONFIG_SLUB_STATS is not set
4910+# CONFIG_SPARSE_RCU_POINTER is not set
4911+CONFIG_DEBUG_BUGVERBOSE=y
4912+# CONFIG_DEBUG_MEMORY_INIT is not set
4913+CONFIG_RCU_CPU_STALL_TIMEOUT=60
4914+CONFIG_RCU_CPU_STALL_VERBOSE=y
4915+# CONFIG_LKDTM is not set
4916+CONFIG_SYSCTL_SYSCALL_CHECK=y
4917+CONFIG_HAVE_FUNCTION_TRACER=y
4918+CONFIG_HAVE_FUNCTION_GRAPH_TRACER=y
4919+CONFIG_HAVE_DYNAMIC_FTRACE=y
4920+CONFIG_HAVE_FTRACE_MCOUNT_RECORD=y
4921+CONFIG_HAVE_C_RECORDMCOUNT=y
4922+CONFIG_TRACING_SUPPORT=y
4923+# CONFIG_FTRACE is not set
4924+# CONFIG_DYNAMIC_DEBUG is not set
4925+# CONFIG_DMA_API_DEBUG is not set
4926+# CONFIG_ATOMIC64_SELFTEST is not set
4927+# CONFIG_SAMPLES is not set
4928+CONFIG_HAVE_ARCH_KGDB=y
4929+# CONFIG_TEST_KSTRTOX is not set
4930+# CONFIG_STRICT_DEVMEM is not set
4931+CONFIG_ARM_UNWIND=y
4932+# CONFIG_DEBUG_USER is not set
4933+# CONFIG_OC_ETM is not set
4934+
4935+#
4936+# Security options
4937+#
4938+# CONFIG_KEYS is not set
4939+# CONFIG_SECURITY_DMESG_RESTRICT is not set
4940+# CONFIG_SECURITY is not set
4941+# CONFIG_SECURITYFS is not set
4942+CONFIG_DEFAULT_SECURITY_DAC=y
4943+CONFIG_DEFAULT_SECURITY=""
4944+CONFIG_CRYPTO=y
4945+
4946+#
4947+# Crypto core or helper
4948+#
4949+CONFIG_CRYPTO_ALGAPI=y
4950+CONFIG_CRYPTO_ALGAPI2=y
4951+CONFIG_CRYPTO_AEAD2=y
4952+CONFIG_CRYPTO_BLKCIPHER=y
4953+CONFIG_CRYPTO_BLKCIPHER2=y
4954+CONFIG_CRYPTO_HASH2=y
4955+CONFIG_CRYPTO_RNG2=y
4956+CONFIG_CRYPTO_PCOMP2=y
4957+CONFIG_CRYPTO_MANAGER=y
4958+CONFIG_CRYPTO_MANAGER2=y
4959+CONFIG_CRYPTO_MANAGER_DISABLE_TESTS=y
4960+# CONFIG_CRYPTO_GF128MUL is not set
4961+# CONFIG_CRYPTO_NULL is not set
4962+# CONFIG_CRYPTO_PCRYPT is not set
4963+CONFIG_CRYPTO_WORKQUEUE=y
4964+# CONFIG_CRYPTO_CRYPTD is not set
4965+# CONFIG_CRYPTO_AUTHENC is not set
4966+CONFIG_CRYPTO_TEST=m
4967+CONFIG_CRYPTO_CRYPTODEV=y
4968+
4969+#
4970+# Authenticated Encryption with Associated Data
4971+#
4972+# CONFIG_CRYPTO_CCM is not set
4973+# CONFIG_CRYPTO_GCM is not set
4974+# CONFIG_CRYPTO_SEQIV is not set
4975+
4976+#
4977+# Block modes
4978+#
4979+CONFIG_CRYPTO_CBC=y
4980+# CONFIG_CRYPTO_CTR is not set
4981+# CONFIG_CRYPTO_CTS is not set
4982+CONFIG_CRYPTO_ECB=y
4983+# CONFIG_CRYPTO_LRW is not set
4984+# CONFIG_CRYPTO_PCBC is not set
4985+# CONFIG_CRYPTO_XTS is not set
4986+
4987+#
4988+# Hash modes
4989+#
4990+# CONFIG_CRYPTO_HMAC is not set
4991+# CONFIG_CRYPTO_XCBC is not set
4992+# CONFIG_CRYPTO_VMAC is not set
4993+
4994+#
4995+# Digest
4996+#
4997+# CONFIG_CRYPTO_CRC32C is not set
4998+# CONFIG_CRYPTO_GHASH is not set
4999+# CONFIG_CRYPTO_MD4 is not set
5000+# CONFIG_CRYPTO_MD5 is not set
5001+# CONFIG_CRYPTO_MICHAEL_MIC is not set
5002+# CONFIG_CRYPTO_RMD128 is not set
5003+# CONFIG_CRYPTO_RMD160 is not set
5004+# CONFIG_CRYPTO_RMD256 is not set
5005+# CONFIG_CRYPTO_RMD320 is not set
5006+# CONFIG_CRYPTO_SHA1 is not set
5007+# CONFIG_CRYPTO_SHA256 is not set
5008+# CONFIG_CRYPTO_SHA512 is not set
5009+# CONFIG_CRYPTO_TGR192 is not set
5010+# CONFIG_CRYPTO_WP512 is not set
5011+
5012+#
5013+# Ciphers
5014+#
5015+CONFIG_CRYPTO_AES=y
5016+# CONFIG_CRYPTO_ANUBIS is not set
5017+# CONFIG_CRYPTO_ARC4 is not set
5018+# CONFIG_CRYPTO_BLOWFISH is not set
5019+# CONFIG_CRYPTO_CAMELLIA is not set
5020+# CONFIG_CRYPTO_CAST5 is not set
5021+# CONFIG_CRYPTO_CAST6 is not set
5022+# CONFIG_CRYPTO_DES is not set
5023+# CONFIG_CRYPTO_FCRYPT is not set
5024+# CONFIG_CRYPTO_KHAZAD is not set
5025+# CONFIG_CRYPTO_SALSA20 is not set
5026+# CONFIG_CRYPTO_SEED is not set
5027+# CONFIG_CRYPTO_SERPENT is not set
5028+# CONFIG_CRYPTO_TEA is not set
5029+# CONFIG_CRYPTO_TWOFISH is not set
5030+
5031+#
5032+# Compression
5033+#
5034+CONFIG_CRYPTO_DEFLATE=y
5035+# CONFIG_CRYPTO_ZLIB is not set
5036+CONFIG_CRYPTO_LZO=y
5037+
5038+#
5039+# Random Number Generation
5040+#
5041+# CONFIG_CRYPTO_ANSI_CPRNG is not set
5042+# CONFIG_CRYPTO_USER_API_HASH is not set
5043+# CONFIG_CRYPTO_USER_API_SKCIPHER is not set
5044+CONFIG_CRYPTO_HW=y
5045+# CONFIG_BINARY_PRINTF is not set
5046+
5047+#
5048+# Library routines
5049+#
5050+CONFIG_BITREVERSE=y
5051+CONFIG_RATIONAL=y
5052+CONFIG_CRC_CCITT=m
5053+CONFIG_CRC16=y
5054+# CONFIG_CRC_T10DIF is not set
5055+# CONFIG_CRC_ITU_T is not set
5056+CONFIG_CRC32=y
5057+# CONFIG_CRC7 is not set
5058+# CONFIG_LIBCRC32C is not set
5059+CONFIG_ZLIB_INFLATE=y
5060+CONFIG_ZLIB_DEFLATE=y
5061+CONFIG_LZO_COMPRESS=y
5062+CONFIG_LZO_DECOMPRESS=y
5063+# CONFIG_XZ_DEC is not set
5064+# CONFIG_XZ_DEC_BCJ is not set
5065+CONFIG_DECOMPRESS_GZIP=y
5066+CONFIG_GENERIC_ALLOCATOR=y
5067+CONFIG_HAS_IOMEM=y
5068+CONFIG_HAS_IOPORT=y
5069+CONFIG_HAS_DMA=y
5070+CONFIG_CPU_RMAP=y
5071+CONFIG_NLATTR=y
5072+# CONFIG_AVERAGE is not set
5073diff --git a/arch/arm/mach-mx6/Kconfig b/arch/arm/mach-mx6/Kconfig
5074index 64ce4d4..e6c2fca 100644
5075--- a/arch/arm/mach-mx6/Kconfig
5076+++ b/arch/arm/mach-mx6/Kconfig
5077@@ -180,6 +180,41 @@ config MACH_MX6Q_SABRELITE
5078 Include support for i.MX 6Quad SABRE Lite platform. This includes specific
5079 configurations for the board and its peripherals.
5080
5081+config MACH_MX6Q_QMX6
5082+ bool "Support Congatec i.MX 6Quad QMX6 platform"
5083+ select ARCH_MX6Q
5084+ select SOC_IMX6Q
5085+ select IMX_HAVE_PLATFORM_IMX_UART
5086+ select IMX_HAVE_PLATFORM_DMA
5087+ select IMX_HAVE_PLATFORM_FEC
5088+ select IMX_HAVE_PLATFORM_GPMI_NFC
5089+ select IMX_HAVE_PLATFORM_SDHCI_ESDHC_IMX
5090+ select IMX_HAVE_PLATFORM_SPI_IMX
5091+ select IMX_HAVE_PLATFORM_IMX_I2C
5092+ select IMX_HAVE_PLATFORM_VIV_GPU
5093+ select IMX_HAVE_PLATFORM_IMX_VPU
5094+ select IMX_HAVE_PLATFORM_IMX_DVFS
5095+ select IMX_HAVE_PLATFORM_IMX_SSI
5096+ select IMX_HAVE_PLATFORM_IMX_ANATOP_THERMAL
5097+ select IMX_HAVE_PLATFORM_FSL_USB2_UDC
5098+ select IMX_HAVE_PLATFORM_MXC_EHCI
5099+ select IMX_HAVE_PLATFORM_FSL_OTG
5100+ select IMX_HAVE_PLATFORM_FSL_USB_WAKEUP
5101+ select IMX_HAVE_PLATFORM_AHCI
5102+ select IMX_HAVE_PLATFORM_IMX_OCOTP
5103+ select IMX_HAVE_PLATFORM_IMX_VIIM
5104+ select IMX_HAVE_PLATFORM_IMX2_WDT
5105+ select IMX_HAVE_PLATFORM_IMX_SNVS_RTC
5106+ select IMX_HAVE_PLATFORM_IMX_PM
5107+ select IMX_HAVE_PLATFORM_MXC_HDMI
5108+ select IMX_HAVE_PLATFORM_IMX_ASRC
5109+ select IMX_HAVE_PLATFORM_FLEXCAN
5110+ select IMX_HAVE_PLATFORM_IMX_MIPI_CSI2
5111+ select IMX_HAVE_PLATFORM_IMX_PCIE
5112+ help
5113+ Include support for Congatec i.MX 6Quad QMX6 platform. This includes specific
5114+ configurations for the board and its peripherals.
5115+
5116 config MACH_MX6Q_SABRESD
5117 bool "Support i.MX 6Quad SABRESD platform"
5118 select ARCH_MX6Q
5119diff --git a/arch/arm/mach-mx6/Makefile b/arch/arm/mach-mx6/Makefile
5120index 8c1d754..b745797 100644
5121--- a/arch/arm/mach-mx6/Makefile
5122+++ b/arch/arm/mach-mx6/Makefile
5123@@ -1,6 +1,7 @@
5124 #
5125 # Makefile for the linux kernel.
5126 #
5127+CFLAGS_mx6q_qmx6_pmic_pfuze100.o += -DPFUZE100_FIRST_VERSION
5128
5129 # Object file lists.
5130 obj-y := cpu.o mm.o system.o devices.o dummy_gpio.o irq.o bus_freq.o usb_h2.o usb_h3.o\
5131@@ -12,6 +13,7 @@ obj-$(CONFIG_MACH_MX6Q_ARM2) += board-mx6q_arm2.o
5132 obj-$(CONFIG_MACH_MX6SL_ARM2) += board-mx6sl_arm2.o mx6sl_arm2_pmic_pfuze100.o
5133 obj-$(CONFIG_MACH_MX6SL_EVK) += board-mx6sl_evk.o mx6sl_evk_pmic_pfuze100.o
5134 obj-$(CONFIG_MACH_MX6Q_SABRELITE) += board-mx6q_sabrelite.o
5135+obj-$(CONFIG_MACH_MX6Q_QMX6) += board-mx6q_qmx6.o mx6q_qmx6_pmic_pfuze100.o
5136 obj-$(CONFIG_MACH_MX6Q_SABRESD) += board-mx6q_sabresd.o mx6q_sabresd_pmic_pfuze100.o
5137 obj-$(CONFIG_MACH_MX6Q_SABREAUTO) += board-mx6q_sabreauto.o mx6q_sabreauto_pmic_pfuze100.o
5138 obj-$(CONFIG_MACH_MX6Q_HDMIDONGLE) += board-mx6q_hdmidongle.o
5139diff --git a/arch/arm/mach-mx6/board-mx6dl_qmx6.h b/arch/arm/mach-mx6/board-mx6dl_qmx6.h
5140new file mode 100644
5141index 0000000..b7f7e9a
5142--- /dev/null
5143+++ b/arch/arm/mach-mx6/board-mx6dl_qmx6.h
5144@@ -0,0 +1,199 @@
5145+/*
5146+ * Copyright (C) 2012 Freescale Semiconductor, Inc. All Rights Reserved.
5147+ *
5148+ * This program is free software; you can redistribute it and/or modify
5149+ * it under the terms of the GNU General Public License as published by
5150+ * the Free Software Foundation; either version 2 of the License, or
5151+ * (at your option) any later version.
5152+
5153+ * This program is distributed in the hope that it will be useful,
5154+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
5155+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
5156+ * GNU General Public License for more details.
5157+
5158+ * You should have received a copy of the GNU General Public License along
5159+ * with this program; if not, write to the Free Software Foundation, Inc.,
5160+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
5161+ */
5162+
5163+#ifndef _BOARD_MX6DL_QMX6_H
5164+#define _BOARD_MX6DL_QMX6_H
5165+#include <mach/iomux-mx6dl.h>
5166+
5167+static iomux_v3_cfg_t mx6dl_qmx6_pads[] = {
5168+ /* AUDMUX */
5169+ MX6DL_PAD_DI0_PIN4__AUDMUX_AUD6_RXD,
5170+ MX6DL_PAD_DI0_PIN15__AUDMUX_AUD6_TXC,
5171+ MX6DL_PAD_DI0_PIN2__AUDMUX_AUD6_TXD,
5172+ MX6DL_PAD_DI0_PIN3__AUDMUX_AUD6_TXFS,
5173+
5174+ /* CAN1 */
5175+ MX6DL_PAD_KEY_ROW2__CAN1_RXCAN,
5176+ MX6DL_PAD_KEY_COL2__CAN1_TXCAN,
5177+ MX6DL_PAD_GPIO_2__GPIO_1_2, /* PCIE_WAKE_B */
5178+
5179+ /* CCM */
5180+ MX6DL_PAD_GPIO_0__GPIO_1_0, /* GPIO_0/Audio Ref. CLK */
5181+
5182+ /* ECSPI1 */
5183+ MX6DL_PAD_EIM_D17__ECSPI1_MISO,
5184+ MX6DL_PAD_EIM_D18__ECSPI1_MOSI,
5185+ MX6DL_PAD_EIM_D16__ECSPI1_SCLK,
5186+ MX6DL_PAD_EIM_D19__GPIO_3_19, /*SS1*/
5187+
5188+ /* ENET */
5189+ MX6DL_PAD_ENET_MDIO__ENET_MDIO,
5190+ MX6DL_PAD_ENET_MDC__ENET_MDC,
5191+ MX6DL_PAD_RGMII_TXC__ENET_RGMII_TXC,
5192+ MX6DL_PAD_RGMII_TD0__ENET_RGMII_TD0,
5193+ MX6DL_PAD_RGMII_TD1__ENET_RGMII_TD1,
5194+ MX6DL_PAD_RGMII_TD2__ENET_RGMII_TD2,
5195+ MX6DL_PAD_RGMII_TD3__ENET_RGMII_TD3,
5196+ MX6DL_PAD_RGMII_TX_CTL__ENET_RGMII_TX_CTL,
5197+ MX6DL_PAD_ENET_REF_CLK__ENET_TX_CLK,
5198+ MX6DL_PAD_RGMII_RXC__ENET_RGMII_RXC,
5199+ MX6DL_PAD_RGMII_RD0__ENET_RGMII_RD0,
5200+ MX6DL_PAD_RGMII_RD1__ENET_RGMII_RD1,
5201+ MX6DL_PAD_RGMII_RD2__ENET_RGMII_RD2,
5202+ MX6DL_PAD_RGMII_RD3__ENET_RGMII_RD3,
5203+ MX6DL_PAD_RGMII_RX_CTL__ENET_RGMII_RX_CTL,
5204+ MX6DL_PAD_ENET_TX_EN__GPIO_1_28, /* Micrel RGMII Phy Interrupt */
5205+ MX6DL_PAD_EIM_D23__GPIO_3_23, /* RGMII reset */
5206+
5207+ /* GPIO1 */
5208+ MX6DL_PAD_ENET_RX_ER__SPDIF_IN1, /* SPDIF_IN */
5209+
5210+ /* GPIO2 */
5211+ MX6DL_PAD_NANDF_D1__GPIO_2_1, /* J14 - Menu Button */
5212+ MX6DL_PAD_NANDF_D2__GPIO_2_2, /* J14 - Back Button */
5213+ MX6DL_PAD_NANDF_D3__GPIO_2_3, /* J14 - Search Button */
5214+ MX6DL_PAD_NANDF_D4__GPIO_2_4, /* J14 - Home Button */
5215+ MX6DL_PAD_EIM_A22__GPIO_2_16, /* J12 - Boot Mode Select */
5216+ MX6DL_PAD_EIM_A21__GPIO_2_17, /* J12 - Boot Mode Select */
5217+ MX6DL_PAD_EIM_A20__GPIO_2_18, /* J12 - Boot Mode Select */
5218+ MX6DL_PAD_EIM_A19__GPIO_2_19, /* J12 - Boot Mode Select */
5219+ MX6DL_PAD_EIM_A18__GPIO_2_20, /* J12 - Boot Mode Select */
5220+ MX6DL_PAD_EIM_A17__GPIO_2_21, /* J12 - Boot Mode Select */
5221+ MX6DL_PAD_EIM_A16__GPIO_2_22, /* J12 - Boot Mode Select */
5222+ MX6DL_PAD_EIM_RW__GPIO_2_26, /* J12 - Boot Mode Select */
5223+ MX6DL_PAD_EIM_LBA__GPIO_2_27, /* J12 - Boot Mode Select */
5224+ MX6DL_PAD_EIM_EB0__GPIO_2_28, /* J12 - Boot Mode Select */
5225+ MX6DL_PAD_EIM_EB1__GPIO_2_29, /* J12 - Boot Mode Select */
5226+ MX6DL_PAD_EIM_EB3__GPIO_2_31, /* J12 - Boot Mode Select */
5227+
5228+ /* GPIO3 */
5229+ MX6DL_PAD_EIM_DA0__GPIO_3_0, /* J12 - Boot Mode Select */
5230+ MX6DL_PAD_EIM_DA1__GPIO_3_1, /* J12 - Boot Mode Select */
5231+ MX6DL_PAD_EIM_DA2__GPIO_3_2, /* J12 - Boot Mode Select */
5232+ MX6DL_PAD_EIM_DA3__GPIO_3_3, /* J12 - Boot Mode Select */
5233+ MX6DL_PAD_EIM_DA4__GPIO_3_4, /* J12 - Boot Mode Select */
5234+ MX6DL_PAD_EIM_DA5__GPIO_3_5, /* J12 - Boot Mode Select */
5235+ MX6DL_PAD_EIM_DA6__GPIO_3_6, /* J12 - Boot Mode Select */
5236+ MX6DL_PAD_EIM_DA7__GPIO_3_7, /* J12 - Boot Mode Select */
5237+ MX6DL_PAD_EIM_DA8__GPIO_3_8, /* J12 - Boot Mode Select */
5238+ MX6DL_PAD_EIM_DA9__GPIO_3_9, /* J12 - Boot Mode Select */
5239+ MX6DL_PAD_EIM_DA10__GPIO_3_10, /* J12 - Boot Mode Select */
5240+ MX6DL_PAD_EIM_DA11__GPIO_3_11, /* J12 - Boot Mode Select */
5241+ MX6DL_PAD_EIM_DA12__GPIO_3_12, /* J12 - Boot Mode Select */
5242+ MX6DL_PAD_EIM_DA13__GPIO_3_13, /* J12 - Boot Mode Select */
5243+ MX6DL_PAD_EIM_DA14__GPIO_3_14, /* J12 - Boot Mode Select */
5244+ MX6DL_PAD_EIM_DA15__GPIO_3_15, /* J12 - Boot Mode Select */
5245+
5246+ /* GPIO4 */
5247+ MX6DL_PAD_GPIO_19__GPIO_4_5, /* Volume Down */
5248+
5249+ /* GPIO5 */
5250+ MX6DL_PAD_EIM_WAIT__GPIO_5_0, /* J12 - Boot Mode Select */
5251+ MX6DL_PAD_EIM_A24__GPIO_5_4, /* J12 - Boot Mode Select */
5252+
5253+ /* GPIO6 */
5254+ MX6DL_PAD_EIM_A23__GPIO_6_6, /* J12 - Boot Mode Select */
5255+
5256+ /* GPIO7 */
5257+ MX6DL_PAD_GPIO_17__GPIO_7_12, /* USB Hub Reset */
5258+ MX6DL_PAD_GPIO_18__GPIO_7_13, /* Volume Up */
5259+
5260+ /* I2C1 - PRIMARY */
5261+ MX6DL_PAD_EIM_D21__I2C1_SCL, /* GPIO3[21] */
5262+ MX6DL_PAD_EIM_D28__I2C1_SDA, /* GPIO3[28] */
5263+
5264+ /* I2C2 - PMIC SDVO */
5265+ MX6DL_PAD_KEY_COL3__I2C2_SCL, /* GPIO4[12] */
5266+ MX6DL_PAD_KEY_ROW3__I2C2_SDA, /* GPIO4[13] */
5267+
5268+ /* I2C3 - Unused */
5269+ MX6DL_PAD_GPIO_3__I2C3_SCL,
5270+ MX6DL_PAD_GPIO_6__I2C3_SDA,
5271+
5272+ /* SUS_S3 */
5273+ MX6DL_PAD_GPIO_5__GPIO_1_5, /* GPIO1[5] */
5274+
5275+ MX6DL_PAD_GPIO_16__GPIO_7_11, /* GPIO7[11] */
5276+
5277+ MX6DL_PAD_GPIO_7__GPIO_1_7, /* Display Connector GP */
5278+ MX6DL_PAD_GPIO_9__GPIO_1_9, /* Display Connector GP */
5279+ MX6DL_PAD_NANDF_D0__GPIO_2_0, /* Unused */
5280+
5281+ /* PWM1 */
5282+ MX6DL_PAD_SD1_DAT3__PWM1_PWMO, /* GPIO1[21] */
5283+
5284+ /* PCIe RESET */
5285+ MX6DL_PAD_SD1_DAT2__GPIO_1_19, /* GPIO1[19] */
5286+
5287+ /* PWM4 */
5288+ MX6DL_PAD_SD1_CMD__PWM4_PWMO, /* GPIO1[18] */
5289+
5290+ /* UART1 */
5291+ MX6DL_PAD_CSI0_DAT10__UART1_TXD,
5292+ MX6DL_PAD_CSI0_DAT11__UART1_RXD,
5293+
5294+ /* UART2 for debug */
5295+ MX6DL_PAD_EIM_D26__UART2_TXD,
5296+ MX6DL_PAD_EIM_D27__UART2_RXD,
5297+
5298+ /* USBOTG ID pin */
5299+ MX6DL_PAD_GPIO_1__USBOTG_ID,
5300+
5301+ /* WATCHDOG */
5302+ MX6DL_PAD_KEY_COL4__GPIO_4_14,
5303+
5304+ /* USB OC pin */
5305+ /* MX6DL_PAD_EIM_D30__USBOH3_USBH1_OC, TODO: to be checked */
5306+
5307+ /* USDHC2 */
5308+ MX6DL_PAD_SD2_CLK__USDHC2_CLK,
5309+ MX6DL_PAD_SD2_CMD__USDHC2_CMD,
5310+ MX6DL_PAD_SD2_DAT0__USDHC2_DAT0,
5311+ MX6DL_PAD_SD2_DAT1__USDHC2_DAT1,
5312+ MX6DL_PAD_SD2_DAT2__USDHC2_DAT2,
5313+ MX6DL_PAD_SD2_DAT3__USDHC2_DAT3,
5314+ MX6DL_PAD_GPIO_4__GPIO_1_4, /* Card Detect */
5315+
5316+ /* USDHC3 */
5317+ MX6DL_PAD_SD3_CLK__USDHC3_CLK_50MHZ,
5318+ MX6DL_PAD_SD3_CMD__USDHC3_CMD_50MHZ,
5319+ MX6DL_PAD_SD3_DAT0__USDHC3_DAT0_50MHZ,
5320+ MX6DL_PAD_SD3_DAT1__USDHC3_DAT1_50MHZ,
5321+ MX6DL_PAD_SD3_DAT2__USDHC3_DAT2_50MHZ,
5322+ MX6DL_PAD_SD3_DAT3__USDHC3_DAT3_50MHZ,
5323+ MX6DL_PAD_SD3_DAT4__USDHC3_DAT4_50MHZ,
5324+ MX6DL_PAD_SD3_DAT5__USDHC3_DAT5_50MHZ,
5325+ MX6DL_PAD_SD3_DAT6__USDHC3_DAT6_50MHZ,
5326+ MX6DL_PAD_SD3_DAT7__USDHC3_DAT7_50MHZ,
5327+
5328+ /* USDHC4 */
5329+ MX6DL_PAD_SD4_CLK__USDHC4_CLK_50MHZ,
5330+ MX6DL_PAD_SD4_CMD__USDHC4_CMD_50MHZ,
5331+ MX6DL_PAD_SD4_DAT0__USDHC4_DAT0_50MHZ,
5332+ MX6DL_PAD_SD4_DAT1__USDHC4_DAT1_50MHZ,
5333+ MX6DL_PAD_SD4_DAT2__USDHC4_DAT2_50MHZ,
5334+ MX6DL_PAD_SD4_DAT3__USDHC4_DAT3_50MHZ,
5335+ MX6DL_PAD_SD4_DAT4__USDHC4_DAT4_50MHZ,
5336+ MX6DL_PAD_SD4_DAT5__USDHC4_DAT5_50MHZ,
5337+ MX6DL_PAD_SD4_DAT6__USDHC4_DAT6_50MHZ,
5338+ MX6DL_PAD_SD4_DAT7__USDHC4_DAT7_50MHZ,
5339+ MX6DL_PAD_NANDF_D6__GPIO_2_6, /* SD4_CD */
5340+ MX6DL_PAD_NANDF_D7__GPIO_2_7, /* SD4_WP */
5341+};
5342+
5343+#endif
5344diff --git a/arch/arm/mach-mx6/board-mx6q_qmx6.c b/arch/arm/mach-mx6/board-mx6q_qmx6.c
5345new file mode 100644
5346index 0000000..720ca7f
5347--- /dev/null
5348+++ b/arch/arm/mach-mx6/board-mx6q_qmx6.c
5349@@ -0,0 +1,979 @@
5350+/*
5351+ * Copyright (C) 2012 Freescale Semiconductor, Inc. All Rights Reserved.
5352+ *
5353+ * This program is free software; you can redistribute it and/or modify
5354+ * it under the terms of the GNU General Public License as published by
5355+ * the Free Software Foundation; either version 2 of the License, or
5356+ * (at your option) any later version.
5357+
5358+ * This program is distributed in the hope that it will be useful,
5359+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
5360+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
5361+ * GNU General Public License for more details.
5362+
5363+ * You should have received a copy of the GNU General Public License along
5364+ * with this program; if not, write to the Free Software Foundation, Inc.,
5365+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
5366+ */
5367+
5368+#include <linux/types.h>
5369+#include <linux/sched.h>
5370+#include <linux/delay.h>
5371+#include <linux/pm.h>
5372+#include <linux/interrupt.h>
5373+#include <linux/irq.h>
5374+#include <linux/init.h>
5375+#include <linux/input.h>
5376+#include <linux/nodemask.h>
5377+#include <linux/clk.h>
5378+#include <linux/platform_device.h>
5379+#include <linux/fsl_devices.h>
5380+#include <linux/spi/spi.h>
5381+#include <linux/spi/flash.h>
5382+#include <linux/i2c.h>
5383+#include <linux/i2c/pca953x.h>
5384+#include <linux/ata.h>
5385+#include <linux/mtd/mtd.h>
5386+#include <linux/mtd/map.h>
5387+#include <linux/mtd/partitions.h>
5388+#include <linux/regulator/consumer.h>
5389+#include <linux/pmic_external.h>
5390+#include <linux/pmic_status.h>
5391+#include <linux/ipu.h>
5392+#include <linux/mxcfb.h>
5393+#include <linux/pwm_backlight.h>
5394+#include <linux/fec.h>
5395+#include <linux/memblock.h>
5396+#include <linux/gpio.h>
5397+#include <linux/etherdevice.h>
5398+#include <linux/regulator/anatop-regulator.h>
5399+#include <linux/regulator/consumer.h>
5400+#include <linux/regulator/machine.h>
5401+#include <linux/regulator/fixed.h>
5402+
5403+#include <mach/common.h>
5404+#include <mach/hardware.h>
5405+#include <mach/mxc_dvfs.h>
5406+#include <mach/memory.h>
5407+#include <mach/iomux-mx6q.h>
5408+#include <mach/imx-uart.h>
5409+#include <mach/viv_gpu.h>
5410+#include <mach/ahci_sata.h>
5411+#include <mach/ipu-v3.h>
5412+#include <mach/mxc_hdmi.h>
5413+#include <mach/mxc_asrc.h>
5414+
5415+#include <asm/irq.h>
5416+#include <asm/setup.h>
5417+#include <asm/mach-types.h>
5418+#include <asm/mach/arch.h>
5419+#include <asm/mach/time.h>
5420+
5421+#include "usb.h"
5422+#include "devices-imx6q.h"
5423+#include "crm_regs.h"
5424+#include "cpu_op-mx6.h"
5425+#include "board-mx6q_qmx6.h"
5426+#include "board-mx6dl_qmx6.h"
5427+
5428+#define MX6Q_QMX6_VOLUME_UP_KEY IMX_GPIO_NR(7, 13)
5429+#define MX6Q_QMX6_VOLUME_DOWN_KEY IMX_GPIO_NR(4, 5)
5430+#define MX6Q_QMX6_MENU_KEY IMX_GPIO_NR(2, 1)
5431+#define MX6Q_QMX6_BACK_KEY IMX_GPIO_NR(2, 2)
5432+#define MX6Q_QMX6_SEARCH_KEY IMX_GPIO_NR(2, 3)
5433+#define MX6Q_QMX6_HOME_KEY IMX_GPIO_NR(2, 4)
5434+#define MX6Q_QMX6_ECSPI1_CS1 IMX_GPIO_NR(3, 19)
5435+#define MX6Q_QMX6_USB_HUB_RESET IMX_GPIO_NR(7, 12)
5436+
5437+#define MX6Q_QMX6_SD4_CD IMX_GPIO_NR(2, 6)
5438+#define MX6Q_QMX6_SD4_WP IMX_GPIO_NR(2, 7)
5439+#define MX6Q_QMX6_SD2_CD IMX_GPIO_NR(1, 4)
5440+#define MX6Q_QMX6_USB_OTG_PWR IMX_GPIO_NR(3, 22)
5441+#define MX6Q_QMX6_POWER_OFF IMX_GPIO_NR(2, 3)
5442+#define MX6Q_QMX6_PCIE_WAKE_B IMX_GPIO_NR(1, 2)
5443+#define MX6Q_QMX6_BLT_EN IMX_GPIO_NR(1, 9)
5444+
5445+#define MX6Q_QMX6_TCH_INT1 IMX_GPIO_NR(7, 11)
5446+#define MX6Q_QMX6_CSI0_RST IMX_GPIO_NR(1, 8)
5447+#define MX6Q_QMX6_PCIE_RST_B IMX_GPIO_NR(1, 20)
5448+#define MX6Q_QMX6_CSI0_PWN IMX_GPIO_NR(6, 10)
5449+#define MX6Q_QMX6_PFUZE_INT IMX_GPIO_NR(5, 16)
5450+
5451+void __init early_console_setup(unsigned long base, struct clk *clk);
5452+extern int mx6q_qmx6_init_pfuze100(u32 int_gpio);
5453+
5454+static struct clk *sata_clk;
5455+static int disable_ldb;
5456+
5457+extern char *gp_reg_id;
5458+extern void mx6_cpu_regulator_init(void);
5459+
5460+static const struct esdhc_platform_data mx6q_qmx6_sd2_data __initconst = {
5461+ .cd_gpio = MX6Q_QMX6_SD2_CD,
5462+
5463+ .keep_power_at_suspend = 1,
5464+ .support_8bit = 0,
5465+ .delay_line = 0,
5466+ .force_write_access = 1,
5467+};
5468+
5469+static const struct esdhc_platform_data mx6q_qmx6_sd3_data __initconst = {
5470+ .always_present = 1,
5471+ .cd_gpio = -1,
5472+ .keep_power_at_suspend = 1,
5473+ .support_8bit = 1,
5474+ .delay_line = 0,
5475+};
5476+
5477+static const struct esdhc_platform_data mx6q_qmx6_sd4_data __initconst = {
5478+ .cd_gpio = MX6Q_QMX6_SD4_CD,
5479+ .wp_gpio = MX6Q_QMX6_SD4_WP,
5480+ .keep_power_at_suspend = 1,
5481+ .support_8bit = 1,
5482+ .delay_line = 0,
5483+};
5484+
5485+static const struct anatop_thermal_platform_data
5486+ mx6q_qmx6_anatop_thermal_data __initconst = {
5487+ .name = "anatop_thermal",
5488+};
5489+
5490+static inline void mx6q_qmx6_init_uart(void)
5491+{
5492+ imx6q_add_imx_uart(0, NULL);
5493+ imx6q_add_imx_uart(1, NULL);
5494+}
5495+
5496+static int mx6q_qmx6_fec_phy_init(struct phy_device *phydev)
5497+{
5498+ /* adjust KSZ9031 ethernet phy */
5499+
5500+ phy_write(phydev, 0x0d, 0x2);
5501+ phy_write(phydev, 0x0e, 0x4);
5502+ phy_write(phydev, 0x0d, 0xc002);
5503+ phy_write(phydev, 0x0e, 0x0000);
5504+
5505+ phy_write(phydev, 0x0d, 0x2);
5506+ phy_write(phydev, 0x0e, 0x5);
5507+ phy_write(phydev, 0x0d, 0xc002);
5508+ phy_write(phydev, 0x0e, 0x0000);
5509+
5510+ phy_write(phydev, 0x0d, 0x2);
5511+ phy_write(phydev, 0x0e, 0x6);
5512+ phy_write(phydev, 0x0d, 0xc002);
5513+ phy_write(phydev, 0x0e, 0xffff);
5514+
5515+ phy_write(phydev, 0x0d, 0x2);
5516+ phy_write(phydev, 0x0e, 0x8);
5517+ phy_write(phydev, 0x0d, 0xc002);
5518+ phy_write(phydev, 0x0e, 0x3fff);
5519+ phy_write(phydev, 0x0d, 0x0);
5520+
5521+ return 0;
5522+}
5523+
5524+static struct fec_platform_data fec_data __initdata = {
5525+ .init = mx6q_qmx6_fec_phy_init,
5526+ .phy = PHY_INTERFACE_MODE_RGMII,
5527+};
5528+
5529+static int mx6q_qmx6_spi_cs[] = {
5530+ MX6Q_QMX6_ECSPI1_CS1,
5531+};
5532+
5533+static const struct spi_imx_master mx6q_qmx6_spi_data __initconst = {
5534+ .chipselect = mx6q_qmx6_spi_cs,
5535+ .num_chipselect = ARRAY_SIZE(mx6q_qmx6_spi_cs),
5536+};
5537+
5538+#if defined(CONFIG_MTD_M25P80) || defined(CONFIG_MTD_M25P80_MODULE)
5539+static struct mtd_partition imx6_qmx6_spi_nor_partitions[] = {
5540+ {
5541+ .name = "bootloader",
5542+ .offset = 0,
5543+ .size = 0x00040000,
5544+ },
5545+ {
5546+ .name = "user",
5547+ .offset = MTDPART_OFS_APPEND,
5548+ .size = 0x003BC000,
5549+ },
5550+ {
5551+ /* this 16KB area is used for congatec manufacturing purposes */
5552+ /* we strongly recommend not to modify or destroy this area */
5553+ .name = "reserved",
5554+ .offset = MTDPART_OFS_APPEND,
5555+ .size = 0x00004000,
5556+ .mask_flags = MTD_WRITEABLE,
5557+ },
5558+};
5559+
5560+static struct flash_platform_data imx6_qmx6__spi_flash_data = {
5561+ .name = "m25p80",
5562+ .parts = imx6_qmx6_spi_nor_partitions,
5563+ .nr_parts = ARRAY_SIZE(imx6_qmx6_spi_nor_partitions),
5564+ .type = "sst25vf032b",
5565+};
5566+#endif
5567+
5568+static struct spi_board_info imx6_qmx6_spi_nor_device[] __initdata = {
5569+#if defined(CONFIG_MTD_M25P80)
5570+ {
5571+ .modalias = "m25p80",
5572+ .max_speed_hz = 20000000, /* max spi clock (SCK) speed in HZ */
5573+ .bus_num = 0,
5574+ .chip_select = 0,
5575+ .platform_data = &imx6_qmx6__spi_flash_data,
5576+ },
5577+#endif
5578+};
5579+
5580+static void spi_device_init(void)
5581+{
5582+ spi_register_board_info(imx6_qmx6_spi_nor_device,
5583+ ARRAY_SIZE(imx6_qmx6_spi_nor_device));
5584+}
5585+
5586+static struct imx_ssi_platform_data mx6_qmx6_ssi_pdata = {
5587+ .flags = IMX_SSI_DMA | IMX_SSI_SYN,
5588+};
5589+
5590+static struct platform_device mx6_qmx6_audio_device = {
5591+ .name = "imx-sgtl5000",
5592+};
5593+
5594+static struct mxc_audio_platform_data mx6_qmx6_audio_data = {
5595+ .ssi_num = 1,
5596+ .src_port = 2,
5597+ .ext_port = 6,
5598+ .hp_gpio = -1,
5599+};
5600+static int mx6_qmx6_sgtl5000_init(void)
5601+{
5602+ struct clk *clko;
5603+ struct clk *new_parent;
5604+ int rate;
5605+
5606+ clko = clk_get(NULL, "clko_clk");
5607+ if (IS_ERR(clko)) {
5608+ pr_err("can't get CLKO clock.\n");
5609+ return PTR_ERR(clko);
5610+ }
5611+ new_parent = clk_get(NULL, "ahb");
5612+ if (!IS_ERR(new_parent)) {
5613+ clk_set_parent(clko, new_parent);
5614+ clk_put(new_parent);
5615+ }
5616+ rate = clk_round_rate(clko, 16000000);
5617+ if (rate < 8000000 || rate > 27000000) {
5618+ pr_err("Error:SGTL5000 mclk freq %d out of range!\n", rate);
5619+ clk_put(clko);
5620+ return -1;
5621+ }
5622+
5623+ mx6_qmx6_audio_data.sysclk = rate;
5624+ clk_set_rate(clko, rate);
5625+ clk_enable(clko);
5626+ return 0;
5627+}
5628+static struct imxi2c_platform_data mx6q_qmx6_i2c_data = {
5629+ .bitrate = 100000,
5630+};
5631+
5632+static struct i2c_board_info mxc_i2c0_board_info[] __initdata = {
5633+ {
5634+ I2C_BOARD_INFO("sgtl5000", 0x0a),
5635+ },
5636+};
5637+
5638+
5639+static struct i2c_board_info mxc_i2c1_board_info[] __initdata = {
5640+ {
5641+ I2C_BOARD_INFO("mxc_hdmi_i2c", 0x50),
5642+ },
5643+};
5644+
5645+static struct i2c_board_info mxc_i2c2_board_info[] __initdata = {
5646+ {
5647+ I2C_BOARD_INFO("mxc_ldb_i2c", 0x50),
5648+ .platform_data = (void *)0,
5649+ },
5650+};
5651+static void imx6q_qmx6_usbotg_vbus(bool on)
5652+{
5653+ if (on)
5654+ gpio_set_value(MX6Q_QMX6_USB_OTG_PWR, 1);
5655+ else
5656+ gpio_set_value(MX6Q_QMX6_USB_OTG_PWR, 0);
5657+}
5658+
5659+static void __init imx6q_qmx6_init_usb(void)
5660+{
5661+ int ret = 0;
5662+
5663+ imx_otg_base = MX6_IO_ADDRESS(MX6Q_USB_OTG_BASE_ADDR);
5664+ /* disable external charger detect,
5665+ * or it will affect signal quality at dp .
5666+ */
5667+ ret = gpio_request(MX6Q_QMX6_USB_OTG_PWR, "usb-pwr");
5668+ if (ret) {
5669+ pr_err("failed to get GPIO MX6Q_QMX6_USB_OTG_PWR: %d\n",
5670+ ret);
5671+ return;
5672+ }
5673+ gpio_direction_output(MX6Q_QMX6_USB_OTG_PWR, 0);
5674+
5675+ mx6_set_otghost_vbus_func(imx6q_qmx6_usbotg_vbus);
5676+}
5677+
5678+/* HW Initialization, if return 0, initialization is successful. */
5679+static int mx6q_qmx6_sata_init(struct device *dev, void __iomem *addr)
5680+{
5681+ u32 tmpdata;
5682+ int ret = 0;
5683+ struct clk *clk;
5684+
5685+ sata_clk = clk_get(dev, "imx_sata_clk");
5686+ if (IS_ERR(sata_clk)) {
5687+ dev_err(dev, "no sata clock.\n");
5688+ return PTR_ERR(sata_clk);
5689+ }
5690+ ret = clk_enable(sata_clk);
5691+ if (ret) {
5692+ dev_err(dev, "can't enable sata clock.\n");
5693+ goto put_sata_clk;
5694+ }
5695+
5696+ /* Set PHY Paremeters, two steps to configure the GPR13,
5697+ * one write for rest of parameters, mask of first write is 0x07FFFFFD,
5698+ * and the other one write for setting the mpll_clk_off_b
5699+ *.rx_eq_val_0(iomuxc_gpr13[26:24]),
5700+ *.los_lvl(iomuxc_gpr13[23:19]),
5701+ *.rx_dpll_mode_0(iomuxc_gpr13[18:16]),
5702+ *.sata_speed(iomuxc_gpr13[15]),
5703+ *.mpll_ss_en(iomuxc_gpr13[14]),
5704+ *.tx_atten_0(iomuxc_gpr13[13:11]),
5705+ *.tx_boost_0(iomuxc_gpr13[10:7]),
5706+ *.tx_lvl(iomuxc_gpr13[6:2]),
5707+ *.mpll_ck_off(iomuxc_gpr13[1]),
5708+ *.tx_edgerate_0(iomuxc_gpr13[0]),
5709+ */
5710+ tmpdata = readl(IOMUXC_GPR13);
5711+ writel(((tmpdata & ~0x07FFFFFD) | 0x0593A044), IOMUXC_GPR13);
5712+
5713+ /* enable SATA_PHY PLL */
5714+ tmpdata = readl(IOMUXC_GPR13);
5715+ writel(((tmpdata & ~0x2) | 0x2), IOMUXC_GPR13);
5716+
5717+ /* Get the AHB clock rate, and configure the TIMER1MS reg later */
5718+ clk = clk_get(NULL, "ahb");
5719+ if (IS_ERR(clk)) {
5720+ dev_err(dev, "no ahb clock.\n");
5721+ ret = PTR_ERR(clk);
5722+ goto release_sata_clk;
5723+ }
5724+ tmpdata = clk_get_rate(clk) / 1000;
5725+ clk_put(clk);
5726+
5727+ ret = sata_init(addr, tmpdata);
5728+ if (ret == 0)
5729+ return ret;
5730+
5731+release_sata_clk:
5732+ clk_disable(sata_clk);
5733+put_sata_clk:
5734+ clk_put(sata_clk);
5735+
5736+ return ret;
5737+}
5738+
5739+static void mx6q_qmx6_sata_exit(struct device *dev)
5740+{
5741+ clk_disable(sata_clk);
5742+ clk_put(sata_clk);
5743+}
5744+
5745+static struct ahci_platform_data mx6q_qmx6_sata_data = {
5746+ .init = mx6q_qmx6_sata_init,
5747+ .exit = mx6q_qmx6_sata_exit,
5748+};
5749+
5750+static struct viv_gpu_platform_data imx6q_gpu_pdata __initdata = {
5751+ .reserved_mem_size = SZ_128M,
5752+};
5753+
5754+static struct imx_asrc_platform_data imx_asrc_data = {
5755+ .channel_bits = 4,
5756+ .clk_map_ver = 2,
5757+};
5758+
5759+static struct ipuv3_fb_platform_data qmx6_fb_data[] = {
5760+ { /*fb0*/
5761+ .disp_dev = "ldb",
5762+ .interface_pix_fmt = IPU_PIX_FMT_RGB666,
5763+ .mode_str = "LDB-XGA",
5764+ .default_bpp = 16,
5765+ .int_clk = false,
5766+ }, {
5767+ .disp_dev = "lcd",
5768+ .interface_pix_fmt = IPU_PIX_FMT_RGB565,
5769+ .mode_str = "CLAA-WVGA",
5770+ .default_bpp = 16,
5771+ .int_clk = false,
5772+ }, {
5773+ .disp_dev = "ldb",
5774+ .interface_pix_fmt = IPU_PIX_FMT_RGB666,
5775+ .mode_str = "LDB-SVGA",
5776+ .default_bpp = 16,
5777+ .int_clk = false,
5778+ }, {
5779+ .disp_dev = "ldb",
5780+ .interface_pix_fmt = IPU_PIX_FMT_RGB666,
5781+ .mode_str = "LDB-VGA",
5782+ .default_bpp = 16,
5783+ .int_clk = false,
5784+ },
5785+};
5786+
5787+static void hdmi_init(int ipu_id, int disp_id)
5788+{
5789+ int hdmi_mux_setting;
5790+
5791+ if ((ipu_id > 1) || (ipu_id < 0)) {
5792+ pr_err("Invalid IPU select for HDMI: %d. Set to 0\n", ipu_id);
5793+ ipu_id = 0;
5794+ }
5795+
5796+ if ((disp_id > 1) || (disp_id < 0)) {
5797+ pr_err("Invalid DI select for HDMI: %d. Set to 0\n", disp_id);
5798+ disp_id = 0;
5799+ }
5800+
5801+ /* Configure the connection between IPU1/2 and HDMI */
5802+ hdmi_mux_setting = 2*ipu_id + disp_id;
5803+
5804+ /* GPR3, bits 2-3 = HDMI_MUX_CTL */
5805+ mxc_iomux_set_gpr_register(3, 2, 2, hdmi_mux_setting);
5806+}
5807+
5808+static struct fsl_mxc_hdmi_platform_data hdmi_data = {
5809+ .init = hdmi_init,
5810+};
5811+
5812+static struct fsl_mxc_hdmi_core_platform_data hdmi_core_data = {
5813+ .ipu_id = 0,
5814+ .disp_id = 0,
5815+};
5816+
5817+static struct fsl_mxc_lcd_platform_data lcdif_data = {
5818+ .ipu_id = 0,
5819+ .disp_id = 0,
5820+ .default_ifmt = IPU_PIX_FMT_RGB565,
5821+};
5822+
5823+static struct fsl_mxc_ldb_platform_data ldb_data = {
5824+ .ipu_id = 1,
5825+ .disp_id = 0,
5826+ .ext_ref = 1,
5827+ .mode = LDB_SEP0,
5828+ .sec_ipu_id = 1,
5829+ .sec_disp_id = 1,
5830+};
5831+
5832+static struct imx_ipuv3_platform_data ipu_data[] = {
5833+ {
5834+ .rev = 4,
5835+ .csi_clk[0] = "clko2_clk",
5836+ }, {
5837+ .rev = 4,
5838+ .csi_clk[0] = "clko2_clk",
5839+ },
5840+};
5841+
5842+static struct fsl_mxc_capture_platform_data capture_data[] = {
5843+ {
5844+ .csi = 0,
5845+ .ipu = 0,
5846+ .mclk_source = 0,
5847+ .is_mipi = 0,
5848+ },
5849+};
5850+
5851+static void qmx6_suspend_enter(void)
5852+{
5853+ /* suspend preparation */
5854+ /* disable backlight */
5855+ gpio_set_value(MX6Q_QMX6_BLT_EN, 0);
5856+}
5857+
5858+static void qmx6_suspend_exit(void)
5859+{
5860+ /* resume restore */
5861+ /* enable backlight */
5862+ gpio_set_value(MX6Q_QMX6_BLT_EN, 1);
5863+}
5864+static const struct pm_platform_data mx6q_qmx6_pm_data __initconst = {
5865+ .name = "imx_pm",
5866+ .suspend_enter = qmx6_suspend_enter,
5867+ .suspend_exit = qmx6_suspend_exit,
5868+};
5869+
5870+static struct regulator_consumer_supply qmx6_vmmc_consumers[] = {
5871+ REGULATOR_SUPPLY("vmmc", "sdhci-esdhc-imx.1"),
5872+ REGULATOR_SUPPLY("vmmc", "sdhci-esdhc-imx.2"),
5873+ REGULATOR_SUPPLY("vmmc", "sdhci-esdhc-imx.3"),
5874+};
5875+
5876+static struct regulator_init_data qmx6_vmmc_init = {
5877+ .num_consumer_supplies = ARRAY_SIZE(qmx6_vmmc_consumers),
5878+ .consumer_supplies = qmx6_vmmc_consumers,
5879+};
5880+
5881+static struct fixed_voltage_config qmx6_vmmc_reg_config = {
5882+ .supply_name = "vmmc",
5883+ .microvolts = 3300000,
5884+ .gpio = -1,
5885+ .init_data = &qmx6_vmmc_init,
5886+};
5887+
5888+static struct platform_device qmx6_vmmc_reg_devices = {
5889+ .name = "reg-fixed-voltage",
5890+ .id = 3,
5891+ .dev = {
5892+ .platform_data = &qmx6_vmmc_reg_config,
5893+ },
5894+};
5895+
5896+#ifdef CONFIG_SND_SOC_SGTL5000
5897+
5898+static struct regulator_consumer_supply sgtl5000_qmx6_consumer_vdda = {
5899+ .supply = "VDDA",
5900+ .dev_name = "0-000a",
5901+};
5902+
5903+static struct regulator_consumer_supply sgtl5000_qmx6_consumer_vddio = {
5904+ .supply = "VDDIO",
5905+ .dev_name = "0-000a",
5906+};
5907+
5908+static struct regulator_consumer_supply sgtl5000_qmx6_consumer_vddd = {
5909+ .supply = "VDDD",
5910+ .dev_name = "0-000a",
5911+};
5912+
5913+static struct regulator_init_data sgtl5000_qmx6_vdda_reg_initdata = {
5914+ .num_consumer_supplies = 1,
5915+ .consumer_supplies = &sgtl5000_qmx6_consumer_vdda,
5916+};
5917+
5918+static struct regulator_init_data sgtl5000_qmx6_vddio_reg_initdata = {
5919+ .num_consumer_supplies = 1,
5920+ .consumer_supplies = &sgtl5000_qmx6_consumer_vddio,
5921+};
5922+
5923+static struct regulator_init_data sgtl5000_qmx6_vddd_reg_initdata = {
5924+ .num_consumer_supplies = 1,
5925+ .consumer_supplies = &sgtl5000_qmx6_consumer_vddd,
5926+};
5927+
5928+static struct fixed_voltage_config sgtl5000_qmx6_vdda_reg_config = {
5929+ .supply_name = "VDDA",
5930+ .microvolts = 2500000,
5931+ .gpio = -1,
5932+ .init_data = &sgtl5000_qmx6_vdda_reg_initdata,
5933+};
5934+
5935+static struct fixed_voltage_config sgtl5000_qmx6_vddio_reg_config = {
5936+ .supply_name = "VDDIO",
5937+ .microvolts = 3300000,
5938+ .gpio = -1,
5939+ .init_data = &sgtl5000_qmx6_vddio_reg_initdata,
5940+};
5941+
5942+static struct fixed_voltage_config sgtl5000_qmx6_vddd_reg_config = {
5943+ .supply_name = "VDDD",
5944+ .microvolts = 0,
5945+ .gpio = -1,
5946+ .init_data = &sgtl5000_qmx6_vddd_reg_initdata,
5947+};
5948+
5949+static struct platform_device sgtl5000_qmx6_vdda_reg_devices = {
5950+ .name = "reg-fixed-voltage",
5951+ .id = 0,
5952+ .dev = {
5953+ .platform_data = &sgtl5000_qmx6_vdda_reg_config,
5954+ },
5955+};
5956+
5957+static struct platform_device sgtl5000_qmx6_vddio_reg_devices = {
5958+ .name = "reg-fixed-voltage",
5959+ .id = 1,
5960+ .dev = {
5961+ .platform_data = &sgtl5000_qmx6_vddio_reg_config,
5962+ },
5963+};
5964+
5965+static struct platform_device sgtl5000_qmx6_vddd_reg_devices = {
5966+ .name = "reg-fixed-voltage",
5967+ .id = 2,
5968+ .dev = {
5969+ .platform_data = &sgtl5000_qmx6_vddd_reg_config,
5970+ },
5971+};
5972+
5973+#endif /* CONFIG_SND_SOC_SGTL5000 */
5974+
5975+static int imx6q_init_audio(void)
5976+{
5977+ mxc_register_device(&mx6_qmx6_audio_device,
5978+ &mx6_qmx6_audio_data);
5979+ imx6q_add_imx_ssi(1, &mx6_qmx6_ssi_pdata);
5980+#ifdef CONFIG_SND_SOC_SGTL5000
5981+ platform_device_register(&sgtl5000_qmx6_vdda_reg_devices);
5982+ platform_device_register(&sgtl5000_qmx6_vddio_reg_devices);
5983+ platform_device_register(&sgtl5000_qmx6_vddd_reg_devices);
5984+ mx6_qmx6_sgtl5000_init();
5985+#endif
5986+ return 0;
5987+
5988+}
5989+
5990+static void pcie_3v3_reset(void)
5991+{
5992+ /* reset miniPCIe */
5993+ gpio_request(MX6Q_QMX6_PCIE_RST_B, "pcie_reset");
5994+ gpio_direction_output(MX6Q_QMX6_PCIE_RST_B, 1);
5995+
5996+ gpio_set_value(MX6Q_QMX6_PCIE_RST_B, 0);
5997+ /* The PCI Express Mini CEM specification states that PREST# is
5998+ deasserted minimum 1ms after 3.3vVaux has been applied and stable*/
5999+ msleep(1);
6000+ gpio_set_value(MX6Q_QMX6_PCIE_RST_B, 1);
6001+}
6002+
6003+#if defined(CONFIG_KEYBOARD_GPIO) || defined(CONFIG_KEYBOARD_GPIO_MODULE)
6004+#define GPIO_BUTTON(gpio_num, ev_code, act_low, descr, wake) \
6005+{ \
6006+ .gpio = gpio_num, \
6007+ .type = EV_KEY, \
6008+ .code = ev_code, \
6009+ .active_low = act_low, \
6010+ .desc = "btn " descr, \
6011+ .wakeup = wake, \
6012+}
6013+
6014+static struct gpio_keys_button imx6q_buttons[] = {
6015+ GPIO_BUTTON(MX6Q_QMX6_POWER_OFF, KEY_POWER, 1, "key-power", 1),
6016+ GPIO_BUTTON(MX6Q_QMX6_MENU_KEY, KEY_MENU, 1, "key-memu", 0),
6017+ GPIO_BUTTON(MX6Q_QMX6_HOME_KEY, KEY_HOME, 1, "key-home", 0),
6018+ GPIO_BUTTON(MX6Q_QMX6_BACK_KEY, KEY_BACK, 1, "key-back", 0),
6019+ GPIO_BUTTON(MX6Q_QMX6_VOLUME_UP_KEY, KEY_VOLUMEUP, 1, "volume-up", 0),
6020+ GPIO_BUTTON(MX6Q_QMX6_VOLUME_DOWN_KEY, KEY_VOLUMEDOWN, 1, "volume-down", 0),
6021+};
6022+
6023+static struct gpio_keys_platform_data imx6q_button_data = {
6024+ .buttons = imx6q_buttons,
6025+ .nbuttons = ARRAY_SIZE(imx6q_buttons),
6026+};
6027+
6028+static struct platform_device imx6q_button_device = {
6029+ .name = "gpio-keys",
6030+ .id = -1,
6031+ .num_resources = 0,
6032+ .dev = {
6033+ .platform_data = &imx6q_button_data,
6034+ }
6035+};
6036+
6037+static void __init imx6q_add_device_buttons(void)
6038+{
6039+ platform_device_register(&imx6q_button_device);
6040+}
6041+#else
6042+static void __init imx6q_add_device_buttons(void) {}
6043+#endif
6044+
6045+static struct platform_pwm_backlight_data mx6_qmx6_pwm_backlight_data = {
6046+ .pwm_id = 3,
6047+ .max_brightness = 255,
6048+ .dft_brightness = 128,
6049+ .pwm_period_ns = 50000,
6050+};
6051+
6052+static struct mxc_dvfs_platform_data qmx6_dvfscore_data = {
6053+ .reg_id = "cpu_vddgp",
6054+ .clk1_id = "cpu_clk",
6055+ .clk2_id = "gpc_dvfs_clk",
6056+ .gpc_cntr_offset = MXC_GPC_CNTR_OFFSET,
6057+ .ccm_cdcr_offset = MXC_CCM_CDCR_OFFSET,
6058+ .ccm_cacrr_offset = MXC_CCM_CACRR_OFFSET,
6059+ .ccm_cdhipr_offset = MXC_CCM_CDHIPR_OFFSET,
6060+ .prediv_mask = 0x1F800,
6061+ .prediv_offset = 11,
6062+ .prediv_val = 3,
6063+ .div3ck_mask = 0xE0000000,
6064+ .div3ck_offset = 29,
6065+ .div3ck_val = 2,
6066+ .emac_val = 0x08,
6067+ .upthr_val = 25,
6068+ .dnthr_val = 9,
6069+ .pncthr_val = 33,
6070+ .upcnt_val = 10,
6071+ .dncnt_val = 10,
6072+ .delay_time = 80,
6073+};
6074+
6075+static void __init fixup_mxc_board(struct machine_desc *desc, struct tag *tags,
6076+ char **cmdline, struct meminfo *mi)
6077+{
6078+ char *str;
6079+ struct tag *t;
6080+ int i = 0;
6081+ struct ipuv3_fb_platform_data *pdata_fb = qmx6_fb_data;
6082+
6083+ for_each_tag(t, tags) {
6084+ if (t->hdr.tag == ATAG_CMDLINE) {
6085+ str = t->u.cmdline.cmdline;
6086+ str = strstr(str, "fbmem=");
6087+ if (str != NULL) {
6088+ str += 6;
6089+ pdata_fb[i++].res_size[0] = memparse(str, &str);
6090+ while (*str == ',' &&
6091+ i < ARRAY_SIZE(qmx6_fb_data)) {
6092+ str++;
6093+ pdata_fb[i++].res_size[0] = memparse(str, &str);
6094+ }
6095+ }
6096+ break;
6097+ }
6098+ }
6099+}
6100+
6101+#define SNVS_LPCR 0x38
6102+static void mx6_snvs_poweroff(void)
6103+{
6104+
6105+ void __iomem *mx6_snvs_base = MX6_IO_ADDRESS(MX6Q_SNVS_BASE_ADDR);
6106+ u32 value;
6107+ value = readl(mx6_snvs_base + SNVS_LPCR);
6108+ /*set TOP and DP_EN bit*/
6109+ writel(value | 0x60, mx6_snvs_base + SNVS_LPCR);
6110+}
6111+
6112+static int __init early_disable_ldb(char *p)
6113+{
6114+ /*mipi dsi need pll3_pfd_540M as 540MHz, ldb will change to 454Mhz*/
6115+ disable_ldb = 1;
6116+ return 0;
6117+}
6118+
6119+early_param("disable_ldb", early_disable_ldb);
6120+
6121+static const struct imx_pcie_platform_data mx6_qmx6_pcie_data __initconst = {
6122+ .pcie_pwr_en = -1,
6123+ .pcie_rst = MX6Q_QMX6_PCIE_RST_B,
6124+ .pcie_wake_up = MX6Q_QMX6_PCIE_WAKE_B,
6125+ .pcie_dis = -1,
6126+};
6127+
6128+/*
6129+ * Board specific initialization.
6130+ */
6131+static void __init mx6_qmx6_board_init(void)
6132+{
6133+ int i;
6134+ int ret;
6135+ struct clk *clko2;
6136+ struct clk *new_parent;
6137+ int rate;
6138+
6139+ if (cpu_is_mx6q())
6140+ mxc_iomux_v3_setup_multiple_pads(mx6q_qmx6_pads,
6141+ ARRAY_SIZE(mx6q_qmx6_pads));
6142+ else if (cpu_is_mx6dl()) {
6143+ mxc_iomux_v3_setup_multiple_pads(mx6dl_qmx6_pads,
6144+ ARRAY_SIZE(mx6dl_qmx6_pads));
6145+ }
6146+
6147+ gp_reg_id = qmx6_dvfscore_data.reg_id;
6148+ mx6q_qmx6_init_uart();
6149+
6150+ /*
6151+ * MX6DL/Solo only supports single IPU
6152+ * The following codes are used to change ipu id
6153+ * and display id information for MX6DL/Solo. Then
6154+ * register 1 IPU device and up to 2 displays for
6155+ * MX6DL/Solo
6156+ */
6157+ if (cpu_is_mx6dl()) {
6158+ ldb_data.ipu_id = 0;
6159+ ldb_data.disp_id = 0;
6160+ ldb_data.sec_ipu_id = 0;
6161+ ldb_data.sec_disp_id = 1;
6162+ hdmi_core_data.disp_id = 1;
6163+ }
6164+ imx6q_add_mxc_hdmi_core(&hdmi_core_data);
6165+
6166+ imx6q_add_ipuv3(0, &ipu_data[0]);
6167+ if (cpu_is_mx6q()) {
6168+ imx6q_add_ipuv3(1, &ipu_data[1]);
6169+ for (i = 0; i < ARRAY_SIZE(qmx6_fb_data); i++)
6170+ imx6q_add_ipuv3fb(i, &qmx6_fb_data[i]);
6171+ } else
6172+ for (i = 0; i < (ARRAY_SIZE(qmx6_fb_data) + 1) / 2; i++)
6173+ imx6q_add_ipuv3fb(i, &qmx6_fb_data[i]);
6174+
6175+ imx6q_add_vdoa();
6176+ imx6q_add_lcdif(&lcdif_data);
6177+ if (!disable_ldb)
6178+ imx6q_add_ldb(&ldb_data);
6179+ imx6q_add_v4l2_output(0);
6180+ imx6q_add_v4l2_capture(0, &capture_data[0]);
6181+ imx6q_add_imx_snvs_rtc();
6182+
6183+ imx6q_add_imx_i2c(0, &mx6q_qmx6_i2c_data);
6184+ imx6q_add_imx_i2c(1, &mx6q_qmx6_i2c_data);
6185+ imx6q_add_imx_i2c(2, &mx6q_qmx6_i2c_data);
6186+ i2c_register_board_info(0, mxc_i2c0_board_info,
6187+ ARRAY_SIZE(mxc_i2c0_board_info));
6188+ i2c_register_board_info(1, mxc_i2c1_board_info,
6189+ ARRAY_SIZE(mxc_i2c1_board_info));
6190+ i2c_register_board_info(2, mxc_i2c2_board_info,
6191+ ARRAY_SIZE(mxc_i2c2_board_info));
6192+ ret = gpio_request(MX6Q_QMX6_PFUZE_INT, "pFUZE-int");
6193+ if (ret) {
6194+ printk(KERN_ERR"request pFUZE-int error!!\n");
6195+ return;
6196+ } else {
6197+ gpio_direction_input(MX6Q_QMX6_PFUZE_INT);
6198+ mx6q_qmx6_init_pfuze100(MX6Q_QMX6_PFUZE_INT);
6199+ }
6200+
6201+ /* SPI */
6202+ imx6q_add_ecspi(0, &mx6q_qmx6_spi_data);
6203+ spi_device_init();
6204+
6205+ imx6q_add_mxc_hdmi(&hdmi_data);
6206+
6207+ imx6q_add_anatop_thermal_imx(1, &mx6q_qmx6_anatop_thermal_data);
6208+ imx6_init_fec(fec_data);
6209+ imx6q_add_pm_imx(0, &mx6q_qmx6_pm_data);
6210+ /* Move sd3 to first because sd3 connect to emmc.
6211+ Mfgtools want emmc is mmcblk0 and other sd card is mmcblk1.
6212+ */
6213+ imx6q_add_sdhci_usdhc_imx(1, &mx6q_qmx6_sd2_data);
6214+ imx6q_add_sdhci_usdhc_imx(2, &mx6q_qmx6_sd3_data);
6215+ imx6q_add_sdhci_usdhc_imx(3, &mx6q_qmx6_sd4_data);
6216+
6217+ imx_add_viv_gpu(&imx6_gpu_data, &imx6q_gpu_pdata);
6218+ imx6q_qmx6_init_usb();
6219+ /* SATA is not supported by MX6DL/Solo */
6220+ if (cpu_is_mx6q())
6221+ imx6q_add_ahci(0, &mx6q_qmx6_sata_data);
6222+ imx6q_add_vpu();
6223+ imx6q_init_audio();
6224+ platform_device_register(&qmx6_vmmc_reg_devices);
6225+
6226+ imx_asrc_data.asrc_core_clk = clk_get(NULL, "asrc_clk");
6227+ imx_asrc_data.asrc_audio_clk = clk_get(NULL, "asrc_serial_clk");
6228+ imx6q_add_asrc(&imx_asrc_data);
6229+
6230+ /* release USB Hub reset */
6231+ gpio_set_value(MX6Q_QMX6_USB_HUB_RESET, 1);
6232+
6233+ /* fan & backlight PWM */
6234+ imx6q_add_mxc_pwm(0);
6235+ imx6q_add_mxc_pwm(3);
6236+ imx6q_add_mxc_pwm_backlight(3, &mx6_qmx6_pwm_backlight_data);
6237+
6238+ /* switch on backlight */
6239+ gpio_request(MX6Q_QMX6_BLT_EN, "backlight");
6240+ gpio_direction_output(MX6Q_QMX6_BLT_EN, 1);
6241+ gpio_set_value(MX6Q_QMX6_BLT_EN, 1);
6242+
6243+ imx6q_add_otp();
6244+ imx6q_add_viim();
6245+ imx6q_add_imx2_wdt(0, NULL);
6246+ imx6q_add_dma();
6247+
6248+ imx6q_add_dvfs_core(&qmx6_dvfscore_data);
6249+
6250+ imx6q_add_device_buttons();
6251+
6252+ imx6q_add_hdmi_soc();
6253+ imx6q_add_hdmi_soc_dai();
6254+
6255+ clko2 = clk_get(NULL, "clko2_clk");
6256+ if (IS_ERR(clko2))
6257+ pr_err("can't get CLKO2 clock.\n");
6258+
6259+ new_parent = clk_get(NULL, "osc_clk");
6260+ if (!IS_ERR(new_parent)) {
6261+ clk_set_parent(clko2, new_parent);
6262+ clk_put(new_parent);
6263+ }
6264+ rate = clk_round_rate(clko2, 24000000);
6265+ clk_set_rate(clko2, rate);
6266+ clk_enable(clko2);
6267+
6268+ pm_power_off = mx6_snvs_poweroff;
6269+ imx6q_add_busfreq();
6270+
6271+ imx6q_add_pcie(&mx6_qmx6_pcie_data);
6272+}
6273+
6274+extern void __iomem *twd_base;
6275+static void __init mx6_qmx6_timer_init(void)
6276+{
6277+ struct clk *uart_clk;
6278+#ifdef CONFIG_LOCAL_TIMERS
6279+ twd_base = ioremap(LOCAL_TWD_ADDR, SZ_256);
6280+ BUG_ON(!twd_base);
6281+#endif
6282+ mx6_clocks_init(32768, 24000000, 0, 0);
6283+
6284+ uart_clk = clk_get_sys("imx-uart.0", NULL);
6285+ early_console_setup(UART2_BASE_ADDR, uart_clk);
6286+}
6287+
6288+static struct sys_timer mx6_qmx6_timer = {
6289+ .init = mx6_qmx6_timer_init,
6290+};
6291+
6292+static void __init mx6q_qmx6_reserve(void)
6293+{
6294+ phys_addr_t phys;
6295+ int i;
6296+
6297+ if (imx6q_gpu_pdata.reserved_mem_size) {
6298+ phys = memblock_alloc_base(imx6q_gpu_pdata.reserved_mem_size,
6299+ SZ_4K, SZ_1G);
6300+ memblock_free(phys, imx6q_gpu_pdata.reserved_mem_size);
6301+ memblock_remove(phys, imx6q_gpu_pdata.reserved_mem_size);
6302+ imx6q_gpu_pdata.reserved_mem_base = phys;
6303+ }
6304+
6305+ for (i = 0; i < ARRAY_SIZE(qmx6_fb_data); i++)
6306+ if (qmx6_fb_data[i].res_size[0]) {
6307+ /* reserve for background buffer */
6308+ phys = memblock_alloc(qmx6_fb_data[i].res_size[0],
6309+ SZ_4K);
6310+ memblock_free(phys, qmx6_fb_data[i].res_size[0]);
6311+ memblock_remove(phys, qmx6_fb_data[i].res_size[0]);
6312+ qmx6_fb_data[i].res_base[0] = phys;
6313+ }
6314+}
6315+
6316+/*
6317+ * initialize __mach_desc_MX6Q_QMX6 data structure.
6318+ */
6319+MACHINE_START(MX6Q_QMX6, "Congatec i.MX 6Quad QMX6 Board")
6320+ /* Maintainer: congatec */
6321+ .boot_params = MX6_PHYS_OFFSET + 0x100,
6322+ .fixup = fixup_mxc_board,
6323+ .map_io = mx6_map_io,
6324+ .init_irq = mx6_init_irq,
6325+ .init_machine = mx6_qmx6_board_init,
6326+ .timer = &mx6_qmx6_timer,
6327+ .reserve = mx6q_qmx6_reserve,
6328+MACHINE_END
6329diff --git a/arch/arm/mach-mx6/board-mx6q_qmx6.h b/arch/arm/mach-mx6/board-mx6q_qmx6.h
6330new file mode 100644
6331index 0000000..48829a3
6332--- /dev/null
6333+++ b/arch/arm/mach-mx6/board-mx6q_qmx6.h
6334@@ -0,0 +1,199 @@
6335+/*
6336+ * Copyright (C) 2012 Freescale Semiconductor, Inc. All Rights Reserved.
6337+ *
6338+ * This program is free software; you can redistribute it and/or modify
6339+ * it under the terms of the GNU General Public License as published by
6340+ * the Free Software Foundation; either version 2 of the License, or
6341+ * (at your option) any later version.
6342+
6343+ * This program is distributed in the hope that it will be useful,
6344+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
6345+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
6346+ * GNU General Public License for more details.
6347+
6348+ * You should have received a copy of the GNU General Public License along
6349+ * with this program; if not, write to the Free Software Foundation, Inc.,
6350+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
6351+ */
6352+
6353+#ifndef _BOARD_MX6Q_QMX6_H
6354+#define _BOARD_MX6Q_QMX6_H
6355+#include <mach/iomux-mx6q.h>
6356+
6357+static iomux_v3_cfg_t mx6q_qmx6_pads[] = {
6358+ /* AUDMUX */
6359+ MX6Q_PAD_DI0_PIN4__AUDMUX_AUD6_RXD,
6360+ MX6Q_PAD_DI0_PIN15__AUDMUX_AUD6_TXC,
6361+ MX6Q_PAD_DI0_PIN2__AUDMUX_AUD6_TXD,
6362+ MX6Q_PAD_DI0_PIN3__AUDMUX_AUD6_TXFS,
6363+
6364+ /* CAN1 */
6365+ MX6Q_PAD_KEY_ROW2__CAN1_RXCAN,
6366+ MX6Q_PAD_KEY_COL2__CAN1_TXCAN,
6367+ MX6Q_PAD_GPIO_2__GPIO_1_2, /* PCIE_WAKE_B */
6368+
6369+ /* CCM */
6370+ MX6Q_PAD_GPIO_0__GPIO_1_0, /* GPIO_0/Audio Ref. CLK */
6371+
6372+ /* ECSPI1 */
6373+ MX6Q_PAD_EIM_D17__ECSPI1_MISO,
6374+ MX6Q_PAD_EIM_D18__ECSPI1_MOSI,
6375+ MX6Q_PAD_EIM_D16__ECSPI1_SCLK,
6376+ MX6Q_PAD_EIM_D19__GPIO_3_19, /*SS1*/
6377+
6378+ /* ENET */
6379+ MX6Q_PAD_ENET_MDIO__ENET_MDIO,
6380+ MX6Q_PAD_ENET_MDC__ENET_MDC,
6381+ MX6Q_PAD_RGMII_TXC__ENET_RGMII_TXC,
6382+ MX6Q_PAD_RGMII_TD0__ENET_RGMII_TD0,
6383+ MX6Q_PAD_RGMII_TD1__ENET_RGMII_TD1,
6384+ MX6Q_PAD_RGMII_TD2__ENET_RGMII_TD2,
6385+ MX6Q_PAD_RGMII_TD3__ENET_RGMII_TD3,
6386+ MX6Q_PAD_RGMII_TX_CTL__ENET_RGMII_TX_CTL,
6387+ MX6Q_PAD_ENET_REF_CLK__ENET_TX_CLK,
6388+ MX6Q_PAD_RGMII_RXC__ENET_RGMII_RXC,
6389+ MX6Q_PAD_RGMII_RD0__ENET_RGMII_RD0,
6390+ MX6Q_PAD_RGMII_RD1__ENET_RGMII_RD1,
6391+ MX6Q_PAD_RGMII_RD2__ENET_RGMII_RD2,
6392+ MX6Q_PAD_RGMII_RD3__ENET_RGMII_RD3,
6393+ MX6Q_PAD_RGMII_RX_CTL__ENET_RGMII_RX_CTL,
6394+ MX6Q_PAD_ENET_TX_EN__GPIO_1_28, /* Micrel RGMII Phy Interrupt */
6395+ MX6Q_PAD_EIM_D23__GPIO_3_23, /* RGMII reset */
6396+
6397+ /* GPIO1 */
6398+ MX6Q_PAD_ENET_RX_ER__SPDIF_IN1, /* SPDIF_IN */
6399+
6400+ /* GPIO2 */
6401+ MX6Q_PAD_NANDF_D1__GPIO_2_1, /* J14 - Menu Button */
6402+ MX6Q_PAD_NANDF_D2__GPIO_2_2, /* J14 - Back Button */
6403+ MX6Q_PAD_NANDF_D3__GPIO_2_3, /* J14 - Search Button */
6404+ MX6Q_PAD_NANDF_D4__GPIO_2_4, /* J14 - Home Button */
6405+ MX6Q_PAD_EIM_A22__GPIO_2_16, /* J12 - Boot Mode Select */
6406+ MX6Q_PAD_EIM_A21__GPIO_2_17, /* J12 - Boot Mode Select */
6407+ MX6Q_PAD_EIM_A20__GPIO_2_18, /* J12 - Boot Mode Select */
6408+ MX6Q_PAD_EIM_A19__GPIO_2_19, /* J12 - Boot Mode Select */
6409+ MX6Q_PAD_EIM_A18__GPIO_2_20, /* J12 - Boot Mode Select */
6410+ MX6Q_PAD_EIM_A17__GPIO_2_21, /* J12 - Boot Mode Select */
6411+ MX6Q_PAD_EIM_A16__GPIO_2_22, /* J12 - Boot Mode Select */
6412+ MX6Q_PAD_EIM_RW__GPIO_2_26, /* J12 - Boot Mode Select */
6413+ MX6Q_PAD_EIM_LBA__GPIO_2_27, /* J12 - Boot Mode Select */
6414+ MX6Q_PAD_EIM_EB0__GPIO_2_28, /* J12 - Boot Mode Select */
6415+ MX6Q_PAD_EIM_EB1__GPIO_2_29, /* J12 - Boot Mode Select */
6416+ MX6Q_PAD_EIM_EB3__GPIO_2_31, /* J12 - Boot Mode Select */
6417+
6418+ /* GPIO3 */
6419+ MX6Q_PAD_EIM_DA0__GPIO_3_0, /* J12 - Boot Mode Select */
6420+ MX6Q_PAD_EIM_DA1__GPIO_3_1, /* J12 - Boot Mode Select */
6421+ MX6Q_PAD_EIM_DA2__GPIO_3_2, /* J12 - Boot Mode Select */
6422+ MX6Q_PAD_EIM_DA3__GPIO_3_3, /* J12 - Boot Mode Select */
6423+ MX6Q_PAD_EIM_DA4__GPIO_3_4, /* J12 - Boot Mode Select */
6424+ MX6Q_PAD_EIM_DA5__GPIO_3_5, /* J12 - Boot Mode Select */
6425+ MX6Q_PAD_EIM_DA6__GPIO_3_6, /* J12 - Boot Mode Select */
6426+ MX6Q_PAD_EIM_DA7__GPIO_3_7, /* J12 - Boot Mode Select */
6427+ MX6Q_PAD_EIM_DA8__GPIO_3_8, /* J12 - Boot Mode Select */
6428+ MX6Q_PAD_EIM_DA9__GPIO_3_9, /* J12 - Boot Mode Select */
6429+ MX6Q_PAD_EIM_DA10__GPIO_3_10, /* J12 - Boot Mode Select */
6430+ MX6Q_PAD_EIM_DA11__GPIO_3_11, /* J12 - Boot Mode Select */
6431+ MX6Q_PAD_EIM_DA12__GPIO_3_12, /* J12 - Boot Mode Select */
6432+ MX6Q_PAD_EIM_DA13__GPIO_3_13, /* J12 - Boot Mode Select */
6433+ MX6Q_PAD_EIM_DA14__GPIO_3_14, /* J12 - Boot Mode Select */
6434+ MX6Q_PAD_EIM_DA15__GPIO_3_15, /* J12 - Boot Mode Select */
6435+
6436+ /* GPIO4 */
6437+ MX6Q_PAD_GPIO_19__GPIO_4_5, /* Volume Down */
6438+
6439+ /* GPIO5 */
6440+ MX6Q_PAD_EIM_WAIT__GPIO_5_0, /* J12 - Boot Mode Select */
6441+ MX6Q_PAD_EIM_A24__GPIO_5_4, /* J12 - Boot Mode Select */
6442+
6443+ /* GPIO6 */
6444+ MX6Q_PAD_EIM_A23__GPIO_6_6, /* J12 - Boot Mode Select */
6445+
6446+ /* GPIO7 */
6447+ MX6Q_PAD_GPIO_17__GPIO_7_12, /* USB Hub Reset */
6448+ MX6Q_PAD_GPIO_18__GPIO_7_13, /* Volume Up */
6449+
6450+ /* I2C1 - PRIMARY */
6451+ MX6Q_PAD_EIM_D21__I2C1_SCL, /* GPIO3[21] */
6452+ MX6Q_PAD_EIM_D28__I2C1_SDA, /* GPIO3[28] */
6453+
6454+ /* I2C2 - PMIC SDVO */
6455+ MX6Q_PAD_KEY_COL3__I2C2_SCL, /* GPIO4[12] */
6456+ MX6Q_PAD_KEY_ROW3__I2C2_SDA, /* GPIO4[13] */
6457+
6458+ /* I2C3 - Unused */
6459+ MX6Q_PAD_GPIO_3__I2C3_SCL,
6460+ MX6Q_PAD_GPIO_6__I2C3_SDA,
6461+
6462+ /* SUS_S3 */
6463+ MX6Q_PAD_GPIO_5__GPIO_1_5, /* GPIO1[5] */
6464+
6465+ MX6Q_PAD_GPIO_16__GPIO_7_11, /* GPIO7[11] */
6466+
6467+ MX6Q_PAD_GPIO_7__GPIO_1_7, /* Display Connector GP */
6468+ MX6Q_PAD_GPIO_9__GPIO_1_9, /* Display Connector GP */
6469+ MX6Q_PAD_NANDF_D0__GPIO_2_0, /* Unused */
6470+
6471+ /* PWM1 */
6472+ MX6Q_PAD_SD1_DAT3__PWM1_PWMO, /* GPIO1[21] */
6473+
6474+ /* PCIe RESET */
6475+ MX6Q_PAD_SD1_DAT2__GPIO_1_19, /* GPIO1[19] */
6476+
6477+ /* PWM4 */
6478+ MX6Q_PAD_SD1_CMD__PWM4_PWMO, /* GPIO1[18] */
6479+
6480+ /* UART1 */
6481+ MX6Q_PAD_CSI0_DAT10__UART1_TXD,
6482+ MX6Q_PAD_CSI0_DAT11__UART1_RXD,
6483+
6484+ /* UART2 for debug */
6485+ MX6Q_PAD_EIM_D26__UART2_TXD,
6486+ MX6Q_PAD_EIM_D27__UART2_RXD,
6487+
6488+ /* USBOTG ID pin */
6489+ MX6Q_PAD_GPIO_1__USBOTG_ID,
6490+
6491+ /* WATCHDOG */
6492+ MX6Q_PAD_KEY_COL4__GPIO_4_14,
6493+
6494+ /* USB OC pin */
6495+ /* MX6Q_PAD_EIM_D30__USBOH3_USBH1_OC, TODO: to be checked */
6496+
6497+ /* USDHC2 */
6498+ MX6Q_PAD_SD2_CLK__USDHC2_CLK,
6499+ MX6Q_PAD_SD2_CMD__USDHC2_CMD,
6500+ MX6Q_PAD_SD2_DAT0__USDHC2_DAT0,
6501+ MX6Q_PAD_SD2_DAT1__USDHC2_DAT1,
6502+ MX6Q_PAD_SD2_DAT2__USDHC2_DAT2,
6503+ MX6Q_PAD_SD2_DAT3__USDHC2_DAT3,
6504+ MX6Q_PAD_GPIO_4__GPIO_1_4, /* Card Detect */
6505+
6506+ /* USDHC3 */
6507+ MX6Q_PAD_SD3_CLK__USDHC3_CLK_50MHZ,
6508+ MX6Q_PAD_SD3_CMD__USDHC3_CMD_50MHZ,
6509+ MX6Q_PAD_SD3_DAT0__USDHC3_DAT0_50MHZ,
6510+ MX6Q_PAD_SD3_DAT1__USDHC3_DAT1_50MHZ,
6511+ MX6Q_PAD_SD3_DAT2__USDHC3_DAT2_50MHZ,
6512+ MX6Q_PAD_SD3_DAT3__USDHC3_DAT3_50MHZ,
6513+ MX6Q_PAD_SD3_DAT4__USDHC3_DAT4_50MHZ,
6514+ MX6Q_PAD_SD3_DAT5__USDHC3_DAT5_50MHZ,
6515+ MX6Q_PAD_SD3_DAT6__USDHC3_DAT6_50MHZ,
6516+ MX6Q_PAD_SD3_DAT7__USDHC3_DAT7_50MHZ,
6517+
6518+ /* USDHC4 */
6519+ MX6Q_PAD_SD4_CLK__USDHC4_CLK_50MHZ,
6520+ MX6Q_PAD_SD4_CMD__USDHC4_CMD_50MHZ,
6521+ MX6Q_PAD_SD4_DAT0__USDHC4_DAT0_50MHZ,
6522+ MX6Q_PAD_SD4_DAT1__USDHC4_DAT1_50MHZ,
6523+ MX6Q_PAD_SD4_DAT2__USDHC4_DAT2_50MHZ,
6524+ MX6Q_PAD_SD4_DAT3__USDHC4_DAT3_50MHZ,
6525+ MX6Q_PAD_SD4_DAT4__USDHC4_DAT4_50MHZ,
6526+ MX6Q_PAD_SD4_DAT5__USDHC4_DAT5_50MHZ,
6527+ MX6Q_PAD_SD4_DAT6__USDHC4_DAT6_50MHZ,
6528+ MX6Q_PAD_SD4_DAT7__USDHC4_DAT7_50MHZ,
6529+ MX6Q_PAD_NANDF_D6__GPIO_2_6, /* SD4_CD */
6530+ MX6Q_PAD_NANDF_D7__GPIO_2_7, /* SD4_WP */
6531+};
6532+
6533+#endif
6534diff --git a/arch/arm/mach-mx6/mx6q_qmx6_pmic_pfuze100.c b/arch/arm/mach-mx6/mx6q_qmx6_pmic_pfuze100.c
6535new file mode 100644
6536index 0000000..1743ff8
6537--- /dev/null
6538+++ b/arch/arm/mach-mx6/mx6q_qmx6_pmic_pfuze100.c
6539@@ -0,0 +1,422 @@
6540+/*
6541+ * Copyright (C) 2012 Freescale Semiconductor, Inc. All Rights Reserved.
6542+ *
6543+ * This program is free software; you can redistribute it and/or modify
6544+ * it under the terms of the GNU General Public License as published by
6545+ * the Free Software Foundation; either version 2 of the License, or
6546+ * (at your option) any later version.
6547+ *
6548+ * This program is distributed in the hope that it will be useful,
6549+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
6550+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
6551+ * GNU General Public License for more details.
6552+ *
6553+ * You should have received a copy of the GNU General Public License
6554+ * along with this program; if not, write to the Free Software
6555+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
6556+ */
6557+
6558+#include <linux/module.h>
6559+#include <linux/init.h>
6560+#include <linux/platform_device.h>
6561+#include <linux/err.h>
6562+#include <linux/i2c.h>
6563+#include <linux/gpio.h>
6564+#include <linux/regulator/machine.h>
6565+#include <linux/mfd/pfuze.h>
6566+#include <mach/irqs.h>
6567+
6568+/*
6569+ * Convenience conversion.
6570+ * Here atm, maybe there is somewhere better for this.
6571+ */
6572+#define mV_to_uV(mV) (mV * 1000)
6573+#define uV_to_mV(uV) (uV / 1000)
6574+#define V_to_uV(V) (mV_to_uV(V * 1000))
6575+#define uV_to_V(uV) (uV_to_mV(uV) / 1000)
6576+
6577+#define PFUZE100_I2C_DEVICE_NAME "pfuze100"
6578+/* 7-bit I2C bus slave address */
6579+#define PFUZE100_I2C_ADDR (0x08)
6580+ /*SWBST*/
6581+#define PFUZE100_SW1ASTANDBY 33
6582+#define PFUZE100_SW1ASTANDBY_STBY_VAL (0x18)
6583+#define PFUZE100_SW1ASTANDBY_STBY_M (0x3f<<0)
6584+#define PFUZE100_SW1BSTANDBY 40
6585+#define PFUZE100_SW1BSTANDBY_STBY_VAL (0x18)
6586+#define PFUZE100_SW1BSTANDBY_STBY_M (0x3f<<0)
6587+#define PFUZE100_SW1CSTANDBY 47
6588+#define PFUZE100_SW1CSTANDBY_STBY_VAL (0x18)
6589+#define PFUZE100_SW1CSTANDBY_STBY_M (0x3f<<0)
6590+#define PFUZE100_SW2STANDBY 54
6591+#define PFUZE100_SW2STANDBY_STBY_VAL 0x0
6592+#define PFUZE100_SW2STANDBY_STBY_M (0x3f<<0)
6593+#define PFUZE100_SW3ASTANDBY 61
6594+#define PFUZE100_SW3ASTANDBY_STBY_VAL 0x0
6595+#define PFUZE100_SW3ASTANDBY_STBY_M (0x3f<<0)
6596+#define PFUZE100_SW3BSTANDBY 68
6597+#define PFUZE100_SW3BSTANDBY_STBY_VAL 0x0
6598+#define PFUZE100_SW3BSTANDBY_STBY_M (0x3f<<0)
6599+#define PFUZE100_SW4STANDBY 75
6600+#define PFUZE100_SW4STANDBY_STBY_VAL 0
6601+#define PFUZE100_SW4STANDBY_STBY_M (0x3f<<0)
6602+#define PFUZE100_SWBSTCON1 102
6603+#define PFUZE100_SWBSTCON1_SWBSTMOD_VAL (0x1<<2)
6604+#define PFUZE100_SWBSTCON1_SWBSTMOD_M (0x3<<2)
6605+
6606+
6607+static struct regulator_consumer_supply sw2_consumers[] = {
6608+ {
6609+ .supply = "MICVDD",
6610+ .dev_name = "0-001a",
6611+ }
6612+};
6613+static struct regulator_consumer_supply sw4_consumers[] = {
6614+ {
6615+ .supply = "AUD_1V8",
6616+ }
6617+};
6618+static struct regulator_consumer_supply swbst_consumers[] = {
6619+ {
6620+ .supply = "SWBST_5V",
6621+ }
6622+};
6623+static struct regulator_consumer_supply vgen1_consumers[] = {
6624+ {
6625+ .supply = "VGEN1_1V5",
6626+ }
6627+};
6628+static struct regulator_consumer_supply vgen2_consumers[] = {
6629+ {
6630+ .supply = "VGEN2_1V5",
6631+ }
6632+};
6633+static struct regulator_consumer_supply vgen4_consumers[] = {
6634+ {
6635+ .supply = "DBVDD",
6636+ .dev_name = "0-001a",
6637+ },
6638+ {
6639+ .supply = "AVDD",
6640+ .dev_name = "0-001a",
6641+ },
6642+ {
6643+ .supply = "DCVDD",
6644+ .dev_name = "0-001a",
6645+ },
6646+ {
6647+ .supply = "CPVDD",
6648+ .dev_name = "0-001a",
6649+ },
6650+ {
6651+ .supply = "PLLVDD",
6652+ .dev_name = "0-001a",
6653+ }
6654+};
6655+static struct regulator_consumer_supply vgen5_consumers[] = {
6656+ {
6657+ .supply = "VGEN5_2V8",
6658+ }
6659+};
6660+static struct regulator_consumer_supply vgen6_consumers[] = {
6661+ {
6662+ .supply = "VGEN6_3V3",
6663+ }
6664+};
6665+
6666+static struct regulator_init_data sw1a_init = {
6667+ .constraints = {
6668+ .name = "PFUZE100_SW1A",
6669+#ifdef PFUZE100_FIRST_VERSION
6670+ .min_uV = 650000,
6671+ .max_uV = 1437500,
6672+#else
6673+ .min_uV = 300000,
6674+ .max_uV = 1875000,
6675+#endif
6676+ .valid_ops_mask = REGULATOR_CHANGE_VOLTAGE,
6677+ .valid_modes_mask = 0,
6678+ .boot_on = 1,
6679+ .always_on = 1,
6680+ },
6681+};
6682+
6683+static struct regulator_init_data sw1b_init = {
6684+ .constraints = {
6685+ .name = "PFUZE100_SW1B",
6686+ .min_uV = 300000,
6687+ .max_uV = 1875000,
6688+ .valid_ops_mask = REGULATOR_CHANGE_VOLTAGE,
6689+ .valid_modes_mask = 0,
6690+ .always_on = 1,
6691+ .boot_on = 1,
6692+ },
6693+};
6694+
6695+static struct regulator_init_data sw1c_init = {
6696+ .constraints = {
6697+ .name = "PFUZE100_SW1C",
6698+ .min_uV = 300000,
6699+ .max_uV = 1875000,
6700+ .valid_ops_mask = REGULATOR_CHANGE_VOLTAGE,
6701+ .valid_modes_mask = 0,
6702+ .always_on = 1,
6703+ .boot_on = 1,
6704+ },
6705+};
6706+
6707+static struct regulator_init_data sw2_init = {
6708+ .constraints = {
6709+ .name = "PFUZE100_SW2",
6710+#if PFUZE100_SW2_VOL6
6711+ .min_uV = 800000,
6712+ .max_uV = 3950000,
6713+#else
6714+ .min_uV = 400000,
6715+ .max_uV = 1975000,
6716+#endif
6717+ .valid_ops_mask = REGULATOR_CHANGE_VOLTAGE,
6718+ .valid_modes_mask = 0,
6719+ .always_on = 1,
6720+ .boot_on = 1,
6721+ },
6722+ .num_consumer_supplies = ARRAY_SIZE(sw2_consumers),
6723+ .consumer_supplies = sw2_consumers,
6724+};
6725+
6726+static struct regulator_init_data sw3a_init = {
6727+ .constraints = {
6728+ .name = "PFUZE100_SW3A",
6729+#if PFUZE100_SW3_VOL6
6730+ .min_uV = 800000,
6731+ .max_uV = 3950000,
6732+#else
6733+ .min_uV = 400000,
6734+ .max_uV = 1975000,
6735+#endif
6736+ .valid_ops_mask = REGULATOR_CHANGE_VOLTAGE,
6737+ .valid_modes_mask = 0,
6738+ .always_on = 1,
6739+ .boot_on = 1,
6740+ },
6741+};
6742+
6743+static struct regulator_init_data sw3b_init = {
6744+ .constraints = {
6745+ .name = "PFUZE100_SW3B",
6746+#if PFUZE100_SW3_VOL6
6747+ .min_uV = 800000,
6748+ .max_uV = 3950000,
6749+#else
6750+ .min_uV = 400000,
6751+ .max_uV = 1975000,
6752+#endif
6753+ .valid_ops_mask = REGULATOR_CHANGE_VOLTAGE,
6754+ .valid_modes_mask = 0,
6755+ .always_on = 1,
6756+ .boot_on = 1,
6757+ },
6758+};
6759+
6760+static struct regulator_init_data sw4_init = {
6761+ .constraints = {
6762+ .name = "PFUZE100_SW4",
6763+#if PFUZE100_SW4_VOL6
6764+ .min_uV = 800000,
6765+ .max_uV = 3950000,
6766+#else
6767+ .min_uV = 400000,
6768+ .max_uV = 1975000,
6769+#endif
6770+ .valid_ops_mask = REGULATOR_CHANGE_VOLTAGE,
6771+ .valid_modes_mask = 0,
6772+ },
6773+ .num_consumer_supplies = ARRAY_SIZE(sw4_consumers),
6774+ .consumer_supplies = sw4_consumers,
6775+};
6776+
6777+static struct regulator_init_data swbst_init = {
6778+ .constraints = {
6779+ .name = "PFUZE100_SWBST",
6780+ .min_uV = 5000000,
6781+ .max_uV = 5150000,
6782+ .valid_ops_mask = REGULATOR_CHANGE_VOLTAGE,
6783+ .valid_modes_mask = 0,
6784+ .always_on = 1,
6785+ .boot_on = 1,
6786+ },
6787+ .num_consumer_supplies = ARRAY_SIZE(swbst_consumers),
6788+ .consumer_supplies = swbst_consumers,
6789+};
6790+
6791+static struct regulator_init_data vsnvs_init = {
6792+ .constraints = {
6793+ .name = "PFUZE100_VSNVS",
6794+ .min_uV = 1200000,
6795+ .max_uV = 3000000,
6796+ .valid_ops_mask = REGULATOR_CHANGE_VOLTAGE,
6797+ .valid_modes_mask = 0,
6798+ .always_on = 1,
6799+ .boot_on = 1,
6800+ },
6801+};
6802+
6803+static struct regulator_init_data vrefddr_init = {
6804+ .constraints = {
6805+ .name = "PFUZE100_VREFDDR",
6806+ .always_on = 1,
6807+ .boot_on = 1,
6808+ },
6809+};
6810+
6811+static struct regulator_init_data vgen1_init = {
6812+ .constraints = {
6813+ .name = "PFUZE100_VGEN1",
6814+#ifdef PFUZE100_FIRST_VERSION
6815+ .min_uV = 1200000,
6816+ .max_uV = 1550000,
6817+#else
6818+ .min_uV = 800000,
6819+ .max_uV = 1550000,
6820+#endif
6821+ .valid_ops_mask = REGULATOR_CHANGE_VOLTAGE |
6822+ REGULATOR_CHANGE_STATUS,
6823+ .valid_modes_mask = 0,
6824+ },
6825+ .num_consumer_supplies = ARRAY_SIZE(vgen1_consumers),
6826+ .consumer_supplies = vgen1_consumers,
6827+};
6828+
6829+static struct regulator_init_data vgen2_init = {
6830+ .constraints = {
6831+ .name = "PFUZE100_VGEN2",
6832+#ifdef PFUZE100_FIRST_VERSION
6833+ .min_uV = 1200000,
6834+ .max_uV = 1550000,
6835+#else
6836+ .min_uV = 800000,
6837+ .max_uV = 1550000,
6838+#endif
6839+ .valid_ops_mask = REGULATOR_CHANGE_VOLTAGE |
6840+ REGULATOR_CHANGE_STATUS,
6841+ .valid_modes_mask = 0,
6842+ },
6843+ .num_consumer_supplies = ARRAY_SIZE(vgen2_consumers),
6844+ .consumer_supplies = vgen2_consumers,
6845+
6846+};
6847+
6848+static struct regulator_init_data vgen3_init = {
6849+ .constraints = {
6850+ .name = "PFUZE100_VGEN3",
6851+ .min_uV = 1800000,
6852+ .max_uV = 3300000,
6853+ .valid_ops_mask = REGULATOR_CHANGE_VOLTAGE |
6854+ REGULATOR_CHANGE_STATUS,
6855+ .valid_modes_mask = 0,
6856+ },
6857+};
6858+
6859+static struct regulator_init_data vgen4_init = {
6860+ .constraints = {
6861+ .name = "PFUZE100_VGEN4",
6862+ .min_uV = 1800000,
6863+ .max_uV = 3300000,
6864+ .valid_ops_mask = REGULATOR_CHANGE_VOLTAGE |
6865+ REGULATOR_CHANGE_STATUS,
6866+ .valid_modes_mask = 0,
6867+ .always_on = 1,
6868+ .boot_on = 1,
6869+ },
6870+ .num_consumer_supplies = ARRAY_SIZE(vgen4_consumers),
6871+ .consumer_supplies = vgen4_consumers,
6872+};
6873+
6874+static struct regulator_init_data vgen5_init = {
6875+ .constraints = {
6876+ .name = "PFUZE100_VGEN5",
6877+ .min_uV = 1800000,
6878+ .max_uV = 3300000,
6879+ .valid_ops_mask = REGULATOR_CHANGE_VOLTAGE |
6880+ REGULATOR_CHANGE_STATUS,
6881+ .valid_modes_mask = 0,
6882+ .always_on = 1,
6883+ .boot_on = 1,
6884+ },
6885+ .num_consumer_supplies = ARRAY_SIZE(vgen5_consumers),
6886+ .consumer_supplies = vgen5_consumers,
6887+};
6888+
6889+static struct regulator_init_data vgen6_init = {
6890+ .constraints = {
6891+ .name = "PFUZE100_VGEN6",
6892+ .min_uV = 1800000,
6893+ .max_uV = 3300000,
6894+ .valid_ops_mask = REGULATOR_CHANGE_VOLTAGE |
6895+ REGULATOR_CHANGE_STATUS,
6896+ .valid_modes_mask = 0,
6897+ },
6898+ .num_consumer_supplies = ARRAY_SIZE(vgen6_consumers),
6899+ .consumer_supplies = vgen6_consumers,
6900+};
6901+
6902+static int pfuze100_init(struct mc_pfuze *pfuze)
6903+{
6904+ int ret;
6905+ ret = pfuze_reg_rmw(pfuze, PFUZE100_SW1ASTANDBY,
6906+ PFUZE100_SW1ASTANDBY_STBY_M,
6907+ PFUZE100_SW1ASTANDBY_STBY_VAL);
6908+ if (ret)
6909+ goto err;
6910+ ret = pfuze_reg_rmw(pfuze, PFUZE100_SW1BSTANDBY,
6911+ PFUZE100_SW1BSTANDBY_STBY_M,
6912+ PFUZE100_SW1BSTANDBY_STBY_VAL);
6913+ if (ret)
6914+ goto err;
6915+ ret = pfuze_reg_rmw(pfuze, PFUZE100_SW1CSTANDBY,
6916+ PFUZE100_SW1CSTANDBY_STBY_M,
6917+ PFUZE100_SW1CSTANDBY_STBY_VAL);
6918+ if (ret)
6919+ goto err;
6920+ return 0;
6921+err:
6922+ printk(KERN_ERR "pfuze100 init error!\n");
6923+ return -1;
6924+}
6925+
6926+static struct pfuze_regulator_init_data mx6q_qmx6_pfuze100_regulators[] = {
6927+ {.id = PFUZE100_SW1A, .init_data = &sw1a_init},
6928+ {.id = PFUZE100_SW1B, .init_data = &sw1b_init},
6929+ {.id = PFUZE100_SW1C, .init_data = &sw1c_init},
6930+ {.id = PFUZE100_SW2, .init_data = &sw2_init},
6931+ {.id = PFUZE100_SW3A, .init_data = &sw3a_init},
6932+ {.id = PFUZE100_SW3B, .init_data = &sw3b_init},
6933+ {.id = PFUZE100_SW4, .init_data = &sw4_init},
6934+ {.id = PFUZE100_SWBST, .init_data = &swbst_init},
6935+ {.id = PFUZE100_VSNVS, .init_data = &vsnvs_init},
6936+ {.id = PFUZE100_VREFDDR, .init_data = &vrefddr_init},
6937+ {.id = PFUZE100_VGEN1, .init_data = &vgen1_init},
6938+ {.id = PFUZE100_VGEN2, .init_data = &vgen2_init},
6939+ {.id = PFUZE100_VGEN3, .init_data = &vgen3_init},
6940+ {.id = PFUZE100_VGEN4, .init_data = &vgen4_init},
6941+ {.id = PFUZE100_VGEN5, .init_data = &vgen5_init},
6942+ {.id = PFUZE100_VGEN6, .init_data = &vgen6_init},
6943+};
6944+
6945+static struct pfuze_platform_data pfuze100_plat = {
6946+ .flags = PFUZE_USE_REGULATOR,
6947+ .num_regulators = ARRAY_SIZE(mx6q_qmx6_pfuze100_regulators),
6948+ .regulators = mx6q_qmx6_pfuze100_regulators,
6949+ .pfuze_init = pfuze100_init,
6950+};
6951+
6952+static struct i2c_board_info __initdata pfuze100_i2c_device = {
6953+ I2C_BOARD_INFO(PFUZE100_I2C_DEVICE_NAME, PFUZE100_I2C_ADDR),
6954+ .platform_data = &pfuze100_plat,
6955+};
6956+
6957+int __init mx6q_qmx6_init_pfuze100(u32 int_gpio)
6958+{
6959+ pfuze100_i2c_device.irq = gpio_to_irq(int_gpio); /*update INT gpio */
6960+ return i2c_register_board_info(1, &pfuze100_i2c_device, 1);
6961+}
6962diff --git a/arch/arm/plat-mxc/include/mach/esdhc.h b/arch/arm/plat-mxc/include/mach/esdhc.h
6963index bb15db1..dc5267d 100644
6964--- a/arch/arm/plat-mxc/include/mach/esdhc.h
6965+++ b/arch/arm/plat-mxc/include/mach/esdhc.h
6966@@ -36,5 +36,6 @@ struct esdhc_platform_data {
6967 unsigned int keep_power_at_suspend;
6968 unsigned int delay_line;
6969 int (*platform_pad_change)(unsigned int index, int clock);
6970+ unsigned int force_write_access;
6971 };
6972 #endif /* __ASM_ARCH_IMX_ESDHC_H */
6973diff --git a/arch/arm/tools/mach-types b/arch/arm/tools/mach-types
6974index f6b5c0e..0b2d992 100644
6975--- a/arch/arm/tools/mach-types
6976+++ b/arch/arm/tools/mach-types
6977@@ -1118,6 +1118,7 @@ mx6q_sabrelite MACH_MX6Q_SABRELITE MX6Q_SABRELITE 3769
6978 mx6q_sabresd MACH_MX6Q_SABRESD MX6Q_SABRESD 3980
6979 mx6q_arm2 MACH_MX6Q_ARM2 MX6Q_ARM2 3837
6980 mx6sl_arm2 MACH_MX6SL_ARM2 MX6SL_ARM2 4091
6981+mx6q_qmx6 MACH_MX6Q_QMX6 MX6Q_QMX6 4122
6982 mx6q_hdmidongle MACH_MX6Q_HDMIDONGLE MX6Q_HDMIDONGLE 4284
6983 mx6sl_evk MACH_MX6SL_EVK MX6SL_EVK 4307
6984
6985diff --git a/drivers/mmc/host/sdhci-esdhc-imx.c b/drivers/mmc/host/sdhci-esdhc-imx.c
6986index 35fd825..44483dd 100644
6987--- a/drivers/mmc/host/sdhci-esdhc-imx.c
6988+++ b/drivers/mmc/host/sdhci-esdhc-imx.c
6989@@ -563,7 +563,7 @@ static void esdhc_writew_le(struct sdhci_host *host, u16 val, int reg)
6990 case SDHCI_COMMAND:
6991 if ((host->cmd->opcode == MMC_STOP_TRANSMISSION ||
6992 host->cmd->opcode == MMC_SET_BLOCK_COUNT) &&
6993- (imx_data->flags & ESDHC_FLAG_MULTIBLK_NO_INT))
6994+ (imx_data->flags & ESDHC_FLAG_MULTIBLK_NO_INT))
6995 val |= SDHCI_CMD_ABORTCMD;
6996
6997 writel(0x08800880, host->ioaddr + SDHCI_CAPABILITIES_1);
6998@@ -719,6 +719,9 @@ static unsigned int esdhc_pltfm_get_ro(struct sdhci_host *host)
6999 {
7000 struct esdhc_platform_data *boarddata = host->mmc->parent->platform_data;
7001
7002+ if (boarddata->force_write_access)
7003+ return 0;
7004+
7005 if (boarddata && gpio_is_valid(boarddata->wp_gpio))
7006 return gpio_get_value(boarddata->wp_gpio);
7007 else
7008diff --git a/drivers/net/fec.c b/drivers/net/fec.c
7009index 71e0abc..d437fec 100755
7010--- a/drivers/net/fec.c
7011+++ b/drivers/net/fec.c
7012@@ -105,10 +105,10 @@ MODULE_PARM_DESC(macaddr, "FEC Ethernet MAC address");
7013 #define FEC_FLASHMAC 0xf0006000
7014 #elif defined(CONFIG_CANCam)
7015 #define FEC_FLASHMAC 0xf0020000
7016-#elif defined (CONFIG_M5272C3)
7017+#elif defined(CONFIG_M5272C3)
7018 #define FEC_FLASHMAC (0xffe04000 + 4)
7019 #elif defined(CONFIG_MOD5272)
7020-#define FEC_FLASHMAC 0xffc0406b
7021+#define FEC_FLASHMAC 0xffc0406b
7022 #else
7023 #define FEC_FLASHMAC 0
7024 #endif
7025@@ -174,8 +174,8 @@ MODULE_PARM_DESC(macaddr, "FEC Ethernet MAC address");
7026 * account when setting it.
7027 */
7028 #if defined(CONFIG_M523x) || defined(CONFIG_M527x) || defined(CONFIG_M528x) || \
7029- defined(CONFIG_M520x) || defined(CONFIG_M532x) || \
7030- defined(CONFIG_ARCH_MXC) || defined(CONFIG_SOC_IMX28)
7031+ defined(CONFIG_M520x) || defined(CONFIG_M532x) || \
7032+ defined(CONFIG_ARCH_MXC) || defined(CONFIG_SOC_IMX28)
7033 #define OPT_FRAME_SIZE (PKT_MAXBUF_SIZE << 16)
7034 #else
7035 #define OPT_FRAME_SIZE 0
7036@@ -200,8 +200,8 @@ struct fec_enet_private {
7037
7038 /* The saved address of a sent-in-place packet/buffer, for skfree(). */
7039 unsigned char *tx_bounce[TX_RING_SIZE];
7040- struct sk_buff* tx_skbuff[TX_RING_SIZE];
7041- struct sk_buff* rx_skbuff[RX_RING_SIZE];
7042+ struct sk_buff *tx_skbuff[TX_RING_SIZE];
7043+ struct sk_buff *rx_skbuff[RX_RING_SIZE];
7044 ushort skb_cur;
7045 ushort skb_dirty;
7046
7047@@ -250,7 +250,7 @@ struct fec_enet_private {
7048 #define FEC_NAPI_ENABLE FALSE
7049 #endif
7050
7051-static irqreturn_t fec_enet_interrupt(int irq, void * dev_id);
7052+static irqreturn_t fec_enet_interrupt(int irq, void *dev_id);
7053 static void fec_enet_tx(struct net_device *dev);
7054 static int fec_rx_poll(struct napi_struct *napi, int budget);
7055 static void fec_enet_rx(struct net_device *dev);
7056@@ -518,7 +518,7 @@ fec_enet_tx(struct net_device *ndev)
7057 }
7058
7059 if (status & BD_ENET_TX_READY)
7060- printk("HEY! Enet xmit interrupt and TX_READY.\n");
7061+ printk(KERN_INFO "HEY! Enet xmit interrupt and TX_READY.\n");
7062
7063 /* Deferred means some collisions occurred during transmit,
7064 * but we eventually sent the packet OK.
7065@@ -768,7 +768,7 @@ fec_enet_rx(struct net_device *ndev)
7066 ndev->stats.rx_packets++;
7067 pkt_len = bdp->cbd_datlen;
7068 ndev->stats.rx_bytes += pkt_len;
7069- data = (__u8*)__va(bdp->cbd_bufaddr);
7070+ data = (__u8 *)__va(bdp->cbd_bufaddr);
7071
7072 if (bdp->cbd_bufaddr)
7073 dma_unmap_single(&fep->pdev->dev, bdp->cbd_bufaddr,
7074@@ -927,7 +927,7 @@ static void __inline__ fec_get_mac(struct net_device *ndev)
7075
7076 /* Adjust MAC if using macaddr */
7077 if (iap == macaddr)
7078- ndev->dev_addr[ETH_ALEN-1] = macaddr[ETH_ALEN-1] + fep->pdev->id;
7079+ ndev->dev_addr[ETH_ALEN-1] = macaddr[ETH_ALEN-1] + fep->pdev->id;
7080 }
7081
7082 /* ------------------------------------------------------------------------- */
7083@@ -1112,6 +1112,7 @@ static int fec_enet_mii_init(struct platform_device *pdev)
7084 const struct platform_device_id *id_entry =
7085 platform_get_device_id(fep->pdev);
7086 int err = -ENXIO, i;
7087+ struct clk *bus_clk;
7088
7089 /*
7090 * The dual fec interfaces are not equivalent with enet-mac.
7091@@ -1137,11 +1138,10 @@ static int fec_enet_mii_init(struct platform_device *pdev)
7092
7093 fep->mii_timeout = 0;
7094
7095- /*
7096- * Set MII speed to 2.5 MHz (= clk_get_rate() / 2 * phy_speed)
7097- */
7098- fep->phy_speed = DIV_ROUND_UP(clk_get_rate(fep->mdc_clk),
7099- (FEC_ENET_MII_CLK << 2)) << 1;
7100+ /* sml 2012-11-29: MII Speed derived from 66MHz ipg-clk */
7101+ bus_clk = clk_get(NULL, "ipg_clk");
7102+ fep->phy_speed = (DIV_ROUND_UP(clk_get_rate(bus_clk), FEC_ENET_MII_CLK)) - 1;
7103+
7104 /* set hold time to 2 internal clock cycle */
7105 if (cpu_is_mx6q() || cpu_is_mx6dl())
7106 fep->phy_speed |= FEC_ENET_HOLD_TIME;
7107@@ -1929,7 +1929,7 @@ fec_probe(struct platform_device *pdev)
7108
7109 /* Carrier starts down, phylib will bring it up */
7110 netif_carrier_off(ndev);
7111- clk_disable(fep->clk);
7112+ clk_unprepare(fep->clk);
7113
7114 INIT_DELAYED_WORK(&fep->fixup_trigger_tx, fixup_trigger_tx_func);
7115
7116diff --git a/drivers/net/phy/micrel.c b/drivers/net/phy/micrel.c
7117index 80747d2..f158bc6 100644
7118--- a/drivers/net/phy/micrel.c
7119+++ b/drivers/net/phy/micrel.c
7120@@ -187,6 +187,21 @@ static struct phy_driver ksz9021_driver = {
7121 .driver = { .owner = THIS_MODULE, },
7122 };
7123
7124+static struct phy_driver ksz9031_driver = {
7125+ .phy_id = PHY_ID_KSZ9031,
7126+ .phy_id_mask = 0x00ffffff,
7127+ .name = "Micrel KSZ9031 Gigabit PHY",
7128+ .features = (PHY_GBIT_FEATURES | SUPPORTED_Pause
7129+ | SUPPORTED_Asym_Pause),
7130+ .flags = PHY_HAS_MAGICANEG | PHY_HAS_INTERRUPT,
7131+ .config_init = kszphy_config_init,
7132+ .config_aneg = genphy_config_aneg,
7133+ .read_status = genphy_read_status,
7134+ .ack_interrupt = kszphy_ack_interrupt,
7135+ .config_intr = ksz9021_config_intr,
7136+ .driver = { .owner = THIS_MODULE, },
7137+};
7138+
7139 static int __init ksphy_init(void)
7140 {
7141 int ret;
7142@@ -209,8 +224,14 @@ static int __init ksphy_init(void)
7143 if (ret)
7144 goto err5;
7145
7146+ ret = phy_driver_register(&ksz9031_driver);
7147+ if (ret)
7148+ goto err6;
7149+
7150 return 0;
7151
7152+err6:
7153+ phy_driver_unregister(&ksz9031_driver);
7154 err5:
7155 phy_driver_unregister(&ks8041_driver);
7156 err4:
7157@@ -230,6 +251,7 @@ static void __exit ksphy_exit(void)
7158 phy_driver_unregister(&ksz9021_driver);
7159 phy_driver_unregister(&ks8041_driver);
7160 phy_driver_unregister(&ks8051_driver);
7161+ phy_driver_unregister(&ksz9031_driver);
7162 }
7163
7164 module_init(ksphy_init);
7165@@ -241,6 +263,7 @@ MODULE_LICENSE("GPL");
7166
7167 static struct mdio_device_id __maybe_unused micrel_tbl[] = {
7168 { PHY_ID_KSZ9021, 0x00ffffff },
7169+ { PHY_ID_KSZ9031, 0x00ffffff },
7170 { PHY_ID_KS8001, 0x00ffffff },
7171 { PHY_ID_KS8737, 0x00ffffff },
7172 { PHY_ID_KS8041, 0x00ffffff },
7173diff --git a/include/linux/micrel_phy.h b/include/linux/micrel_phy.h
7174index dd8da34..3222193 100644
7175--- a/include/linux/micrel_phy.h
7176+++ b/include/linux/micrel_phy.h
7177@@ -4,6 +4,7 @@
7178 #define MICREL_PHY_ID_MASK 0x00fffff0
7179
7180 #define PHY_ID_KSZ9021 0x00221611
7181+#define PHY_ID_KSZ9031 0x00221621
7182 #define PHY_ID_KS8737 0x00221720
7183 #define PHY_ID_KS8041 0x00221510
7184 #define PHY_ID_KS8051 0x00221550
7185diff --git a/sound/soc/imx/Kconfig b/sound/soc/imx/Kconfig
7186index e30ebbe..3967a99 100644
7187--- a/sound/soc/imx/Kconfig
7188+++ b/sound/soc/imx/Kconfig
7189@@ -53,7 +53,7 @@ config SND_SOC_PHYCORE_AC97
7190 config SND_SOC_IMX_SGTL5000
7191 tristate "SoC Audio support for i.MX boards with sgtl5000"
7192 depends on I2C && (MACH_MX35_3DS || MACH_MX51_BABBAGE \
7193- || MACH_MX6Q_SABRELITE || MACH_MX6Q_ARM2)
7194+ || MACH_MX6Q_SABRELITE || MACH_MX6Q_ARM2 || MACH_MX6Q_QMX6)
7195 select SND_SOC_SGTL5000
7196 select SND_MXC_SOC_MX2
7197 help
7198diff --git a/sound/soc/imx/imx-sgtl5000.c b/sound/soc/imx/imx-sgtl5000.c
7199index 9325dc8..7c52545 100644
7200--- a/sound/soc/imx/imx-sgtl5000.c
7201+++ b/sound/soc/imx/imx-sgtl5000.c
7202@@ -363,7 +363,7 @@ static int __init imx_sgtl5000_init(void)
7203 if (ret)
7204 return -ENOMEM;
7205
7206- if (machine_is_mx35_3ds() || machine_is_mx6q_sabrelite())
7207+ if (machine_is_mx35_3ds() || machine_is_mx6q_sabrelite() || machine_is_mx6q_qmx6())
7208 imx_sgtl5000_dai[0].codec_name = "sgtl5000.0-000a";
7209 else
7210 imx_sgtl5000_dai[0].codec_name = "sgtl5000.1-000a";
7211--
72121.8.5.3
7213
diff --git a/recipes-kernel/linux/linux-congatec-3.0.35/0001-perf-tools-Fix-getrusage-related-build-failure-on-gl.patch b/recipes-kernel/linux/linux-congatec-3.0.35/0001-perf-tools-Fix-getrusage-related-build-failure-on-gl.patch
new file mode 100644
index 0000000..abc02c9
--- /dev/null
+++ b/recipes-kernel/linux/linux-congatec-3.0.35/0001-perf-tools-Fix-getrusage-related-build-failure-on-gl.patch
@@ -0,0 +1,43 @@
1From 503daf4789dd23e4dc1e16c256de0c163fc2bf87 Mon Sep 17 00:00:00 2001
2From: Markus Trippelsdorf <markus@trippelsdorf.de>
3Date: Wed, 4 Apr 2012 10:45:27 +0200
4Subject: [PATCH] perf tools: Fix getrusage() related build failure on glibc
5 trunk
6MIME-Version: 1.0
7Content-Type: text/plain; charset=UTF-8
8Content-Transfer-Encoding: 8bit
9Organization: O.S. Systems Software LTDA.
10
11On a system running glibc trunk perf doesn't build:
12
13 CC builtin-sched.o
14builtin-sched.c: In function ‘get_cpu_usage_nsec_parent’: builtin-sched.c:399:16: error: storage size of ‘ru’ isn’t known builtin-sched.c:403:2: error: implicit declaration of function ‘getrusage’ [-Werror=implicit-function-declaration]
15 [...]
16
17Fix it by including sys/resource.h.
18
19Upstream-Status: Pending
20
21Signed-off-by: Markus Trippelsdorf <markus@trippelsdorf.de>
22Cc: Peter Zijlstra <a.p.zijlstra@chello.nl>
23Link: http://lkml.kernel.org/r/20120404084527.GA294@x4
24Signed-off-by: Ingo Molnar <mingo@kernel.org>
25---
26 tools/perf/builtin-sched.c | 1 +
27 1 file changed, 1 insertion(+)
28
29diff --git a/tools/perf/builtin-sched.c b/tools/perf/builtin-sched.c
30index dcfe887..3632c2f 100644
31--- a/tools/perf/builtin-sched.c
32+++ b/tools/perf/builtin-sched.c
33@@ -14,6 +14,7 @@
34 #include "util/debug.h"
35
36 #include <sys/prctl.h>
37+#include <sys/resource.h>
38
39 #include <semaphore.h>
40 #include <pthread.h>
41--
421.8.4.rc3
43
diff --git a/recipes-kernel/linux/linux-congatec-3.0.35/0002-ARM-7668-1-fix-memset-related-crashes-caused-by-rece.patch b/recipes-kernel/linux/linux-congatec-3.0.35/0002-ARM-7668-1-fix-memset-related-crashes-caused-by-rece.patch
new file mode 100644
index 0000000..4c31e74
--- /dev/null
+++ b/recipes-kernel/linux/linux-congatec-3.0.35/0002-ARM-7668-1-fix-memset-related-crashes-caused-by-rece.patch
@@ -0,0 +1,259 @@
1From 2235b85f1c76d98b5f1e160cbd0a61a84c15e125 Mon Sep 17 00:00:00 2001
2From: Ivan Djelic <ivan.djelic@parrot.com>
3Date: Wed, 6 Mar 2013 20:09:27 +0100
4Subject: [PATCH] ARM: 7668/1: fix memset-related crashes caused by recent GCC
5 (4.7.2) optimizations
6Organization: O.S. Systems Software LTDA.
7
8Recent GCC versions (e.g. GCC-4.7.2) perform optimizations based on
9assumptions about the implementation of memset and similar functions.
10The current ARM optimized memset code does not return the value of
11its first argument, as is usually expected from standard implementations.
12
13For instance in the following function:
14
15void debug_mutex_lock_common(struct mutex *lock, struct mutex_waiter *waiter)
16{
17 memset(waiter, MUTEX_DEBUG_INIT, sizeof(*waiter));
18 waiter->magic = waiter;
19 INIT_LIST_HEAD(&waiter->list);
20}
21
22compiled as:
23
24800554d0 <debug_mutex_lock_common>:
25800554d0: e92d4008 push {r3, lr}
26800554d4: e1a00001 mov r0, r1
27800554d8: e3a02010 mov r2, #16 ; 0x10
28800554dc: e3a01011 mov r1, #17 ; 0x11
29800554e0: eb04426e bl 80165ea0 <memset>
30800554e4: e1a03000 mov r3, r0
31800554e8: e583000c str r0, [r3, #12]
32800554ec: e5830000 str r0, [r3]
33800554f0: e5830004 str r0, [r3, #4]
34800554f4: e8bd8008 pop {r3, pc}
35
36GCC assumes memset returns the value of pointer 'waiter' in register r0; causing
37register/memory corruptions.
38
39This patch fixes the return value of the assembly version of memset.
40It adds a 'mov' instruction and merges an additional load+store into
41existing load/store instructions.
42For ease of review, here is a breakdown of the patch into 4 simple steps:
43
44Step 1
45======
46Perform the following substitutions:
47ip -> r8, then
48r0 -> ip,
49and insert 'mov ip, r0' as the first statement of the function.
50At this point, we have a memset() implementation returning the proper result,
51but corrupting r8 on some paths (the ones that were using ip).
52
53Step 2
54======
55Make sure r8 is saved and restored when (! CALGN(1)+0) == 1:
56
57save r8:
58- str lr, [sp, #-4]!
59+ stmfd sp!, {r8, lr}
60
61and restore r8 on both exit paths:
62- ldmeqfd sp!, {pc} @ Now <64 bytes to go.
63+ ldmeqfd sp!, {r8, pc} @ Now <64 bytes to go.
64(...)
65 tst r2, #16
66 stmneia ip!, {r1, r3, r8, lr}
67- ldr lr, [sp], #4
68+ ldmfd sp!, {r8, lr}
69
70Step 3
71======
72Make sure r8 is saved and restored when (! CALGN(1)+0) == 0:
73
74save r8:
75- stmfd sp!, {r4-r7, lr}
76+ stmfd sp!, {r4-r8, lr}
77
78and restore r8 on both exit paths:
79 bgt 3b
80- ldmeqfd sp!, {r4-r7, pc}
81+ ldmeqfd sp!, {r4-r8, pc}
82(...)
83 tst r2, #16
84 stmneia ip!, {r4-r7}
85- ldmfd sp!, {r4-r7, lr}
86+ ldmfd sp!, {r4-r8, lr}
87
88Step 4
89======
90Rewrite register list "r4-r7, r8" as "r4-r8".
91
92Upstream-Status: Pending
93
94Signed-off-by: Ivan Djelic <ivan.djelic@parrot.com>
95Reviewed-by: Nicolas Pitre <nico@linaro.org>
96Signed-off-by: Dirk Behme <dirk.behme@gmail.com>
97Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
98(cherry picked from commit 455bd4c430b0c0a361f38e8658a0d6cb469942b5)
99---
100 arch/arm/lib/memset.S | 85 ++++++++++++++++++++++++++-------------------------
101 1 file changed, 44 insertions(+), 41 deletions(-)
102
103diff --git a/arch/arm/lib/memset.S b/arch/arm/lib/memset.S
104index 650d592..d912e73 100644
105--- a/arch/arm/lib/memset.S
106+++ b/arch/arm/lib/memset.S
107@@ -19,9 +19,9 @@
108 1: subs r2, r2, #4 @ 1 do we have enough
109 blt 5f @ 1 bytes to align with?
110 cmp r3, #2 @ 1
111- strltb r1, [r0], #1 @ 1
112- strleb r1, [r0], #1 @ 1
113- strb r1, [r0], #1 @ 1
114+ strltb r1, [ip], #1 @ 1
115+ strleb r1, [ip], #1 @ 1
116+ strb r1, [ip], #1 @ 1
117 add r2, r2, r3 @ 1 (r2 = r2 - (4 - r3))
118 /*
119 * The pointer is now aligned and the length is adjusted. Try doing the
120@@ -29,10 +29,14 @@
121 */
122
123 ENTRY(memset)
124- ands r3, r0, #3 @ 1 unaligned?
125+/*
126+ * Preserve the contents of r0 for the return value.
127+ */
128+ mov ip, r0
129+ ands r3, ip, #3 @ 1 unaligned?
130 bne 1b @ 1
131 /*
132- * we know that the pointer in r0 is aligned to a word boundary.
133+ * we know that the pointer in ip is aligned to a word boundary.
134 */
135 orr r1, r1, r1, lsl #8
136 orr r1, r1, r1, lsl #16
137@@ -43,29 +47,28 @@ ENTRY(memset)
138 #if ! CALGN(1)+0
139
140 /*
141- * We need an extra register for this loop - save the return address and
142- * use the LR
143+ * We need 2 extra registers for this loop - use r8 and the LR
144 */
145- str lr, [sp, #-4]!
146- mov ip, r1
147+ stmfd sp!, {r8, lr}
148+ mov r8, r1
149 mov lr, r1
150
151 2: subs r2, r2, #64
152- stmgeia r0!, {r1, r3, ip, lr} @ 64 bytes at a time.
153- stmgeia r0!, {r1, r3, ip, lr}
154- stmgeia r0!, {r1, r3, ip, lr}
155- stmgeia r0!, {r1, r3, ip, lr}
156+ stmgeia ip!, {r1, r3, r8, lr} @ 64 bytes at a time.
157+ stmgeia ip!, {r1, r3, r8, lr}
158+ stmgeia ip!, {r1, r3, r8, lr}
159+ stmgeia ip!, {r1, r3, r8, lr}
160 bgt 2b
161- ldmeqfd sp!, {pc} @ Now <64 bytes to go.
162+ ldmeqfd sp!, {r8, pc} @ Now <64 bytes to go.
163 /*
164 * No need to correct the count; we're only testing bits from now on
165 */
166 tst r2, #32
167- stmneia r0!, {r1, r3, ip, lr}
168- stmneia r0!, {r1, r3, ip, lr}
169+ stmneia ip!, {r1, r3, r8, lr}
170+ stmneia ip!, {r1, r3, r8, lr}
171 tst r2, #16
172- stmneia r0!, {r1, r3, ip, lr}
173- ldr lr, [sp], #4
174+ stmneia ip!, {r1, r3, r8, lr}
175+ ldmfd sp!, {r8, lr}
176
177 #else
178
179@@ -74,54 +77,54 @@ ENTRY(memset)
180 * whole cache lines at once.
181 */
182
183- stmfd sp!, {r4-r7, lr}
184+ stmfd sp!, {r4-r8, lr}
185 mov r4, r1
186 mov r5, r1
187 mov r6, r1
188 mov r7, r1
189- mov ip, r1
190+ mov r8, r1
191 mov lr, r1
192
193 cmp r2, #96
194- tstgt r0, #31
195+ tstgt ip, #31
196 ble 3f
197
198- and ip, r0, #31
199- rsb ip, ip, #32
200- sub r2, r2, ip
201- movs ip, ip, lsl #(32 - 4)
202- stmcsia r0!, {r4, r5, r6, r7}
203- stmmiia r0!, {r4, r5}
204- tst ip, #(1 << 30)
205- mov ip, r1
206- strne r1, [r0], #4
207+ and r8, ip, #31
208+ rsb r8, r8, #32
209+ sub r2, r2, r8
210+ movs r8, r8, lsl #(32 - 4)
211+ stmcsia ip!, {r4, r5, r6, r7}
212+ stmmiia ip!, {r4, r5}
213+ tst r8, #(1 << 30)
214+ mov r8, r1
215+ strne r1, [ip], #4
216
217 3: subs r2, r2, #64
218- stmgeia r0!, {r1, r3-r7, ip, lr}
219- stmgeia r0!, {r1, r3-r7, ip, lr}
220+ stmgeia ip!, {r1, r3-r8, lr}
221+ stmgeia ip!, {r1, r3-r8, lr}
222 bgt 3b
223- ldmeqfd sp!, {r4-r7, pc}
224+ ldmeqfd sp!, {r4-r8, pc}
225
226 tst r2, #32
227- stmneia r0!, {r1, r3-r7, ip, lr}
228+ stmneia ip!, {r1, r3-r8, lr}
229 tst r2, #16
230- stmneia r0!, {r4-r7}
231- ldmfd sp!, {r4-r7, lr}
232+ stmneia ip!, {r4-r7}
233+ ldmfd sp!, {r4-r8, lr}
234
235 #endif
236
237 4: tst r2, #8
238- stmneia r0!, {r1, r3}
239+ stmneia ip!, {r1, r3}
240 tst r2, #4
241- strne r1, [r0], #4
242+ strne r1, [ip], #4
243 /*
244 * When we get here, we've got less than 4 bytes to zero. We
245 * may have an unaligned pointer as well.
246 */
247 5: tst r2, #2
248- strneb r1, [r0], #1
249- strneb r1, [r0], #1
250+ strneb r1, [ip], #1
251+ strneb r1, [ip], #1
252 tst r2, #1
253- strneb r1, [r0], #1
254+ strneb r1, [ip], #1
255 mov pc, lr
256 ENDPROC(memset)
257--
2581.8.4.rc3
259
diff --git a/recipes-kernel/linux/linux-congatec-3.0.35/0003-ARM-7670-1-fix-the-memset-fix.patch b/recipes-kernel/linux/linux-congatec-3.0.35/0003-ARM-7670-1-fix-the-memset-fix.patch
new file mode 100644
index 0000000..b8d6f53
--- /dev/null
+++ b/recipes-kernel/linux/linux-congatec-3.0.35/0003-ARM-7670-1-fix-the-memset-fix.patch
@@ -0,0 +1,87 @@
1From 2ba23fa6c4128febaaf57fe184420a7111caa237 Mon Sep 17 00:00:00 2001
2From: Nicolas Pitre <nicolas.pitre@linaro.org>
3Date: Tue, 12 Mar 2013 13:00:42 +0100
4Subject: [PATCH] ARM: 7670/1: fix the memset fix
5Organization: O.S. Systems Software LTDA.
6
7Commit 455bd4c430b0 ("ARM: 7668/1: fix memset-related crashes caused by
8recent GCC (4.7.2) optimizations") attempted to fix a compliance issue
9with the memset return value. However the memset itself became broken
10by that patch for misaligned pointers.
11
12This fixes the above by branching over the entry code from the
13misaligned fixup code to avoid reloading the original pointer.
14
15Also, because the function entry alignment is wrong in the Thumb mode
16compilation, that fixup code is moved to the end.
17
18While at it, the entry instructions are slightly reworked to help dual
19issue pipelines.
20
21Upstream-Status: Pending
22
23Signed-off-by: Nicolas Pitre <nico@linaro.org>
24Tested-by: Alexander Holler <holler@ahsoftware.de>
25Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
26(cherry picked from commit 418df63adac56841ef6b0f1fcf435bc64d4ed177)
27---
28 arch/arm/lib/memset.S | 33 +++++++++++++--------------------
29 1 file changed, 13 insertions(+), 20 deletions(-)
30
31diff --git a/arch/arm/lib/memset.S b/arch/arm/lib/memset.S
32index d912e73..94b0650 100644
33--- a/arch/arm/lib/memset.S
34+++ b/arch/arm/lib/memset.S
35@@ -14,31 +14,15 @@
36
37 .text
38 .align 5
39- .word 0
40-
41-1: subs r2, r2, #4 @ 1 do we have enough
42- blt 5f @ 1 bytes to align with?
43- cmp r3, #2 @ 1
44- strltb r1, [ip], #1 @ 1
45- strleb r1, [ip], #1 @ 1
46- strb r1, [ip], #1 @ 1
47- add r2, r2, r3 @ 1 (r2 = r2 - (4 - r3))
48-/*
49- * The pointer is now aligned and the length is adjusted. Try doing the
50- * memset again.
51- */
52
53 ENTRY(memset)
54-/*
55- * Preserve the contents of r0 for the return value.
56- */
57- mov ip, r0
58- ands r3, ip, #3 @ 1 unaligned?
59- bne 1b @ 1
60+ ands r3, r0, #3 @ 1 unaligned?
61+ mov ip, r0 @ preserve r0 as return value
62+ bne 6f @ 1
63 /*
64 * we know that the pointer in ip is aligned to a word boundary.
65 */
66- orr r1, r1, r1, lsl #8
67+1: orr r1, r1, r1, lsl #8
68 orr r1, r1, r1, lsl #16
69 mov r3, r1
70 cmp r2, #16
71@@ -127,4 +111,13 @@ ENTRY(memset)
72 tst r2, #1
73 strneb r1, [ip], #1
74 mov pc, lr
75+
76+6: subs r2, r2, #4 @ 1 do we have enough
77+ blt 5b @ 1 bytes to align with?
78+ cmp r3, #2 @ 1
79+ strltb r1, [ip], #1 @ 1
80+ strleb r1, [ip], #1 @ 1
81+ strb r1, [ip], #1 @ 1
82+ add r2, r2, r3 @ 1 (r2 = r2 - (4 - r3))
83+ b 1b
84 ENDPROC(memset)
85--
861.8.4.rc3
87
diff --git a/recipes-kernel/linux/linux-congatec-3.0.35/0004-ENGR00271136-Fix-build-break-when-CONFIG_CLK_DEBUG-i.patch b/recipes-kernel/linux/linux-congatec-3.0.35/0004-ENGR00271136-Fix-build-break-when-CONFIG_CLK_DEBUG-i.patch
new file mode 100644
index 0000000..7316351
--- /dev/null
+++ b/recipes-kernel/linux/linux-congatec-3.0.35/0004-ENGR00271136-Fix-build-break-when-CONFIG_CLK_DEBUG-i.patch
@@ -0,0 +1,43 @@
1From d8601292ae25e0af47aa4486055221ab44113f0e Mon Sep 17 00:00:00 2001
2From: Mahesh Mahadevan <Mahesh.Mahadevan@freescale.com>
3Date: Mon, 15 Jul 2013 15:34:54 -0500
4Subject: [PATCH] ENGR00271136 Fix build break when CONFIG_CLK_DEBUG is
5 disabled
6Organization: O.S. Systems Software LTDA.
7
8clk structure member name is defined only when CONFIG_CLK_DEBUG is enabled.
9Hence need to encapsulate the code with this config.
10
11Patch received from imx community:
12https://community.freescale.com/thread/308482
13
14Upstream-Status: Pending
15
16Signed-off-by: xiongweihuang
17Signed-off-by: Mahesh Mahadevan <Mahesh.Mahadevan@freescale.com>
18---
19 arch/arm/plat-mxc/clock.c | 4 ++--
20 1 file changed, 2 insertions(+), 2 deletions(-)
21
22diff --git a/arch/arm/plat-mxc/clock.c b/arch/arm/plat-mxc/clock.c
23index 93347eb..1aa2664 100755
24--- a/arch/arm/plat-mxc/clock.c
25+++ b/arch/arm/plat-mxc/clock.c
26@@ -58,12 +58,12 @@ static void __clk_disable(struct clk *clk)
27 {
28 if (clk == NULL || IS_ERR(clk))
29 return;
30-
31+#ifdef CONFIG_CLK_DEBUG
32 if (!clk->usecount) {
33 WARN(1, "clock enable/disable mismatch! clk %s\n", clk->name);
34 return;
35 }
36-
37+#endif
38 if (!(--clk->usecount)) {
39 if (clk->disable)
40 clk->disable(clk);
41--
421.8.4.rc3
43
diff --git a/recipes-kernel/linux/linux-congatec-3.0.35/0005-ENGR00271359-Add-Multi-touch-support.patch b/recipes-kernel/linux/linux-congatec-3.0.35/0005-ENGR00271359-Add-Multi-touch-support.patch
new file mode 100644
index 0000000..cb20198
--- /dev/null
+++ b/recipes-kernel/linux/linux-congatec-3.0.35/0005-ENGR00271359-Add-Multi-touch-support.patch
@@ -0,0 +1,98 @@
1From 538f4bb2f7a51f267395550a5be9f0ab2e426712 Mon Sep 17 00:00:00 2001
2From: Erik Boto <erik.boto@pelagicore.com>
3Date: Tue, 16 Jul 2013 12:06:05 -0500
4Subject: [PATCH] ENGR00271359 Add Multi-touch support
5Organization: O.S. Systems Software LTDA.
6
7The previous behavior of the driver did not work properly with Qt5
8QtQuick multi touch-point gestures, due to how touch-points are
9reported when removing a touch-point. My interpretation of the
10available documentation [1] was that the driver should report all
11touch-points between SYN_REPORTs, but it is not explicitly stated so.
12I've found another mail-thread [2] where the creator of the protocol
13states:
14
15"The protocol defines a generic way of sending a variable amount of
16contacts. The contact count is obtained by counting the number of
17non-empty finger packets between SYN_REPORT events."-Henrik Rydberg
18
19I think this verifies my assumption that all touch-points should be
20reported between SYN_REPORTs, otherwise it can not be used to obtain
21the count.
22
23[1] https://www.kernel.org/doc/Documentation/input/multi-touch-protocol.txt
24[2] http://lists.x.org/archives/xorg-devel/2010-March/006466.html
25
26Upstream-Status: Pending
27
28Signed-off-by: Erik Boto <erik.boto@pelagicore.com>
29Signed-off-by: Mahesh Mahadevan <Mahesh.Mahadevan@freescale.com>
30(cherry picked from commit 7cba001c5a502680f6dbf902821726779a9c9287)
31---
32 drivers/input/touchscreen/egalax_ts.c | 36 +++++++++++++++++------------------
33 1 file changed, 18 insertions(+), 18 deletions(-)
34
35diff --git a/drivers/input/touchscreen/egalax_ts.c b/drivers/input/touchscreen/egalax_ts.c
36index 0b6cde7..271f820 100644
37--- a/drivers/input/touchscreen/egalax_ts.c
38+++ b/drivers/input/touchscreen/egalax_ts.c
39@@ -133,7 +133,6 @@ retry:
40 }
41
42 if (down) {
43- /* should also report old pointers */
44 events[id].valid = valid;
45 events[id].status = down;
46 events[id].x = x;
47@@ -144,23 +143,6 @@ retry:
48 input_report_abs(input_dev, ABS_Y, y);
49 input_event(data->input_dev, EV_KEY, BTN_TOUCH, 1);
50 input_report_abs(input_dev, ABS_PRESSURE, 1);
51-#else
52- for (i = 0; i < MAX_SUPPORT_POINTS; i++) {
53- if (!events[i].valid)
54- continue;
55- dev_dbg(&client->dev, "report id:%d valid:%d x:%d y:%d",
56- i, valid, x, y);
57-
58- input_report_abs(input_dev,
59- ABS_MT_TRACKING_ID, i);
60- input_report_abs(input_dev,
61- ABS_MT_TOUCH_MAJOR, 1);
62- input_report_abs(input_dev,
63- ABS_MT_POSITION_X, events[i].x);
64- input_report_abs(input_dev,
65- ABS_MT_POSITION_Y, events[i].y);
66- input_mt_sync(input_dev);
67- }
68 #endif
69 } else {
70 dev_dbg(&client->dev, "release id:%d\n", id);
71@@ -176,6 +158,24 @@ retry:
72 #endif
73 }
74
75+#ifndef CONFIG_TOUCHSCREEN_EGALAX_SINGLE_TOUCH
76+ /* report all pointers */
77+ for (i = 0; i < MAX_SUPPORT_POINTS; i++) {
78+ if (!events[i].valid)
79+ continue;
80+ dev_dbg(&client->dev, "report id:%d valid:%d x:%d y:%d",
81+ i, valid, x, y);
82+ input_report_abs(input_dev,
83+ ABS_MT_TRACKING_ID, i);
84+ input_report_abs(input_dev,
85+ ABS_MT_TOUCH_MAJOR, 1);
86+ input_report_abs(input_dev,
87+ ABS_MT_POSITION_X, events[i].x);
88+ input_report_abs(input_dev,
89+ ABS_MT_POSITION_Y, events[i].y);
90+ input_mt_sync(input_dev);
91+ }
92+#endif
93 input_sync(input_dev);
94 return IRQ_HANDLED;
95 }
96--
971.8.4.rc3
98
diff --git a/recipes-kernel/linux/linux-congatec-3.0.35/0006-Add-support-for-DVI-monitors.patch b/recipes-kernel/linux/linux-congatec-3.0.35/0006-Add-support-for-DVI-monitors.patch
new file mode 100644
index 0000000..00a6b5c
--- /dev/null
+++ b/recipes-kernel/linux/linux-congatec-3.0.35/0006-Add-support-for-DVI-monitors.patch
@@ -0,0 +1,227 @@
1From 3e6441d113f72b412081a2c87f39011e4c253a35 Mon Sep 17 00:00:00 2001
2From: Robert Winkler <robert.winkler@boundarydevices.com>
3Date: Fri, 19 Jul 2013 19:00:41 -0700
4Subject: [PATCH] Add support for DVI monitors
5Organization: O.S. Systems Software LTDA.
6
7Upstream-Status: Pending
8
9Signed-off-by: Robert Winkler <robert.winkler@boundarydevices.com>
10---
11 arch/arm/plat-mxc/include/mach/mxc_hdmi.h | 7 +++
12 drivers/video/mxc_hdmi.c | 98 +++++++++++++------------------
13 2 files changed, 49 insertions(+), 56 deletions(-)
14
15diff --git a/arch/arm/plat-mxc/include/mach/mxc_hdmi.h b/arch/arm/plat-mxc/include/mach/mxc_hdmi.h
16index 94f7638..af59c62 100644
17--- a/arch/arm/plat-mxc/include/mach/mxc_hdmi.h
18+++ b/arch/arm/plat-mxc/include/mach/mxc_hdmi.h
19@@ -605,6 +605,10 @@ enum {
20 HDMI_IH_MUTE_PHY_STAT0_TX_PHY_LOCK = 0x2,
21 HDMI_IH_MUTE_PHY_STAT0_HPD = 0x1,
22
23+/* IH and IH_MUTE convenience macro RX_SENSE | HPD*/
24+ HDMI_DVI_IH_STAT = 0x3D,
25+
26+
27 /* IH_AHBDMAAUD_STAT0 field values */
28 HDMI_IH_AHBDMAAUD_STAT0_ERROR = 0x20,
29 HDMI_IH_AHBDMAAUD_STAT0_LOST = 0x10,
30@@ -903,6 +907,9 @@ enum {
31 HDMI_PHY_HPD = 0x02,
32 HDMI_PHY_TX_PHY_LOCK = 0x01,
33
34+/* HDMI STAT convenience RX_SENSE | HPD */
35+ HDMI_DVI_STAT = 0xF2,
36+
37 /* PHY_I2CM_SLAVE_ADDR field values */
38 HDMI_PHY_I2CM_SLAVE_ADDR_PHY_GEN2 = 0x69,
39 HDMI_PHY_I2CM_SLAVE_ADDR_HEAC_PHY = 0x49,
40diff --git a/drivers/video/mxc_hdmi.c b/drivers/video/mxc_hdmi.c
41index c5069aa..544f352 100644
42--- a/drivers/video/mxc_hdmi.c
43+++ b/drivers/video/mxc_hdmi.c
44@@ -180,7 +180,6 @@ struct mxc_hdmi {
45 bool dft_mode_set;
46 char *dft_mode_str;
47 int default_bpp;
48- u8 latest_intr_stat;
49 bool irq_enabled;
50 spinlock_t irq_lock;
51 bool phy_enabled;
52@@ -1996,58 +1995,48 @@ static void hotplug_worker(struct work_struct *work)
53 struct delayed_work *delay_work = to_delayed_work(work);
54 struct mxc_hdmi *hdmi =
55 container_of(delay_work, struct mxc_hdmi, hotplug_work);
56- u32 phy_int_stat, phy_int_pol, phy_int_mask;
57- u8 val;
58+ u32 hdmi_phy_stat0, hdmi_phy_pol0, hdmi_phy_mask0;
59 unsigned long flags;
60 char event_string[32];
61 char *envp[] = { event_string, NULL };
62
63- phy_int_stat = hdmi->latest_intr_stat;
64- phy_int_pol = hdmi_readb(HDMI_PHY_POL0);
65
66- dev_dbg(&hdmi->pdev->dev, "phy_int_stat=0x%x, phy_int_pol=0x%x\n",
67- phy_int_stat, phy_int_pol);
68+ hdmi_phy_stat0 = hdmi_readb(HDMI_PHY_STAT0);
69+ hdmi_phy_pol0 = hdmi_readb(HDMI_PHY_POL0);
70+
71+ dev_dbg(&hdmi->pdev->dev, "hdmi_phy_stat0=0x%x, hdmi_phy_pol0=0x%x\n",
72+ hdmi_phy_stat0, hdmi_phy_pol0);
73+
74+ /* Make HPD intr active low to capture unplug event or
75+ * active high to capture plugin event */
76+ hdmi_writeb((HDMI_DVI_STAT & ~hdmi_phy_stat0), HDMI_PHY_POL0);
77
78 /* check cable status */
79- if (phy_int_stat & HDMI_IH_PHY_STAT0_HPD) {
80- /* cable connection changes */
81- if (phy_int_pol & HDMI_PHY_HPD) {
82- /* Plugin event */
83- dev_dbg(&hdmi->pdev->dev, "EVENT=plugin\n");
84- mxc_hdmi_cable_connected(hdmi);
85-
86- /* Make HPD intr active low to capture unplug event */
87- val = hdmi_readb(HDMI_PHY_POL0);
88- val &= ~HDMI_PHY_HPD;
89- hdmi_writeb(val, HDMI_PHY_POL0);
90-
91- sprintf(event_string, "EVENT=plugin");
92- kobject_uevent_env(&hdmi->pdev->dev.kobj, KOBJ_CHANGE, envp);
93+ if (hdmi_phy_stat0 & HDMI_DVI_STAT) {
94+ /* Plugin event */
95+ dev_dbg(&hdmi->pdev->dev, "EVENT=plugin\n");
96+ mxc_hdmi_cable_connected(hdmi);
97+
98+ sprintf(event_string, "EVENT=plugin");
99+ kobject_uevent_env(&hdmi->pdev->dev.kobj, KOBJ_CHANGE, envp);
100 #ifdef CONFIG_MXC_HDMI_CEC
101- mxc_hdmi_cec_handle(0x80);
102+ mxc_hdmi_cec_handle(0x80);
103 #endif
104- hdmi_set_cable_state(1);
105-
106- } else if (!(phy_int_pol & HDMI_PHY_HPD)) {
107- /* Plugout event */
108- dev_dbg(&hdmi->pdev->dev, "EVENT=plugout\n");
109- hdmi_set_cable_state(0);
110- mxc_hdmi_abort_stream();
111- mxc_hdmi_cable_disconnected(hdmi);
112+ hdmi_set_cable_state(1);
113
114- /* Make HPD intr active high to capture plugin event */
115- val = hdmi_readb(HDMI_PHY_POL0);
116- val |= HDMI_PHY_HPD;
117- hdmi_writeb(val, HDMI_PHY_POL0);
118+ } else {
119+ /* Plugout event */
120+ dev_dbg(&hdmi->pdev->dev, "EVENT=plugout\n");
121+ hdmi_set_cable_state(0);
122+ mxc_hdmi_abort_stream();
123+ mxc_hdmi_cable_disconnected(hdmi);
124
125- sprintf(event_string, "EVENT=plugout");
126- kobject_uevent_env(&hdmi->pdev->dev.kobj, KOBJ_CHANGE, envp);
127+ sprintf(event_string, "EVENT=plugout");
128+ kobject_uevent_env(&hdmi->pdev->dev.kobj, KOBJ_CHANGE, envp);
129 #ifdef CONFIG_MXC_HDMI_CEC
130- mxc_hdmi_cec_handle(0x100);
131+ mxc_hdmi_cec_handle(0x100);
132 #endif
133
134- } else
135- dev_dbg(&hdmi->pdev->dev, "EVENT=none?\n");
136 }
137
138 /* Lock here to ensure full powerdown sequence
139@@ -2055,12 +2044,12 @@ static void hotplug_worker(struct work_struct *work)
140 spin_lock_irqsave(&hdmi->irq_lock, flags);
141
142 /* Re-enable HPD interrupts */
143- phy_int_mask = hdmi_readb(HDMI_PHY_MASK0);
144- phy_int_mask &= ~HDMI_PHY_HPD;
145- hdmi_writeb(phy_int_mask, HDMI_PHY_MASK0);
146+ hdmi_phy_mask0 = hdmi_readb(HDMI_PHY_MASK0);
147+ hdmi_phy_mask0 &= ~HDMI_DVI_STAT;
148+ hdmi_writeb(hdmi_phy_mask0, HDMI_PHY_MASK0);
149
150 /* Unmute interrupts */
151- hdmi_writeb(~HDMI_IH_MUTE_PHY_STAT0_HPD, HDMI_IH_MUTE_PHY_STAT0);
152+ hdmi_writeb(~HDMI_DVI_IH_STAT, HDMI_IH_MUTE_PHY_STAT0);
153
154 if (hdmi_readb(HDMI_IH_FC_STAT2) & HDMI_IH_FC_STAT2_OVERFLOW_MASK)
155 mxc_hdmi_clear_overflow();
156@@ -2086,7 +2075,7 @@ static void hdcp_hdp_worker(struct work_struct *work)
157 static irqreturn_t mxc_hdmi_hotplug(int irq, void *data)
158 {
159 struct mxc_hdmi *hdmi = data;
160- u8 val, intr_stat;
161+ u8 val;
162 unsigned long flags;
163
164 spin_lock_irqsave(&hdmi->irq_lock, flags);
165@@ -2108,25 +2097,22 @@ static irqreturn_t mxc_hdmi_hotplug(int irq, void *data)
166 * HDMI registers.
167 */
168 /* Capture status - used in hotplug_worker ISR */
169- intr_stat = hdmi_readb(HDMI_IH_PHY_STAT0);
170-
171- if (intr_stat & HDMI_IH_PHY_STAT0_HPD) {
172+ if (hdmi_readb(HDMI_IH_PHY_STAT0) & HDMI_DVI_IH_STAT) {
173
174 dev_dbg(&hdmi->pdev->dev, "Hotplug interrupt received\n");
175- hdmi->latest_intr_stat = intr_stat;
176
177 /* Mute interrupts until handled */
178
179 val = hdmi_readb(HDMI_IH_MUTE_PHY_STAT0);
180- val |= HDMI_IH_MUTE_PHY_STAT0_HPD;
181+ val |= HDMI_DVI_IH_STAT;
182 hdmi_writeb(val, HDMI_IH_MUTE_PHY_STAT0);
183
184 val = hdmi_readb(HDMI_PHY_MASK0);
185- val |= HDMI_PHY_HPD;
186+ val |= HDMI_DVI_STAT;
187 hdmi_writeb(val, HDMI_PHY_MASK0);
188
189 /* Clear Hotplug interrupts */
190- hdmi_writeb(HDMI_IH_PHY_STAT0_HPD, HDMI_IH_PHY_STAT0);
191+ hdmi_writeb(HDMI_DVI_IH_STAT, HDMI_IH_PHY_STAT0);
192
193 schedule_delayed_work(&(hdmi->hotplug_work), msecs_to_jiffies(20));
194 }
195@@ -2282,13 +2268,13 @@ static void mxc_hdmi_fb_registered(struct mxc_hdmi *hdmi)
196 HDMI_PHY_I2CM_CTLINT_ADDR);
197
198 /* enable cable hot plug irq */
199- hdmi_writeb((u8)~HDMI_PHY_HPD, HDMI_PHY_MASK0);
200+ hdmi_writeb((u8)~HDMI_DVI_STAT, HDMI_PHY_MASK0);
201
202 /* Clear Hotplug interrupts */
203- hdmi_writeb(HDMI_IH_PHY_STAT0_HPD, HDMI_IH_PHY_STAT0);
204+ hdmi_writeb(HDMI_DVI_IH_STAT, HDMI_IH_PHY_STAT0);
205
206 /* Unmute interrupts */
207- hdmi_writeb(~HDMI_IH_MUTE_PHY_STAT0_HPD, HDMI_IH_MUTE_PHY_STAT0);
208+ hdmi_writeb(~HDMI_DVI_IH_STAT, HDMI_IH_MUTE_PHY_STAT0);
209
210 hdmi->fb_reg = true;
211
212@@ -2522,10 +2508,10 @@ static int mxc_hdmi_disp_init(struct mxc_dispdrv_handle *disp,
213
214 /* Configure registers related to HDMI interrupt
215 * generation before registering IRQ. */
216- hdmi_writeb(HDMI_PHY_HPD, HDMI_PHY_POL0);
217+ hdmi_writeb(HDMI_DVI_STAT, HDMI_PHY_POL0);
218
219 /* Clear Hotplug interrupts */
220- hdmi_writeb(HDMI_IH_PHY_STAT0_HPD, HDMI_IH_PHY_STAT0);
221+ hdmi_writeb(HDMI_DVI_IH_STAT, HDMI_IH_PHY_STAT0);
222
223 hdmi->nb.notifier_call = mxc_hdmi_fb_event;
224 ret = fb_register_client(&hdmi->nb);
225--
2261.8.4.rc3
227
diff --git a/recipes-kernel/linux/linux-congatec-3.0.35/ENGR00278350-gpu-viante-4.6.9p13-kernel-part-integra.patch b/recipes-kernel/linux/linux-congatec-3.0.35/ENGR00278350-gpu-viante-4.6.9p13-kernel-part-integra.patch
new file mode 100644
index 0000000..1e039fd
--- /dev/null
+++ b/recipes-kernel/linux/linux-congatec-3.0.35/ENGR00278350-gpu-viante-4.6.9p13-kernel-part-integra.patch
@@ -0,0 +1,6261 @@
1From 2e575255b8c53d3cfe2af068411696fe3c40debb Mon Sep 17 00:00:00 2001
2From: Loren Huang <b02279@freescale.com>
3Date: Mon, 2 Sep 2013 12:16:48 +0800
4Subject: [PATCH 01/16] ENGR00278350 gpu:viante 4.6.9p13 kernel part
5 integration
6
7Integrated 4.6.9p13 kernel part change.
8This integration is mainly for android test.
9Linux test will be focused on 3.10 kernel.
10
11Signed-off-by: Loren HUANG <b02279@freescale.com>
12Acked-by: Shawn Guo
13---
14 drivers/mxc/gpu-viv/Kbuild | 33 +-
15 .../GC350/hal/kernel/gc_hal_kernel_hardware_vg.c | 177 ++--
16 .../GC350/hal/kernel/gc_hal_kernel_hardware_vg.h | 9 +-
17 .../arch/XAQ2/hal/kernel/gc_hal_kernel_context.c | 8 +-
18 .../arch/XAQ2/hal/kernel/gc_hal_kernel_context.h | 13 +
19 .../arch/XAQ2/hal/kernel/gc_hal_kernel_hardware.c | 736 ++++++++++++-
20 .../arch/XAQ2/hal/kernel/gc_hal_kernel_hardware.h | 1 +
21 drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel.c | 125 ++-
22 drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel.h | 24 +-
23 .../mxc/gpu-viv/hal/kernel/gc_hal_kernel_command.c | 57 ++
24 .../gpu-viv/hal/kernel/gc_hal_kernel_command_vg.c | 45 +-
25 drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel_db.c | 12 +
26 .../mxc/gpu-viv/hal/kernel/gc_hal_kernel_event.c | 29 +
27 .../hal/kernel/gc_hal_kernel_interrupt_vg.c | 3 +
28 drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel_mmu.c | 8 +-
29 .../hal/kernel/gc_hal_kernel_video_memory.c | 20 +-
30 drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal.h | 84 +-
31 drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_base.h | 172 +++-
32 .../mxc/gpu-viv/hal/kernel/inc/gc_hal_compiler.h | 142 ++-
33 drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_driver.h | 37 +
34 drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_engine.h | 46 +-
35 drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_enum.h | 125 ++-
36 .../mxc/gpu-viv/hal/kernel/inc/gc_hal_options.h | 86 +-
37 .../mxc/gpu-viv/hal/kernel/inc/gc_hal_profiler.h | 1078 +++-----------------
38 drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_raster.h | 48 +
39 drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_types.h | 79 +-
40 .../mxc/gpu-viv/hal/kernel/inc/gc_hal_version.h | 2 +-
41 .../hal/os/linux/kernel/gc_hal_kernel_device.c | 17 +-
42 .../hal/os/linux/kernel/gc_hal_kernel_device.h | 16 +-
43 .../hal/os/linux/kernel/gc_hal_kernel_driver.c | 99 +-
44 .../gpu-viv/hal/os/linux/kernel/gc_hal_kernel_os.c | 655 ++++++++++--
45 .../hal/os/linux/kernel/gc_hal_kernel_sync.c | 174 ++++
46 .../hal/os/linux/kernel/gc_hal_kernel_sync.h | 71 ++
47 33 files changed, 2974 insertions(+), 1257 deletions(-)
48 create mode 100644 drivers/mxc/gpu-viv/hal/os/linux/kernel/gc_hal_kernel_sync.c
49 create mode 100644 drivers/mxc/gpu-viv/hal/os/linux/kernel/gc_hal_kernel_sync.h
50
51diff --git a/drivers/mxc/gpu-viv/Kbuild b/drivers/mxc/gpu-viv/Kbuild
52index 93b1259..2b277d6 100644
53--- a/drivers/mxc/gpu-viv/Kbuild
54+++ b/drivers/mxc/gpu-viv/Kbuild
55@@ -45,8 +45,6 @@ OBJS := $(OS_KERNEL_DIR)/gc_hal_kernel_device.o \
56 $(OS_KERNEL_DIR)/gc_hal_kernel_os.o \
57 $(OS_KERNEL_DIR)/gc_hal_kernel_debugfs.o
58
59-ifeq ($(USE_3D_VG), 1)
60-
61 OBJS += $(HAL_KERNEL_DIR)/gc_hal_kernel.o \
62 $(HAL_KERNEL_DIR)/gc_hal_kernel_command.o \
63 $(HAL_KERNEL_DIR)/gc_hal_kernel_db.o \
64@@ -69,19 +67,9 @@ OBJS +=\
65 $(ARCH_VG_KERNEL_DIR)/gc_hal_kernel_hardware_command_vg.o\
66 $(ARCH_VG_KERNEL_DIR)/gc_hal_kernel_hardware_vg.o
67 endif
68-else
69-
70-OBJS += $(HAL_KERNEL_DIR)/gc_hal_kernel.o \
71- $(HAL_KERNEL_DIR)/gc_hal_kernel_command.o \
72- $(HAL_KERNEL_DIR)/gc_hal_kernel_heap.o \
73- $(HAL_KERNEL_DIR)/gc_hal_kernel_interrupt.o \
74- $(HAL_KERNEL_DIR)/gc_hal_kernel_mmu.o \
75- $(HAL_KERNEL_DIR)/gc_hal_kernel_video_memory.o \
76- $(OS_KERNEL_DIR)/gc_hal_kernel_debug.o
77-
78-OBJS += $(ARCH_KERNEL_DIR)/gc_hal_kernel_hardware.o \
79- $(ARCH_KERNEL_DIR)/gc_hal_kernel_hardware_command.o
80
81+ifneq ($(CONFIG_SYNC),)
82+OBJS += $(OS_KERNEL_DIR)/gc_hal_kernel_sync.o
83 endif
84
85 ifeq ($(KERNELRELEASE), )
86@@ -129,23 +117,16 @@ ifeq ($(CONFIG_DOVE_GPU), 1)
87 EXTRA_CFLAGS += -DCONFIG_DOVE_GPU=1
88 endif
89
90-ifeq ($(USE_POWER_MANAGEMENT), 1)
91-EXTRA_CFLAGS += -DgcdPOWER_MANAGEMENT=1
92-else
93-EXTRA_CFLAGS += -DgcdPOWER_MANAGEMENT=0
94-endif
95-
96 ifneq ($(USE_PLATFORM_DRIVER), 0)
97 EXTRA_CFLAGS += -DUSE_PLATFORM_DRIVER=1
98 else
99 EXTRA_CFLAGS += -DUSE_PLATFORM_DRIVER=0
100 endif
101
102-ifeq ($(USE_PROFILER), 1)
103+
104 EXTRA_CFLAGS += -DVIVANTE_PROFILER=1
105-else
106-EXTRA_CFLAGS += -DVIVANTE_PROFILER=0
107-endif
108+EXTRA_CFLAGS += -DVIVANTE_PROFILER_CONTEXT=1
109+
110
111 ifeq ($(ANDROID), 1)
112 EXTRA_CFLAGS += -DANDROID=1
113@@ -235,6 +216,10 @@ ifeq ($(USE_BANK_ALIGNMENT), 1)
114 endif
115 endif
116
117+ifneq ($(CONFIG_SYNC),)
118+EXTRA_CFLAGS += -DgcdANDROID_NATIVE_FENCE_SYNC=1
119+endif
120+
121 EXTRA_CFLAGS += -I$(AQROOT)/hal/kernel/inc
122 EXTRA_CFLAGS += -I$(AQROOT)/hal/kernel
123 EXTRA_CFLAGS += -I$(AQARCH)/hal/kernel
124diff --git a/drivers/mxc/gpu-viv/arch/GC350/hal/kernel/gc_hal_kernel_hardware_vg.c b/drivers/mxc/gpu-viv/arch/GC350/hal/kernel/gc_hal_kernel_hardware_vg.c
125index 70c2cd6..a17d2fd 100644
126--- a/drivers/mxc/gpu-viv/arch/GC350/hal/kernel/gc_hal_kernel_hardware_vg.c
127+++ b/drivers/mxc/gpu-viv/arch/GC350/hal/kernel/gc_hal_kernel_hardware_vg.c
128@@ -217,50 +217,17 @@ _IdentifyHardware(
129 return status;
130 }
131
132-static gctTHREADFUNCRESULT gctTHREADFUNCTYPE
133-_TimeIdleThread(
134- gctTHREADFUNCPARAMETER ThreadParameter
135+#if gcdPOWEROFF_TIMEOUT
136+void
137+_VGPowerTimerFunction(
138+ gctPOINTER Data
139 )
140 {
141- gctUINT32 currentTime = 0;
142- gctBOOL isAfter = gcvFALSE;
143- gceCHIPPOWERSTATE state;
144-
145- /* Cast the object. */
146- gckVGHARDWARE hardware = (gckVGHARDWARE) ThreadParameter;
147-
148- while(gcvTRUE)
149- {
150- gcmkVERIFY_OK(gckOS_WaitSignal(hardware->os,
151- hardware->idleSignal, gcvINFINITE));
152-
153- if (hardware->killThread)
154- {
155- break;
156- }
157-
158- do
159- {
160- gcmkVERIFY_OK(gckOS_GetTicks(&currentTime));
161-
162- gcmkVERIFY_OK(
163- gckOS_TicksAfter(currentTime, hardware->powerOffTime, &isAfter));
164-
165- if (isAfter)
166- {
167- gcmkVERIFY_OK(gckVGHARDWARE_SetPowerManagementState(
168- hardware, gcvPOWER_OFF_BROADCAST));
169- }
170-
171- gcmkVERIFY_OK(gckOS_Delay(hardware->os, 200));
172-
173- gcmkVERIFY_OK(gckVGHARDWARE_QueryPowerManagementState(
174- hardware, &state));
175-
176- } while (state == gcvPOWER_IDLE);
177- }
178- return 0;
179+ gckVGHARDWARE hardware = (gckVGHARDWARE)Data;
180+ gcmkVERIFY_OK(
181+ gckVGHARDWARE_SetPowerManagementState(hardware, gcvPOWER_OFF_TIMEOUT));
182 }
183+#endif
184
185 /******************************************************************************\
186 ****************************** gckVGHARDWARE API code *****************************
187@@ -338,15 +305,21 @@ gckVGHARDWARE_Construct(
188 hardware->chipMinorFeatures2 = chipMinorFeatures2;
189
190 hardware->powerMutex = gcvNULL;
191- hardware->idleSignal = gcvNULL;
192 hardware->chipPowerState = gcvPOWER_ON;
193 hardware->chipPowerStateGlobal = gcvPOWER_ON;
194 hardware->clockState = gcvTRUE;
195 hardware->powerState = gcvTRUE;
196- hardware->powerOffTimeout = gcdPOWEROFF_TIMEOUT;
197+
198 hardware->powerOffTime = 0;
199- hardware->timeIdleThread = gcvNULL;
200- hardware->killThread = gcvFALSE;
201+#if gcdPOWEROFF_TIMEOUT
202+ hardware->powerOffTimeout = gcdPOWEROFF_TIMEOUT;
203+
204+ gcmkVERIFY_OK(gckOS_CreateTimer(Os,
205+ _VGPowerTimerFunction,
206+ (gctPOINTER)hardware,
207+ &hardware->powerOffTimer));
208+#endif
209+
210 /* Determine whether FE 2.0 is present. */
211 hardware->fe20 = ((((gctUINT32) (hardware->chipFeatures)) >> (0 ? 28:28) & ((gctUINT32) ((((1 ? 28:28) - (0 ? 28:28) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 28:28) - (0 ? 28:28) + 1)))))) == (0x1 & ((gctUINT32) ((((1 ? 28:28) - (0 ? 28:28) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 28:28) - (0 ? 28:28) + 1)))))));
212
213@@ -365,18 +338,10 @@ gckVGHARDWARE_Construct(
214 gcmkVERIFY_OK(gckVGHARDWARE_SetFastClear(hardware, -1));
215
216 gcmkERR_BREAK(gckOS_CreateMutex(Os, &hardware->powerMutex));
217- gcmkERR_BREAK(gckOS_CreateSignal(Os, gcvFALSE, &hardware->idleSignal));
218
219 /* Enable power management by default. */
220 hardware->powerManagement = gcvTRUE;
221
222- gcmkERR_BREAK(gckOS_StartThread(
223- hardware->os,
224- _TimeIdleThread,
225- hardware,
226- &hardware->timeIdleThread
227- ));
228-
229 /* Return pointer to the gckVGHARDWARE object. */
230 *Hardware = hardware;
231
232@@ -386,6 +351,14 @@ gckVGHARDWARE_Construct(
233 }
234 while (gcvFALSE);
235
236+#if gcdPOWEROFF_TIMEOUT
237+ if (hardware->powerOffTimer != gcvNULL)
238+ {
239+ gcmkVERIFY_OK(gckOS_StopTimer(Os, hardware->powerOffTimer));
240+ gcmkVERIFY_OK(gckOS_DestroyTimer(Os, hardware->powerOffTimer));
241+ }
242+#endif
243+
244 if (hardware->pageTableDirty != gcvNULL)
245 {
246 gcmkVERIFY_OK(gckOS_AtomDestroy(Os, hardware->pageTableDirty));
247@@ -428,10 +401,6 @@ gckVGHARDWARE_Destroy(
248 /* Verify the arguments. */
249 gcmkVERIFY_OBJECT(Hardware, gcvOBJ_HARDWARE);
250
251- Hardware->killThread = gcvTRUE;
252- gcmkVERIFY_OK(gckOS_Signal(Hardware->os, Hardware->idleSignal, gcvTRUE));
253- gcmkVERIFY_OK(gckOS_StopThread(Hardware->os, Hardware->timeIdleThread));
254-
255 /* Mark the object as unknown. */
256 Hardware->object.type = gcvOBJ_UNKNOWN;
257
258@@ -441,11 +410,10 @@ gckVGHARDWARE_Destroy(
259 Hardware->os, Hardware->powerMutex));
260 }
261
262- if (Hardware->idleSignal != gcvNULL)
263- {
264- gcmkVERIFY_OK(gckOS_DestroySignal(
265- Hardware->os, Hardware->idleSignal));
266- }
267+#if gcdPOWEROFF_TIMEOUT
268+ gcmkVERIFY_OK(gckOS_StopTimer(Hardware->os, Hardware->powerOffTimer));
269+ gcmkVERIFY_OK(gckOS_DestroyTimer(Hardware->os, Hardware->powerOffTimer));
270+#endif
271
272 if (Hardware->pageTableDirty != gcvNULL)
273 {
274@@ -1510,11 +1478,15 @@ gckVGHARDWARE_SetPowerManagementState(
275 gctBOOL commitMutex = gcvFALSE;
276 gctBOOL mutexAcquired = gcvFALSE;
277
278+#if gcdPOWEROFF_TIMEOUT
279+ gctBOOL timeout = gcvFALSE;
280+ gctBOOL isAfter = gcvFALSE;
281+ gctUINT32 currentTime;
282+#endif
283+
284 gctBOOL broadcast = gcvFALSE;
285 gctUINT32 process, thread;
286 gctBOOL global = gcvFALSE;
287- gctUINT32 currentTime;
288-
289
290 #if gcdENABLE_PROFILING
291 gctUINT64 time, freq, mutexTime, onTime, stallTime, stopTime, delayTime,
292@@ -1661,6 +1633,16 @@ gckVGHARDWARE_SetPowerManagementState(
293 global = gcvTRUE;
294 break;
295
296+#if gcdPOWEROFF_TIMEOUT
297+ case gcvPOWER_OFF_TIMEOUT:
298+ /* Convert to OFF and note we are inside broadcast. */
299+ State = gcvPOWER_OFF;
300+ broadcast = gcvTRUE;
301+ /* Check time out */
302+ timeout = gcvTRUE;
303+ break;
304+#endif
305+
306 default:
307 break;
308 }
309@@ -1719,6 +1701,31 @@ gckVGHARDWARE_SetPowerManagementState(
310 flag = flags[Hardware->chipPowerState][State];
311 /*clock = clocks[State];*/
312
313+#if gcdPOWEROFF_TIMEOUT
314+ if (timeout)
315+ {
316+ gcmkONERROR(gckOS_GetTicks(&currentTime));
317+
318+ gcmkONERROR(
319+ gckOS_TicksAfter(Hardware->powerOffTime, currentTime, &isAfter));
320+
321+ /* powerOffTime is pushed forward, give up.*/
322+ if (isAfter
323+ /* Expect a transition start from IDLE. */
324+ || (Hardware->chipPowerState == gcvPOWER_ON)
325+ || (Hardware->chipPowerState == gcvPOWER_OFF)
326+ )
327+ {
328+ /* Release the power mutex. */
329+ gcmkONERROR(gckOS_ReleaseMutex(os, Hardware->powerMutex));
330+
331+ /* No need to do anything. */
332+ gcmkFOOTER_NO();
333+ return gcvSTATUS_OK;
334+ }
335+ }
336+#endif
337+
338 if (flag == 0)
339 {
340 /* Release the power mutex. */
341@@ -1742,6 +1749,18 @@ gckVGHARDWARE_SetPowerManagementState(
342 return gcvSTATUS_OK;
343 }
344 }
345+ else
346+ {
347+ if (flag & gcvPOWER_FLAG_ACQUIRE)
348+ {
349+ /* Acquire the power management semaphore. */
350+ gcmkONERROR(gckOS_AcquireSemaphore(os, command->powerSemaphore));
351+ acquired = gcvTRUE;
352+
353+ /* avoid acquiring again. */
354+ flag &= ~gcvPOWER_FLAG_ACQUIRE;
355+ }
356+ }
357
358 if (flag & (gcvPOWER_FLAG_INITIALIZE | gcvPOWER_FLAG_CLOCK_ON))
359 {
360@@ -1858,14 +1877,6 @@ gckVGHARDWARE_SetPowerManagementState(
361 Hardware->chipPowerStateGlobal = State;
362 }
363
364- if (State == gcvPOWER_IDLE)
365- {
366- gcmkVERIFY_OK(gckOS_Signal(os, Hardware->idleSignal, gcvTRUE));
367- }
368- /* Reset power off time */
369- gcmkVERIFY_OK(gckOS_GetTicks(&currentTime));
370- Hardware->powerOffTime = currentTime + Hardware->powerOffTimeout;
371-
372 if (commitMutex)
373 {
374 /* Acquire the mutex. */
375@@ -1875,6 +1886,28 @@ gckVGHARDWARE_SetPowerManagementState(
376 ));
377 }
378
379+#if gcdPOWEROFF_TIMEOUT
380+ /* Reset power off time */
381+ gcmkONERROR(gckOS_GetTicks(&currentTime));
382+
383+ Hardware->powerOffTime = currentTime + Hardware->powerOffTimeout;
384+
385+ if (State == gcvPOWER_IDLE)
386+ {
387+ /* Start a timer to power off GPU when GPU enters IDLE or SUSPEND. */
388+ gcmkVERIFY_OK(gckOS_StartTimer(os,
389+ Hardware->powerOffTimer,
390+ Hardware->powerOffTimeout));
391+ }
392+ else
393+ {
394+ gcmkTRACE_ZONE(gcvLEVEL_INFO, gcvZONE_HARDWARE, "Cancel powerOfftimer");
395+
396+ /* Cancel running timer when GPU enters ON or OFF. */
397+ gcmkVERIFY_OK(gckOS_StopTimer(os, Hardware->powerOffTimer));
398+ }
399+#endif
400+
401 /* Release the power mutex. */
402 gcmkONERROR(gckOS_ReleaseMutex(os, Hardware->powerMutex));
403
404diff --git a/drivers/mxc/gpu-viv/arch/GC350/hal/kernel/gc_hal_kernel_hardware_vg.h b/drivers/mxc/gpu-viv/arch/GC350/hal/kernel/gc_hal_kernel_hardware_vg.h
405index 16b81ae..73d4594 100644
406--- a/drivers/mxc/gpu-viv/arch/GC350/hal/kernel/gc_hal_kernel_hardware_vg.h
407+++ b/drivers/mxc/gpu-viv/arch/GC350/hal/kernel/gc_hal_kernel_hardware_vg.h
408@@ -53,7 +53,6 @@ struct _gckVGHARDWARE
409 gctBOOL clockState;
410 gctBOOL powerState;
411 gctPOINTER powerMutex;
412- gctSIGNAL idleSignal;
413 gctUINT32 powerProcess;
414 gctUINT32 powerThread;
415 gceCHIPPOWERSTATE chipPowerState;
416@@ -61,11 +60,13 @@ struct _gckVGHARDWARE
417 gctISRMANAGERFUNC startIsr;
418 gctISRMANAGERFUNC stopIsr;
419 gctPOINTER isrContext;
420+ gctPOINTER pageTableDirty;
421+
422+#if gcdPOWEROFF_TIMEOUT
423 gctUINT32 powerOffTime;
424 gctUINT32 powerOffTimeout;
425- gctTHREAD timeIdleThread;
426- gctBOOL killThread;
427- gctPOINTER pageTableDirty;
428+ gctPOINTER powerOffTimer;
429+#endif
430
431 gctBOOL powerManagement;
432 };
433diff --git a/drivers/mxc/gpu-viv/arch/XAQ2/hal/kernel/gc_hal_kernel_context.c b/drivers/mxc/gpu-viv/arch/XAQ2/hal/kernel/gc_hal_kernel_context.c
434index 24003e7..42e6915 100644
435--- a/drivers/mxc/gpu-viv/arch/XAQ2/hal/kernel/gc_hal_kernel_context.c
436+++ b/drivers/mxc/gpu-viv/arch/XAQ2/hal/kernel/gc_hal_kernel_context.c
437@@ -181,7 +181,8 @@ _FlushPipe(
438 ? ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 3:3) - (0 ? 3:3) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 3:3) - (0 ? 3:3) + 1))))))) << (0 ? 3:3))) | (((gctUINT32) (0x1 & ((gctUINT32) ((((1 ? 3:3) - (0 ? 3:3) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 3:3) - (0 ? 3:3) + 1))))))) << (0 ? 3:3)))
439 : ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 0:0) - (0 ? 0:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 0:0) - (0 ? 0:0) + 1))))))) << (0 ? 0:0))) | (((gctUINT32) (0x1 & ((gctUINT32) ((((1 ? 0:0) - (0 ? 0:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 0:0) - (0 ? 0:0) + 1))))))) << (0 ? 0:0)))
440 | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 1:1) - (0 ? 1:1) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 1:1) - (0 ? 1:1) + 1))))))) << (0 ? 1:1))) | (((gctUINT32) (0x1 & ((gctUINT32) ((((1 ? 1:1) - (0 ? 1:1) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 1:1) - (0 ? 1:1) + 1))))))) << (0 ? 1:1)))
441- | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 2:2) - (0 ? 2:2) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 2:2) - (0 ? 2:2) + 1))))))) << (0 ? 2:2))) | (((gctUINT32) (0x1 & ((gctUINT32) ((((1 ? 2:2) - (0 ? 2:2) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 2:2) - (0 ? 2:2) + 1))))))) << (0 ? 2:2)));
442+ | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 2:2) - (0 ? 2:2) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 2:2) - (0 ? 2:2) + 1))))))) << (0 ? 2:2))) | (((gctUINT32) (0x1 & ((gctUINT32) ((((1 ? 2:2) - (0 ? 2:2) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 2:2) - (0 ? 2:2) + 1))))))) << (0 ? 2:2)))
443+ | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 4:4) - (0 ? 4:4) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 4:4) - (0 ? 4:4) + 1))))))) << (0 ? 4:4))) | (((gctUINT32) (0x1 & ((gctUINT32) ((((1 ? 4:4) - (0 ? 4:4) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 4:4) - (0 ? 4:4) + 1))))))) << (0 ? 4:4)));
444
445 /* Semaphore from FE to PE. */
446 *buffer++
447@@ -620,7 +621,10 @@ _InitializeContextBuffer(
448 index += _State(Context, index, 0x10180 >> 2, 0x00000000, 32, gcvFALSE, gcvFALSE);
449 index += _State(Context, index, 0x10200 >> 2, 0x00000000, 32, gcvFALSE, gcvFALSE);
450 index += _State(Context, index, 0x10280 >> 2, 0x00000000, 32, gcvFALSE, gcvFALSE);
451- index += _State(Context, index, 0x02C00 >> 2, 0x00000000, 256, gcvFALSE, gcvFALSE);
452+ for (i = 0; i < 256 / 16; i += 1)
453+ {
454+ index += _State(Context, index, (0x02C00 >> 2) + i * 16, 0x00000000, 14, gcvFALSE, gcvFALSE);
455+ }
456 index += _State(Context, index, 0x10300 >> 2, 0x00000000, 32, gcvFALSE, gcvFALSE);
457 index += _State(Context, index, 0x10380 >> 2, 0x00321000, 32, gcvFALSE, gcvFALSE);
458 index += _State(Context, index, 0x10400 >> 2, 0x00000000, 32, gcvFALSE, gcvFALSE);
459diff --git a/drivers/mxc/gpu-viv/arch/XAQ2/hal/kernel/gc_hal_kernel_context.h b/drivers/mxc/gpu-viv/arch/XAQ2/hal/kernel/gc_hal_kernel_context.h
460index 7554045..5d2c7c7 100644
461--- a/drivers/mxc/gpu-viv/arch/XAQ2/hal/kernel/gc_hal_kernel_context.h
462+++ b/drivers/mxc/gpu-viv/arch/XAQ2/hal/kernel/gc_hal_kernel_context.h
463@@ -134,6 +134,19 @@ struct _gckCONTEXT
464 #if gcdSECURE_USER
465 gctBOOL_PTR hint;
466 #endif
467+
468+#if VIVANTE_PROFILER_CONTEXT
469+ gcsPROFILER_COUNTERS latestProfiler;
470+ gcsPROFILER_COUNTERS histroyProfiler;
471+ gctUINT32 prevVSInstCount;
472+ gctUINT32 prevVSBranchInstCount;
473+ gctUINT32 prevVSTexInstCount;
474+ gctUINT32 prevVSVertexCount;
475+ gctUINT32 prevPSInstCount;
476+ gctUINT32 prevPSBranchInstCount;
477+ gctUINT32 prevPSTexInstCount;
478+ gctUINT32 prevPSPixelCount;
479+#endif
480 };
481
482 #ifdef __cplusplus
483diff --git a/drivers/mxc/gpu-viv/arch/XAQ2/hal/kernel/gc_hal_kernel_hardware.c b/drivers/mxc/gpu-viv/arch/XAQ2/hal/kernel/gc_hal_kernel_hardware.c
484index 00f3839..e02dc23 100644
485--- a/drivers/mxc/gpu-viv/arch/XAQ2/hal/kernel/gc_hal_kernel_hardware.c
486+++ b/drivers/mxc/gpu-viv/arch/XAQ2/hal/kernel/gc_hal_kernel_hardware.c
487@@ -21,6 +21,9 @@
488
489 #include "gc_hal.h"
490 #include "gc_hal_kernel.h"
491+#if VIVANTE_PROFILER_CONTEXT
492+#include "gc_hal_kernel_context.h"
493+#endif
494
495 #define _GC_OBJ_ZONE gcvZONE_HARDWARE
496
497@@ -69,6 +72,7 @@ _IdentifyHardware(
498 gctUINT32 numConstants = 0;
499 gctUINT32 bufferSize = 0;
500 gctUINT32 varyingsCount = 0;
501+ gctBOOL useHZ;
502
503 gcmkHEADER_ARG("Os=0x%x", Os);
504
505@@ -209,6 +213,15 @@ _IdentifyHardware(
506 0x00088,
507 &Identity->chipMinorFeatures3));
508
509+ /*The BG2 chip has no compression supertiled, and the bit of GCMinorFeature3BugFixes15 is n/a*/
510+ if(Identity->chipModel == gcv1000 && Identity->chipRevision == 0x5036)
511+ {
512+ Identity->chipMinorFeatures3
513+ = ((((gctUINT32) (Identity->chipMinorFeatures3)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 5:5) - (0 ? 5:5) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 5:5) - (0 ? 5:5) + 1))))))) << (0 ? 5:5))) | (((gctUINT32) (0x0 & ((gctUINT32) ((((1 ? 5:5) - (0 ? 5:5) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 5:5) - (0 ? 5:5) + 1))))))) << (0 ? 5:5)));
514+ Identity->chipMinorFeatures3
515+ = ((((gctUINT32) (Identity->chipMinorFeatures3)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 27:27) - (0 ? 27:27) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 27:27) - (0 ? 27:27) + 1))))))) << (0 ? 27:27))) | (((gctUINT32) (0x0 & ((gctUINT32) ((((1 ? 27:27) - (0 ? 27:27) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 27:27) - (0 ? 27:27) + 1))))))) << (0 ? 27:27)));
516+ }
517+
518 /* Read chip minor featuress register #4. */
519 gcmkONERROR(
520 gckOS_ReadRegisterEx(Os, Core,
521@@ -244,14 +257,31 @@ _IdentifyHardware(
522 if (((Identity->chipModel == gcv1000) && ((Identity->chipRevision == 0x5035)
523 || (Identity->chipRevision == 0x5036)
524 || (Identity->chipRevision == 0x5037)))
525- || ((Identity->chipModel == gcv800) && (Identity->chipRevision == 0x4612)))
526+ || ((Identity->chipModel == gcv800) && (Identity->chipRevision == 0x4612))
527+ || ((Identity->chipModel == gcv860) && (Identity->chipRevision == 0x4647)))
528 {
529 Identity->superTileMode = 1;
530 }
531
532+ if (Identity->chipModel == gcv4000 && Identity->chipRevision == 0x5245)
533+ {
534+ useHZ = ((((gctUINT32) (Identity->chipMinorFeatures3)) >> (0 ? 26:26) & ((gctUINT32) ((((1 ? 26:26) - (0 ? 26:26) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 26:26) - (0 ? 26:26) + 1)))))) == (0x1 & ((gctUINT32) ((((1 ? 26:26) - (0 ? 26:26) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 26:26) - (0 ? 26:26) + 1)))))))
535+ || ((((gctUINT32) (Identity->chipMinorFeatures3)) >> (0 ? 8:8) & ((gctUINT32) ((((1 ? 8:8) - (0 ? 8:8) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 8:8) - (0 ? 8:8) + 1)))))) == (0x1 & ((gctUINT32) ((((1 ? 8:8) - (0 ? 8:8) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 8:8) - (0 ? 8:8) + 1)))))));
536+ }
537+ else
538+ {
539+ useHZ = gcvFALSE;
540+ }
541
542- /* Disable HZ when EZ is present for older chips. */
543- if (!((((gctUINT32) (Identity->chipFeatures)) >> (0 ? 16:16) & ((gctUINT32) ((((1 ? 16:16) - (0 ? 16:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 16:16) - (0 ? 16:16) + 1)))))) == (0x1 & ((gctUINT32) ((((1 ? 16:16) - (0 ? 16:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 16:16) - (0 ? 16:16) + 1))))))))
544+ if (useHZ)
545+ {
546+ /* Disable EZ. */
547+ Identity->chipFeatures
548+ = ((((gctUINT32) (Identity->chipFeatures)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 16:16) - (0 ? 16:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 16:16) - (0 ? 16:16) + 1))))))) << (0 ? 16:16))) | (((gctUINT32) (0x1 & ((gctUINT32) ((((1 ? 16:16) - (0 ? 16:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 16:16) - (0 ? 16:16) + 1))))))) << (0 ? 16:16)));
549+ }
550+
551+ /* Disable HZ when EZ is present for older chips. */
552+ else if (!((((gctUINT32) (Identity->chipFeatures)) >> (0 ? 16:16) & ((gctUINT32) ((((1 ? 16:16) - (0 ? 16:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 16:16) - (0 ? 16:16) + 1)))))) == (0x1 & ((gctUINT32) ((((1 ? 16:16) - (0 ? 16:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 16:16) - (0 ? 16:16) + 1))))))))
553 {
554 /* Disable HIERARCHICAL_Z. */
555 Identity->chipMinorFeatures
556@@ -470,6 +500,15 @@ _IdentifyHardware(
557 Identity->varyingsCount = 8;
558 }
559
560+ /* For some cores, it consumes two varying for position, so the max varying vectors should minus one. */
561+ if ((Identity->chipModel == gcv4000 && Identity->chipRevision == 0x5222) ||
562+ (Identity->chipModel == gcv4000 && Identity->chipRevision == 0x5208) ||
563+ ((Identity->chipModel == gcv2100 || Identity->chipModel == gcv2000) && Identity->chipRevision == 0x5108) ||
564+ (Identity->chipModel == gcv880 && (Identity->chipRevision == 0x5107 || Identity->chipRevision == 0x5106)))
565+ {
566+ Identity->varyingsCount -= 1;
567+ }
568+
569 /* Success. */
570 gcmkFOOTER();
571 return gcvSTATUS_OK;
572@@ -535,9 +574,9 @@ _DumpDebugRegisters(
573 IN gcsiDEBUG_REGISTERS_PTR Descriptor
574 )
575 {
576- gceSTATUS status;
577+ gceSTATUS status = gcvSTATUS_OK;
578 gctUINT32 select;
579- gctUINT32 data;
580+ gctUINT32 data = 0;
581 gctUINT i;
582
583 gcmkHEADER_ARG("Os=0x%X Descriptor=0x%X", Os, Descriptor);
584@@ -643,6 +682,42 @@ OnError:
585 return status;
586 }
587
588+gceSTATUS
589+_FlushCache(
590+ gckHARDWARE Hardware,
591+ gckCOMMAND Command
592+ )
593+{
594+ gceSTATUS status;
595+ gctSIZE_T bytes, requested;
596+ gctPOINTER buffer;
597+
598+ /* Get the size of the flush command. */
599+ gcmkONERROR(gckHARDWARE_Flush(Hardware,
600+ gcvFLUSH_ALL,
601+ gcvNULL,
602+ &requested));
603+
604+ /* Reserve space in the command queue. */
605+ gcmkONERROR(gckCOMMAND_Reserve(Command,
606+ requested,
607+ &buffer,
608+ &bytes));
609+
610+ /* Append a flush. */
611+ gcmkONERROR(gckHARDWARE_Flush(
612+ Hardware, gcvFLUSH_ALL, buffer, &bytes
613+ ));
614+
615+ /* Execute the command queue. */
616+ gcmkONERROR(gckCOMMAND_Execute(Command, requested));
617+
618+ return gcvSTATUS_OK;
619+
620+OnError:
621+ return status;
622+}
623+
624 /******************************************************************************\
625 ****************************** gckHARDWARE API code *****************************
626 \******************************************************************************/
627@@ -809,6 +884,9 @@ gckHARDWARE_Construct(
628 /* Enable power management by default. */
629 hardware->powerManagement = gcvTRUE;
630
631+ /* Disable profiler by default */
632+ hardware->gpuProfiler = gcvFALSE;
633+
634 /* Return pointer to the gckHARDWARE object. */
635 *Hardware = hardware;
636
637@@ -1113,6 +1191,31 @@ gckHARDWARE_InitializeHardware(
638 ((((gctUINT32) (0x01590880)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 23:23) - (0 ? 23:23) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 23:23) - (0 ? 23:23) + 1))))))) << (0 ? 23:23))) | (((gctUINT32) ((gctUINT32) (1) & ((gctUINT32) ((((1 ? 23:23) - (0 ? 23:23) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 23:23) - (0 ? 23:23) + 1))))))) << (0 ? 23:23)))));
639 }
640
641+ if ((gckHARDWARE_IsFeatureAvailable(Hardware, gcvFEATURE_HALTI2) == gcvFALSE)
642+ || (gckHARDWARE_IsFeatureAvailable(Hardware, gcvFEATURE_HALTI2) && (Hardware->identity.chipRevision < 0x5422))
643+ )
644+ {
645+ gctUINT32 data;
646+
647+ gcmkONERROR(
648+ gckOS_ReadRegisterEx(Hardware->os,
649+ Hardware->core,
650+ Hardware->powerBaseAddress
651+ + 0x00104,
652+ &data));
653+
654+
655+ data = ((((gctUINT32) (data)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 15:15) - (0 ? 15:15) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:15) - (0 ? 15:15) + 1))))))) << (0 ? 15:15))) | (((gctUINT32) ((gctUINT32) (1) & ((gctUINT32) ((((1 ? 15:15) - (0 ? 15:15) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:15) - (0 ? 15:15) + 1))))))) << (0 ? 15:15)));
656+
657+
658+ gcmkONERROR(
659+ gckOS_WriteRegisterEx(Hardware->os,
660+ Hardware->core,
661+ Hardware->powerBaseAddress
662+ + 0x00104,
663+ data));
664+ }
665+
666 /* Special workaround for this core
667 ** Make sure FE and TX are on different buses */
668 if ((Hardware->identity.chipModel == gcv2000)
669@@ -1152,7 +1255,9 @@ gckHARDWARE_InitializeHardware(
670 }
671
672 if (Hardware->identity.chipModel >= gcv400
673- && Hardware->identity.chipModel != gcv420)
674+ && Hardware->identity.chipModel != gcv420
675+ && (((((gctUINT32) (Hardware->identity.chipMinorFeatures3)) >> (0 ? 15:15) & ((gctUINT32) ((((1 ? 15:15) - (0 ? 15:15) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:15) - (0 ? 15:15) + 1)))))) == (0x1 & ((gctUINT32) ((((1 ? 15:15) - (0 ? 15:15) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:15) - (0 ? 15:15) + 1))))))) != gcvTRUE)
676+ )
677 {
678 gctUINT32 data;
679
680@@ -2883,35 +2988,44 @@ gckHARDWARE_QueryShaderCaps(
681 OUT gctUINT * Varyings
682 )
683 {
684+ gctUINT32 vsConstMax;
685+ gctUINT32 psConstMax;
686+
687 gcmkHEADER_ARG("Hardware=0x%x VertexUniforms=0x%x "
688 "FragmentUniforms=0x%x Varyings=0x%x",
689 Hardware, VertexUniforms,
690 FragmentUniforms, Varyings);
691
692+ if ((Hardware->identity.chipModel == gcv2000)
693+ && (Hardware->identity.chipRevision == 0x5118))
694+ {
695+ vsConstMax = 256;
696+ psConstMax = 64;
697+ }
698+ else if (Hardware->identity.numConstants > 256)
699+ {
700+ vsConstMax = 256;
701+ psConstMax = 256;
702+ }
703+ else if (Hardware->identity.numConstants == 256)
704+ {
705+ vsConstMax = 256;
706+ psConstMax = 256;
707+ }
708+ else
709+ {
710+ vsConstMax = 168;
711+ psConstMax = 64;
712+ }
713+
714 if (VertexUniforms != gcvNULL)
715 {
716- /* Return the vs shader const count. */
717- if (Hardware->identity.chipModel < gcv4000)
718- {
719- *VertexUniforms = 168;
720- }
721- else
722- {
723- *VertexUniforms = 256;
724- }
725+ *VertexUniforms = vsConstMax;
726 }
727
728 if (FragmentUniforms != gcvNULL)
729 {
730- /* Return the ps shader const count. */
731- if (Hardware->identity.chipModel < gcv4000)
732- {
733- *FragmentUniforms = 64;
734- }
735- else
736- {
737- *FragmentUniforms = 256;
738- }
739+ *FragmentUniforms = psConstMax;
740 }
741
742 if (Varyings != gcvNULL)
743@@ -3229,12 +3343,28 @@ gckHARDWARE_SetMMUv2(
744 gctBOOL commitEntered = gcvFALSE;
745 gctPOINTER pointer = gcvNULL;
746 gctBOOL acquired = gcvFALSE;
747+ gctBOOL config2D;
748+ gctSIZE_T configSize;
749
750 gcmkHEADER_ARG("Hardware=0x%x Enable=%d", Hardware, Enable);
751
752 /* Verify the arguments. */
753 gcmkVERIFY_OBJECT(Hardware, gcvOBJ_HARDWARE);
754
755+ config2D = gckHARDWARE_IsFeatureAvailable(Hardware, gcvFEATURE_PIPE_3D)
756+ && gckHARDWARE_IsFeatureAvailable(Hardware, gcvFEATURE_PIPE_2D);
757+
758+ configSize = 4 * 4;
759+
760+ if (config2D)
761+ {
762+ configSize +=
763+ /* Pipe Select. */
764+ 4 * 4
765+ /* Configure MMU States. */
766+ + 4 * 4;
767+ }
768+
769 /* Convert logical address into physical address. */
770 gcmkONERROR(
771 gckOS_GetPhysicalAddress(Hardware->os, MtlbAddress, &config));
772@@ -3281,7 +3411,7 @@ gckHARDWARE_SetMMUv2(
773 commitEntered = gcvTRUE;
774
775 gcmkONERROR(gckCOMMAND_Reserve(
776- command, 16, &pointer, &bufferSize
777+ command, configSize, &pointer, &bufferSize
778 ));
779
780 buffer = pointer;
781@@ -3300,10 +3430,43 @@ gckHARDWARE_SetMMUv2(
782
783 buffer[3] = address;
784
785+ if (config2D)
786+ {
787+ /* LoadState(AQPipeSelect, 1), pipe. */
788+ buffer[4]
789+ = ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 31:27) - (0 ? 31:27) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27))) | (((gctUINT32) (0x01 & ((gctUINT32) ((((1 ? 31:27) - (0 ? 31:27) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27)))
790+ | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 15:0) - (0 ? 15:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ? 15:0))) | (((gctUINT32) ((gctUINT32) (0x0E00) & ((gctUINT32) ((((1 ? 15:0) - (0 ? 15:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ? 15:0)))
791+ | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 25:16) - (0 ? 25:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 25:16) - (0 ? 25:16) + 1))))))) << (0 ? 25:16))) | (((gctUINT32) ((gctUINT32) (1) & ((gctUINT32) ((((1 ? 25:16) - (0 ? 25:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 25:16) - (0 ? 25:16) + 1))))))) << (0 ? 25:16)));
792+
793+ buffer[5] = 0x1;
794+
795+ buffer[6]
796+ = ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 31:27) - (0 ? 31:27) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27))) | (((gctUINT32) (0x01 & ((gctUINT32) ((((1 ? 31:27) - (0 ? 31:27) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27)))
797+ | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 15:0) - (0 ? 15:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ? 15:0))) | (((gctUINT32) ((gctUINT32) (0x0061) & ((gctUINT32) ((((1 ? 15:0) - (0 ? 15:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ? 15:0)))
798+ | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 25:16) - (0 ? 25:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 25:16) - (0 ? 25:16) + 1))))))) << (0 ? 25:16))) | (((gctUINT32) ((gctUINT32) (1) & ((gctUINT32) ((((1 ? 25:16) - (0 ? 25:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 25:16) - (0 ? 25:16) + 1))))))) << (0 ? 25:16)));
799+
800+ buffer[7] = config;
801+
802+ buffer[8]
803+ = ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 31:27) - (0 ? 31:27) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27))) | (((gctUINT32) (0x01 & ((gctUINT32) ((((1 ? 31:27) - (0 ? 31:27) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27)))
804+ | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 15:0) - (0 ? 15:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ? 15:0))) | (((gctUINT32) ((gctUINT32) (0x0060) & ((gctUINT32) ((((1 ? 15:0) - (0 ? 15:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ? 15:0)))
805+ | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 25:16) - (0 ? 25:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 25:16) - (0 ? 25:16) + 1))))))) << (0 ? 25:16))) | (((gctUINT32) ((gctUINT32) (1) & ((gctUINT32) ((((1 ? 25:16) - (0 ? 25:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 25:16) - (0 ? 25:16) + 1))))))) << (0 ? 25:16)));
806+
807+ buffer[9] = address;
808+
809+ /* LoadState(AQPipeSelect, 1), pipe. */
810+ buffer[10]
811+ = ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 31:27) - (0 ? 31:27) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27))) | (((gctUINT32) (0x01 & ((gctUINT32) ((((1 ? 31:27) - (0 ? 31:27) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27)))
812+ | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 15:0) - (0 ? 15:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ? 15:0))) | (((gctUINT32) ((gctUINT32) (0x0E00) & ((gctUINT32) ((((1 ? 15:0) - (0 ? 15:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ? 15:0)))
813+ | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 25:16) - (0 ? 25:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 25:16) - (0 ? 25:16) + 1))))))) << (0 ? 25:16))) | (((gctUINT32) ((gctUINT32) (1) & ((gctUINT32) ((((1 ? 25:16) - (0 ? 25:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 25:16) - (0 ? 25:16) + 1))))))) << (0 ? 25:16)));
814+
815+ buffer[11] = 0x0;
816+ }
817+
818 gcmkTRACE_ZONE(gcvLEVEL_INFO, gcvZONE_HARDWARE,
819 "Setup MMU: config=%08x, Safe Address=%08x\n.", config, address);
820
821- gcmkONERROR(gckCOMMAND_Execute(command, 16));
822+ gcmkONERROR(gckCOMMAND_Execute(command, configSize));
823
824 if (FromPower == gcvFALSE)
825 {
826@@ -3501,6 +3664,8 @@ gckHARDWARE_Flush(
827 gctUINT32 flush = 0;
828 gctUINT32_PTR logical = (gctUINT32_PTR) Logical;
829 gceSTATUS status;
830+ gctBOOL fcFlushStall;
831+ gctUINT32 reserveBytes = 8;
832
833 gcmkHEADER_ARG("Hardware=0x%x Flush=0x%x Logical=0x%x *Bytes=%lu",
834 Hardware, Flush, Logical, gcmOPT_VALUE(Bytes));
835@@ -3511,6 +3676,16 @@ gckHARDWARE_Flush(
836 /* Get current pipe. */
837 pipe = Hardware->kernel->command->pipeSelect;
838
839+ fcFlushStall
840+ = ((((gctUINT32) (Hardware->identity.chipMinorFeatures1)) >> (0 ? 31:31) & ((gctUINT32) ((((1 ? 31:31) - (0 ? 31:31) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:31) - (0 ? 31:31) + 1)))))) == (0x1 & ((gctUINT32) ((((1 ? 31:31) - (0 ? 31:31) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:31) - (0 ? 31:31) + 1)))))))
841+ && (Flush == gcvFLUSH_ALL)
842+ ;
843+
844+ if (fcFlushStall)
845+ {
846+ reserveBytes += 8;
847+ }
848+
849 /* Flush 3D color cache. */
850 if ((Flush & gcvFLUSH_COLOR) && (pipe == 0x0))
851 {
852@@ -3527,6 +3702,7 @@ gckHARDWARE_Flush(
853 if ((Flush & gcvFLUSH_TEXTURE) && (pipe == 0x0))
854 {
855 flush |= ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 2:2) - (0 ? 2:2) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 2:2) - (0 ? 2:2) + 1))))))) << (0 ? 2:2))) | (((gctUINT32) (0x1 & ((gctUINT32) ((((1 ? 2:2) - (0 ? 2:2) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 2:2) - (0 ? 2:2) + 1))))))) << (0 ? 2:2)));
856+ flush |= ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 4:4) - (0 ? 4:4) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 4:4) - (0 ? 4:4) + 1))))))) << (0 ? 4:4))) | (((gctUINT32) (0x1 & ((gctUINT32) ((((1 ? 4:4) - (0 ? 4:4) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 4:4) - (0 ? 4:4) + 1))))))) << (0 ? 4:4)));
857 }
858
859 /* Flush 2D cache. */
860@@ -3550,7 +3726,7 @@ gckHARDWARE_Flush(
861 /* Copy to command queue. */
862 if (Logical != gcvNULL)
863 {
864- if (*Bytes < 8)
865+ if (*Bytes < reserveBytes)
866 {
867 /* Command queue too small. */
868 gcmkONERROR(gcvSTATUS_BUFFER_TOO_SMALL);
869@@ -3565,12 +3741,26 @@ gckHARDWARE_Flush(
870
871 gcmkTRACE_ZONE(gcvLEVEL_INFO, gcvZONE_HARDWARE,
872 "0x%x: FLUSH 0x%x", logical, flush);
873+
874+ if (fcFlushStall)
875+ {
876+ logical[2] = ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 31:27) - (0 ? 31:27) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27))) | (((gctUINT32) (0x01 & ((gctUINT32) ((((1 ? 31:27) - (0 ? 31:27) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27)))
877+ | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 15:0) - (0 ? 15:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ? 15:0))) | (((gctUINT32) ((gctUINT32) (0x0594) & ((gctUINT32) ((((1 ? 15:0) - (0 ? 15:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ? 15:0)))
878+ | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 25:16) - (0 ? 25:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 25:16) - (0 ? 25:16) + 1))))))) << (0 ? 25:16))) | (((gctUINT32) ((gctUINT32) (1) & ((gctUINT32) ((((1 ? 25:16) - (0 ? 25:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 25:16) - (0 ? 25:16) + 1))))))) << (0 ? 25:16)));
879+
880+ logical[3] = ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 0:0) - (0 ? 0:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 0:0) - (0 ? 0:0) + 1))))))) << (0 ? 0:0))) | (((gctUINT32) (0x1 & ((gctUINT32) ((((1 ? 0:0) - (0 ? 0:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 0:0) - (0 ? 0:0) + 1))))))) << (0 ? 0:0)));
881+
882+
883+ gcmkTRACE_ZONE(gcvLEVEL_INFO, gcvZONE_HARDWARE,
884+ "0x%x: FLUSH 0x%x", logical + 3, logical[3]);
885+ }
886+
887 }
888
889 if (Bytes != gcvNULL)
890 {
891- /* 8 bytes required. */
892- *Bytes = 8;
893+ /* bytes required. */
894+ *Bytes = reserveBytes;
895 }
896 }
897
898@@ -4285,6 +4475,48 @@ gckHARDWARE_SetPowerManagementState(
899 }
900 }
901
902+ /* Flush Cache before Power Off. */
903+ if (flag & gcvPOWER_FLAG_POWER_OFF)
904+ {
905+ if (Hardware->clockState == gcvFALSE)
906+ {
907+ /* Turn off the GPU power. */
908+ gcmkONERROR(
909+ gckOS_SetGPUPower(os,
910+ Hardware->core,
911+ gcvTRUE,
912+ gcvTRUE));
913+
914+ Hardware->clockState = gcvTRUE;
915+
916+ if (gckHARDWARE_IsFeatureAvailable(Hardware, gcvFEATURE_DYNAMIC_FREQUENCY_SCALING) != gcvTRUE)
917+ {
918+ /* Write the clock control register. */
919+ gcmkONERROR(gckOS_WriteRegisterEx(os,
920+ Hardware->core,
921+ 0x00000,
922+ clocks[0]));
923+
924+ /* Done loading the frequency scaler. */
925+ gcmkONERROR(gckOS_WriteRegisterEx(os,
926+ Hardware->core,
927+ 0x00000,
928+ ((((gctUINT32) (clocks[0])) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 9:9) - (0 ? 9:9) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 9:9) - (0 ? 9:9) + 1))))))) << (0 ? 9:9))) | (((gctUINT32) ((gctUINT32) (0) & ((gctUINT32) ((((1 ? 9:9) - (0 ? 9:9) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 9:9) - (0 ? 9:9) + 1))))))) << (0 ? 9:9)))));
929+ }
930+ }
931+
932+ gcmkONERROR(gckCOMMAND_Start(command));
933+
934+ gcmkONERROR(_FlushCache(Hardware, command));
935+
936+ gckOS_Delay(gcvNULL, 1);
937+
938+ /* Stop the command parser. */
939+ gcmkONERROR(gckCOMMAND_Stop(command, gcvFALSE));
940+
941+ flag |= gcvPOWER_FLAG_CLOCK_OFF;
942+ }
943+
944 /* Get time until stopped. */
945 gcmkPROFILE_QUERY(time, stopTime);
946
947@@ -4582,6 +4814,40 @@ gckHARDWARE_SetPowerManagement(
948 return gcvSTATUS_OK;
949 }
950
951+/*******************************************************************************
952+**
953+** gckHARDWARE_SetGpuProfiler
954+**
955+** Configure GPU profiler function.
956+** Only used in driver initialization stage.
957+**
958+** INPUT:
959+**
960+** gckHARDWARE Harwdare
961+** Pointer to an gckHARDWARE object.
962+**
963+** gctBOOL GpuProfiler
964+** GOU Profiler State.
965+**
966+*/
967+gceSTATUS
968+gckHARDWARE_SetGpuProfiler(
969+ IN gckHARDWARE Hardware,
970+ IN gctBOOL GpuProfiler
971+ )
972+{
973+ gcmkHEADER_ARG("Hardware=0x%x", Hardware);
974+
975+ /* Verify the arguments. */
976+ gcmkVERIFY_OBJECT(Hardware, gcvOBJ_HARDWARE);
977+
978+ Hardware->gpuProfiler = GpuProfiler;
979+
980+ /* Success. */
981+ gcmkFOOTER_NO();
982+ return gcvSTATUS_OK;
983+}
984+
985 #if gcdENABLE_FSCALE_VAL_ADJUST
986 gceSTATUS
987 gckHARDWARE_SetFscaleValue(
988@@ -5141,6 +5407,402 @@ OnError:
989 }
990 #endif
991
992+#if VIVANTE_PROFILER_CONTEXT
993+#define gcmkUPDATE_PROFILE_DATA(data) \
994+ profilerHistroy->data += profiler->data
995+
996+gceSTATUS
997+gckHARDWARE_QueryContextProfile(
998+ IN gckHARDWARE Hardware,
999+ IN gctBOOL Reset,
1000+ IN gckCONTEXT Context,
1001+ OUT gcsPROFILER_COUNTERS * Counters
1002+ )
1003+{
1004+ gceSTATUS status;
1005+ gckCOMMAND command = Hardware->kernel->command;
1006+ gcsPROFILER_COUNTERS * profiler = Counters;
1007+
1008+ gcmkHEADER_ARG("Hardware=0x%x Counters=0x%x", Hardware, Counters);
1009+
1010+ /* Verify the arguments. */
1011+ gcmkVERIFY_OBJECT(Hardware, gcvOBJ_HARDWARE);
1012+
1013+ /* Acquire the context sequnence mutex. */
1014+ gcmkONERROR(gckOS_AcquireMutex(
1015+ command->os, command->mutexContextSeq, gcvINFINITE
1016+ ));
1017+
1018+ /* Read the counters. */
1019+ gcmkVERIFY_OK(gckOS_MemCopy(
1020+ profiler, &Context->histroyProfiler, gcmSIZEOF(gcsPROFILER_COUNTERS)
1021+ ));
1022+
1023+ if (Reset)
1024+ {
1025+ /* Reset counters. */
1026+ gcmkVERIFY_OK(gckOS_ZeroMemory(
1027+ &Context->histroyProfiler, gcmSIZEOF(gcsPROFILER_COUNTERS)
1028+ ));
1029+ }
1030+
1031+ gcmkVERIFY_OK(gckOS_ReleaseMutex(
1032+ command->os, command->mutexContextSeq
1033+ ));
1034+
1035+ /* Success. */
1036+ gcmkFOOTER_NO();
1037+ return gcvSTATUS_OK;
1038+
1039+OnError:
1040+ /* Return the status. */
1041+ gcmkFOOTER();
1042+ return status;
1043+}
1044+
1045+
1046+gceSTATUS
1047+gckHARDWARE_UpdateContextProfile(
1048+ IN gckHARDWARE Hardware,
1049+ IN gckCONTEXT Context
1050+ )
1051+{
1052+ gceSTATUS status;
1053+ gcsPROFILER_COUNTERS * profiler = &Context->latestProfiler;
1054+ gcsPROFILER_COUNTERS * profilerHistroy = &Context->histroyProfiler;
1055+ gctUINT i, clock;
1056+ gctUINT32 colorKilled, colorDrawn, depthKilled, depthDrawn;
1057+ gctUINT32 totalRead, totalWrite;
1058+ gceCHIPMODEL chipModel;
1059+ gctUINT32 chipRevision;
1060+ gctUINT32 temp;
1061+ gctBOOL needResetShader = gcvFALSE;
1062+
1063+ gcmkHEADER_ARG("Hardware=0x%x Context=0x%x", Hardware, Context);
1064+
1065+ /* Verify the arguments. */
1066+ gcmkVERIFY_OBJECT(Hardware, gcvOBJ_HARDWARE);
1067+ gcmkVERIFY_OBJECT(Context, gcvOBJ_CONTEXT);
1068+
1069+ chipModel = Hardware->identity.chipModel;
1070+ chipRevision = Hardware->identity.chipRevision;
1071+ if (chipModel == gcv2000 || (chipModel == gcv2100 && chipRevision == 0x5118))
1072+ {
1073+ needResetShader = gcvTRUE;
1074+ }
1075+
1076+ /* Read the counters. */
1077+ gcmkONERROR(
1078+ gckOS_ReadRegisterEx(Hardware->os,
1079+ Hardware->core,
1080+ 0x00438,
1081+ &profiler->gpuCyclesCounter));
1082+ gcmkUPDATE_PROFILE_DATA(gpuCyclesCounter);
1083+
1084+ gcmkONERROR(
1085+ gckOS_ReadRegisterEx(Hardware->os,
1086+ Hardware->core,
1087+ 0x00078,
1088+ &profiler->gpuTotalCyclesCounter));
1089+ gcmkUPDATE_PROFILE_DATA(gpuTotalCyclesCounter);
1090+
1091+ gcmkONERROR(
1092+ gckOS_ReadRegisterEx(Hardware->os,
1093+ Hardware->core,
1094+ 0x0007C,
1095+ &profiler->gpuIdleCyclesCounter));
1096+ gcmkUPDATE_PROFILE_DATA(gpuIdleCyclesCounter);
1097+
1098+ /* Read clock control register. */
1099+ gcmkONERROR(gckOS_ReadRegisterEx(Hardware->os,
1100+ Hardware->core,
1101+ 0x00000,
1102+ &clock));
1103+
1104+ profiler->gpuTotalRead64BytesPerFrame = 0;
1105+ profiler->gpuTotalWrite64BytesPerFrame = 0;
1106+ profiler->pe_pixel_count_killed_by_color_pipe = 0;
1107+ profiler->pe_pixel_count_killed_by_depth_pipe = 0;
1108+ profiler->pe_pixel_count_drawn_by_color_pipe = 0;
1109+ profiler->pe_pixel_count_drawn_by_depth_pipe = 0;
1110+
1111+ /* Walk through all avaiable pixel pipes. */
1112+ for (i = 0; i < Hardware->identity.pixelPipes; ++i)
1113+ {
1114+ /* Select proper pipe. */
1115+ gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os,
1116+ Hardware->core,
1117+ 0x00000,
1118+ ((((gctUINT32) (clock)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 23:20) - (0 ? 23:20) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 23:20) - (0 ? 23:20) + 1))))))) << (0 ? 23:20))) | (((gctUINT32) ((gctUINT32) (i) & ((gctUINT32) ((((1 ? 23:20) - (0 ? 23:20) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 23:20) - (0 ? 23:20) + 1))))))) << (0 ? 23:20)))));
1119+
1120+ /* BW */
1121+ gcmkONERROR(
1122+ gckOS_ReadRegisterEx(Hardware->os,
1123+ Hardware->core,
1124+ 0x00040,
1125+ &totalRead));
1126+ gcmkONERROR(
1127+ gckOS_ReadRegisterEx(Hardware->os,
1128+ Hardware->core,
1129+ 0x00044,
1130+ &totalWrite));
1131+
1132+ profiler->gpuTotalRead64BytesPerFrame += totalRead;
1133+ profiler->gpuTotalWrite64BytesPerFrame += totalWrite;
1134+ gcmkUPDATE_PROFILE_DATA(gpuTotalRead64BytesPerFrame);
1135+ gcmkUPDATE_PROFILE_DATA(gpuTotalWrite64BytesPerFrame);
1136+
1137+ /* PE */
1138+ gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00470, ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 23:16) - (0 ? 23:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 23:16) - (0 ? 23:16) + 1))))))) << (0 ? 23:16))) | (((gctUINT32) ((gctUINT32) (0) & ((gctUINT32) ((((1 ? 23:16) - (0 ? 23:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 23:16) - (0 ? 23:16) + 1))))))) << (0 ? 23:16)))));gcmkONERROR(gckOS_ReadRegisterEx(Hardware->os, Hardware->core, 0x00454, &colorKilled));
1139+ gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00470, ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 23:16) - (0 ? 23:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 23:16) - (0 ? 23:16) + 1))))))) << (0 ? 23:16))) | (((gctUINT32) ((gctUINT32) (1) & ((gctUINT32) ((((1 ? 23:16) - (0 ? 23:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 23:16) - (0 ? 23:16) + 1))))))) << (0 ? 23:16)))));gcmkONERROR(gckOS_ReadRegisterEx(Hardware->os, Hardware->core, 0x00454, &depthKilled));
1140+ gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00470, ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 23:16) - (0 ? 23:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 23:16) - (0 ? 23:16) + 1))))))) << (0 ? 23:16))) | (((gctUINT32) ((gctUINT32) (2) & ((gctUINT32) ((((1 ? 23:16) - (0 ? 23:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 23:16) - (0 ? 23:16) + 1))))))) << (0 ? 23:16)))));gcmkONERROR(gckOS_ReadRegisterEx(Hardware->os, Hardware->core, 0x00454, &colorDrawn));
1141+ gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00470, ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 23:16) - (0 ? 23:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 23:16) - (0 ? 23:16) + 1))))))) << (0 ? 23:16))) | (((gctUINT32) ((gctUINT32) (3) & ((gctUINT32) ((((1 ? 23:16) - (0 ? 23:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 23:16) - (0 ? 23:16) + 1))))))) << (0 ? 23:16)))));gcmkONERROR(gckOS_ReadRegisterEx(Hardware->os, Hardware->core, 0x00454, &depthDrawn));
1142+
1143+ profiler->pe_pixel_count_killed_by_color_pipe += colorKilled;
1144+ profiler->pe_pixel_count_killed_by_depth_pipe += depthKilled;
1145+ profiler->pe_pixel_count_drawn_by_color_pipe += colorDrawn;
1146+ profiler->pe_pixel_count_drawn_by_depth_pipe += depthDrawn;
1147+ gcmkUPDATE_PROFILE_DATA(pe_pixel_count_killed_by_color_pipe);
1148+ gcmkUPDATE_PROFILE_DATA(pe_pixel_count_killed_by_depth_pipe);
1149+ gcmkUPDATE_PROFILE_DATA(pe_pixel_count_drawn_by_color_pipe);
1150+ gcmkUPDATE_PROFILE_DATA(pe_pixel_count_drawn_by_depth_pipe);
1151+ }
1152+
1153+ /* Reset clock control register. */
1154+ gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os,
1155+ Hardware->core,
1156+ 0x00000,
1157+ clock));
1158+
1159+
1160+
1161+
1162+ /* Reset counters. */
1163+ gcmkONERROR(
1164+ gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x0003C, 1));
1165+ gcmkONERROR(
1166+ gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x0003C, 0));
1167+ gcmkONERROR(
1168+ gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00438, 0));
1169+ gcmkONERROR(
1170+ gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00078, 0));
1171+ gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00470, ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 23:16) - (0 ? 23:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 23:16) - (0 ? 23:16) + 1))))))) << (0 ? 23:16))) | (((gctUINT32) ((gctUINT32) (15) & ((gctUINT32) ((((1 ? 23:16) - (0 ? 23:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 23:16) - (0 ? 23:16) + 1))))))) << (0 ? 23:16))) ));
1172+gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00470, ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 23:16) - (0 ? 23:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 23:16) - (0 ? 23:16) + 1))))))) << (0 ? 23:16))) | (((gctUINT32) ((gctUINT32) (0) & ((gctUINT32) ((((1 ? 23:16) - (0 ? 23:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 23:16) - (0 ? 23:16) + 1))))))) << (0 ? 23:16)))
1173+));
1174+
1175+ /* SH */
1176+ gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00470, ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 31:24) - (0 ? 31:24) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:24) - (0 ? 31:24) + 1))))))) << (0 ? 31:24))) | (((gctUINT32) ((gctUINT32) (7) & ((gctUINT32) ((((1 ? 31:24) - (0 ? 31:24) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:24) - (0 ? 31:24) + 1))))))) << (0 ? 31:24))) ));
1177+gcmkONERROR(gckOS_ReadRegisterEx(Hardware->os, Hardware->core, 0x0045C, &profiler->ps_inst_counter));
1178+ if (needResetShader)
1179+ {
1180+ temp = profiler->ps_inst_counter;
1181+ profiler->ps_inst_counter -= Context->prevPSInstCount;
1182+ Context->prevPSInstCount = temp;
1183+ }
1184+ gcmkUPDATE_PROFILE_DATA(ps_inst_counter);
1185+
1186+ gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00470, ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 31:24) - (0 ? 31:24) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:24) - (0 ? 31:24) + 1))))))) << (0 ? 31:24))) | (((gctUINT32) ((gctUINT32) (8) & ((gctUINT32) ((((1 ? 31:24) - (0 ? 31:24) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:24) - (0 ? 31:24) + 1))))))) << (0 ? 31:24))) ));
1187+gcmkONERROR(gckOS_ReadRegisterEx(Hardware->os, Hardware->core, 0x0045C, &profiler->rendered_pixel_counter));
1188+ if (needResetShader)
1189+ {
1190+ temp = profiler->rendered_pixel_counter;
1191+ profiler->rendered_pixel_counter -= Context->prevPSPixelCount;
1192+ Context->prevPSPixelCount = temp;
1193+ }
1194+ gcmkUPDATE_PROFILE_DATA(rendered_pixel_counter);
1195+
1196+ gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00470, ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 31:24) - (0 ? 31:24) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:24) - (0 ? 31:24) + 1))))))) << (0 ? 31:24))) | (((gctUINT32) ((gctUINT32) (9) & ((gctUINT32) ((((1 ? 31:24) - (0 ? 31:24) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:24) - (0 ? 31:24) + 1))))))) << (0 ? 31:24))) ));
1197+gcmkONERROR(gckOS_ReadRegisterEx(Hardware->os, Hardware->core, 0x0045C, &profiler->vs_inst_counter));
1198+ if (needResetShader)
1199+ {
1200+ temp = profiler->vs_inst_counter;
1201+ profiler->vs_inst_counter -= Context->prevVSInstCount;
1202+ Context->prevVSInstCount = temp;
1203+ }
1204+ gcmkUPDATE_PROFILE_DATA(vs_inst_counter);
1205+
1206+ gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00470, ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 31:24) - (0 ? 31:24) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:24) - (0 ? 31:24) + 1))))))) << (0 ? 31:24))) | (((gctUINT32) ((gctUINT32) (10) & ((gctUINT32) ((((1 ? 31:24) - (0 ? 31:24) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:24) - (0 ? 31:24) + 1))))))) << (0 ? 31:24))) ));
1207+gcmkONERROR(gckOS_ReadRegisterEx(Hardware->os, Hardware->core, 0x0045C, &profiler->rendered_vertice_counter));
1208+ if (needResetShader)
1209+ {
1210+ temp = profiler->rendered_vertice_counter;
1211+ profiler->rendered_vertice_counter -= Context->prevVSVertexCount;
1212+ Context->prevVSVertexCount = temp;
1213+ }
1214+ gcmkUPDATE_PROFILE_DATA(rendered_vertice_counter);
1215+
1216+ gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00470, ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 31:24) - (0 ? 31:24) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:24) - (0 ? 31:24) + 1))))))) << (0 ? 31:24))) | (((gctUINT32) ((gctUINT32) (11) & ((gctUINT32) ((((1 ? 31:24) - (0 ? 31:24) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:24) - (0 ? 31:24) + 1))))))) << (0 ? 31:24))) ));
1217+gcmkONERROR(gckOS_ReadRegisterEx(Hardware->os, Hardware->core, 0x0045C, &profiler->vtx_branch_inst_counter));
1218+ if (needResetShader)
1219+ {
1220+ temp = profiler->vtx_branch_inst_counter;
1221+ profiler->vtx_branch_inst_counter -= Context->prevVSBranchInstCount;
1222+ Context->prevVSBranchInstCount = temp;
1223+ }
1224+ gcmkUPDATE_PROFILE_DATA(vtx_branch_inst_counter);
1225+
1226+ gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00470, ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 31:24) - (0 ? 31:24) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:24) - (0 ? 31:24) + 1))))))) << (0 ? 31:24))) | (((gctUINT32) ((gctUINT32) (12) & ((gctUINT32) ((((1 ? 31:24) - (0 ? 31:24) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:24) - (0 ? 31:24) + 1))))))) << (0 ? 31:24))) ));
1227+gcmkONERROR(gckOS_ReadRegisterEx(Hardware->os, Hardware->core, 0x0045C, &profiler->vtx_texld_inst_counter));
1228+ if (needResetShader)
1229+ {
1230+ temp = profiler->vtx_texld_inst_counter;
1231+ profiler->vtx_texld_inst_counter -= Context->prevVSTexInstCount;
1232+ Context->prevVSTexInstCount = temp;
1233+ }
1234+ gcmkUPDATE_PROFILE_DATA(vtx_texld_inst_counter);
1235+
1236+ gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00470, ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 31:24) - (0 ? 31:24) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:24) - (0 ? 31:24) + 1))))))) << (0 ? 31:24))) | (((gctUINT32) ((gctUINT32) (13) & ((gctUINT32) ((((1 ? 31:24) - (0 ? 31:24) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:24) - (0 ? 31:24) + 1))))))) << (0 ? 31:24))) ));
1237+gcmkONERROR(gckOS_ReadRegisterEx(Hardware->os, Hardware->core, 0x0045C, &profiler->pxl_branch_inst_counter));
1238+ if (needResetShader)
1239+ {
1240+ temp = profiler->pxl_branch_inst_counter;
1241+ profiler->pxl_branch_inst_counter -= Context->prevPSBranchInstCount;
1242+ Context->prevPSBranchInstCount = temp;
1243+ }
1244+ gcmkUPDATE_PROFILE_DATA(pxl_branch_inst_counter);
1245+
1246+ gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00470, ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 31:24) - (0 ? 31:24) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:24) - (0 ? 31:24) + 1))))))) << (0 ? 31:24))) | (((gctUINT32) ((gctUINT32) (14) & ((gctUINT32) ((((1 ? 31:24) - (0 ? 31:24) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:24) - (0 ? 31:24) + 1))))))) << (0 ? 31:24))) ));
1247+gcmkONERROR(gckOS_ReadRegisterEx(Hardware->os, Hardware->core, 0x0045C, &profiler->pxl_texld_inst_counter));
1248+ if (needResetShader)
1249+ {
1250+ temp = profiler->pxl_texld_inst_counter;
1251+ profiler->pxl_texld_inst_counter -= Context->prevPSTexInstCount;
1252+ Context->prevPSTexInstCount = temp;
1253+ }
1254+ gcmkUPDATE_PROFILE_DATA(pxl_texld_inst_counter);
1255+
1256+ gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00470, ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 31:24) - (0 ? 31:24) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:24) - (0 ? 31:24) + 1))))))) << (0 ? 31:24))) | (((gctUINT32) ((gctUINT32) (15) & ((gctUINT32) ((((1 ? 31:24) - (0 ? 31:24) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:24) - (0 ? 31:24) + 1))))))) << (0 ? 31:24))) ));
1257+gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00470, ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 31:24) - (0 ? 31:24) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:24) - (0 ? 31:24) + 1))))))) << (0 ? 31:24))) | (((gctUINT32) ((gctUINT32) (0) & ((gctUINT32) ((((1 ? 31:24) - (0 ? 31:24) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:24) - (0 ? 31:24) + 1))))))) << (0 ? 31:24)))
1258+));
1259+
1260+ /* PA */
1261+ gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00474, ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 7:0) - (0 ? 7:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 7:0) - (0 ? 7:0) + 1))))))) << (0 ? 7:0))) | (((gctUINT32) ((gctUINT32) (3) & ((gctUINT32) ((((1 ? 7:0) - (0 ? 7:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 7:0) - (0 ? 7:0) + 1))))))) << (0 ? 7:0))) ));
1262+gcmkONERROR(gckOS_ReadRegisterEx(Hardware->os, Hardware->core, 0x00460, &profiler->pa_input_vtx_counter));
1263+ gcmkUPDATE_PROFILE_DATA(pa_input_vtx_counter);
1264+ gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00474, ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 7:0) - (0 ? 7:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 7:0) - (0 ? 7:0) + 1))))))) << (0 ? 7:0))) | (((gctUINT32) ((gctUINT32) (4) & ((gctUINT32) ((((1 ? 7:0) - (0 ? 7:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 7:0) - (0 ? 7:0) + 1))))))) << (0 ? 7:0))) ));
1265+gcmkONERROR(gckOS_ReadRegisterEx(Hardware->os, Hardware->core, 0x00460, &profiler->pa_input_prim_counter));
1266+ gcmkUPDATE_PROFILE_DATA(pa_input_prim_counter);
1267+ gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00474, ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 7:0) - (0 ? 7:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 7:0) - (0 ? 7:0) + 1))))))) << (0 ? 7:0))) | (((gctUINT32) ((gctUINT32) (5) & ((gctUINT32) ((((1 ? 7:0) - (0 ? 7:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 7:0) - (0 ? 7:0) + 1))))))) << (0 ? 7:0))) ));
1268+gcmkONERROR(gckOS_ReadRegisterEx(Hardware->os, Hardware->core, 0x00460, &profiler->pa_output_prim_counter));
1269+ gcmkUPDATE_PROFILE_DATA(pa_output_prim_counter);
1270+ gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00474, ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 7:0) - (0 ? 7:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 7:0) - (0 ? 7:0) + 1))))))) << (0 ? 7:0))) | (((gctUINT32) ((gctUINT32) (6) & ((gctUINT32) ((((1 ? 7:0) - (0 ? 7:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 7:0) - (0 ? 7:0) + 1))))))) << (0 ? 7:0))) ));
1271+gcmkONERROR(gckOS_ReadRegisterEx(Hardware->os, Hardware->core, 0x00460, &profiler->pa_depth_clipped_counter));
1272+ gcmkUPDATE_PROFILE_DATA(pa_depth_clipped_counter);
1273+ gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00474, ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 7:0) - (0 ? 7:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 7:0) - (0 ? 7:0) + 1))))))) << (0 ? 7:0))) | (((gctUINT32) ((gctUINT32) (7) & ((gctUINT32) ((((1 ? 7:0) - (0 ? 7:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 7:0) - (0 ? 7:0) + 1))))))) << (0 ? 7:0))) ));
1274+gcmkONERROR(gckOS_ReadRegisterEx(Hardware->os, Hardware->core, 0x00460, &profiler->pa_trivial_rejected_counter));
1275+ gcmkUPDATE_PROFILE_DATA(pa_trivial_rejected_counter);
1276+ gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00474, ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 7:0) - (0 ? 7:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 7:0) - (0 ? 7:0) + 1))))))) << (0 ? 7:0))) | (((gctUINT32) ((gctUINT32) (8) & ((gctUINT32) ((((1 ? 7:0) - (0 ? 7:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 7:0) - (0 ? 7:0) + 1))))))) << (0 ? 7:0))) ));
1277+gcmkONERROR(gckOS_ReadRegisterEx(Hardware->os, Hardware->core, 0x00460, &profiler->pa_culled_counter));
1278+ gcmkUPDATE_PROFILE_DATA(pa_culled_counter);
1279+ gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00474, ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 7:0) - (0 ? 7:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 7:0) - (0 ? 7:0) + 1))))))) << (0 ? 7:0))) | (((gctUINT32) ((gctUINT32) (15) & ((gctUINT32) ((((1 ? 7:0) - (0 ? 7:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 7:0) - (0 ? 7:0) + 1))))))) << (0 ? 7:0))) ));
1280+gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00474, ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 7:0) - (0 ? 7:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 7:0) - (0 ? 7:0) + 1))))))) << (0 ? 7:0))) | (((gctUINT32) ((gctUINT32) (0) & ((gctUINT32) ((((1 ? 7:0) - (0 ? 7:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 7:0) - (0 ? 7:0) + 1))))))) << (0 ? 7:0)))
1281+));
1282+
1283+ /* SE */
1284+ gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00474, ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 15:8) - (0 ? 15:8) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:8) - (0 ? 15:8) + 1))))))) << (0 ? 15:8))) | (((gctUINT32) ((gctUINT32) (0) & ((gctUINT32) ((((1 ? 15:8) - (0 ? 15:8) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:8) - (0 ? 15:8) + 1))))))) << (0 ? 15:8))) ));
1285+gcmkONERROR(gckOS_ReadRegisterEx(Hardware->os, Hardware->core, 0x00464, &profiler->se_culled_triangle_count));
1286+ gcmkUPDATE_PROFILE_DATA(se_culled_triangle_count);
1287+ gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00474, ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 15:8) - (0 ? 15:8) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:8) - (0 ? 15:8) + 1))))))) << (0 ? 15:8))) | (((gctUINT32) ((gctUINT32) (1) & ((gctUINT32) ((((1 ? 15:8) - (0 ? 15:8) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:8) - (0 ? 15:8) + 1))))))) << (0 ? 15:8))) ));
1288+gcmkONERROR(gckOS_ReadRegisterEx(Hardware->os, Hardware->core, 0x00464, &profiler->se_culled_lines_count));
1289+ gcmkUPDATE_PROFILE_DATA(se_culled_lines_count);
1290+ gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00474, ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 15:8) - (0 ? 15:8) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:8) - (0 ? 15:8) + 1))))))) << (0 ? 15:8))) | (((gctUINT32) ((gctUINT32) (15) & ((gctUINT32) ((((1 ? 15:8) - (0 ? 15:8) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:8) - (0 ? 15:8) + 1))))))) << (0 ? 15:8))) ));
1291+gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00474, ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 15:8) - (0 ? 15:8) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:8) - (0 ? 15:8) + 1))))))) << (0 ? 15:8))) | (((gctUINT32) ((gctUINT32) (0) & ((gctUINT32) ((((1 ? 15:8) - (0 ? 15:8) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:8) - (0 ? 15:8) + 1))))))) << (0 ? 15:8)))
1292+));
1293+
1294+ /* RA */
1295+ gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00474, ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 23:16) - (0 ? 23:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 23:16) - (0 ? 23:16) + 1))))))) << (0 ? 23:16))) | (((gctUINT32) ((gctUINT32) (0) & ((gctUINT32) ((((1 ? 23:16) - (0 ? 23:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 23:16) - (0 ? 23:16) + 1))))))) << (0 ? 23:16))) ));
1296+gcmkONERROR(gckOS_ReadRegisterEx(Hardware->os, Hardware->core, 0x00448, &profiler->ra_valid_pixel_count));
1297+ gcmkUPDATE_PROFILE_DATA(ra_valid_pixel_count);
1298+ gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00474, ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 23:16) - (0 ? 23:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 23:16) - (0 ? 23:16) + 1))))))) << (0 ? 23:16))) | (((gctUINT32) ((gctUINT32) (1) & ((gctUINT32) ((((1 ? 23:16) - (0 ? 23:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 23:16) - (0 ? 23:16) + 1))))))) << (0 ? 23:16))) ));
1299+gcmkONERROR(gckOS_ReadRegisterEx(Hardware->os, Hardware->core, 0x00448, &profiler->ra_total_quad_count));
1300+ gcmkUPDATE_PROFILE_DATA(ra_total_quad_count);
1301+ gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00474, ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 23:16) - (0 ? 23:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 23:16) - (0 ? 23:16) + 1))))))) << (0 ? 23:16))) | (((gctUINT32) ((gctUINT32) (2) & ((gctUINT32) ((((1 ? 23:16) - (0 ? 23:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 23:16) - (0 ? 23:16) + 1))))))) << (0 ? 23:16))) ));
1302+gcmkONERROR(gckOS_ReadRegisterEx(Hardware->os, Hardware->core, 0x00448, &profiler->ra_valid_quad_count_after_early_z));
1303+ gcmkUPDATE_PROFILE_DATA(ra_valid_quad_count_after_early_z);
1304+ gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00474, ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 23:16) - (0 ? 23:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 23:16) - (0 ? 23:16) + 1))))))) << (0 ? 23:16))) | (((gctUINT32) ((gctUINT32) (3) & ((gctUINT32) ((((1 ? 23:16) - (0 ? 23:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 23:16) - (0 ? 23:16) + 1))))))) << (0 ? 23:16))) ));
1305+gcmkONERROR(gckOS_ReadRegisterEx(Hardware->os, Hardware->core, 0x00448, &profiler->ra_total_primitive_count));
1306+ gcmkUPDATE_PROFILE_DATA(ra_total_primitive_count);
1307+ gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00474, ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 23:16) - (0 ? 23:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 23:16) - (0 ? 23:16) + 1))))))) << (0 ? 23:16))) | (((gctUINT32) ((gctUINT32) (9) & ((gctUINT32) ((((1 ? 23:16) - (0 ? 23:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 23:16) - (0 ? 23:16) + 1))))))) << (0 ? 23:16))) ));
1308+gcmkONERROR(gckOS_ReadRegisterEx(Hardware->os, Hardware->core, 0x00448, &profiler->ra_pipe_cache_miss_counter));
1309+ gcmkUPDATE_PROFILE_DATA(ra_pipe_cache_miss_counter);
1310+ gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00474, ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 23:16) - (0 ? 23:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 23:16) - (0 ? 23:16) + 1))))))) << (0 ? 23:16))) | (((gctUINT32) ((gctUINT32) (10) & ((gctUINT32) ((((1 ? 23:16) - (0 ? 23:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 23:16) - (0 ? 23:16) + 1))))))) << (0 ? 23:16))) ));
1311+gcmkONERROR(gckOS_ReadRegisterEx(Hardware->os, Hardware->core, 0x00448, &profiler->ra_prefetch_cache_miss_counter));
1312+ gcmkUPDATE_PROFILE_DATA(ra_prefetch_cache_miss_counter);
1313+ gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00474, ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 23:16) - (0 ? 23:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 23:16) - (0 ? 23:16) + 1))))))) << (0 ? 23:16))) | (((gctUINT32) ((gctUINT32) (15) & ((gctUINT32) ((((1 ? 23:16) - (0 ? 23:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 23:16) - (0 ? 23:16) + 1))))))) << (0 ? 23:16))) ));
1314+gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00474, ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 23:16) - (0 ? 23:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 23:16) - (0 ? 23:16) + 1))))))) << (0 ? 23:16))) | (((gctUINT32) ((gctUINT32) (0) & ((gctUINT32) ((((1 ? 23:16) - (0 ? 23:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 23:16) - (0 ? 23:16) + 1))))))) << (0 ? 23:16)))
1315+));
1316+
1317+ /* TX */
1318+ gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00474, ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 31:24) - (0 ? 31:24) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:24) - (0 ? 31:24) + 1))))))) << (0 ? 31:24))) | (((gctUINT32) ((gctUINT32) (0) & ((gctUINT32) ((((1 ? 31:24) - (0 ? 31:24) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:24) - (0 ? 31:24) + 1))))))) << (0 ? 31:24))) ));
1319+gcmkONERROR(gckOS_ReadRegisterEx(Hardware->os, Hardware->core, 0x0044C, &profiler->tx_total_bilinear_requests));
1320+ gcmkUPDATE_PROFILE_DATA(tx_total_bilinear_requests);
1321+ gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00474, ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 31:24) - (0 ? 31:24) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:24) - (0 ? 31:24) + 1))))))) << (0 ? 31:24))) | (((gctUINT32) ((gctUINT32) (1) & ((gctUINT32) ((((1 ? 31:24) - (0 ? 31:24) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:24) - (0 ? 31:24) + 1))))))) << (0 ? 31:24))) ));
1322+gcmkONERROR(gckOS_ReadRegisterEx(Hardware->os, Hardware->core, 0x0044C, &profiler->tx_total_trilinear_requests));
1323+ gcmkUPDATE_PROFILE_DATA(tx_total_trilinear_requests);
1324+ gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00474, ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 31:24) - (0 ? 31:24) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:24) - (0 ? 31:24) + 1))))))) << (0 ? 31:24))) | (((gctUINT32) ((gctUINT32) (2) & ((gctUINT32) ((((1 ? 31:24) - (0 ? 31:24) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:24) - (0 ? 31:24) + 1))))))) << (0 ? 31:24))) ));
1325+gcmkONERROR(gckOS_ReadRegisterEx(Hardware->os, Hardware->core, 0x0044C, &profiler->tx_total_discarded_texture_requests));
1326+ gcmkUPDATE_PROFILE_DATA(tx_total_discarded_texture_requests);
1327+ gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00474, ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 31:24) - (0 ? 31:24) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:24) - (0 ? 31:24) + 1))))))) << (0 ? 31:24))) | (((gctUINT32) ((gctUINT32) (3) & ((gctUINT32) ((((1 ? 31:24) - (0 ? 31:24) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:24) - (0 ? 31:24) + 1))))))) << (0 ? 31:24))) ));
1328+gcmkONERROR(gckOS_ReadRegisterEx(Hardware->os, Hardware->core, 0x0044C, &profiler->tx_total_texture_requests));
1329+ gcmkUPDATE_PROFILE_DATA(tx_total_texture_requests);
1330+ gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00474, ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 31:24) - (0 ? 31:24) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:24) - (0 ? 31:24) + 1))))))) << (0 ? 31:24))) | (((gctUINT32) ((gctUINT32) (5) & ((gctUINT32) ((((1 ? 31:24) - (0 ? 31:24) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:24) - (0 ? 31:24) + 1))))))) << (0 ? 31:24))) ));
1331+gcmkONERROR(gckOS_ReadRegisterEx(Hardware->os, Hardware->core, 0x0044C, &profiler->tx_mem_read_count));
1332+ gcmkUPDATE_PROFILE_DATA(tx_mem_read_count);
1333+ gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00474, ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 31:24) - (0 ? 31:24) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:24) - (0 ? 31:24) + 1))))))) << (0 ? 31:24))) | (((gctUINT32) ((gctUINT32) (6) & ((gctUINT32) ((((1 ? 31:24) - (0 ? 31:24) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:24) - (0 ? 31:24) + 1))))))) << (0 ? 31:24))) ));
1334+gcmkONERROR(gckOS_ReadRegisterEx(Hardware->os, Hardware->core, 0x0044C, &profiler->tx_mem_read_in_8B_count));
1335+ gcmkUPDATE_PROFILE_DATA(tx_mem_read_in_8B_count);
1336+ gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00474, ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 31:24) - (0 ? 31:24) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:24) - (0 ? 31:24) + 1))))))) << (0 ? 31:24))) | (((gctUINT32) ((gctUINT32) (7) & ((gctUINT32) ((((1 ? 31:24) - (0 ? 31:24) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:24) - (0 ? 31:24) + 1))))))) << (0 ? 31:24))) ));
1337+gcmkONERROR(gckOS_ReadRegisterEx(Hardware->os, Hardware->core, 0x0044C, &profiler->tx_cache_miss_count));
1338+ gcmkUPDATE_PROFILE_DATA(tx_cache_miss_count);
1339+ gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00474, ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 31:24) - (0 ? 31:24) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:24) - (0 ? 31:24) + 1))))))) << (0 ? 31:24))) | (((gctUINT32) ((gctUINT32) (8) & ((gctUINT32) ((((1 ? 31:24) - (0 ? 31:24) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:24) - (0 ? 31:24) + 1))))))) << (0 ? 31:24))) ));
1340+gcmkONERROR(gckOS_ReadRegisterEx(Hardware->os, Hardware->core, 0x0044C, &profiler->tx_cache_hit_texel_count));
1341+ gcmkUPDATE_PROFILE_DATA(tx_cache_hit_texel_count);
1342+ gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00474, ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 31:24) - (0 ? 31:24) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:24) - (0 ? 31:24) + 1))))))) << (0 ? 31:24))) | (((gctUINT32) ((gctUINT32) (9) & ((gctUINT32) ((((1 ? 31:24) - (0 ? 31:24) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:24) - (0 ? 31:24) + 1))))))) << (0 ? 31:24))) ));
1343+gcmkONERROR(gckOS_ReadRegisterEx(Hardware->os, Hardware->core, 0x0044C, &profiler->tx_cache_miss_texel_count));
1344+ gcmkUPDATE_PROFILE_DATA(tx_cache_miss_texel_count);
1345+ gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00474, ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 31:24) - (0 ? 31:24) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:24) - (0 ? 31:24) + 1))))))) << (0 ? 31:24))) | (((gctUINT32) ((gctUINT32) (15) & ((gctUINT32) ((((1 ? 31:24) - (0 ? 31:24) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:24) - (0 ? 31:24) + 1))))))) << (0 ? 31:24))) ));
1346+gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00474, ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 31:24) - (0 ? 31:24) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:24) - (0 ? 31:24) + 1))))))) << (0 ? 31:24))) | (((gctUINT32) ((gctUINT32) (0) & ((gctUINT32) ((((1 ? 31:24) - (0 ? 31:24) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:24) - (0 ? 31:24) + 1))))))) << (0 ? 31:24)))
1347+));
1348+
1349+ /* MC */
1350+ gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00478, ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 7:0) - (0 ? 7:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 7:0) - (0 ? 7:0) + 1))))))) << (0 ? 7:0))) | (((gctUINT32) ((gctUINT32) (1) & ((gctUINT32) ((((1 ? 7:0) - (0 ? 7:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 7:0) - (0 ? 7:0) + 1))))))) << (0 ? 7:0))) ));
1351+gcmkONERROR(gckOS_ReadRegisterEx(Hardware->os, Hardware->core, 0x00468, &profiler->mc_total_read_req_8B_from_pipeline));
1352+ gcmkUPDATE_PROFILE_DATA(mc_total_read_req_8B_from_pipeline);
1353+ gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00478, ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 7:0) - (0 ? 7:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 7:0) - (0 ? 7:0) + 1))))))) << (0 ? 7:0))) | (((gctUINT32) ((gctUINT32) (2) & ((gctUINT32) ((((1 ? 7:0) - (0 ? 7:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 7:0) - (0 ? 7:0) + 1))))))) << (0 ? 7:0))) ));
1354+gcmkONERROR(gckOS_ReadRegisterEx(Hardware->os, Hardware->core, 0x00468, &profiler->mc_total_read_req_8B_from_IP));
1355+ gcmkUPDATE_PROFILE_DATA(mc_total_read_req_8B_from_IP);
1356+ gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00478, ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 7:0) - (0 ? 7:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 7:0) - (0 ? 7:0) + 1))))))) << (0 ? 7:0))) | (((gctUINT32) ((gctUINT32) (3) & ((gctUINT32) ((((1 ? 7:0) - (0 ? 7:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 7:0) - (0 ? 7:0) + 1))))))) << (0 ? 7:0))) ));
1357+gcmkONERROR(gckOS_ReadRegisterEx(Hardware->os, Hardware->core, 0x00468, &profiler->mc_total_write_req_8B_from_pipeline));
1358+ gcmkUPDATE_PROFILE_DATA(mc_total_write_req_8B_from_pipeline);
1359+ gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00478, ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 7:0) - (0 ? 7:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 7:0) - (0 ? 7:0) + 1))))))) << (0 ? 7:0))) | (((gctUINT32) ((gctUINT32) (15) & ((gctUINT32) ((((1 ? 7:0) - (0 ? 7:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 7:0) - (0 ? 7:0) + 1))))))) << (0 ? 7:0))) ));
1360+gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00478, ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 7:0) - (0 ? 7:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 7:0) - (0 ? 7:0) + 1))))))) << (0 ? 7:0))) | (((gctUINT32) ((gctUINT32) (0) & ((gctUINT32) ((((1 ? 7:0) - (0 ? 7:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 7:0) - (0 ? 7:0) + 1))))))) << (0 ? 7:0)))
1361+));
1362+
1363+ /* HI */
1364+ gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00478, ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 15:8) - (0 ? 15:8) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:8) - (0 ? 15:8) + 1))))))) << (0 ? 15:8))) | (((gctUINT32) ((gctUINT32) (0) & ((gctUINT32) ((((1 ? 15:8) - (0 ? 15:8) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:8) - (0 ? 15:8) + 1))))))) << (0 ? 15:8))) ));
1365+gcmkONERROR(gckOS_ReadRegisterEx(Hardware->os, Hardware->core, 0x0046C, &profiler->hi_axi_cycles_read_request_stalled));
1366+ gcmkUPDATE_PROFILE_DATA(hi_axi_cycles_read_request_stalled);
1367+ gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00478, ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 15:8) - (0 ? 15:8) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:8) - (0 ? 15:8) + 1))))))) << (0 ? 15:8))) | (((gctUINT32) ((gctUINT32) (1) & ((gctUINT32) ((((1 ? 15:8) - (0 ? 15:8) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:8) - (0 ? 15:8) + 1))))))) << (0 ? 15:8))) ));
1368+gcmkONERROR(gckOS_ReadRegisterEx(Hardware->os, Hardware->core, 0x0046C, &profiler->hi_axi_cycles_write_request_stalled));
1369+ gcmkUPDATE_PROFILE_DATA(hi_axi_cycles_write_request_stalled);
1370+ gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00478, ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 15:8) - (0 ? 15:8) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:8) - (0 ? 15:8) + 1))))))) << (0 ? 15:8))) | (((gctUINT32) ((gctUINT32) (2) & ((gctUINT32) ((((1 ? 15:8) - (0 ? 15:8) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:8) - (0 ? 15:8) + 1))))))) << (0 ? 15:8))) ));
1371+gcmkONERROR(gckOS_ReadRegisterEx(Hardware->os, Hardware->core, 0x0046C, &profiler->hi_axi_cycles_write_data_stalled));
1372+ gcmkUPDATE_PROFILE_DATA(hi_axi_cycles_write_data_stalled);
1373+ gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00478, ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 15:8) - (0 ? 15:8) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:8) - (0 ? 15:8) + 1))))))) << (0 ? 15:8))) | (((gctUINT32) ((gctUINT32) (15) & ((gctUINT32) ((((1 ? 15:8) - (0 ? 15:8) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:8) - (0 ? 15:8) + 1))))))) << (0 ? 15:8))) ));
1374+gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00478, ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 15:8) - (0 ? 15:8) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:8) - (0 ? 15:8) + 1))))))) << (0 ? 15:8))) | (((gctUINT32) ((gctUINT32) (0) & ((gctUINT32) ((((1 ? 15:8) - (0 ? 15:8) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:8) - (0 ? 15:8) + 1))))))) << (0 ? 15:8)))
1375+));
1376+
1377+ /* Success. */
1378+ gcmkFOOTER_NO();
1379+ return gcvSTATUS_OK;
1380+
1381+OnError:
1382+ /* Return the status. */
1383+ gcmkFOOTER();
1384+ return status;
1385+}
1386+#endif
1387+
1388 static gceSTATUS
1389 _ResetGPU(
1390 IN gckHARDWARE Hardware,
1391@@ -5602,6 +6264,22 @@ gckHARDWARE_IsFeatureAvailable(
1392 && ((((gctUINT32) (Hardware->identity.chipFeatures)) >> (0 ? 2:2) & ((gctUINT32) ((((1 ? 2:2) - (0 ? 2:2) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 2:2) - (0 ? 2:2) + 1)))))) == (0x1 & ((gctUINT32) ((((1 ? 2:2) - (0 ? 2:2) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 2:2) - (0 ? 2:2) + 1)))))));
1393 break;
1394
1395+ case gcvFEATURE_PIPE_2D:
1396+ available = ((((gctUINT32) (Hardware->identity.chipFeatures)) >> (0 ? 9:9) & ((gctUINT32) ((((1 ? 9:9) - (0 ? 9:9) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 9:9) - (0 ? 9:9) + 1)))))) == (0x1 & ((gctUINT32) ((((1 ? 9:9) - (0 ? 9:9) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 9:9) - (0 ? 9:9) + 1)))))));
1397+ break;
1398+
1399+ case gcvFEATURE_PIPE_3D:
1400+#ifndef VIVANTE_NO_3D
1401+ available = ((((gctUINT32) (Hardware->identity.chipFeatures)) >> (0 ? 2:2) & ((gctUINT32) ((((1 ? 2:2) - (0 ? 2:2) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 2:2) - (0 ? 2:2) + 1)))))) == (0x1 & ((gctUINT32) ((((1 ? 2:2) - (0 ? 2:2) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 2:2) - (0 ? 2:2) + 1)))))));
1402+#else
1403+ available = gcvFALSE;
1404+#endif
1405+ break;
1406+
1407+ case gcvFEATURE_HALTI2:
1408+ available = ((((gctUINT32) (Hardware->identity.chipMinorFeatures4)) >> (0 ? 16:16) & ((gctUINT32) ((((1 ? 16:16) - (0 ? 16:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 16:16) - (0 ? 16:16) + 1)))))) == (0x1 & ((gctUINT32) ((((1 ? 16:16) - (0 ? 16:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 16:16) - (0 ? 16:16) + 1)))))));
1409+ break;
1410+
1411 default:
1412 gcmkFATAL("Invalid feature has been requested.");
1413 available = gcvFALSE;
1414diff --git a/drivers/mxc/gpu-viv/arch/XAQ2/hal/kernel/gc_hal_kernel_hardware.h b/drivers/mxc/gpu-viv/arch/XAQ2/hal/kernel/gc_hal_kernel_hardware.h
1415index 37226b7..287ea60 100644
1416--- a/drivers/mxc/gpu-viv/arch/XAQ2/hal/kernel/gc_hal_kernel_hardware.h
1417+++ b/drivers/mxc/gpu-viv/arch/XAQ2/hal/kernel/gc_hal_kernel_hardware.h
1418@@ -92,6 +92,7 @@ struct _gckHARDWARE
1419 #endif
1420
1421 gctBOOL powerManagement;
1422+ gctBOOL gpuProfiler;
1423 };
1424
1425 gceSTATUS
1426diff --git a/drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel.c b/drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel.c
1427index b7b0d28..12a5340 100644
1428--- a/drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel.c
1429+++ b/drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel.c
1430@@ -128,19 +128,6 @@ _ResetFinishFunction(
1431 ** Pointer to a variable that will hold the pointer to the gckKERNEL
1432 ** object.
1433 */
1434-#ifdef ANDROID
1435-#if gcdNEW_PROFILER_FILE
1436-#define DEFAULT_PROFILE_FILE_NAME "/sdcard/vprofiler.vpd"
1437-#else
1438-#define DEFAULT_PROFILE_FILE_NAME "/sdcard/vprofiler.xml"
1439-#endif
1440-#else
1441-#if gcdNEW_PROFILER_FILE
1442-#define DEFAULT_PROFILE_FILE_NAME "vprofiler.vpd"
1443-#else
1444-#define DEFAULT_PROFILE_FILE_NAME "vprofiler.xml"
1445-#endif
1446-#endif
1447
1448 gceSTATUS
1449 gckKERNEL_Construct(
1450@@ -302,17 +289,12 @@ gckKERNEL_Construct(
1451
1452 #if VIVANTE_PROFILER
1453 /* Initialize profile setting */
1454-#if defined ANDROID
1455 kernel->profileEnable = gcvFALSE;
1456-#else
1457- kernel->profileEnable = gcvTRUE;
1458-#endif
1459 kernel->profileCleanRegister = gcvTRUE;
1460+#endif
1461
1462- gcmkVERIFY_OK(
1463- gckOS_MemCopy(kernel->profileFileName,
1464- DEFAULT_PROFILE_FILE_NAME,
1465- gcmSIZEOF(DEFAULT_PROFILE_FILE_NAME) + 1));
1466+#if gcdANDROID_NATIVE_FENCE_SYNC
1467+ gcmkONERROR(gckOS_CreateSyncTimeline(Os, &kernel->timeline));
1468 #endif
1469
1470 /* Return pointer to the gckKERNEL object. */
1471@@ -395,6 +377,13 @@ OnError:
1472 }
1473 #endif
1474
1475+#if gcdANDROID_NATIVE_FENCE_SYNC
1476+ if (kernel->timeline)
1477+ {
1478+ gcmkVERIFY_OK(gckOS_DestroySyncTimeline(Os, kernel->timeline));
1479+ }
1480+#endif
1481+
1482 gcmkVERIFY_OK(gcmkOS_SAFE_FREE(Os, kernel));
1483 }
1484
1485@@ -525,6 +514,10 @@ gckKERNEL_Destroy(
1486 }
1487 #endif
1488
1489+#if gcdANDROID_NATIVE_FENCE_SYNC
1490+ gcmkVERIFY_OK(gckOS_DestroySyncTimeline(Kernel->os, Kernel->timeline));
1491+#endif
1492+
1493 /* Mark the gckKERNEL object as unknown. */
1494 Kernel->object.type = gcvOBJ_UNKNOWN;
1495
1496@@ -1310,7 +1303,8 @@ gckKERNEL_Dispatch(
1497 /* Commit a command and context buffer. */
1498 gcmkONERROR(
1499 gckCOMMAND_Commit(Kernel->command,
1500- gcmNAME_TO_PTR(Interface->u.Commit.context),
1501+ Interface->u.Commit.context ?
1502+ gcmNAME_TO_PTR(Interface->u.Commit.context) : gcvNULL,
1503 gcmUINT64_TO_PTR(Interface->u.Commit.commandBuffer),
1504 gcmUINT64_TO_PTR(Interface->u.Commit.delta),
1505 gcmUINT64_TO_PTR(Interface->u.Commit.queue),
1506@@ -1600,7 +1594,15 @@ gckKERNEL_Dispatch(
1507 break;
1508
1509 case gcvHAL_READ_ALL_PROFILE_REGISTERS:
1510-#if VIVANTE_PROFILER
1511+#if VIVANTE_PROFILER && VIVANTE_PROFILER_CONTEXT
1512+ /* Read profile data according to the context. */
1513+ gcmkONERROR(
1514+ gckHARDWARE_QueryContextProfile(
1515+ Kernel->hardware,
1516+ Kernel->profileCleanRegister,
1517+ gcmNAME_TO_PTR(Interface->u.RegisterProfileData.context),
1518+ &Interface->u.RegisterProfileData.counters));
1519+#elif VIVANTE_PROFILER
1520 /* Read all 3D profile registers. */
1521 gcmkONERROR(
1522 gckHARDWARE_QueryProfileRegisters(
1523@@ -1628,11 +1630,6 @@ gckKERNEL_Dispatch(
1524 #if VIVANTE_PROFILER
1525 /* Get profile setting */
1526 Interface->u.GetProfileSetting.enable = Kernel->profileEnable;
1527-
1528- gcmkVERIFY_OK(
1529- gckOS_MemCopy(Interface->u.GetProfileSetting.fileName,
1530- Kernel->profileFileName,
1531- gcdMAX_PROFILE_FILE_NAME));
1532 #endif
1533
1534 status = gcvSTATUS_OK;
1535@@ -1640,12 +1637,13 @@ gckKERNEL_Dispatch(
1536 case gcvHAL_SET_PROFILE_SETTING:
1537 #if VIVANTE_PROFILER
1538 /* Set profile setting */
1539- Kernel->profileEnable = Interface->u.SetProfileSetting.enable;
1540-
1541- gcmkVERIFY_OK(
1542- gckOS_MemCopy(Kernel->profileFileName,
1543- Interface->u.SetProfileSetting.fileName,
1544- gcdMAX_PROFILE_FILE_NAME));
1545+ if(Kernel->hardware->gpuProfiler)
1546+ Kernel->profileEnable = Interface->u.SetProfileSetting.enable;
1547+ else
1548+ {
1549+ status = gcvSTATUS_NOT_SUPPORTED;
1550+ break;
1551+ }
1552 #endif
1553
1554 status = gcvSTATUS_OK;
1555@@ -2093,6 +2091,61 @@ gckKERNEL_Dispatch(
1556 #endif
1557 break;
1558
1559+#if gcdANDROID_NATIVE_FENCE_SYNC
1560+ case gcvHAL_SYNC_POINT:
1561+ {
1562+ gctSYNC_POINT syncPoint;
1563+
1564+ switch (Interface->u.SyncPoint.command)
1565+ {
1566+ case gcvSYNC_POINT_CREATE:
1567+ gcmkONERROR(gckOS_CreateSyncPoint(Kernel->os, &syncPoint));
1568+
1569+ Interface->u.SyncPoint.syncPoint = gcmPTR_TO_UINT64(syncPoint);
1570+
1571+ gcmkVERIFY_OK(
1572+ gckKERNEL_AddProcessDB(Kernel,
1573+ processID, gcvDB_SYNC_POINT,
1574+ syncPoint,
1575+ gcvNULL,
1576+ 0));
1577+ break;
1578+
1579+ case gcvSYNC_POINT_DESTROY:
1580+ syncPoint = gcmUINT64_TO_PTR(Interface->u.SyncPoint.syncPoint);
1581+
1582+ gcmkONERROR(gckOS_DestroySyncPoint(Kernel->os, syncPoint));
1583+
1584+ gcmkVERIFY_OK(
1585+ gckKERNEL_RemoveProcessDB(Kernel,
1586+ processID, gcvDB_SYNC_POINT,
1587+ syncPoint));
1588+ break;
1589+
1590+ default:
1591+ gcmkONERROR(gcvSTATUS_INVALID_ARGUMENT);
1592+ break;
1593+ }
1594+ }
1595+ break;
1596+
1597+ case gcvHAL_CREATE_NATIVE_FENCE:
1598+ {
1599+ gctINT fenceFD;
1600+ gctSYNC_POINT syncPoint =
1601+ gcmUINT64_TO_PTR(Interface->u.CreateNativeFence.syncPoint);
1602+
1603+ gcmkONERROR(
1604+ gckOS_CreateNativeFence(Kernel->os,
1605+ Kernel->timeline,
1606+ syncPoint,
1607+ &fenceFD));
1608+
1609+ Interface->u.CreateNativeFence.fenceFD = fenceFD;
1610+ }
1611+ break;
1612+#endif
1613+
1614 default:
1615 /* Invalid command. */
1616 gcmkONERROR(gcvSTATUS_INVALID_ARGUMENT);
1617@@ -2856,6 +2909,8 @@ gckKERNEL_Recovery(
1618 return gcvSTATUS_OK;
1619 }
1620
1621+ gcmkPRINT("[galcore]: GPU[%d] hang, automatic recovery.", Kernel->core);
1622+
1623 /* Start a timer to clear reset flag, before timer is expired,
1624 ** other recovery request is ignored. */
1625 gcmkVERIFY_OK(
1626@@ -3382,7 +3437,7 @@ gckLINKQUEUE_Dequeue(
1627 IN gckLINKQUEUE LinkQueue
1628 )
1629 {
1630- gcmASSERT(LinkQueue->count == gcdLINK_QUEUE_SIZE);
1631+ gcmkASSERT(LinkQueue->count == gcdLINK_QUEUE_SIZE);
1632
1633 LinkQueue->count--;
1634 LinkQueue->front = (LinkQueue->front + 1) % gcdLINK_QUEUE_SIZE;
1635diff --git a/drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel.h b/drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel.h
1636index 5896e93..1c40df2 100644
1637--- a/drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel.h
1638+++ b/drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel.h
1639@@ -140,8 +140,9 @@ typedef enum _gceDATABASE_TYPE
1640 gcvDB_CONTEXT, /* Context */
1641 gcvDB_IDLE, /* GPU idle. */
1642 gcvDB_MAP_MEMORY, /* Map memory */
1643- gcvDB_SHARED_INFO, /* Private data */
1644- gcvDB_MAP_USER_MEMORY /* Map user memory */
1645+ gcvDB_SHARED_INFO, /* Private data */
1646+ gcvDB_MAP_USER_MEMORY, /* Map user memory */
1647+ gcvDB_SYNC_POINT, /* Sync point. */
1648 }
1649 gceDATABASE_TYPE;
1650
1651@@ -406,9 +407,6 @@ struct _gckKERNEL
1652 /* Enable profiling */
1653 gctBOOL profileEnable;
1654
1655- /* The profile file name */
1656- gctCHAR profileFileName[gcdMAX_PROFILE_FILE_NAME];
1657-
1658 /* Clear profile register or not*/
1659 gctBOOL profileCleanRegister;
1660
1661@@ -445,6 +443,10 @@ struct _gckKERNEL
1662 #if gcdDVFS
1663 gckDVFS dvfs;
1664 #endif
1665+
1666+#if gcdANDROID_NATIVE_FENCE_SYNC
1667+ gctHANDLE timeline;
1668+#endif
1669 };
1670
1671 struct _FrequencyHistory
1672@@ -496,6 +498,11 @@ struct _gckCOMMAND
1673 /* Context switching mutex. */
1674 gctPOINTER mutexContext;
1675
1676+#if VIVANTE_PROFILER_CONTEXT
1677+ /* Context sequence mutex. */
1678+ gctPOINTER mutexContextSeq;
1679+#endif
1680+
1681 /* Command queue power semaphore. */
1682 gctPOINTER powerSemaphore;
1683
1684@@ -649,6 +656,8 @@ struct _gckEVENT
1685 gctPOINTER eventListMutex;
1686
1687 gctPOINTER submitTimer;
1688+
1689+ volatile gctBOOL inNotify;
1690 };
1691
1692 /* Free all events belonging to a process. */
1693@@ -668,6 +677,11 @@ gckEVENT_Stop(
1694 IN OUT gctSIZE_T * waitSize
1695 );
1696
1697+gceSTATUS
1698+gckEVENT_WaitEmpty(
1699+ IN gckEVENT Event
1700+ );
1701+
1702 /* gcuVIDMEM_NODE structure. */
1703 typedef union _gcuVIDMEM_NODE
1704 {
1705diff --git a/drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel_command.c b/drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel_command.c
1706index 9ee9ea1..73dab81 100644
1707--- a/drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel_command.c
1708+++ b/drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel_command.c
1709@@ -494,6 +494,11 @@ gckCOMMAND_Construct(
1710 /* Create the context switching mutex. */
1711 gcmkONERROR(gckOS_CreateMutex(os, &command->mutexContext));
1712
1713+#if VIVANTE_PROFILER_CONTEXT
1714+ /* Create the context switching mutex. */
1715+ gcmkONERROR(gckOS_CreateMutex(os, &command->mutexContextSeq));
1716+#endif
1717+
1718 /* Create the power management semaphore. */
1719 gcmkONERROR(gckOS_CreateSemaphore(os, &command->powerSemaphore));
1720
1721@@ -572,6 +577,13 @@ OnError:
1722 gcmkVERIFY_OK(gckOS_DeleteMutex(os, command->mutexContext));
1723 }
1724
1725+#if VIVANTE_PROFILER_CONTEXT
1726+ if (command->mutexContextSeq != gcvNULL)
1727+ {
1728+ gcmkVERIFY_OK(gckOS_DeleteMutex(os, command->mutexContextSeq));
1729+ }
1730+#endif
1731+
1732 if (command->mutexQueue != gcvNULL)
1733 {
1734 gcmkVERIFY_OK(gckOS_DeleteMutex(os, command->mutexQueue));
1735@@ -662,6 +674,11 @@ gckCOMMAND_Destroy(
1736 /* Delete the context switching mutex. */
1737 gcmkVERIFY_OK(gckOS_DeleteMutex(Command->os, Command->mutexContext));
1738
1739+#if VIVANTE_PROFILER_CONTEXT
1740+ if (Command->mutexContextSeq != gcvNULL)
1741+ gcmkVERIFY_OK(gckOS_DeleteMutex(Command->os, Command->mutexContextSeq));
1742+#endif
1743+
1744 /* Delete the command queue mutex. */
1745 gcmkVERIFY_OK(gckOS_DeleteMutex(Command->os, Command->mutexQueue));
1746
1747@@ -1127,6 +1144,10 @@ gckCOMMAND_Commit(
1748 # endif
1749 #endif
1750
1751+#if VIVANTE_PROFILER_CONTEXT
1752+ gctBOOL sequenceAcquired = gcvFALSE;
1753+#endif
1754+
1755 gctPOINTER pointer = gcvNULL;
1756
1757 gcmkHEADER_ARG(
1758@@ -1145,6 +1166,17 @@ gckCOMMAND_Commit(
1759
1760 gcmkONERROR(_FlushMMU(Command));
1761
1762+#if VIVANTE_PROFILER_CONTEXT
1763+ if((Command->kernel->hardware->gpuProfiler) && (Command->kernel->profileEnable))
1764+ {
1765+ /* Acquire the context sequnence mutex. */
1766+ gcmkONERROR(gckOS_AcquireMutex(
1767+ Command->os, Command->mutexContextSeq, gcvINFINITE
1768+ ));
1769+ sequenceAcquired = gcvTRUE;
1770+ }
1771+#endif
1772+
1773 /* Acquire the command queue. */
1774 gcmkONERROR(gckCOMMAND_EnterCommit(Command, gcvFALSE));
1775 commitEntered = gcvTRUE;
1776@@ -2002,6 +2034,23 @@ gckCOMMAND_Commit(
1777 gcmkONERROR(gckCOMMAND_ExitCommit(Command, gcvFALSE));
1778 commitEntered = gcvFALSE;
1779
1780+#if VIVANTE_PROFILER_CONTEXT
1781+ if(sequenceAcquired)
1782+ {
1783+ gcmkONERROR(gckCOMMAND_Stall(Command, gcvTRUE));
1784+ if (Command->currContext)
1785+ {
1786+ gcmkONERROR(gckHARDWARE_UpdateContextProfile(
1787+ hardware,
1788+ Command->currContext));
1789+ }
1790+
1791+ /* Release the context switching mutex. */
1792+ gcmkONERROR(gckOS_ReleaseMutex(Command->os, Command->mutexContextSeq));
1793+ sequenceAcquired = gcvFALSE;
1794+ }
1795+#endif
1796+
1797 /* Loop while there are records in the queue. */
1798 while (EventQueue != gcvNULL)
1799 {
1800@@ -2114,6 +2163,14 @@ OnError:
1801 gcmkVERIFY_OK(gckCOMMAND_ExitCommit(Command, gcvFALSE));
1802 }
1803
1804+#if VIVANTE_PROFILER_CONTEXT
1805+ if (sequenceAcquired)
1806+ {
1807+ /* Release the context sequence mutex. */
1808+ gcmkVERIFY_OK(gckOS_ReleaseMutex(Command->os, Command->mutexContextSeq));
1809+ }
1810+#endif
1811+
1812 /* Unmap the command buffer pointer. */
1813 if (commandBufferMapped)
1814 {
1815diff --git a/drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel_command_vg.c b/drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel_command_vg.c
1816index 76c1c10..1a7c340 100644
1817--- a/drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel_command_vg.c
1818+++ b/drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel_command_vg.c
1819@@ -2819,6 +2819,7 @@ gckVGCOMMAND_Construct(
1820 ** Enable TS overflow interrupt.
1821 */
1822
1823+ command->info.tsOverflowInt = 0;
1824 gcmkERR_BREAK(gckVGINTERRUPT_Enable(
1825 Kernel->interrupt,
1826 &command->info.tsOverflowInt,
1827@@ -3406,38 +3407,26 @@ gckVGCOMMAND_Commit(
1828 gctBOOL previousExecuted;
1829 gctUINT controlIndex;
1830
1831+ gcmkERR_BREAK(gckVGHARDWARE_SetPowerManagementState(
1832+ Command->hardware, gcvPOWER_ON_AUTO
1833+ ));
1834+
1835+ /* Acquire the power semaphore. */
1836+ gcmkERR_BREAK(gckOS_AcquireSemaphore(
1837+ Command->os, Command->powerSemaphore
1838+ ));
1839+
1840 /* Acquire the mutex. */
1841- gcmkERR_BREAK(gckOS_AcquireMutex(
1842+ status = gckOS_AcquireMutex(
1843 Command->os,
1844 Command->commitMutex,
1845 gcvINFINITE
1846- ));
1847-
1848- status = gckVGHARDWARE_SetPowerManagementState(
1849- Command->hardware, gcvPOWER_ON_AUTO);
1850-
1851- if (gcmIS_ERROR(status))
1852- {
1853- /* Acquire the mutex. */
1854- gcmkVERIFY_OK(gckOS_ReleaseMutex(
1855- Command->os,
1856- Command->commitMutex
1857- ));
1858-
1859- break;
1860- }
1861- /* Acquire the power semaphore. */
1862- status = gckOS_AcquireSemaphore(
1863- Command->os, Command->powerSemaphore);
1864+ );
1865
1866 if (gcmIS_ERROR(status))
1867 {
1868- /* Acquire the mutex. */
1869- gcmkVERIFY_OK(gckOS_ReleaseMutex(
1870- Command->os,
1871- Command->commitMutex
1872- ));
1873-
1874+ gcmkVERIFY_OK(gckOS_ReleaseSemaphore(
1875+ Command->os, Command->powerSemaphore));
1876 break;
1877 }
1878
1879@@ -3669,14 +3658,14 @@ gckVGCOMMAND_Commit(
1880 }
1881 while (gcvFALSE);
1882
1883- gcmkVERIFY_OK(gckOS_ReleaseSemaphore(
1884- Command->os, Command->powerSemaphore));
1885-
1886 /* Release the mutex. */
1887 gcmkCHECK_STATUS(gckOS_ReleaseMutex(
1888 Command->os,
1889 Command->commitMutex
1890 ));
1891+
1892+ gcmkVERIFY_OK(gckOS_ReleaseSemaphore(
1893+ Command->os, Command->powerSemaphore));
1894 }
1895 while (gcvFALSE);
1896
1897diff --git a/drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel_db.c b/drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel_db.c
1898index 673d4f7..134351a 100644
1899--- a/drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel_db.c
1900+++ b/drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel_db.c
1901@@ -1307,6 +1307,18 @@ gckKERNEL_DestroyProcessDB(
1902 status = gckOS_FreeMemory(Kernel->os, record->physical);
1903 break;
1904
1905+#if gcdANDROID_NATIVE_FENCE_SYNC
1906+ case gcvDB_SYNC_POINT:
1907+ /* Free the user signal. */
1908+ status = gckOS_DestroySyncPoint(Kernel->os,
1909+ (gctSYNC_POINT) record->data);
1910+
1911+ gcmkTRACE_ZONE(gcvLEVEL_WARNING, gcvZONE_DATABASE,
1912+ "DB: SYNC POINT %d (status=%d)",
1913+ (gctINT)(gctUINTPTR_T)record->data, status);
1914+ break;
1915+#endif
1916+
1917 default:
1918 gcmkTRACE_ZONE(gcvLEVEL_ERROR, gcvZONE_DATABASE,
1919 "DB: Correcupted record=0x%08x type=%d",
1920diff --git a/drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel_event.c b/drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel_event.c
1921index 217f7f1..2d81a56 100644
1922--- a/drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel_event.c
1923+++ b/drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel_event.c
1924@@ -931,6 +931,7 @@ gckEVENT_AddList(
1925 || (Interface->command == gcvHAL_TIMESTAMP)
1926 || (Interface->command == gcvHAL_COMMIT_DONE)
1927 || (Interface->command == gcvHAL_FREE_VIRTUAL_COMMAND_BUFFER)
1928+ || (Interface->command == gcvHAL_SYNC_POINT)
1929 );
1930
1931 /* Validate the source. */
1932@@ -2131,6 +2132,9 @@ gckEVENT_Notify(
1933 gcvINFINITE));
1934 acquired = gcvTRUE;
1935
1936+ /* We are in the notify loop. */
1937+ Event->inNotify = gcvTRUE;
1938+
1939 /* Grab the event head. */
1940 record = queue->head;
1941
1942@@ -2463,6 +2467,17 @@ gckEVENT_Notify(
1943 break;
1944 #endif
1945
1946+#if gcdANDROID_NATIVE_FENCE_SYNC
1947+ case gcvHAL_SYNC_POINT:
1948+ {
1949+ gctSYNC_POINT syncPoint;
1950+
1951+ syncPoint = gcmUINT64_TO_PTR(record->info.u.SyncPoint.syncPoint);
1952+ status = gckOS_SignalSyncPoint(Event->os, syncPoint);
1953+ }
1954+ break;
1955+#endif
1956+
1957 case gcvHAL_COMMIT_DONE:
1958 break;
1959
1960@@ -2505,6 +2520,9 @@ gckEVENT_Notify(
1961 gcmkONERROR(_TryToIdleGPU(Event));
1962 }
1963
1964+ /* We are out the notify loop. */
1965+ Event->inNotify = gcvFALSE;
1966+
1967 /* Success. */
1968 gcmkFOOTER_NO();
1969 return gcvSTATUS_OK;
1970@@ -2524,6 +2542,9 @@ OnError:
1971 }
1972 #endif
1973
1974+ /* We are out the notify loop. */
1975+ Event->inNotify = gcvFALSE;
1976+
1977 /* Return the status. */
1978 gcmkFOOTER();
1979 return status;
1980@@ -2871,3 +2892,11 @@ gckEVENT_Dump(
1981 return gcvSTATUS_OK;
1982 }
1983
1984+gceSTATUS gckEVENT_WaitEmpty(gckEVENT Event)
1985+{
1986+ gctBOOL isEmpty;
1987+
1988+ while (Event->inNotify || (gcmIS_SUCCESS(gckEVENT_IsEmpty(Event, &isEmpty)) && !isEmpty)) ;
1989+
1990+ return gcvSTATUS_OK;
1991+}
1992diff --git a/drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel_interrupt_vg.c b/drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel_interrupt_vg.c
1993index 8ac187b..50bc63e 100644
1994--- a/drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel_interrupt_vg.c
1995+++ b/drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel_interrupt_vg.c
1996@@ -794,6 +794,9 @@ gckVGINTERRUPT_Enque(
1997 Interrupt->kernel->hardware, &triggered
1998 ));
1999
2000+ /* Mask out TS overflow interrupt */
2001+ triggered &= 0xfffffffe;
2002+
2003 /* No interrupts to process? */
2004 if (triggered == 0)
2005 {
2006diff --git a/drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel_mmu.c b/drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel_mmu.c
2007index c7f67c7..e4ca497 100644
2008--- a/drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel_mmu.c
2009+++ b/drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel_mmu.c
2010@@ -1436,7 +1436,7 @@ gckMMU_AllocatePages(
2011 acquired = gcvTRUE;
2012
2013 /* Allocate page table for current MMU. */
2014- for (i = 0; i < mirrorPageTable->reference; i++)
2015+ for (i = 0; i < (gctINT)mirrorPageTable->reference; i++)
2016 {
2017 if (Mmu == mirrorPageTable->mmus[i])
2018 {
2019@@ -1446,7 +1446,7 @@ gckMMU_AllocatePages(
2020 }
2021
2022 /* Allocate page table for other MMUs. */
2023- for (i = 0; i < mirrorPageTable->reference; i++)
2024+ for (i = 0; i < (gctINT)mirrorPageTable->reference; i++)
2025 {
2026 mmu = mirrorPageTable->mmus[i];
2027
2028@@ -1500,7 +1500,7 @@ gckMMU_FreePages(
2029
2030 offset = (gctUINT32)PageTable - (gctUINT32)Mmu->pageTableLogical;
2031
2032- for (i = 0; i < mirrorPageTable->reference; i++)
2033+ for (i = 0; i < (gctINT)mirrorPageTable->reference; i++)
2034 {
2035 mmu = mirrorPageTable->mmus[i];
2036
2037@@ -1639,7 +1639,7 @@ gckMMU_SetPage(
2038 _WritePageEntry(PageEntry, data);
2039
2040 #if gcdMIRROR_PAGETABLE
2041- for (i = 0; i < mirrorPageTable->reference; i++)
2042+ for (i = 0; i < (gctINT)mirrorPageTable->reference; i++)
2043 {
2044 mmu = mirrorPageTable->mmus[i];
2045
2046diff --git a/drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel_video_memory.c b/drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel_video_memory.c
2047index 8b8bbdc..3b5dd82 100644
2048--- a/drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel_video_memory.c
2049+++ b/drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel_video_memory.c
2050@@ -1582,6 +1582,7 @@ _NeedVirtualMapping(
2051 gctUINT32 end;
2052 gcePOOL pool;
2053 gctUINT32 offset;
2054+ gctUINT32 baseAddress;
2055
2056 gcmkHEADER_ARG("Node=0x%X", Node);
2057
2058@@ -1601,10 +1602,16 @@ _NeedVirtualMapping(
2059 else
2060 #endif
2061 {
2062- /* For cores which can't access all physical address. */
2063- gcmkONERROR(gckHARDWARE_ConvertLogical(Kernel->hardware,
2064- Node->Virtual.logical,
2065- &phys));
2066+ /* Convert logical address into a physical address. */
2067+ gcmkONERROR(
2068+ gckOS_GetPhysicalAddress(Kernel->os, Node->Virtual.logical, &phys));
2069+
2070+ gcmkONERROR(gckOS_GetBaseAddress(Kernel->os, &baseAddress));
2071+
2072+ gcmkASSERT(phys >= baseAddress);
2073+
2074+ /* Subtract baseAddress to get a GPU address used for programming. */
2075+ phys -= baseAddress;
2076
2077 /* If part of region is belong to gcvPOOL_VIRTUAL,
2078 ** whole region has to be mapped. */
2079@@ -1734,6 +1741,11 @@ gckVIDMEM_Lock(
2080 gcmkONERROR(gckOS_AcquireMutex(os, Node->Virtual.mutex, gcvINFINITE));
2081 acquired = gcvTRUE;
2082
2083+#if gcdPAGED_MEMORY_CACHEABLE
2084+ /* Force video memory cacheable. */
2085+ Cacheable = gcvTRUE;
2086+#endif
2087+
2088 gcmkONERROR(
2089 gckOS_LockPages(os,
2090 Node->Virtual.physical,
2091diff --git a/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal.h b/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal.h
2092index 4406d7e..7312cc2 100644
2093--- a/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal.h
2094+++ b/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal.h
2095@@ -123,6 +123,12 @@ extern "C" {
2096
2097 #define gcvINVALID_ADDRESS ~0U
2098
2099+#define gcmGET_PRE_ROTATION(rotate) \
2100+ ((rotate) & (~(gcvSURF_POST_FLIP_X | gcvSURF_POST_FLIP_Y)))
2101+
2102+#define gcmGET_POST_ROTATION(rotate) \
2103+ ((rotate) & (gcvSURF_POST_FLIP_X | gcvSURF_POST_FLIP_Y))
2104+
2105 /******************************************************************************\
2106 ******************************** gcsOBJECT Object *******************************
2107 \******************************************************************************/
2108@@ -1124,6 +1130,60 @@ gckOS_UnmapUserMemory(
2109 IN gctUINT32 Address
2110 );
2111
2112+/******************************************************************************\
2113+************************** Android Native Fence Sync ***************************
2114+\******************************************************************************/
2115+gceSTATUS
2116+gckOS_CreateSyncTimeline(
2117+ IN gckOS Os,
2118+ OUT gctHANDLE * Timeline
2119+ );
2120+
2121+gceSTATUS
2122+gckOS_DestroySyncTimeline(
2123+ IN gckOS Os,
2124+ IN gctHANDLE Timeline
2125+ );
2126+
2127+gceSTATUS
2128+gckOS_CreateSyncPoint(
2129+ IN gckOS Os,
2130+ OUT gctSYNC_POINT * SyncPoint
2131+ );
2132+
2133+gceSTATUS
2134+gckOS_ReferenceSyncPoint(
2135+ IN gckOS Os,
2136+ IN gctSYNC_POINT SyncPoint
2137+ );
2138+
2139+gceSTATUS
2140+gckOS_DestroySyncPoint(
2141+ IN gckOS Os,
2142+ IN gctSYNC_POINT SyncPoint
2143+ );
2144+
2145+gceSTATUS
2146+gckOS_SignalSyncPoint(
2147+ IN gckOS Os,
2148+ IN gctSYNC_POINT SyncPoint
2149+ );
2150+
2151+gceSTATUS
2152+gckOS_QuerySyncPoint(
2153+ IN gckOS Os,
2154+ IN gctSYNC_POINT SyncPoint,
2155+ OUT gctBOOL_PTR State
2156+ );
2157+
2158+gceSTATUS
2159+gckOS_CreateNativeFence(
2160+ IN gckOS Os,
2161+ IN gctHANDLE Timeline,
2162+ IN gctSYNC_POINT SyncPoint,
2163+ OUT gctINT * FenceFD
2164+ );
2165+
2166 #if !USE_NEW_LINUX_SIGNAL
2167 /* Create signal to be used in the user space. */
2168 gceSTATUS
2169@@ -1758,7 +1818,7 @@ gckKERNEL_Recovery(
2170 void
2171 gckKERNEL_SetTimeOut(
2172 IN gckKERNEL Kernel,
2173- IN gctUINT32 timeOut
2174+ IN gctUINT32 timeOut
2175 );
2176
2177 /* Get access to the user data. */
2178@@ -2078,6 +2138,12 @@ gckHARDWARE_SetPowerManagement(
2179 IN gctBOOL PowerManagement
2180 );
2181
2182+gceSTATUS
2183+gckHARDWARE_SetGpuProfiler(
2184+ IN gckHARDWARE Hardware,
2185+ IN gctBOOL GpuProfiler
2186+ );
2187+
2188 #if gcdENABLE_FSCALE_VAL_ADJUST
2189 gceSTATUS
2190 gckHARDWARE_SetFscaleValue(
2191@@ -2554,6 +2620,22 @@ gckHARDWARE_QueryProfileRegisters(
2192 );
2193 #endif
2194
2195+#if VIVANTE_PROFILER_CONTEXT
2196+gceSTATUS
2197+gckHARDWARE_QueryContextProfile(
2198+ IN gckHARDWARE Hardware,
2199+ IN gctBOOL Clear,
2200+ IN gckCONTEXT Context,
2201+ OUT gcsPROFILER_COUNTERS * Counters
2202+ );
2203+
2204+gceSTATUS
2205+gckHARDWARE_UpdateContextProfile(
2206+ IN gckHARDWARE Hardware,
2207+ IN gckCONTEXT Context
2208+ );
2209+#endif
2210+
2211 gceSTATUS
2212 gckOS_SignalQueryHardware(
2213 IN gckOS Os,
2214diff --git a/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_base.h b/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_base.h
2215index 44689b0..9c17114 100644
2216--- a/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_base.h
2217+++ b/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_base.h
2218@@ -71,10 +71,17 @@ typedef struct _gcoFENCE * gcoFENCE;
2219 typedef struct _gcsSYNC_CONTEXT * gcsSYNC_CONTEXT_PTR;
2220 #endif
2221
2222+typedef struct _gcoOS_SymbolsList gcoOS_SymbolsList;
2223+
2224 /******************************************************************************\
2225 ******************************* Process local storage *************************
2226 \******************************************************************************/
2227 typedef struct _gcsPLS * gcsPLS_PTR;
2228+
2229+typedef void (* gctPLS_DESTRUCTOR) (
2230+ gcsPLS_PTR
2231+ );
2232+
2233 typedef struct _gcsPLS
2234 {
2235 /* Global objects. */
2236@@ -103,6 +110,12 @@ typedef struct _gcsPLS
2237
2238 /* PorcessID of the constrcutor process */
2239 gctUINT32 processID;
2240+#if gcdFORCE_GAL_LOAD_TWICE
2241+ /* ThreadID of the constrcutor process. */
2242+ gctSIZE_T threadID;
2243+ /* Flag for calling module destructor. */
2244+ gctBOOL exiting;
2245+#endif
2246
2247 /* Reference count for destructor. */
2248 gcsATOM_PTR reference;
2249@@ -111,6 +124,8 @@ typedef struct _gcsPLS
2250 gctBOOL bNeedSupportNP2Texture;
2251 #endif
2252
2253+ /* Destructor for eglDisplayInfo. */
2254+ gctPLS_DESTRUCTOR destructor;
2255 }
2256 gcsPLS;
2257
2258@@ -148,6 +163,11 @@ typedef struct _gcsTLS
2259 #endif
2260 gco2D engine2D;
2261 gctBOOL copied;
2262+
2263+#if gcdFORCE_GAL_LOAD_TWICE
2264+ /* libGAL.so handle */
2265+ gctHANDLE handle;
2266+#endif
2267 }
2268 gcsTLS;
2269
2270@@ -160,6 +180,7 @@ typedef enum _gcePLS_VALUE
2271 gcePLS_VALUE_EGL_DISPLAY_INFO,
2272 gcePLS_VALUE_EGL_SURFACE_INFO,
2273 gcePLS_VALUE_EGL_CONFIG_FORMAT_INFO,
2274+ gcePLS_VALUE_EGL_DESTRUCTOR_INFO,
2275 }
2276 gcePLS_VALUE;
2277
2278@@ -577,6 +598,12 @@ gcoHAL_Call(
2279 IN OUT gcsHAL_INTERFACE_PTR Interface
2280 );
2281
2282+gceSTATUS
2283+gcoHAL_GetPatchID(
2284+ IN gcoHAL Hal,
2285+ OUT gcePATCH_ID * PatchID
2286+ );
2287+
2288 /* Schedule an event. */
2289 gceSTATUS
2290 gcoHAL_ScheduleEvent(
2291@@ -637,6 +664,16 @@ gcoHAL_QuerySeparated3D2D(
2292 IN gcoHAL Hal
2293 );
2294
2295+gceSTATUS
2296+gcoHAL_QuerySpecialHint(
2297+ IN gceSPECIAL_HINT Hint
2298+ );
2299+
2300+gceSTATUS
2301+gcoHAL_SetSpecialHintData(
2302+ IN gcoHARDWARE Hardware
2303+ );
2304+
2305 /* Get pointer to gcoVG object. */
2306 gceSTATUS
2307 gcoHAL_GetVGEngine(
2308@@ -786,7 +823,6 @@ gcoOS_FreeVideoMemory(
2309 IN gctPOINTER Handle
2310 );
2311
2312-#if gcdENABLE_BANK_ALIGNMENT
2313 gceSTATUS
2314 gcoSURF_GetBankOffsetBytes(
2315 IN gcoSURF Surfce,
2316@@ -794,7 +830,6 @@ gcoSURF_GetBankOffsetBytes(
2317 IN gctUINT32 Stride,
2318 IN gctUINT32_PTR Bytes
2319 );
2320-#endif
2321
2322 /* Map user memory. */
2323 gceSTATUS
2324@@ -918,6 +953,21 @@ gcoOS_Flush(
2325 IN gctFILE File
2326 );
2327
2328+/* Close a file descriptor. */
2329+gceSTATUS
2330+gcoOS_CloseFD(
2331+ IN gcoOS Os,
2332+ IN gctINT FD
2333+ );
2334+
2335+/* Dup file descriptor to another. */
2336+gceSTATUS
2337+gcoOS_DupFD(
2338+ IN gcoOS Os,
2339+ IN gctINT FD,
2340+ OUT gctINT * FD2
2341+ );
2342+
2343 /* Create an endpoint for communication. */
2344 gceSTATUS
2345 gcoOS_Socket(
2346@@ -977,6 +1027,14 @@ gcoOS_GetEnv(
2347 OUT gctSTRING * Value
2348 );
2349
2350+/* Set environment variable value. */
2351+gceSTATUS
2352+gcoOS_SetEnv(
2353+ IN gcoOS Os,
2354+ IN gctCONST_STRING VarName,
2355+ IN gctSTRING Value
2356+ );
2357+
2358 /* Get current working directory. */
2359 gceSTATUS
2360 gcoOS_GetCwd(
2361@@ -1210,6 +1268,13 @@ gcoOS_DetectProcessByEncryptedName(
2362 IN gctCONST_STRING Name
2363 );
2364
2365+#if defined(ANDROID)
2366+gceSTATUS
2367+gcoOS_DetectProgrameByEncryptedSymbols(
2368+ IN gcoOS_SymbolsList Symbols
2369+ );
2370+#endif
2371+
2372 /*----------------------------------------------------------------------------*/
2373 /*----- Atoms ----------------------------------------------------------------*/
2374
2375@@ -1403,6 +1468,42 @@ gcoOS_UnmapSignal(
2376 IN gctSIGNAL Signal
2377 );
2378
2379+/*----------------------------------------------------------------------------*/
2380+/*----- Android Native Fence -------------------------------------------------*/
2381+
2382+/* Create sync point. */
2383+gceSTATUS
2384+gcoOS_CreateSyncPoint(
2385+ IN gcoOS Os,
2386+ OUT gctSYNC_POINT * SyncPoint
2387+ );
2388+
2389+/* Destroy sync point. */
2390+gceSTATUS
2391+gcoOS_DestroySyncPoint(
2392+ IN gcoOS Os,
2393+ IN gctSYNC_POINT SyncPoint
2394+ );
2395+
2396+/* Create native fence. */
2397+gceSTATUS
2398+gcoOS_CreateNativeFence(
2399+ IN gcoOS Os,
2400+ IN gctSYNC_POINT SyncPoint,
2401+ OUT gctINT * FenceFD
2402+ );
2403+
2404+/* Wait on native fence. */
2405+gceSTATUS
2406+gcoOS_WaitNativeFence(
2407+ IN gcoOS Os,
2408+ IN gctINT FenceFD,
2409+ IN gctUINT32 Timeout
2410+ );
2411+
2412+/*----------------------------------------------------------------------------*/
2413+/*----- Memory Access and Cache ----------------------------------------------*/
2414+
2415 /* Write a register. */
2416 gceSTATUS
2417 gcoOS_WriteRegister(
2418@@ -1507,7 +1608,7 @@ gcoOS_QueryProfileTickRate(
2419 # define gcmPROFILE_QUERY(start, ticks) do { } while (gcvFALSE)
2420 # define gcmPROFILE_ONLY(x) do { } while (gcvFALSE)
2421 # define gcmPROFILE_ELSE(x) x
2422-# define gcmPROFILE_DECLARE_ONLY(x) typedef x
2423+# define gcmPROFILE_DECLARE_ONLY(x) do { } while (gcvFALSE)
2424 # define gcmPROFILE_DECLARE_ELSE(x) x
2425 #endif
2426
2427@@ -1579,6 +1680,28 @@ typedef struct _gcsRECT
2428 }
2429 gcsRECT;
2430
2431+typedef union _gcsPIXEL
2432+{
2433+ struct
2434+ {
2435+ gctFLOAT r, g, b, a;
2436+ gctFLOAT d, s;
2437+ } pf;
2438+
2439+ struct
2440+ {
2441+ gctINT32 r, g, b, a;
2442+ gctINT32 d, s;
2443+ } pi;
2444+
2445+ struct
2446+ {
2447+ gctUINT32 r, g, b, a;
2448+ gctUINT32 d, s;
2449+ } pui;
2450+
2451+} gcsPIXEL;
2452+
2453
2454 /******************************************************************************\
2455 ********************************* gcoSURF Object ********************************
2456@@ -1795,6 +1918,18 @@ gcoSURF_SetRotation(
2457 );
2458
2459 gceSTATUS
2460+gcoSURF_SetPreRotation(
2461+ IN gcoSURF Surface,
2462+ IN gceSURF_ROTATION Rotation
2463+ );
2464+
2465+gceSTATUS
2466+gcoSURF_GetPreRotation(
2467+ IN gcoSURF Surface,
2468+ IN gceSURF_ROTATION *Rotation
2469+ );
2470+
2471+gceSTATUS
2472 gcoSURF_IsValid(
2473 IN gcoSURF Surface
2474 );
2475@@ -1824,6 +1959,15 @@ gcoSURF_DisableTileStatus(
2476 IN gcoSURF Surface,
2477 IN gctBOOL Decompress
2478 );
2479+
2480+gceSTATUS
2481+gcoSURF_AlignResolveRect(
2482+ IN gcoSURF Surf,
2483+ IN gcsPOINT_PTR RectOrigin,
2484+ IN gcsPOINT_PTR RectSize,
2485+ OUT gcsPOINT_PTR AlignedOrigin,
2486+ OUT gcsPOINT_PTR AlignedSize
2487+ );
2488 #endif /* VIVANTE_NO_3D */
2489
2490 /* Get surface size. */
2491@@ -1910,6 +2054,9 @@ gcoSURF_FillFromTile(
2492 IN gcoSURF Surface
2493 );
2494
2495+/* Check if surface needs a filler. */
2496+gceSTATUS gcoSURF_NeedFiller(IN gcoSURF Surface);
2497+
2498 /* Fill surface with a value. */
2499 gceSTATUS
2500 gcoSURF_Fill(
2501@@ -1949,6 +2096,19 @@ gcoSURF_SetBuffer(
2502 IN gctUINT32 Physical
2503 );
2504
2505+/* Set the underlying video buffer for the surface wrapper. */
2506+gceSTATUS
2507+gcoSURF_SetVideoBuffer(
2508+ IN gcoSURF Surface,
2509+ IN gceSURF_TYPE Type,
2510+ IN gceSURF_FORMAT Format,
2511+ IN gctUINT Width,
2512+ IN gctUINT Height,
2513+ IN gctUINT Stride,
2514+ IN gctPOINTER *LogicalPlane1,
2515+ IN gctUINT32 *PhysicalPlane1
2516+ );
2517+
2518 /* Set the size of the surface in pixels and map the underlying buffer. */
2519 gceSTATUS
2520 gcoSURF_SetWindow(
2521@@ -3705,6 +3865,12 @@ gcGetUserDebugOption(
2522 void
2523 );
2524
2525+struct _gcoOS_SymbolsList
2526+{
2527+ gcePATCH_ID patchId;
2528+ const char * symList[10];
2529+};
2530+
2531 #if gcdHAS_ELLIPSES
2532 #define gcmUSER_DEBUG_MSG(level, ...) \
2533 do \
2534diff --git a/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_compiler.h b/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_compiler.h
2535index 8693c37..062224c 100644
2536--- a/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_compiler.h
2537+++ b/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_compiler.h
2538@@ -39,12 +39,10 @@ extern "C" {
2539 #define GC_ENABLE_LOADTIME_OPT 1
2540 #endif
2541
2542-#define TEMP_OPT_CONSTANT_TEXLD_COORD 1
2543+#define TEMP_OPT_CONSTANT_TEXLD_COORD 0
2544
2545 #define TEMP_SHADER_PATCH 1
2546
2547-#define ADD_PRE_ROTATION_TO_VS 0
2548-
2549 #define TEMP_INLINE_ALL_EXPANSION 1
2550 /******************************* IR VERSION ******************/
2551 #define gcdSL_IR_VERSION gcmCC('\0','\0','\0','\1')
2552@@ -271,6 +269,7 @@ typedef enum _gcSL_OPCODE
2553 gcSL_ADDSAT, /* 0x5C */ /* Integer only. */
2554 gcSL_SUBSAT, /* 0x5D */ /* Integer only. */
2555 gcSL_MULSAT, /* 0x5E */ /* Integer only. */
2556+ gcSL_DP2, /* 0x5F */
2557 gcSL_MAXOPCODE
2558 }
2559 gcSL_OPCODE;
2560@@ -474,6 +473,9 @@ struct _gcsHINT
2561
2562 gctBOOL clipW;
2563
2564+ /* Flag whether or not the shader has a KILL instruction. */
2565+ gctBOOL hasKill;
2566+
2567 /* Element count. */
2568 gctUINT32 elementCount;
2569
2570@@ -495,12 +497,18 @@ struct _gcsHINT
2571 /* Balance maximum. */
2572 gctUINT32 balanceMax;
2573
2574+ /* Auto-shift balancing. */
2575+ gctBOOL autoShift;
2576+
2577 /* Flag whether the PS outputs the depth value or not. */
2578 gctBOOL psHasFragDepthOut;
2579
2580 /* Flag whether the ThreadWalker is in PS. */
2581 gctBOOL threadWalkerInPS;
2582
2583+ /* HW reg number for position of VS */
2584+ gctUINT32 hwRegNoOfSIVPos;
2585+
2586 #if gcdALPHA_KILL_IN_SHADER
2587 /* States to set when alpha kill is enabled. */
2588 gctUINT32 killStateAddress;
2589@@ -687,12 +695,12 @@ typedef enum _gceSHADER_FLAGS
2590 gcvSHADER_USE_ALPHA_KILL = 0x100,
2591 #endif
2592
2593-#if ADD_PRE_ROTATION_TO_VS
2594+#if gcdPRE_ROTATION && (ANDROID_SDK_VERSION >= 14)
2595 gcvSHADER_VS_PRE_ROTATION = 0x200,
2596 #endif
2597
2598 #if TEMP_INLINE_ALL_EXPANSION
2599- gcvSHADER_INLINE_ALL_EXPANSION = 0x200,
2600+ gcvSHADER_INLINE_ALL_EXPANSION = 0x400,
2601 #endif
2602 }
2603 gceSHADER_FLAGS;
2604@@ -827,6 +835,7 @@ typedef struct _gcOPTIMIZER_OPTION
2605 gctBOOL dumpOptimizerVerbose; /* dump result IR in each optimization phase */
2606 gctBOOL dumpBEGenertedCode; /* dump generated machine code */
2607 gctBOOL dumpBEVerbose; /* dump BE tree and optimization detail */
2608+ gctBOOL dumpBEFinalIR; /* dump BE final IR */
2609
2610 /* Code generation */
2611
2612@@ -945,6 +954,8 @@ extern gcOPTIMIZER_OPTION theOptimizerOption;
2613 gcmOPT_DUMP_CODEGEN_VERBOSE() )
2614 #define gcmOPT_DUMP_CODEGEN_VERBOSE() \
2615 (gcmGetOptimizerOption()->dumpBEVerbose != 0)
2616+#define gcmOPT_DUMP_FINAL_IR() \
2617+ (gcmGetOptimizerOption()->dumpBEFinalIR != 0)
2618
2619 #define gcmOPT_SET_DUMP_SHADER_SRC(v) \
2620 gcmGetOptimizerOption()->dumpShaderSource = (v)
2621@@ -1064,6 +1075,13 @@ typedef struct _gcNPOT_PATCH_PARAM
2622 gctINT texDimension; /* 2 or 3 */
2623 }gcNPOT_PATCH_PARAM, *gcNPOT_PATCH_PARAM_PTR;
2624
2625+typedef struct _gcZBIAS_PATCH_PARAM
2626+{
2627+ /* Driver uses this to program uniform that designating zbias */
2628+ gctINT uniformAddr;
2629+ gctINT channel;
2630+}gcZBIAS_PATCH_PARAM, *gcZBIAS_PATCH_PARAM_PTR;
2631+
2632 void
2633 gcGetOptionFromEnv(
2634 IN OUT gcOPTIMIZER_OPTION * Option
2635@@ -1556,6 +1574,43 @@ gcSHADER_AddUniform(
2636 OUT gcUNIFORM * Uniform
2637 );
2638
2639+/*******************************************************************************
2640+** gcSHADER_AddPreRotationUniform
2641+********************************************************************************
2642+**
2643+** Add an uniform to a gcSHADER object.
2644+**
2645+** INPUT:
2646+**
2647+** gcSHADER Shader
2648+** Pointer to a gcSHADER object.
2649+**
2650+** gctCONST_STRING Name
2651+** Name of the uniform to add.
2652+**
2653+** gcSHADER_TYPE Type
2654+** Type of the uniform to add.
2655+**
2656+** gctSIZE_T Length
2657+** Array length of the uniform to add. 'Length' must be at least 1.
2658+**
2659+** gctINT col
2660+** Which uniform.
2661+**
2662+** OUTPUT:
2663+**
2664+** gcUNIFORM * Uniform
2665+** Pointer to a variable receiving the gcUNIFORM object pointer.
2666+*/
2667+gceSTATUS
2668+gcSHADER_AddPreRotationUniform(
2669+ IN gcSHADER Shader,
2670+ IN gctCONST_STRING Name,
2671+ IN gcSHADER_TYPE Type,
2672+ IN gctSIZE_T Length,
2673+ IN gctINT col,
2674+ OUT gcUNIFORM * Uniform
2675+ );
2676
2677 /*******************************************************************************
2678 ** gcSHADER_AddUniformEx
2679@@ -1677,6 +1732,28 @@ gcSHADER_GetUniformCount(
2680 );
2681
2682 /*******************************************************************************
2683+** gcSHADER_GetPreRotationUniform
2684+********************************************************************************
2685+**
2686+** Get the preRotate Uniform.
2687+**
2688+** INPUT:
2689+**
2690+** gcSHADER Shader
2691+** Pointer to a gcSHADER object.
2692+**
2693+** OUTPUT:
2694+**
2695+** gcUNIFORM ** pUniform
2696+** Pointer to a preRotation uniforms array.
2697+*/
2698+gceSTATUS
2699+gcSHADER_GetPreRotationUniform(
2700+ IN gcSHADER Shader,
2701+ OUT gcUNIFORM ** pUniform
2702+ );
2703+
2704+/*******************************************************************************
2705 ** gcSHADER_GetUniform
2706 ********************************************************************************
2707 **
2708@@ -3438,6 +3515,34 @@ gcUNIFORM_SetValueF(
2709 );
2710
2711 /*******************************************************************************
2712+** gcUNIFORM_ProgramF
2713+**
2714+** Set the value of a uniform in floating point.
2715+**
2716+** INPUT:
2717+**
2718+** gctUINT32 Address
2719+** Address of Uniform.
2720+**
2721+** gctSIZE_T Row/Col
2722+**
2723+** const gctFLOAT * Value
2724+** Pointer to a buffer holding the floating point values for the
2725+** uniform.
2726+**
2727+** OUTPUT:
2728+**
2729+** Nothing.
2730+*/
2731+gceSTATUS
2732+gcUNIFORM_ProgramF(
2733+ IN gctUINT32 Address,
2734+ IN gctSIZE_T Row,
2735+ IN gctSIZE_T Col,
2736+ IN const gctFLOAT * Value
2737+ );
2738+
2739+/*******************************************************************************
2740 ** gcUNIFORM_GetModelViewProjMatrix
2741 ********************************************************************************
2742 **
2743@@ -3912,6 +4017,23 @@ gcRecompileShaders(
2744 IN gctUINT32 *SamplerWrapS,
2745 IN gctUINT32 *SamplerWrapT
2746 );
2747+
2748+gceSTATUS
2749+gcRecompileDepthBias(
2750+ IN gcoHAL Hal,
2751+ IN gcMACHINECODE_PTR pVsMachineCode,
2752+ /*Recompile variables*/
2753+ IN OUT gctPOINTER *ppRecompileStateBuffer,
2754+ IN OUT gctSIZE_T *pRecompileStateBufferSize,
2755+ IN OUT gcsHINT_PTR *ppRecompileHints,
2756+ /* natvie state*/
2757+ IN gctPOINTER pNativeStateBuffer,
2758+ IN gctSIZE_T nativeStateBufferSize,
2759+ IN gcsHINT_PTR pNativeHints,
2760+ OUT gctINT * uniformAddr,
2761+ OUT gctINT * uniformChannel
2762+ );
2763+
2764 /*******************************************************************************
2765 ** gcSaveProgram
2766 ********************************************************************************
2767@@ -4138,6 +4260,16 @@ gcSHADER_PatchNPOTForMachineCode(
2768 IN OUT gcsHINT_PTR pHints /* User needs copy original hints to this one, then passed this one in */
2769 );
2770
2771+gceSTATUS
2772+gcSHADER_PatchZBiasForMachineCodeVS(
2773+ IN gcMACHINECODE_PTR pMachineCode,
2774+ IN OUT gcZBIAS_PATCH_PARAM_PTR pPatchParam,
2775+ IN gctUINT hwSupportedInstCount,
2776+ OUT gctPOINTER* ppCmdBuffer,
2777+ OUT gctUINT32* pByteSizeOfCmdBuffer,
2778+ IN OUT gcsHINT_PTR pHints /* User needs copy original hints to this one, then passed this one in */
2779+ );
2780+
2781 #ifdef __cplusplus
2782 }
2783 #endif
2784diff --git a/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_driver.h b/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_driver.h
2785index b056c52..fc8c395 100644
2786--- a/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_driver.h
2787+++ b/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_driver.h
2788@@ -166,6 +166,12 @@ typedef enum _gceHAL_COMMAND_CODES
2789
2790 /* Reset time stamp. */
2791 gcvHAL_QUERY_RESET_TIME_STAMP,
2792+
2793+ /* Sync point operations. */
2794+ gcvHAL_SYNC_POINT,
2795+
2796+ /* Create native fence and return its fd. */
2797+ gcvHAL_CREATE_NATIVE_FENCE,
2798 }
2799 gceHAL_COMMAND_CODES;
2800
2801@@ -723,6 +729,10 @@ typedef struct _gcsHAL_INTERFACE
2802 /* gcvHAL_READ_ALL_PROFILE_REGISTERS */
2803 struct _gcsHAL_READ_ALL_PROFILE_REGISTERS
2804 {
2805+#if VIVANTE_PROFILER_CONTEXT
2806+ /* Context buffer object gckCONTEXT. Just a name. */
2807+ IN gctUINT32 context;
2808+#endif
2809 /* Data read. */
2810 OUT gcsPROFILER_COUNTERS counters;
2811 }
2812@@ -978,6 +988,33 @@ typedef struct _gcsHAL_INTERFACE
2813 OUT gctUINT64 timeStamp;
2814 }
2815 QueryResetTimeStamp;
2816+
2817+ struct _gcsHAL_SYNC_POINT
2818+ {
2819+ /* Command. */
2820+ gceSYNC_POINT_COMMAND_CODES command;
2821+
2822+ /* Sync point. */
2823+ IN OUT gctUINT64 syncPoint;
2824+
2825+ /* From where. */
2826+ IN gceKERNEL_WHERE fromWhere;
2827+
2828+ /* Signaled state. */
2829+ OUT gctBOOL state;
2830+ }
2831+ SyncPoint;
2832+
2833+ struct _gcsHAL_CREATE_NATIVE_FENCE
2834+ {
2835+ /* Signal id to dup. */
2836+ IN gctUINT64 syncPoint;
2837+
2838+ /* Native fence file descriptor. */
2839+ OUT gctINT fenceFD;
2840+
2841+ }
2842+ CreateNativeFence;
2843 }
2844 u;
2845 }
2846diff --git a/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_engine.h b/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_engine.h
2847index 8481375..3fb2fe4 100644
2848--- a/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_engine.h
2849+++ b/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_engine.h
2850@@ -323,6 +323,15 @@ gcoSURF_Resolve(
2851 IN gcoSURF DestSurface
2852 );
2853
2854+gceSTATUS
2855+gcoSURF_IsHWResolveable(
2856+ IN gcoSURF SrcSurface,
2857+ IN gcoSURF DestSurface,
2858+ IN gcsPOINT_PTR SrcOrigin,
2859+ IN gcsPOINT_PTR DestOrigin,
2860+ IN gcsPOINT_PTR RectSize
2861+ );
2862+
2863 /* Resolve rectangular area of a surface. */
2864 gceSTATUS
2865 gcoSURF_ResolveRect(
2866@@ -345,6 +354,11 @@ gcoSURF_IsRenderable(
2867 IN gcoSURF Surface
2868 );
2869
2870+gceSTATUS
2871+gcoSURF_IsFormatRenderableAsRT(
2872+ IN gcoSURF Surface
2873+ );
2874+
2875 #if gcdSYNC
2876 gceSTATUS
2877 gcoSURF_GetFence(
2878@@ -1006,6 +1020,7 @@ typedef struct _gcsALPHA_INFO
2879 gctBOOL test;
2880 gceCOMPARE compare;
2881 gctUINT8 reference;
2882+ gctFLOAT floatReference;
2883
2884 /* Alpha blending states. */
2885 gctBOOL blend;
2886@@ -1040,7 +1055,8 @@ gco3D_SetAlphaCompare(
2887 gceSTATUS
2888 gco3D_SetAlphaReference(
2889 IN gco3D Engine,
2890- IN gctUINT8 Reference
2891+ IN gctUINT8 Reference,
2892+ IN gctFLOAT FloatReference
2893 );
2894
2895 /* Set alpha test reference in fixed point. */
2896@@ -1504,6 +1520,19 @@ gcoTEXTURE_UploadSub(
2897 IN gceSURF_FORMAT Format
2898 );
2899
2900+/* Upload YUV data to an gcoTEXTURE object. */
2901+gceSTATUS
2902+gcoTEXTURE_UploadYUV(
2903+ IN gcoTEXTURE Texture,
2904+ IN gceTEXTURE_FACE Face,
2905+ IN gctUINT Width,
2906+ IN gctUINT Height,
2907+ IN gctUINT Slice,
2908+ IN gctPOINTER Memory[3],
2909+ IN gctINT Stride[3],
2910+ IN gceSURF_FORMAT Format
2911+ );
2912+
2913 /* Upload compressed data to an gcoTEXTURE object. */
2914 gceSTATUS
2915 gcoTEXTURE_UploadCompressed(
2916@@ -1621,6 +1650,13 @@ gcoTEXTURE_QueryCaps(
2917 );
2918
2919 gceSTATUS
2920+gcoTEXTURE_GetTiling(
2921+ IN gcoTEXTURE Texture,
2922+ IN gctINT preferLevel,
2923+ OUT gceTILING * Tiling
2924+ );
2925+
2926+gceSTATUS
2927 gcoTEXTURE_GetClosestFormat(
2928 IN gcoHAL Hal,
2929 IN gceSURF_FORMAT InFormat,
2930@@ -2001,6 +2037,14 @@ gcoHAL_SetSharedInfo(
2931 IN gctSIZE_T Bytes
2932 );
2933
2934+#if VIVANTE_PROFILER_CONTEXT
2935+gceSTATUS
2936+gcoHARDWARE_GetContext(
2937+ IN gcoHARDWARE Hardware,
2938+ OUT gctUINT32 * Context
2939+ );
2940+#endif
2941+
2942 #ifdef __cplusplus
2943 }
2944 #endif
2945diff --git a/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_enum.h b/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_enum.h
2946index a1d9ae5..8e3c2f8 100644
2947--- a/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_enum.h
2948+++ b/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_enum.h
2949@@ -146,10 +146,26 @@ typedef enum _gceFEATURE
2950 gcvFEATURE_FRUSTUM_CLIP_FIX,
2951 gcvFEATURE_TEXTURE_LINEAR,
2952 gcvFEATURE_TEXTURE_YUV_ASSEMBLER,
2953+ gcvFEATURE_SHADER_HAS_INSTRUCTION_CACHE,
2954 gcvFEATURE_DYNAMIC_FREQUENCY_SCALING,
2955 gcvFEATURE_BUGFIX15,
2956+ gcvFEATURE_2D_GAMMA,
2957+ gcvFEATURE_2D_COLOR_SPACE_CONVERSION,
2958+ gcvFEATURE_2D_SUPER_TILE_VERSION,
2959 gcvFEATURE_2D_MIRROR_EXTENSION,
2960+ gcvFEATURE_2D_SUPER_TILE_V1,
2961+ gcvFEATURE_2D_SUPER_TILE_V2,
2962+ gcvFEATURE_2D_SUPER_TILE_V3,
2963+ gcvFEATURE_2D_MULTI_SOURCE_BLT_EX2,
2964 gcvFEATURE_ELEMENT_INDEX_UINT,
2965+ gcvFEATURE_2D_COMPRESSION,
2966+ gcvFEATURE_2D_OPF_YUV_OUTPUT,
2967+ gcvFEATURE_2D_MULTI_SRC_BLT_TO_UNIFIED_DST_RECT,
2968+ gcvFEATURE_2D_YUV_MODE,
2969+ gcvFEATURE_DECOMPRESS_Z16,
2970+ gcvFEATURE_LINEAR_RENDER_TARGET,
2971+ gcvFEATURE_BUG_FIXES8,
2972+ gcvFEATURE_HALTI2,
2973 }
2974 gceFEATURE;
2975
2976@@ -203,11 +219,14 @@ typedef enum _gceSURF_TYPE
2977 gcvSURF_NO_VIDMEM = 0x200, /* Used to allocate surfaces with no underlying vidmem node.
2978 In Android, vidmem node is allocated by another process. */
2979 gcvSURF_CACHEABLE = 0x400, /* Used to allocate a cacheable surface */
2980-#if gcdANDROID_UNALIGNED_LINEAR_COMPOSITION_ADJUST
2981 gcvSURF_FLIP = 0x800, /* The Resolve Target the will been flip resolve from RT */
2982-#endif
2983 gcvSURF_TILE_STATUS_DIRTY = 0x1000, /* Init tile status to all dirty */
2984
2985+ gcvSURF_LINEAR = 0x2000,
2986+
2987+ gcvSURF_TEXTURE_LINEAR = gcvSURF_TEXTURE
2988+ | gcvSURF_LINEAR,
2989+
2990 gcvSURF_RENDER_TARGET_NO_TILE_STATUS = gcvSURF_RENDER_TARGET
2991 | gcvSURF_NO_TILE_STATUS,
2992
2993@@ -217,6 +236,9 @@ typedef enum _gceSURF_TYPE
2994 gcvSURF_DEPTH_NO_TILE_STATUS = gcvSURF_DEPTH
2995 | gcvSURF_NO_TILE_STATUS,
2996
2997+ gcvSURF_DEPTH_TS_DIRTY = gcvSURF_DEPTH
2998+ | gcvSURF_TILE_STATUS_DIRTY,
2999+
3000 /* Supported surface types with no vidmem node. */
3001 gcvSURF_BITMAP_NO_VIDMEM = gcvSURF_BITMAP
3002 | gcvSURF_NO_VIDMEM,
3003@@ -231,10 +253,8 @@ typedef enum _gceSURF_TYPE
3004 gcvSURF_CACHEABLE_BITMAP = gcvSURF_BITMAP
3005 | gcvSURF_CACHEABLE,
3006
3007-#if gcdANDROID_UNALIGNED_LINEAR_COMPOSITION_ADJUST
3008 gcvSURF_FLIP_BITMAP = gcvSURF_BITMAP
3009 | gcvSURF_FLIP,
3010-#endif
3011 }
3012 gceSURF_TYPE;
3013
3014@@ -263,6 +283,9 @@ typedef enum _gceSURF_ROTATION
3015 gcvSURF_270_DEGREE,
3016 gcvSURF_FLIP_X,
3017 gcvSURF_FLIP_Y,
3018+
3019+ gcvSURF_POST_FLIP_X = 0x40000000,
3020+ gcvSURF_POST_FLIP_Y = 0x80000000,
3021 }
3022 gceSURF_ROTATION;
3023
3024@@ -622,21 +645,16 @@ gce2D_PORTER_DUFF_RULE;
3025 typedef enum _gce2D_YUV_COLOR_MODE
3026 {
3027 gcv2D_YUV_601= 0,
3028- gcv2D_YUV_709
3029-}
3030-gce2D_YUV_COLOR_MODE;
3031+ gcv2D_YUV_709,
3032+ gcv2D_YUV_USER_DEFINED,
3033+ gcv2D_YUV_USER_DEFINED_CLAMP,
3034
3035-/* 2D Rotation and flipping. */
3036-typedef enum _gce2D_ORIENTATION
3037-{
3038- gcv2D_0_DEGREE = 0,
3039- gcv2D_90_DEGREE,
3040- gcv2D_180_DEGREE,
3041- gcv2D_270_DEGREE,
3042- gcv2D_X_FLIP,
3043- gcv2D_Y_FLIP
3044+ /* Default setting is for src. gcv2D_YUV_DST
3045+ can be ORed to set dst.
3046+ */
3047+ gcv2D_YUV_DST = 0x80000000,
3048 }
3049-gce2D_ORIENTATION;
3050+gce2D_YUV_COLOR_MODE;
3051
3052 typedef enum _gce2D_COMMAND
3053 {
3054@@ -656,21 +674,39 @@ typedef enum _gce2D_TILE_STATUS_CONFIG
3055 gcv2D_TSC_ENABLE = 0x00000001,
3056 gcv2D_TSC_COMPRESSED = 0x00000002,
3057 gcv2D_TSC_DOWN_SAMPLER = 0x00000004,
3058+ gcv2D_TSC_2D_COMPRESSED = 0x00000008,
3059 }
3060 gce2D_TILE_STATUS_CONFIG;
3061
3062 typedef enum _gce2D_QUERY
3063 {
3064- gcv2D_QUERY_RGB_ADDRESS_MAX_ALIGN = 0,
3065- gcv2D_QUERY_RGB_STRIDE_MAX_ALIGN,
3066- gcv2D_QUERY_YUV_ADDRESS_MAX_ALIGN,
3067- gcv2D_QUERY_YUV_STRIDE_MAX_ALIGN,
3068+ gcv2D_QUERY_RGB_ADDRESS_MIN_ALIGN = 0,
3069+ gcv2D_QUERY_RGB_STRIDE_MIN_ALIGN,
3070+ gcv2D_QUERY_YUV_ADDRESS_MIN_ALIGN,
3071+ gcv2D_QUERY_YUV_STRIDE_MIN_ALIGN,
3072 }
3073 gce2D_QUERY;
3074
3075+typedef enum _gce2D_SUPER_TILE_VERSION
3076+{
3077+ gcv2D_SUPER_TILE_VERSION_V1 = 1,
3078+ gcv2D_SUPER_TILE_VERSION_V2 = 2,
3079+ gcv2D_SUPER_TILE_VERSION_V3 = 3,
3080+}
3081+gce2D_SUPER_TILE_VERSION;
3082+
3083 typedef enum _gce2D_STATE
3084 {
3085 gcv2D_STATE_SPECIAL_FILTER_MIRROR_MODE = 1,
3086+ gcv2D_STATE_SUPER_TILE_VERSION,
3087+ gcv2D_STATE_EN_GAMMA,
3088+ gcv2D_STATE_DE_GAMMA,
3089+ gcv2D_STATE_MULTI_SRC_BLIT_UNIFIED_DST_RECT,
3090+
3091+ gcv2D_STATE_ARRAY_EN_GAMMA = 0x10001,
3092+ gcv2D_STATE_ARRAY_DE_GAMMA,
3093+ gcv2D_STATE_ARRAY_CSC_YUV_TO_RGB,
3094+ gcv2D_STATE_ARRAY_CSC_RGB_TO_YUV,
3095 }
3096 gce2D_STATE;
3097
3098@@ -809,6 +845,15 @@ typedef enum _gceUSER_SIGNAL_COMMAND_CODES
3099 }
3100 gceUSER_SIGNAL_COMMAND_CODES;
3101
3102+/* Sync point command codes. */
3103+typedef enum _gceSYNC_POINT_COMMAND_CODES
3104+{
3105+ gcvSYNC_POINT_CREATE,
3106+ gcvSYNC_POINT_DESTROY,
3107+ gcvSYNC_POINT_SIGNAL,
3108+}
3109+gceSYNC_POINT_COMMAND_CODES;
3110+
3111 /* Event locations. */
3112 typedef enum _gceKERNEL_WHERE
3113 {
3114@@ -848,6 +893,44 @@ typedef enum _gceDEBUG_MESSAGE_TYPE
3115 }
3116 gceDEBUG_MESSAGE_TYPE;
3117
3118+typedef enum _gceSPECIAL_HINT
3119+{
3120+ gceSPECIAL_HINT0,
3121+ gceSPECIAL_HINT1,
3122+ gceSPECIAL_HINT2,
3123+ gceSPECIAL_HINT3,
3124+ /* For disable dynamic stream/index */
3125+ gceSPECIAL_HINT4
3126+}
3127+gceSPECIAL_HINT;
3128+
3129+typedef enum _gceMACHINECODE
3130+{
3131+ gcvMACHINECODE_HOVERJET0 = 0x0,
3132+ gcvMACHINECODE_HOVERJET1 ,
3133+
3134+ gcvMACHINECODE_TAIJI0 ,
3135+ gcvMACHINECODE_TAIJI1 ,
3136+ gcvMACHINECODE_TAIJI2 ,
3137+
3138+ gcvMACHINECODE_ANTUTU0 ,
3139+
3140+ gcvMACHINECODE_GLB27_RELEASE_0,
3141+ gcvMACHINECODE_GLB27_RELEASE_1,
3142+
3143+ gcvMACHINECODE_WAVESCAPE0 ,
3144+ gcvMACHINECODE_WAVESCAPE1 ,
3145+
3146+ gcvMACHINECODE_NENAMARKV2_4_0 ,
3147+ gcvMACHINECODE_NENAMARKV2_4_1 ,
3148+
3149+ gcvMACHINECODE_GLB25_RELEASE_0,
3150+ gcvMACHINECODE_GLB25_RELEASE_1,
3151+ gcvMACHINECODE_GLB25_RELEASE_2,
3152+}
3153+gceMACHINECODE;
3154+
3155+
3156 /******************************************************************************\
3157 ****************************** Object Declarations *****************************
3158 \******************************************************************************/
3159diff --git a/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_options.h b/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_options.h
3160index 9e2a8db..b53b618 100644
3161--- a/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_options.h
3162+++ b/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_options.h
3163@@ -46,7 +46,7 @@
3164 This define enables the profiler.
3165 */
3166 #ifndef VIVANTE_PROFILER
3167-# define VIVANTE_PROFILER 0
3168+# define VIVANTE_PROFILER 1
3169 #endif
3170
3171 #ifndef VIVANTE_PROFILER_PERDRAW
3172@@ -54,6 +54,15 @@
3173 #endif
3174
3175 /*
3176+ VIVANTE_PROFILER_CONTEXT
3177+
3178+ This define enables the profiler according to each hw context.
3179+*/
3180+#ifndef VIVANTE_PROFILER_CONTEXT
3181+# define VIVANTE_PROFILER_CONTEXT 1
3182+#endif
3183+
3184+/*
3185 gcdUSE_VG
3186
3187 Enable VG HAL layer (only for GC350).
3188@@ -729,7 +738,24 @@
3189 Use linear buffer for GPU apps so HWC can do 2D composition.
3190 */
3191 #ifndef gcdGPU_LINEAR_BUFFER_ENABLED
3192-# define gcdGPU_LINEAR_BUFFER_ENABLED 0
3193+# define gcdGPU_LINEAR_BUFFER_ENABLED 1
3194+#endif
3195+
3196+/*
3197+ gcdENABLE_RENDER_INTO_WINDOW
3198+
3199+ Enable Render-Into-Window (ie, No-Resolve) feature on android.
3200+ NOTE that even if enabled, it still depends on hardware feature and
3201+ android application behavior. When hardware feature or application
3202+ behavior can not support render into window mode, it will fail back
3203+ to normal mode.
3204+ When Render-Into-Window is finally used, window back buffer of android
3205+ applications will be allocated matching render target tiling format.
3206+ Otherwise buffer tiling is decided by the above option
3207+ 'gcdGPU_LINEAR_BUFFER_ENABLED'.
3208+*/
3209+#ifndef gcdENABLE_RENDER_INTO_WINDOW
3210+# define gcdENABLE_RENDER_INTO_WINDOW 1
3211 #endif
3212
3213 /*
3214@@ -758,7 +784,11 @@
3215 #endif
3216
3217 #ifndef gcdANDROID_UNALIGNED_LINEAR_COMPOSITION_ADJUST
3218-# define gcdANDROID_UNALIGNED_LINEAR_COMPOSITION_ADJUST 0
3219+# ifdef ANDROID
3220+# define gcdANDROID_UNALIGNED_LINEAR_COMPOSITION_ADJUST 1
3221+# else
3222+# define gcdANDROID_UNALIGNED_LINEAR_COMPOSITION_ADJUST 0
3223+# endif
3224 #endif
3225
3226 #ifndef gcdENABLE_PE_DITHER_FIX
3227@@ -800,6 +830,10 @@
3228 # define gcdDISALBE_EARLY_EARLY_Z 1
3229 #endif
3230
3231+#ifndef gcdSHADER_SRC_BY_MACHINECODE
3232+# define gcdSHADER_SRC_BY_MACHINECODE 1
3233+#endif
3234+
3235 /*
3236 gcdLINK_QUEUE_SIZE
3237
3238@@ -849,11 +883,20 @@
3239 #define gcdUSE_NPOT_PATCH 1
3240 #endif
3241
3242-
3243 #ifndef gcdSYNC
3244 # define gcdSYNC 1
3245 #endif
3246
3247+#ifndef gcdENABLE_SPECIAL_HINT3
3248+# define gcdENABLE_SPECIAL_HINT3 1
3249+#endif
3250+
3251+#if defined(ANDROID)
3252+#ifndef gcdPRE_ROTATION
3253+# define gcdPRE_ROTATION 1
3254+#endif
3255+#endif
3256+
3257 /*
3258 gcdDVFS
3259
3260@@ -866,4 +909,39 @@
3261 # define gcdDVFS_POLLING_TIME (gcdDVFS_ANAYLSE_WINDOW * 4)
3262 #endif
3263
3264+/*
3265+ gcdANDROID_NATIVE_FENCE_SYNC
3266+
3267+ Enable android native fence sync. It is introduced since jellybean-4.2.
3268+ Depends on linux kernel option: CONFIG_SYNC.
3269+
3270+ 0: Disabled
3271+ 1: Build framework for native fence sync feature, and EGL extension
3272+ 2: Enable async swap buffers for client
3273+ * Native fence sync for client 'queueBuffer' in EGL, which is
3274+ 'acquireFenceFd' for layer in compositor side.
3275+ 3. Enable async hwcomposer composition.
3276+ * 'releaseFenceFd' for layer in compositor side, which is native
3277+ fence sync when client 'dequeueBuffer'
3278+ * Native fence sync for compositor 'queueBuffer' in EGL, which is
3279+ 'acquireFenceFd' for framebuffer target for DC
3280+ */
3281+#ifndef gcdANDROID_NATIVE_FENCE_SYNC
3282+# define gcdANDROID_NATIVE_FENCE_SYNC 0
3283+#endif
3284+
3285+#ifndef gcdFORCE_MIPMAP
3286+# define gcdFORCE_MIPMAP 0
3287+#endif
3288+
3289+/*
3290+ gcdFORCE_GAL_LOAD_TWICE
3291+
3292+ When non-zero, each thread except the main one will load libGAL.so twice to avoid potential segmetantion fault when app using dlopen/dlclose.
3293+ If threads exit arbitrarily, libGAL.so may not unload until the process quit.
3294+ */
3295+#ifndef gcdFORCE_GAL_LOAD_TWICE
3296+# define gcdFORCE_GAL_LOAD_TWICE 0
3297+#endif
3298+
3299 #endif /* __gc_hal_options_h_ */
3300diff --git a/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_profiler.h b/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_profiler.h
3301index 3e450ba..aed73aa 100644
3302--- a/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_profiler.h
3303+++ b/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_profiler.h
3304@@ -45,509 +45,115 @@ extern "C" {
3305 #define gcdNEW_PROFILER_FILE 1
3306 #endif
3307
3308-/* OpenGL ES11 API IDs. */
3309-#define ES11_ACTIVETEXTURE 1
3310-#define ES11_ALPHAFUNC (ES11_ACTIVETEXTURE + 1)
3311-#define ES11_ALPHAFUNCX (ES11_ALPHAFUNC + 1)
3312-#define ES11_BINDBUFFER (ES11_ALPHAFUNCX + 1)
3313-#define ES11_BINDTEXTURE (ES11_BINDBUFFER + 1)
3314-#define ES11_BLENDFUNC (ES11_BINDTEXTURE + 1)
3315-#define ES11_BUFFERDATA (ES11_BLENDFUNC + 1)
3316-#define ES11_BUFFERSUBDATA (ES11_BUFFERDATA + 1)
3317-#define ES11_CLEAR (ES11_BUFFERSUBDATA + 1)
3318-#define ES11_CLEARCOLOR (ES11_CLEAR + 1)
3319-#define ES11_CLEARCOLORX (ES11_CLEARCOLOR + 1)
3320-#define ES11_CLEARDEPTHF (ES11_CLEARCOLORX + 1)
3321-#define ES11_CLEARDEPTHX (ES11_CLEARDEPTHF + 1)
3322-#define ES11_CLEARSTENCIL (ES11_CLEARDEPTHX + 1)
3323-#define ES11_CLIENTACTIVETEXTURE (ES11_CLEARSTENCIL + 1)
3324-#define ES11_CLIPPLANEF (ES11_CLIENTACTIVETEXTURE + 1)
3325-#define ES11_CLIPPLANEX (ES11_CLIPPLANEF + 1)
3326-#define ES11_COLOR4F (ES11_CLIPPLANEX + 1)
3327-#define ES11_COLOR4UB (ES11_COLOR4F + 1)
3328-#define ES11_COLOR4X (ES11_COLOR4UB + 1)
3329-#define ES11_COLORMASK (ES11_COLOR4X + 1)
3330-#define ES11_COLORPOINTER (ES11_COLORMASK + 1)
3331-#define ES11_COMPRESSEDTEXIMAGE2D (ES11_COLORPOINTER + 1)
3332-#define ES11_COMPRESSEDTEXSUBIMAGE2D (ES11_COMPRESSEDTEXIMAGE2D + 1)
3333-#define ES11_COPYTEXIMAGE2D (ES11_COMPRESSEDTEXSUBIMAGE2D + 1)
3334-#define ES11_COPYTEXSUBIMAGE2D (ES11_COPYTEXIMAGE2D + 1)
3335-#define ES11_CULLFACE (ES11_COPYTEXSUBIMAGE2D + 1)
3336-#define ES11_DELETEBUFFERS (ES11_CULLFACE + 1)
3337-#define ES11_DELETETEXTURES (ES11_DELETEBUFFERS + 1)
3338-#define ES11_DEPTHFUNC (ES11_DELETETEXTURES + 1)
3339-#define ES11_DEPTHMASK (ES11_DEPTHFUNC + 1)
3340-#define ES11_DEPTHRANGEF (ES11_DEPTHMASK + 1)
3341-#define ES11_DEPTHRANGEX (ES11_DEPTHRANGEF + 1)
3342-#define ES11_DISABLE (ES11_DEPTHRANGEX + 1)
3343-#define ES11_DISABLECLIENTSTATE (ES11_DISABLE + 1)
3344-#define ES11_DRAWARRAYS (ES11_DISABLECLIENTSTATE + 1)
3345-#define ES11_DRAWELEMENTS (ES11_DRAWARRAYS + 1)
3346-#define ES11_ENABLE (ES11_DRAWELEMENTS + 1)
3347-#define ES11_ENABLECLIENTSTATE (ES11_ENABLE + 1)
3348-#define ES11_FINISH (ES11_ENABLECLIENTSTATE + 1)
3349-#define ES11_FLUSH (ES11_FINISH + 1)
3350-#define ES11_FOGF (ES11_FLUSH + 1)
3351-#define ES11_FOGFV (ES11_FOGF + 1)
3352-#define ES11_FOGX (ES11_FOGFV + 1)
3353-#define ES11_FOGXV (ES11_FOGX + 1)
3354-#define ES11_FRONTFACE (ES11_FOGXV + 1)
3355-#define ES11_FRUSTUMF (ES11_FRONTFACE + 1)
3356-#define ES11_FRUSTUMX (ES11_FRUSTUMF + 1)
3357-#define ES11_GENBUFFERS (ES11_FRUSTUMX + 1)
3358-#define ES11_GENTEXTURES (ES11_GENBUFFERS + 1)
3359-#define ES11_GETBOOLEANV (ES11_GENTEXTURES + 1)
3360-#define ES11_GETBUFFERPARAMETERIV (ES11_GETBOOLEANV + 1)
3361-#define ES11_GETCLIPPLANEF (ES11_GETBUFFERPARAMETERIV + 1)
3362-#define ES11_GETCLIPPLANEX (ES11_GETCLIPPLANEF + 1)
3363-#define ES11_GETERROR (ES11_GETCLIPPLANEX + 1)
3364-#define ES11_GETFIXEDV (ES11_GETERROR + 1)
3365-#define ES11_GETFLOATV (ES11_GETFIXEDV + 1)
3366-#define ES11_GETINTEGERV (ES11_GETFLOATV + 1)
3367-#define ES11_GETLIGHTFV (ES11_GETINTEGERV + 1)
3368-#define ES11_GETLIGHTXV (ES11_GETLIGHTFV + 1)
3369-#define ES11_GETMATERIALFV (ES11_GETLIGHTXV + 1)
3370-#define ES11_GETMATERIALXV (ES11_GETMATERIALFV + 1)
3371-#define ES11_GETPOINTERV (ES11_GETMATERIALXV + 1)
3372-#define ES11_GETSTRING (ES11_GETPOINTERV + 1)
3373-#define ES11_GETTEXENVFV (ES11_GETSTRING + 1)
3374-#define ES11_GETTEXENVIV (ES11_GETTEXENVFV + 1)
3375-#define ES11_GETTEXENVXV (ES11_GETTEXENVIV + 1)
3376-#define ES11_GETTEXPARAMETERFV (ES11_GETTEXENVXV + 1)
3377-#define ES11_GETTEXPARAMETERIV (ES11_GETTEXPARAMETERFV + 1)
3378-#define ES11_GETTEXPARAMETERXV (ES11_GETTEXPARAMETERIV + 1)
3379-#define ES11_HINT (ES11_GETTEXPARAMETERXV + 1)
3380-#define ES11_ISBUFFER (ES11_HINT + 1)
3381-#define ES11_ISENABLED (ES11_ISBUFFER + 1)
3382-#define ES11_ISTEXTURE (ES11_ISENABLED + 1)
3383-#define ES11_LIGHTF (ES11_ISTEXTURE + 1)
3384-#define ES11_LIGHTFV (ES11_LIGHTF + 1)
3385-#define ES11_LIGHTMODELF (ES11_LIGHTFV + 1)
3386-#define ES11_LIGHTMODELFV (ES11_LIGHTMODELF + 1)
3387-#define ES11_LIGHTMODELX (ES11_LIGHTMODELFV + 1)
3388-#define ES11_LIGHTMODELXV (ES11_LIGHTMODELX + 1)
3389-#define ES11_LIGHTX (ES11_LIGHTMODELXV + 1)
3390-#define ES11_LIGHTXV (ES11_LIGHTX + 1)
3391-#define ES11_LINEWIDTH (ES11_LIGHTXV + 1)
3392-#define ES11_LINEWIDTHX (ES11_LINEWIDTH + 1)
3393-#define ES11_LOADIDENTITY (ES11_LINEWIDTHX + 1)
3394-#define ES11_LOADMATRIXF (ES11_LOADIDENTITY + 1)
3395-#define ES11_LOADMATRIXX (ES11_LOADMATRIXF + 1)
3396-#define ES11_LOGICOP (ES11_LOADMATRIXX + 1)
3397-#define ES11_MATERIALF (ES11_LOGICOP + 1)
3398-#define ES11_MATERIALFV (ES11_MATERIALF + 1)
3399-#define ES11_MATERIALX (ES11_MATERIALFV + 1)
3400-#define ES11_MATERIALXV (ES11_MATERIALX + 1)
3401-#define ES11_MATRIXMODE (ES11_MATERIALXV + 1)
3402-#define ES11_MULTITEXCOORD4F (ES11_MATRIXMODE + 1)
3403-#define ES11_MULTITEXCOORD4X (ES11_MULTITEXCOORD4F + 1)
3404-#define ES11_MULTMATRIXF (ES11_MULTITEXCOORD4X + 1)
3405-#define ES11_MULTMATRIXX (ES11_MULTMATRIXF + 1)
3406-#define ES11_NORMAL3F (ES11_MULTMATRIXX + 1)
3407-#define ES11_NORMAL3X (ES11_NORMAL3F + 1)
3408-#define ES11_NORMALPOINTER (ES11_NORMAL3X + 1)
3409-#define ES11_ORTHOF (ES11_NORMALPOINTER + 1)
3410-#define ES11_ORTHOX (ES11_ORTHOF + 1)
3411-#define ES11_PIXELSTOREI (ES11_ORTHOX + 1)
3412-#define ES11_POINTPARAMETERF (ES11_PIXELSTOREI + 1)
3413-#define ES11_POINTPARAMETERFV (ES11_POINTPARAMETERF + 1)
3414-#define ES11_POINTPARAMETERX (ES11_POINTPARAMETERFV + 1)
3415-#define ES11_POINTPARAMETERXV (ES11_POINTPARAMETERX + 1)
3416-#define ES11_POINTSIZE (ES11_POINTPARAMETERXV + 1)
3417-#define ES11_POINTSIZEX (ES11_POINTSIZE + 1)
3418-#define ES11_POLYGONOFFSET (ES11_POINTSIZEX + 1)
3419-#define ES11_POLYGONOFFSETX (ES11_POLYGONOFFSET + 1)
3420-#define ES11_POPMATRIX (ES11_POLYGONOFFSETX + 1)
3421-#define ES11_PUSHMATRIX (ES11_POPMATRIX + 1)
3422-#define ES11_READPIXELS (ES11_PUSHMATRIX + 1)
3423-#define ES11_ROTATEF (ES11_READPIXELS + 1)
3424-#define ES11_ROTATEX (ES11_ROTATEF + 1)
3425-#define ES11_SAMPLECOVERAGE (ES11_ROTATEX + 1)
3426-#define ES11_SAMPLECOVERAGEX (ES11_SAMPLECOVERAGE + 1)
3427-#define ES11_SCALEF (ES11_SAMPLECOVERAGEX + 1)
3428-#define ES11_SCALEX (ES11_SCALEF + 1)
3429-#define ES11_SCISSOR (ES11_SCALEX + 1)
3430-#define ES11_SHADEMODEL (ES11_SCISSOR + 1)
3431-#define ES11_STENCILFUNC (ES11_SHADEMODEL + 1)
3432-#define ES11_STENCILMASK (ES11_STENCILFUNC + 1)
3433-#define ES11_STENCILOP (ES11_STENCILMASK + 1)
3434-#define ES11_TEXCOORDPOINTER (ES11_STENCILOP + 1)
3435-#define ES11_TEXENVF (ES11_TEXCOORDPOINTER + 1)
3436-#define ES11_TEXENVFV (ES11_TEXENVF + 1)
3437-#define ES11_TEXENVI (ES11_TEXENVFV + 1)
3438-#define ES11_TEXENVIV (ES11_TEXENVI + 1)
3439-#define ES11_TEXENVX (ES11_TEXENVIV + 1)
3440-#define ES11_TEXENVXV (ES11_TEXENVX + 1)
3441-#define ES11_TEXIMAGE2D (ES11_TEXENVXV + 1)
3442-#define ES11_TEXPARAMETERF (ES11_TEXIMAGE2D + 1)
3443-#define ES11_TEXPARAMETERFV (ES11_TEXPARAMETERF + 1)
3444-#define ES11_TEXPARAMETERI (ES11_TEXPARAMETERFV + 1)
3445-#define ES11_TEXPARAMETERIV (ES11_TEXPARAMETERI + 1)
3446-#define ES11_TEXPARAMETERX (ES11_TEXPARAMETERIV + 1)
3447-#define ES11_TEXPARAMETERXV (ES11_TEXPARAMETERX + 1)
3448-#define ES11_TEXSUBIMAGE2D (ES11_TEXPARAMETERXV + 1)
3449-#define ES11_TRANSLATEF (ES11_TEXSUBIMAGE2D + 1)
3450-#define ES11_TRANSLATEX (ES11_TRANSLATEF + 1)
3451-#define ES11_VERTEXPOINTER (ES11_TRANSLATEX + 1)
3452-#define ES11_VIEWPORT (ES11_VERTEXPOINTER + 1)
3453-#define ES11_BLENDEQUATIONOES (ES11_VIEWPORT + 1)
3454-#define ES11_BLENDFUNCSEPERATEOES (ES11_BLENDEQUATIONOES + 1)
3455-#define ES11_BLENDEQUATIONSEPARATEOES (ES11_BLENDFUNCSEPERATEOES + 1)
3456-#define ES11_GLMAPBUFFEROES (ES11_BLENDEQUATIONSEPARATEOES + 1)
3457-#define ES11_GLUNMAPBUFFEROES (ES11_GLMAPBUFFEROES + 1)
3458-#define ES11_GLGETBUFFERPOINTERVOES (ES11_GLUNMAPBUFFEROES + 1)
3459-#define ES11_CALLS (ES11_GLGETBUFFERPOINTERVOES + 1)
3460-#define ES11_DRAWCALLS (ES11_CALLS + 1)
3461-#define ES11_STATECHANGECALLS (ES11_DRAWCALLS + 1)
3462-#define ES11_POINTCOUNT (ES11_STATECHANGECALLS + 1)
3463-#define ES11_LINECOUNT (ES11_POINTCOUNT + 1)
3464-#define ES11_TRIANGLECOUNT (ES11_LINECOUNT + 1)
3465-
3466-/* OpenGL ES2X API IDs. */
3467-#define ES20_ACTIVETEXTURE 1
3468-#define ES20_ATTACHSHADER (ES20_ACTIVETEXTURE + 1)
3469-#define ES20_BINDATTRIBLOCATION (ES20_ATTACHSHADER + 1)
3470-#define ES20_BINDBUFFER (ES20_BINDATTRIBLOCATION + 1)
3471-#define ES20_BINDFRAMEBUFFER (ES20_BINDBUFFER + 1)
3472-#define ES20_BINDRENDERBUFFER (ES20_BINDFRAMEBUFFER + 1)
3473-#define ES20_BINDTEXTURE (ES20_BINDRENDERBUFFER + 1)
3474-#define ES20_BLENDCOLOR (ES20_BINDTEXTURE + 1)
3475-#define ES20_BLENDEQUATION (ES20_BLENDCOLOR + 1)
3476-#define ES20_BLENDEQUATIONSEPARATE (ES20_BLENDEQUATION + 1)
3477-#define ES20_BLENDFUNC (ES20_BLENDEQUATIONSEPARATE + 1)
3478-#define ES20_BLENDFUNCSEPARATE (ES20_BLENDFUNC + 1)
3479-#define ES20_BUFFERDATA (ES20_BLENDFUNCSEPARATE + 1)
3480-#define ES20_BUFFERSUBDATA (ES20_BUFFERDATA + 1)
3481-#define ES20_CHECKFRAMEBUFFERSTATUS (ES20_BUFFERSUBDATA + 1)
3482-#define ES20_CLEAR (ES20_CHECKFRAMEBUFFERSTATUS + 1)
3483-#define ES20_CLEARCOLOR (ES20_CLEAR + 1)
3484-#define ES20_CLEARDEPTHF (ES20_CLEARCOLOR + 1)
3485-#define ES20_CLEARSTENCIL (ES20_CLEARDEPTHF + 1)
3486-#define ES20_COLORMASK (ES20_CLEARSTENCIL + 1)
3487-#define ES20_COMPILESHADER (ES20_COLORMASK + 1)
3488-#define ES20_COMPRESSEDTEXIMAGE2D (ES20_COMPILESHADER + 1)
3489-#define ES20_COMPRESSEDTEXSUBIMAGE2D (ES20_COMPRESSEDTEXIMAGE2D + 1)
3490-#define ES20_COPYTEXIMAGE2D (ES20_COMPRESSEDTEXSUBIMAGE2D + 1)
3491-#define ES20_COPYTEXSUBIMAGE2D (ES20_COPYTEXIMAGE2D + 1)
3492-#define ES20_CREATEPROGRAM (ES20_COPYTEXSUBIMAGE2D + 1)
3493-#define ES20_CREATESHADER (ES20_CREATEPROGRAM + 1)
3494-#define ES20_CULLFACE (ES20_CREATESHADER + 1)
3495-#define ES20_DELETEBUFFERS (ES20_CULLFACE + 1)
3496-#define ES20_DELETEFRAMEBUFFERS (ES20_DELETEBUFFERS + 1)
3497-#define ES20_DELETEPROGRAM (ES20_DELETEFRAMEBUFFERS + 1)
3498-#define ES20_DELETERENDERBUFFERS (ES20_DELETEPROGRAM + 1)
3499-#define ES20_DELETESHADER (ES20_DELETERENDERBUFFERS + 1)
3500-#define ES20_DELETETEXTURES (ES20_DELETESHADER + 1)
3501-#define ES20_DEPTHFUNC (ES20_DELETETEXTURES + 1)
3502-#define ES20_DEPTHMASK (ES20_DEPTHFUNC + 1)
3503-#define ES20_DEPTHRANGEF (ES20_DEPTHMASK + 1)
3504-#define ES20_DETACHSHADER (ES20_DEPTHRANGEF + 1)
3505-#define ES20_DISABLE (ES20_DETACHSHADER + 1)
3506-#define ES20_DISABLEVERTEXATTRIBARRAY (ES20_DISABLE + 1)
3507-#define ES20_DRAWARRAYS (ES20_DISABLEVERTEXATTRIBARRAY + 1)
3508-#define ES20_DRAWELEMENTS (ES20_DRAWARRAYS + 1)
3509-#define ES20_ENABLE (ES20_DRAWELEMENTS + 1)
3510-#define ES20_ENABLEVERTEXATTRIBARRAY (ES20_ENABLE + 1)
3511-#define ES20_FINISH (ES20_ENABLEVERTEXATTRIBARRAY + 1)
3512-#define ES20_FLUSH (ES20_FINISH + 1)
3513-#define ES20_FRAMEBUFFERRENDERBUFFER (ES20_FLUSH + 1)
3514-#define ES20_FRAMEBUFFERTEXTURE2D (ES20_FRAMEBUFFERRENDERBUFFER + 1)
3515-#define ES20_FRONTFACE (ES20_FRAMEBUFFERTEXTURE2D + 1)
3516-#define ES20_GENBUFFERS (ES20_FRONTFACE + 1)
3517-#define ES20_GENERATEMIPMAP (ES20_GENBUFFERS + 1)
3518-#define ES20_GENFRAMEBUFFERS (ES20_GENERATEMIPMAP + 1)
3519-#define ES20_GENRENDERBUFFERS (ES20_GENFRAMEBUFFERS + 1)
3520-#define ES20_GENTEXTURES (ES20_GENRENDERBUFFERS + 1)
3521-#define ES20_GETACTIVEATTRIB (ES20_GENTEXTURES + 1)
3522-#define ES20_GETACTIVEUNIFORM (ES20_GETACTIVEATTRIB + 1)
3523-#define ES20_GETATTACHEDSHADERS (ES20_GETACTIVEUNIFORM + 1)
3524-#define ES20_GETATTRIBLOCATION (ES20_GETATTACHEDSHADERS + 1)
3525-#define ES20_GETBOOLEANV (ES20_GETATTRIBLOCATION + 1)
3526-#define ES20_GETBUFFERPARAMETERIV (ES20_GETBOOLEANV + 1)
3527-#define ES20_GETERROR (ES20_GETBUFFERPARAMETERIV + 1)
3528-#define ES20_GETFLOATV (ES20_GETERROR + 1)
3529-#define ES20_GETFRAMEBUFFERATTACHMENTPARAMETERIV (ES20_GETFLOATV + 1)
3530-#define ES20_GETINTEGERV (ES20_GETFRAMEBUFFERATTACHMENTPARAMETERIV + 1)
3531-#define ES20_GETPROGRAMIV (ES20_GETINTEGERV + 1)
3532-#define ES20_GETPROGRAMINFOLOG (ES20_GETPROGRAMIV + 1)
3533-#define ES20_GETRENDERBUFFERPARAMETERIV (ES20_GETPROGRAMINFOLOG + 1)
3534-#define ES20_GETSHADERIV (ES20_GETRENDERBUFFERPARAMETERIV + 1)
3535-#define ES20_GETSHADERINFOLOG (ES20_GETSHADERIV + 1)
3536-#define ES20_GETSHADERPRECISIONFORMAT (ES20_GETSHADERINFOLOG + 1)
3537-#define ES20_GETSHADERSOURCE (ES20_GETSHADERPRECISIONFORMAT + 1)
3538-#define ES20_GETSTRING (ES20_GETSHADERSOURCE + 1)
3539-#define ES20_GETTEXPARAMETERFV (ES20_GETSTRING + 1)
3540-#define ES20_GETTEXPARAMETERIV (ES20_GETTEXPARAMETERFV + 1)
3541-#define ES20_GETUNIFORMFV (ES20_GETTEXPARAMETERIV + 1)
3542-#define ES20_GETUNIFORMIV (ES20_GETUNIFORMFV + 1)
3543-#define ES20_GETUNIFORMLOCATION (ES20_GETUNIFORMIV + 1)
3544-#define ES20_GETVERTEXATTRIBFV (ES20_GETUNIFORMLOCATION + 1)
3545-#define ES20_GETVERTEXATTRIBIV (ES20_GETVERTEXATTRIBFV + 1)
3546-#define ES20_GETVERTEXATTRIBPOINTERV (ES20_GETVERTEXATTRIBIV + 1)
3547-#define ES20_HINT (ES20_GETVERTEXATTRIBPOINTERV + 1)
3548-#define ES20_ISBUFFER (ES20_HINT + 1)
3549-#define ES20_ISENABLED (ES20_ISBUFFER + 1)
3550-#define ES20_ISFRAMEBUFFER (ES20_ISENABLED + 1)
3551-#define ES20_ISPROGRAM (ES20_ISFRAMEBUFFER + 1)
3552-#define ES20_ISRENDERBUFFER (ES20_ISPROGRAM + 1)
3553-#define ES20_ISSHADER (ES20_ISRENDERBUFFER + 1)
3554-#define ES20_ISTEXTURE (ES20_ISSHADER + 1)
3555-#define ES20_LINEWIDTH (ES20_ISTEXTURE + 1)
3556-#define ES20_LINKPROGRAM (ES20_LINEWIDTH + 1)
3557-#define ES20_PIXELSTOREI (ES20_LINKPROGRAM + 1)
3558-#define ES20_POLYGONOFFSET (ES20_PIXELSTOREI + 1)
3559-#define ES20_READPIXELS (ES20_POLYGONOFFSET + 1)
3560-#define ES20_RELEASESHADERCOMPILER (ES20_READPIXELS + 1)
3561-#define ES20_RENDERBUFFERSTORAGE (ES20_RELEASESHADERCOMPILER + 1)
3562-#define ES20_SAMPLECOVERAGE (ES20_RENDERBUFFERSTORAGE + 1)
3563-#define ES20_SCISSOR (ES20_SAMPLECOVERAGE + 1)
3564-#define ES20_SHADERBINARY (ES20_SCISSOR + 1)
3565-#define ES20_SHADERSOURCE (ES20_SHADERBINARY + 1)
3566-#define ES20_STENCILFUNC (ES20_SHADERSOURCE + 1)
3567-#define ES20_STENCILFUNCSEPARATE (ES20_STENCILFUNC + 1)
3568-#define ES20_STENCILMASK (ES20_STENCILFUNCSEPARATE + 1)
3569-#define ES20_STENCILMASKSEPARATE (ES20_STENCILMASK + 1)
3570-#define ES20_STENCILOP (ES20_STENCILMASKSEPARATE + 1)
3571-#define ES20_STENCILOPSEPARATE (ES20_STENCILOP + 1)
3572-#define ES20_TEXIMAGE2D (ES20_STENCILOPSEPARATE + 1)
3573-#define ES20_TEXPARAMETERF (ES20_TEXIMAGE2D + 1)
3574-#define ES20_TEXPARAMETERFV (ES20_TEXPARAMETERF + 1)
3575-#define ES20_TEXPARAMETERI (ES20_TEXPARAMETERFV + 1)
3576-#define ES20_TEXPARAMETERIV (ES20_TEXPARAMETERI + 1)
3577-#define ES20_TEXSUBIMAGE2D (ES20_TEXPARAMETERIV + 1)
3578-#define ES20_UNIFORM1F (ES20_TEXSUBIMAGE2D + 1)
3579-#define ES20_UNIFORM1FV (ES20_UNIFORM1F + 1)
3580-#define ES20_UNIFORM1I (ES20_UNIFORM1FV + 1)
3581-#define ES20_UNIFORM1IV (ES20_UNIFORM1I + 1)
3582-#define ES20_UNIFORM2F (ES20_UNIFORM1IV + 1)
3583-#define ES20_UNIFORM2FV (ES20_UNIFORM2F + 1)
3584-#define ES20_UNIFORM2I (ES20_UNIFORM2FV + 1)
3585-#define ES20_UNIFORM2IV (ES20_UNIFORM2I + 1)
3586-#define ES20_UNIFORM3F (ES20_UNIFORM2IV + 1)
3587-#define ES20_UNIFORM3FV (ES20_UNIFORM3F + 1)
3588-#define ES20_UNIFORM3I (ES20_UNIFORM3FV + 1)
3589-#define ES20_UNIFORM3IV (ES20_UNIFORM3I + 1)
3590-#define ES20_UNIFORM4F (ES20_UNIFORM3IV + 1)
3591-#define ES20_UNIFORM4FV (ES20_UNIFORM4F + 1)
3592-#define ES20_UNIFORM4I (ES20_UNIFORM4FV + 1)
3593-#define ES20_UNIFORM4IV (ES20_UNIFORM4I + 1)
3594-#define ES20_UNIFORMMATRIX2FV (ES20_UNIFORM4IV + 1)
3595-#define ES20_UNIFORMMATRIX3FV (ES20_UNIFORMMATRIX2FV + 1)
3596-#define ES20_UNIFORMMATRIX4FV (ES20_UNIFORMMATRIX3FV + 1)
3597-#define ES20_USEPROGRAM (ES20_UNIFORMMATRIX4FV + 1)
3598-#define ES20_VALIDATEPROGRAM (ES20_USEPROGRAM + 1)
3599-#define ES20_VERTEXATTRIB1F (ES20_VALIDATEPROGRAM + 1)
3600-#define ES20_VERTEXATTRIB1FV (ES20_VERTEXATTRIB1F + 1)
3601-#define ES20_VERTEXATTRIB2F (ES20_VERTEXATTRIB1FV + 1)
3602-#define ES20_VERTEXATTRIB2FV (ES20_VERTEXATTRIB2F + 1)
3603-#define ES20_VERTEXATTRIB3F (ES20_VERTEXATTRIB2FV + 1)
3604-#define ES20_VERTEXATTRIB3FV (ES20_VERTEXATTRIB3F + 1)
3605-#define ES20_VERTEXATTRIB4F (ES20_VERTEXATTRIB3FV + 1)
3606-#define ES20_VERTEXATTRIB4FV (ES20_VERTEXATTRIB4F + 1)
3607-#define ES20_VERTEXATTRIBPOINTER (ES20_VERTEXATTRIB4FV + 1)
3608-#define ES20_VIEWPORT (ES20_VERTEXATTRIBPOINTER + 1)
3609-#define ES20_GETPROGRAMBINARYOES (ES20_VIEWPORT + 1)
3610-#define ES20_PROGRAMBINARYOES (ES20_GETPROGRAMBINARYOES + 1)
3611-#define ES20_TEXIMAGE3DOES (ES20_PROGRAMBINARYOES + 1)
3612-#define ES20_TEXSUBIMAGE3DOES (ES20_TEXIMAGE3DOES + 1)
3613-#define ES20_COPYSUBIMAGE3DOES (ES20_TEXSUBIMAGE3DOES + 1)
3614-#define ES20_COMPRESSEDTEXIMAGE3DOES (ES20_COPYSUBIMAGE3DOES + 1)
3615-#define ES20_COMPRESSEDTEXSUBIMAGE3DOES (ES20_COMPRESSEDTEXIMAGE3DOES + 1)
3616-#define ES20_FRAMEBUFFERTEXTURE3DOES (ES20_COMPRESSEDTEXSUBIMAGE3DOES + 1)
3617-#define ES20_BINDVERTEXARRAYOES (ES20_FRAMEBUFFERTEXTURE3DOES + 1)
3618-#define ES20_GENVERTEXARRAYOES (ES20_BINDVERTEXARRAYOES + 1)
3619-#define ES20_ISVERTEXARRAYOES (ES20_GENVERTEXARRAYOES + 1)
3620-#define ES20_DELETEVERTEXARRAYOES (ES20_ISVERTEXARRAYOES + 1)
3621-#define ES20_GLMAPBUFFEROES (ES20_DELETEVERTEXARRAYOES + 1)
3622-#define ES20_GLUNMAPBUFFEROES (ES20_GLMAPBUFFEROES + 1)
3623-#define ES20_GLGETBUFFERPOINTERVOES (ES20_GLUNMAPBUFFEROES + 1)
3624-#define ES20_DISCARDFRAMEBUFFEREXT (ES20_GLGETBUFFERPOINTERVOES + 1)
3625-#define ES20_CALLS (ES20_DISCARDFRAMEBUFFEREXT + 1)
3626-#define ES20_DRAWCALLS (ES20_CALLS + 1)
3627-#define ES20_STATECHANGECALLS (ES20_DRAWCALLS + 1)
3628-#define ES20_POINTCOUNT (ES20_STATECHANGECALLS + 1)
3629-#define ES20_LINECOUNT (ES20_POINTCOUNT + 1)
3630-#define ES20_TRIANGLECOUNT (ES20_LINECOUNT + 1)
3631-
3632-/* OpenVG API IDs. */
3633-#define VG11_APPENDPATH 1
3634-#define VG11_APPENDPATHDATA (VG11_APPENDPATH + 1)
3635-#define VG11_CHILDIMAGE (VG11_APPENDPATHDATA + 1)
3636-#define VG11_CLEAR (VG11_CHILDIMAGE + 1)
3637-#define VG11_CLEARGLYPH (VG11_CLEAR + 1)
3638-#define VG11_CLEARIMAGE (VG11_CLEARGLYPH + 1)
3639-#define VG11_CLEARPATH (VG11_CLEARIMAGE + 1)
3640-#define VG11_COLORMATRIX (VG11_CLEARPATH + 1)
3641-#define VG11_CONVOLVE (VG11_COLORMATRIX + 1)
3642-#define VG11_COPYIMAGE (VG11_CONVOLVE + 1)
3643-#define VG11_COPYMASK (VG11_COPYIMAGE + 1)
3644-#define VG11_COPYPIXELS (VG11_COPYMASK + 1)
3645-#define VG11_CREATEFONT (VG11_COPYPIXELS + 1)
3646-#define VG11_CREATEIMAGE (VG11_CREATEFONT + 1)
3647-#define VG11_CREATEMASKLAYER (VG11_CREATEIMAGE + 1)
3648-#define VG11_CREATEPAINT (VG11_CREATEMASKLAYER + 1)
3649-#define VG11_CREATEPATH (VG11_CREATEPAINT + 1)
3650-#define VG11_DESTROYFONT (VG11_CREATEPATH + 1)
3651-#define VG11_DESTROYIMAGE (VG11_DESTROYFONT + 1)
3652-#define VG11_DESTROYMASKLAYER (VG11_DESTROYIMAGE + 1)
3653-#define VG11_DESTROYPAINT (VG11_DESTROYMASKLAYER + 1)
3654-#define VG11_DESTROYPATH (VG11_DESTROYPAINT + 1)
3655-#define VG11_DRAWGLYPH (VG11_DESTROYPATH + 1)
3656-#define VG11_DRAWGLYPHS (VG11_DRAWGLYPH + 1)
3657-#define VG11_DRAWIMAGE (VG11_DRAWGLYPHS + 1)
3658-#define VG11_DRAWPATH (VG11_DRAWIMAGE + 1)
3659-#define VG11_FILLMASKLAYER (VG11_DRAWPATH + 1)
3660-#define VG11_FINISH (VG11_FILLMASKLAYER + 1)
3661-#define VG11_FLUSH (VG11_FINISH + 1)
3662-#define VG11_GAUSSIANBLUR (VG11_FLUSH + 1)
3663-#define VG11_GETCOLOR (VG11_GAUSSIANBLUR + 1)
3664-#define VG11_GETERROR (VG11_GETCOLOR + 1)
3665-#define VG11_GETF (VG11_GETERROR + 1)
3666-#define VG11_GETFV (VG11_GETF + 1)
3667-#define VG11_GETI (VG11_GETFV + 1)
3668-#define VG11_GETIMAGESUBDATA (VG11_GETI + 1)
3669-#define VG11_GETIV (VG11_GETIMAGESUBDATA + 1)
3670-#define VG11_GETMATRIX (VG11_GETIV + 1)
3671-#define VG11_GETPAINT (VG11_GETMATRIX + 1)
3672-#define VG11_GETPARAMETERF (VG11_GETPAINT + 1)
3673-#define VG11_GETPARAMETERFV (VG11_GETPARAMETERF + 1)
3674-#define VG11_GETPARAMETERI (VG11_GETPARAMETERFV + 1)
3675-#define VG11_GETPARAMETERIV (VG11_GETPARAMETERI + 1)
3676-#define VG11_GETPARAMETERVECTORSIZE (VG11_GETPARAMETERIV + 1)
3677-#define VG11_GETPARENT (VG11_GETPARAMETERVECTORSIZE + 1)
3678-#define VG11_GETPATHCAPABILITIES (VG11_GETPARENT + 1)
3679-#define VG11_GETPIXELS (VG11_GETPATHCAPABILITIES + 1)
3680-#define VG11_GETSTRING (VG11_GETPIXELS + 1)
3681-#define VG11_GETVECTORSIZE (VG11_GETSTRING + 1)
3682-#define VG11_HARDWAREQUERY (VG11_GETVECTORSIZE + 1)
3683-#define VG11_IMAGESUBDATA (VG11_HARDWAREQUERY + 1)
3684-#define VG11_INTERPOLATEPATH (VG11_IMAGESUBDATA + 1)
3685-#define VG11_LOADIDENTITY (VG11_INTERPOLATEPATH + 1)
3686-#define VG11_LOADMATRIX (VG11_LOADIDENTITY + 1)
3687-#define VG11_LOOKUP (VG11_LOADMATRIX + 1)
3688-#define VG11_LOOKUPSINGLE (VG11_LOOKUP + 1)
3689-#define VG11_MASK (VG11_LOOKUPSINGLE + 1)
3690-#define VG11_MODIFYPATHCOORDS (VG11_MASK + 1)
3691-#define VG11_MULTMATRIX (VG11_MODIFYPATHCOORDS + 1)
3692-#define VG11_PAINTPATTERN (VG11_MULTMATRIX + 1)
3693-#define VG11_PATHBOUNDS (VG11_PAINTPATTERN + 1)
3694-#define VG11_PATHLENGTH (VG11_PATHBOUNDS + 1)
3695-#define VG11_PATHTRANSFORMEDBOUNDS (VG11_PATHLENGTH + 1)
3696-#define VG11_POINTALONGPATH (VG11_PATHTRANSFORMEDBOUNDS + 1)
3697-#define VG11_READPIXELS (VG11_POINTALONGPATH + 1)
3698-#define VG11_REMOVEPATHCAPABILITIES (VG11_READPIXELS + 1)
3699-#define VG11_RENDERTOMASK (VG11_REMOVEPATHCAPABILITIES + 1)
3700-#define VG11_ROTATE (VG11_RENDERTOMASK + 1)
3701-#define VG11_SCALE (VG11_ROTATE + 1)
3702-#define VG11_SEPARABLECONVOLVE (VG11_SCALE + 1)
3703-#define VG11_SETCOLOR (VG11_SEPARABLECONVOLVE + 1)
3704-#define VG11_SETF (VG11_SETCOLOR + 1)
3705-#define VG11_SETFV (VG11_SETF + 1)
3706-#define VG11_SETGLYPHTOIMAGE (VG11_SETFV + 1)
3707-#define VG11_SETGLYPHTOPATH (VG11_SETGLYPHTOIMAGE + 1)
3708-#define VG11_SETI (VG11_SETGLYPHTOPATH + 1)
3709-#define VG11_SETIV (VG11_SETI + 1)
3710-#define VG11_SETPAINT (VG11_SETIV + 1)
3711-#define VG11_SETPARAMETERF (VG11_SETPAINT + 1)
3712-#define VG11_SETPARAMETERFV (VG11_SETPARAMETERF + 1)
3713-#define VG11_SETPARAMETERI (VG11_SETPARAMETERFV + 1)
3714-#define VG11_SETPARAMETERIV (VG11_SETPARAMETERI + 1)
3715-#define VG11_SETPIXELS (VG11_SETPARAMETERIV + 1)
3716-#define VG11_SHEAR (VG11_SETPIXELS + 1)
3717-#define VG11_TRANSFORMPATH (VG11_SHEAR + 1)
3718-#define VG11_TRANSLATE (VG11_TRANSFORMPATH + 1)
3719-#define VG11_WRITEPIXELS (VG11_TRANSLATE + 1)
3720-#define VG11_CALLS (VG11_WRITEPIXELS + 1)
3721-#define VG11_DRAWCALLS (VG11_CALLS + 1)
3722-#define VG11_STATECHANGECALLS (VG11_DRAWCALLS + 1)
3723-#define VG11_FILLCOUNT (VG11_STATECHANGECALLS + 1)
3724-#define VG11_STROKECOUNT (VG11_FILLCOUNT + 1)
3725+#define ES11_CALLS 151
3726+#define ES11_DRAWCALLS (ES11_CALLS + 1)
3727+#define ES11_STATECHANGECALLS (ES11_DRAWCALLS + 1)
3728+#define ES11_POINTCOUNT (ES11_STATECHANGECALLS + 1)
3729+#define ES11_LINECOUNT (ES11_POINTCOUNT + 1)
3730+#define ES11_TRIANGLECOUNT (ES11_LINECOUNT + 1)
3731+
3732+#define ES20_CALLS 159
3733+#define ES20_DRAWCALLS (ES20_CALLS + 1)
3734+#define ES20_STATECHANGECALLS (ES20_DRAWCALLS + 1)
3735+#define ES20_POINTCOUNT (ES20_STATECHANGECALLS + 1)
3736+#define ES20_LINECOUNT (ES20_POINTCOUNT + 1)
3737+#define ES20_TRIANGLECOUNT (ES20_LINECOUNT + 1)
3738+
3739+#define VG11_CALLS 88
3740+#define VG11_DRAWCALLS (VG11_CALLS + 1)
3741+#define VG11_STATECHANGECALLS (VG11_DRAWCALLS + 1)
3742+#define VG11_FILLCOUNT (VG11_STATECHANGECALLS + 1)
3743+#define VG11_STROKECOUNT (VG11_FILLCOUNT + 1)
3744 /* End of Driver API ID Definitions. */
3745
3746 /* HAL & MISC IDs. */
3747-#define HAL_VERTBUFNEWBYTEALLOC 1
3748-#define HAL_VERTBUFTOTALBYTEALLOC (HAL_VERTBUFNEWBYTEALLOC + 1)
3749-#define HAL_VERTBUFNEWOBJALLOC (HAL_VERTBUFTOTALBYTEALLOC + 1)
3750-#define HAL_VERTBUFTOTALOBJALLOC (HAL_VERTBUFNEWOBJALLOC + 1)
3751-#define HAL_INDBUFNEWBYTEALLOC (HAL_VERTBUFTOTALOBJALLOC + 1)
3752-#define HAL_INDBUFTOTALBYTEALLOC (HAL_INDBUFNEWBYTEALLOC + 1)
3753-#define HAL_INDBUFNEWOBJALLOC (HAL_INDBUFTOTALBYTEALLOC + 1)
3754-#define HAL_INDBUFTOTALOBJALLOC (HAL_INDBUFNEWOBJALLOC + 1)
3755-#define HAL_TEXBUFNEWBYTEALLOC (HAL_INDBUFTOTALOBJALLOC + 1)
3756-#define HAL_TEXBUFTOTALBYTEALLOC (HAL_TEXBUFNEWBYTEALLOC + 1)
3757-#define HAL_TEXBUFNEWOBJALLOC (HAL_TEXBUFTOTALBYTEALLOC + 1)
3758-#define HAL_TEXBUFTOTALOBJALLOC (HAL_TEXBUFNEWOBJALLOC + 1)
3759-
3760-#define GPU_CYCLES 1
3761-#define GPU_READ64BYTE (GPU_CYCLES + 1)
3762-#define GPU_WRITE64BYTE (GPU_READ64BYTE + 1)
3763-#define GPU_TOTALCYCLES (GPU_WRITE64BYTE + 1)
3764-#define GPU_IDLECYCLES (GPU_TOTALCYCLES + 1)
3765-
3766-#define VS_INSTCOUNT 1
3767-#define VS_BRANCHINSTCOUNT (VS_INSTCOUNT + 1)
3768-#define VS_TEXLDINSTCOUNT (VS_BRANCHINSTCOUNT + 1)
3769-#define VS_RENDEREDVERTCOUNT (VS_TEXLDINSTCOUNT + 1)
3770-
3771-#define PS_INSTCOUNT 1
3772-#define PS_BRANCHINSTCOUNT (PS_INSTCOUNT + 1)
3773-#define PS_TEXLDINSTCOUNT (PS_BRANCHINSTCOUNT + 1)
3774-#define PS_RENDEREDPIXCOUNT (PS_TEXLDINSTCOUNT + 1)
3775-
3776-#define PA_INVERTCOUNT 1
3777-#define PA_INPRIMCOUNT (PA_INVERTCOUNT + 1)
3778-#define PA_OUTPRIMCOUNT (PA_INPRIMCOUNT + 1)
3779-#define PA_DEPTHCLIPCOUNT (PA_OUTPRIMCOUNT + 1)
3780-#define PA_TRIVIALREJCOUNT (PA_DEPTHCLIPCOUNT + 1)
3781-#define PA_CULLCOUNT (PA_TRIVIALREJCOUNT + 1)
3782-
3783-#define SE_TRIANGLECOUNT 1
3784-#define SE_LINECOUNT (SE_TRIANGLECOUNT + 1)
3785-
3786-#define RA_VALIDPIXCOUNT 1
3787-#define RA_TOTALQUADCOUNT (RA_VALIDPIXCOUNT + 1)
3788-#define RA_VALIDQUADCOUNTEZ (RA_TOTALQUADCOUNT + 1)
3789-#define RA_TOTALPRIMCOUNT (RA_VALIDQUADCOUNTEZ + 1)
3790-#define RA_PIPECACHEMISSCOUNT (RA_TOTALPRIMCOUNT + 1)
3791-#define RA_PREFCACHEMISSCOUNT (RA_PIPECACHEMISSCOUNT + 1)
3792-#define RA_EEZCULLCOUNT (RA_PREFCACHEMISSCOUNT + 1)
3793-
3794-#define TX_TOTBILINEARREQ 1
3795-#define TX_TOTTRILINEARREQ (TX_TOTBILINEARREQ + 1)
3796-#define TX_TOTDISCARDTEXREQ (TX_TOTTRILINEARREQ + 1)
3797-#define TX_TOTTEXREQ (TX_TOTDISCARDTEXREQ + 1)
3798-#define TX_MEMREADCOUNT (TX_TOTTEXREQ + 1)
3799-#define TX_MEMREADIN8BCOUNT (TX_MEMREADCOUNT + 1)
3800-#define TX_CACHEMISSCOUNT (TX_MEMREADIN8BCOUNT + 1)
3801-#define TX_CACHEHITTEXELCOUNT (TX_CACHEMISSCOUNT + 1)
3802-#define TX_CACHEMISSTEXELCOUNT (TX_CACHEHITTEXELCOUNT + 1)
3803-
3804-#define PE_KILLEDBYCOLOR 1
3805-#define PE_KILLEDBYDEPTH (PE_KILLEDBYCOLOR + 1)
3806-#define PE_DRAWNBYCOLOR (PE_KILLEDBYDEPTH + 1)
3807-#define PE_DRAWNBYDEPTH (PE_DRAWNBYCOLOR + 1)
3808-
3809-#define MC_READREQ8BPIPE 1
3810-#define MC_READREQ8BIP (MC_READREQ8BPIPE + 1)
3811-#define MC_WRITEREQ8BPIPE (MC_READREQ8BIP + 1)
3812-
3813-#define AXI_READREQSTALLED 1
3814-#define AXI_WRITEREQSTALLED (AXI_READREQSTALLED + 1)
3815-#define AXI_WRITEDATASTALLED (AXI_WRITEREQSTALLED + 1)
3816-
3817-#define PVS_INSTRCOUNT 1
3818-#define PVS_ALUINSTRCOUNT (PVS_INSTRCOUNT + 1)
3819-#define PVS_TEXINSTRCOUNT (PVS_ALUINSTRCOUNT + 1)
3820-#define PVS_ATTRIBCOUNT (PVS_TEXINSTRCOUNT + 1)
3821-#define PVS_UNIFORMCOUNT (PVS_ATTRIBCOUNT + 1)
3822-#define PVS_FUNCTIONCOUNT (PVS_UNIFORMCOUNT + 1)
3823-
3824-#define PPS_INSTRCOUNT 1
3825-#define PPS_ALUINSTRCOUNT (PPS_INSTRCOUNT + 1)
3826-#define PPS_TEXINSTRCOUNT (PPS_ALUINSTRCOUNT + 1)
3827-#define PPS_ATTRIBCOUNT (PPS_TEXINSTRCOUNT + 1)
3828-#define PPS_UNIFORMCOUNT (PPS_ATTRIBCOUNT + 1)
3829-#define PPS_FUNCTIONCOUNT (PPS_UNIFORMCOUNT + 1)
3830+#define HAL_VERTBUFNEWBYTEALLOC 1
3831+#define HAL_VERTBUFTOTALBYTEALLOC (HAL_VERTBUFNEWBYTEALLOC + 1)
3832+#define HAL_VERTBUFNEWOBJALLOC (HAL_VERTBUFTOTALBYTEALLOC + 1)
3833+#define HAL_VERTBUFTOTALOBJALLOC (HAL_VERTBUFNEWOBJALLOC + 1)
3834+#define HAL_INDBUFNEWBYTEALLOC (HAL_VERTBUFTOTALOBJALLOC + 1)
3835+#define HAL_INDBUFTOTALBYTEALLOC (HAL_INDBUFNEWBYTEALLOC + 1)
3836+#define HAL_INDBUFNEWOBJALLOC (HAL_INDBUFTOTALBYTEALLOC + 1)
3837+#define HAL_INDBUFTOTALOBJALLOC (HAL_INDBUFNEWOBJALLOC + 1)
3838+#define HAL_TEXBUFNEWBYTEALLOC (HAL_INDBUFTOTALOBJALLOC + 1)
3839+#define HAL_TEXBUFTOTALBYTEALLOC (HAL_TEXBUFNEWBYTEALLOC + 1)
3840+#define HAL_TEXBUFNEWOBJALLOC (HAL_TEXBUFTOTALBYTEALLOC + 1)
3841+#define HAL_TEXBUFTOTALOBJALLOC (HAL_TEXBUFNEWOBJALLOC + 1)
3842+
3843+#define GPU_CYCLES 1
3844+#define GPU_READ64BYTE (GPU_CYCLES + 1)
3845+#define GPU_WRITE64BYTE (GPU_READ64BYTE + 1)
3846+#define GPU_TOTALCYCLES (GPU_WRITE64BYTE + 1)
3847+#define GPU_IDLECYCLES (GPU_TOTALCYCLES + 1)
3848+
3849+#define VS_INSTCOUNT 1
3850+#define VS_BRANCHINSTCOUNT (VS_INSTCOUNT + 1)
3851+#define VS_TEXLDINSTCOUNT (VS_BRANCHINSTCOUNT + 1)
3852+#define VS_RENDEREDVERTCOUNT (VS_TEXLDINSTCOUNT + 1)
3853+#define VS_SOURCE (VS_RENDEREDVERTCOUNT + 1)
3854+
3855+#define PS_INSTCOUNT 1
3856+#define PS_BRANCHINSTCOUNT (PS_INSTCOUNT + 1)
3857+#define PS_TEXLDINSTCOUNT (PS_BRANCHINSTCOUNT + 1)
3858+#define PS_RENDEREDPIXCOUNT (PS_TEXLDINSTCOUNT + 1)
3859+#define PS_SOURCE (PS_RENDEREDPIXCOUNT + 1)
3860+
3861+#define PA_INVERTCOUNT 1
3862+#define PA_INPRIMCOUNT (PA_INVERTCOUNT + 1)
3863+#define PA_OUTPRIMCOUNT (PA_INPRIMCOUNT + 1)
3864+#define PA_DEPTHCLIPCOUNT (PA_OUTPRIMCOUNT + 1)
3865+#define PA_TRIVIALREJCOUNT (PA_DEPTHCLIPCOUNT + 1)
3866+#define PA_CULLCOUNT (PA_TRIVIALREJCOUNT + 1)
3867+
3868+#define SE_TRIANGLECOUNT 1
3869+#define SE_LINECOUNT (SE_TRIANGLECOUNT + 1)
3870+
3871+#define RA_VALIDPIXCOUNT 1
3872+#define RA_TOTALQUADCOUNT (RA_VALIDPIXCOUNT + 1)
3873+#define RA_VALIDQUADCOUNTEZ (RA_TOTALQUADCOUNT + 1)
3874+#define RA_TOTALPRIMCOUNT (RA_VALIDQUADCOUNTEZ + 1)
3875+#define RA_PIPECACHEMISSCOUNT (RA_TOTALPRIMCOUNT + 1)
3876+#define RA_PREFCACHEMISSCOUNT (RA_PIPECACHEMISSCOUNT + 1)
3877+#define RA_EEZCULLCOUNT (RA_PREFCACHEMISSCOUNT + 1)
3878+
3879+#define TX_TOTBILINEARREQ 1
3880+#define TX_TOTTRILINEARREQ (TX_TOTBILINEARREQ + 1)
3881+#define TX_TOTDISCARDTEXREQ (TX_TOTTRILINEARREQ + 1)
3882+#define TX_TOTTEXREQ (TX_TOTDISCARDTEXREQ + 1)
3883+#define TX_MEMREADCOUNT (TX_TOTTEXREQ + 1)
3884+#define TX_MEMREADIN8BCOUNT (TX_MEMREADCOUNT + 1)
3885+#define TX_CACHEMISSCOUNT (TX_MEMREADIN8BCOUNT + 1)
3886+#define TX_CACHEHITTEXELCOUNT (TX_CACHEMISSCOUNT + 1)
3887+#define TX_CACHEMISSTEXELCOUNT (TX_CACHEHITTEXELCOUNT + 1)
3888+
3889+#define PE_KILLEDBYCOLOR 1
3890+#define PE_KILLEDBYDEPTH (PE_KILLEDBYCOLOR + 1)
3891+#define PE_DRAWNBYCOLOR (PE_KILLEDBYDEPTH + 1)
3892+#define PE_DRAWNBYDEPTH (PE_DRAWNBYCOLOR + 1)
3893+
3894+#define MC_READREQ8BPIPE 1
3895+#define MC_READREQ8BIP (MC_READREQ8BPIPE + 1)
3896+#define MC_WRITEREQ8BPIPE (MC_READREQ8BIP + 1)
3897+
3898+#define AXI_READREQSTALLED 1
3899+#define AXI_WRITEREQSTALLED (AXI_READREQSTALLED + 1)
3900+#define AXI_WRITEDATASTALLED (AXI_WRITEREQSTALLED + 1)
3901+
3902+#define PVS_INSTRCOUNT 1
3903+#define PVS_ALUINSTRCOUNT (PVS_INSTRCOUNT + 1)
3904+#define PVS_TEXINSTRCOUNT (PVS_ALUINSTRCOUNT + 1)
3905+#define PVS_ATTRIBCOUNT (PVS_TEXINSTRCOUNT + 1)
3906+#define PVS_UNIFORMCOUNT (PVS_ATTRIBCOUNT + 1)
3907+#define PVS_FUNCTIONCOUNT (PVS_UNIFORMCOUNT + 1)
3908+#define PVS_SOURCE (PVS_FUNCTIONCOUNT + 1)
3909+
3910+#define PPS_INSTRCOUNT 1
3911+#define PPS_ALUINSTRCOUNT (PPS_INSTRCOUNT + 1)
3912+#define PPS_TEXINSTRCOUNT (PPS_ALUINSTRCOUNT + 1)
3913+#define PPS_ATTRIBCOUNT (PPS_TEXINSTRCOUNT + 1)
3914+#define PPS_UNIFORMCOUNT (PPS_ATTRIBCOUNT + 1)
3915+#define PPS_FUNCTIONCOUNT (PPS_UNIFORMCOUNT + 1)
3916+#define PPS_SOURCE (PPS_FUNCTIONCOUNT + 1)
3917 /* End of MISC Counter IDs. */
3918
3919 #ifdef gcdNEW_PROFILER_FILE
3920@@ -578,8 +184,8 @@ extern "C" {
3921 #define VPG_ES11_TIME 0x170000
3922 #define VPG_ES20_TIME 0x180000
3923 #define VPG_FRAME 0x190000
3924-#define VPG_ES11_DRAW 0x200000
3925-#define VPG_ES20_DRAW 0x210000
3926+#define VPG_ES11_DRAW 0x200000
3927+#define VPG_ES20_DRAW 0x210000
3928 #define VPG_END 0xff0000
3929
3930 /* Info. */
3931@@ -592,7 +198,7 @@ extern "C" {
3932 #define VPC_INFOSCREENSIZE (VPC_INFODRIVERMODE + 1)
3933
3934 /* Counter Constants. */
3935-#define VPC_ELAPSETIME (VPG_TIME + 1)
3936+#define VPC_ELAPSETIME (VPG_TIME + 1)
3937 #define VPC_CPUTIME (VPC_ELAPSETIME + 1)
3938
3939 #define VPC_MEMMAXRES (VPG_MEM + 1)
3940@@ -600,404 +206,28 @@ extern "C" {
3941 #define VPC_MEMUNSHAREDDATA (VPC_MEMSHARED + 1)
3942 #define VPC_MEMUNSHAREDSTACK (VPC_MEMUNSHAREDDATA + 1)
3943
3944-/* OpenGL ES11 Counters. */
3945-#define VPC_ES11ACTIVETEXTURE (VPG_ES11 + ES11_ACTIVETEXTURE)
3946-#define VPC_ES11ALPHAFUNC (VPG_ES11 + ES11_ALPHAFUNC)
3947-#define VPC_ES11ALPHAFUNCX (VPG_ES11 + ES11_ALPHAFUNCX)
3948-#define VPC_ES11BINDBUFFER (VPG_ES11 + ES11_BINDBUFFER)
3949-#define VPC_ES11BINDTEXTURE (VPG_ES11 + ES11_BINDTEXTURE)
3950-#define VPC_ES11BLENDFUNC (VPG_ES11 + ES11_BLENDFUNC)
3951-#define VPC_ES11BUFFERDATA (VPG_ES11 + ES11_BUFFERDATA)
3952-#define VPC_ES11BUFFERSUBDATA (VPG_ES11 + ES11_BUFFERSUBDATA)
3953-#define VPC_ES11CLEAR (VPG_ES11 + ES11_CLEAR)
3954-#define VPC_ES11CLEARCOLOR (VPG_ES11 + ES11_CLEARCOLOR)
3955-#define VPC_ES11CLEARCOLORX (VPG_ES11 + ES11_CLEARCOLORX)
3956-#define VPC_ES11CLEARDEPTHF (VPG_ES11 + ES11_CLEARDEPTHF)
3957-#define VPC_ES11CLEARDEPTHX (VPG_ES11 + ES11_CLEARDEPTHX)
3958-#define VPC_ES11CLEARSTENCIL (VPG_ES11 + ES11_CLEARSTENCIL)
3959-#define VPC_ES11CLIENTACTIVETEXTURE (VPG_ES11 + ES11_CLIENTACTIVETEXTURE)
3960-#define VPC_ES11CLIPPLANEF (VPG_ES11 + ES11_CLIPPLANEF)
3961-#define VPC_ES11CLIPPLANEX (VPG_ES11 + ES11_CLIPPLANEX)
3962-#define VPC_ES11COLOR4F (VPG_ES11 + ES11_COLOR4F)
3963-#define VPC_ES11COLOR4UB (VPG_ES11 + ES11_COLOR4UB)
3964-#define VPC_ES11COLOR4X (VPG_ES11 + ES11_COLOR4X)
3965-#define VPC_ES11COLORMASK (VPG_ES11 + ES11_COLORMASK)
3966-#define VPC_ES11COLORPOINTER (VPG_ES11 + ES11_COLORPOINTER)
3967-#define VPC_ES11COMPRESSEDTEXIMAGE2D (VPG_ES11 + ES11_COMPRESSEDTEXIMAGE2D)
3968-#define VPC_ES11COMPRESSEDTEXSUBIMAGE2D (VPG_ES11 + ES11_COMPRESSEDTEXSUBIMAGE2D)
3969-#define VPC_ES11COPYTEXIMAGE2D (VPG_ES11 + ES11_COPYTEXIMAGE2D)
3970-#define VPC_ES11COPYTEXSUBIMAGE2D (VPG_ES11 + ES11_COPYTEXSUBIMAGE2D)
3971-#define VPC_ES11CULLFACE (VPG_ES11 + ES11_CULLFACE)
3972-#define VPC_ES11DELETEBUFFERS (VPG_ES11 + ES11_DELETEBUFFERS)
3973-#define VPC_ES11DELETETEXTURES (VPG_ES11 + ES11_DELETETEXTURES)
3974-#define VPC_ES11DEPTHFUNC (VPG_ES11 + ES11_DEPTHFUNC)
3975-#define VPC_ES11DEPTHMASK (VPG_ES11 + ES11_DEPTHMASK)
3976-#define VPC_ES11DEPTHRANGEF (VPG_ES11 + ES11_DEPTHRANGEF)
3977-#define VPC_ES11DEPTHRANGEX (VPG_ES11 + ES11_DEPTHRANGEX)
3978-#define VPC_ES11DISABLE (VPG_ES11 + ES11_DISABLE)
3979-#define VPC_ES11DISABLECLIENTSTATE (VPG_ES11 + ES11_DISABLECLIENTSTATE)
3980-#define VPC_ES11DRAWARRAYS (VPG_ES11 + ES11_DRAWARRAYS)
3981-#define VPC_ES11DRAWELEMENTS (VPG_ES11 + ES11_DRAWELEMENTS)
3982-#define VPC_ES11ENABLE (VPG_ES11 + ES11_ENABLE)
3983-#define VPC_ES11ENABLECLIENTSTATE (VPG_ES11 + ES11_ENABLECLIENTSTATE)
3984-#define VPC_ES11FINISH (VPG_ES11 + ES11_FINISH)
3985-#define VPC_ES11FLUSH (VPG_ES11 + ES11_FLUSH)
3986-#define VPC_ES11FOGF (VPG_ES11 + ES11_FOGF)
3987-#define VPC_ES11FOGFV (VPG_ES11 + ES11_FOGFV)
3988-#define VPC_ES11FOGX (VPG_ES11 + ES11_FOGX)
3989-#define VPC_ES11FOGXV (VPG_ES11 + ES11_FOGXV)
3990-#define VPC_ES11FRONTFACE (VPG_ES11 + ES11_FRONTFACE)
3991-#define VPC_ES11FRUSTUMF (VPG_ES11 + ES11_FRUSTUMF)
3992-#define VPC_ES11FRUSTUMX (VPG_ES11 + ES11_FRUSTUMX)
3993-#define VPC_ES11GENBUFFERS (VPG_ES11 + ES11_GENBUFFERS)
3994-#define VPC_ES11GENTEXTURES (VPG_ES11 + ES11_GENTEXTURES)
3995-#define VPC_ES11GETBOOLEANV (VPG_ES11 + ES11_GETBOOLEANV)
3996-#define VPC_ES11GETBUFFERPARAMETERIV (VPG_ES11 + ES11_GETBUFFERPARAMETERIV)
3997-#define VPC_ES11GETCLIPPLANEF (VPG_ES11 + ES11_GETCLIPPLANEF)
3998-#define VPC_ES11GETCLIPPLANEX (VPG_ES11 + ES11_GETCLIPPLANEX)
3999-#define VPC_ES11GETERROR (VPG_ES11 + ES11_GETERROR)
4000-#define VPC_ES11GETFIXEDV (VPG_ES11 + ES11_GETFIXEDV)
4001-#define VPC_ES11GETFLOATV (VPG_ES11 + ES11_GETFLOATV)
4002-#define VPC_ES11GETINTEGERV (VPG_ES11 + ES11_GETINTEGERV)
4003-#define VPC_ES11GETLIGHTFV (VPG_ES11 + ES11_GETLIGHTFV)
4004-#define VPC_ES11GETLIGHTXV (VPG_ES11 + ES11_GETLIGHTXV)
4005-#define VPC_ES11GETMATERIALFV (VPG_ES11 + ES11_GETMATERIALFV)
4006-#define VPC_ES11GETMATERIALXV (VPG_ES11 + ES11_GETMATERIALXV)
4007-#define VPC_ES11GETPOINTERV (VPG_ES11 + ES11_GETPOINTERV)
4008-#define VPC_ES11GETSTRING (VPG_ES11 + ES11_GETSTRING)
4009-#define VPC_ES11GETTEXENVFV (VPG_ES11 + ES11_GETTEXENVFV)
4010-#define VPC_ES11GETTEXENVIV (VPG_ES11 + ES11_GETTEXENVIV)
4011-#define VPC_ES11GETTEXENVXV (VPG_ES11 + ES11_GETTEXENVXV)
4012-#define VPC_ES11GETTEXPARAMETERFV (VPG_ES11 + ES11_GETTEXPARAMETERFV)
4013-#define VPC_ES11GETTEXPARAMETERIV (VPG_ES11 + ES11_GETTEXPARAMETERIV)
4014-#define VPC_ES11GETTEXPARAMETERXV (VPG_ES11 + ES11_GETTEXPARAMETERXV)
4015-#define VPC_ES11HINT (VPG_ES11 + ES11_HINT)
4016-#define VPC_ES11ISBUFFER (VPG_ES11 + ES11_ISBUFFER)
4017-#define VPC_ES11ISENABLED (VPG_ES11 + ES11_ISENABLED)
4018-#define VPC_ES11ISTEXTURE (VPG_ES11 + ES11_ISTEXTURE)
4019-#define VPC_ES11LIGHTF (VPG_ES11 + ES11_LIGHTF)
4020-#define VPC_ES11LIGHTFV (VPG_ES11 + ES11_LIGHTFV)
4021-#define VPC_ES11LIGHTMODELF (VPG_ES11 + ES11_LIGHTMODELF)
4022-#define VPC_ES11LIGHTMODELFV (VPG_ES11 + ES11_LIGHTMODELFV)
4023-#define VPC_ES11LIGHTMODELX (VPG_ES11 + ES11_LIGHTMODELX)
4024-#define VPC_ES11LIGHTMODELXV (VPG_ES11 + ES11_LIGHTMODELXV)
4025-#define VPC_ES11LIGHTX (VPG_ES11 + ES11_LIGHTX)
4026-#define VPC_ES11LIGHTXV (VPG_ES11 + ES11_LIGHTXV)
4027-#define VPC_ES11LINEWIDTH (VPG_ES11 + ES11_LINEWIDTH)
4028-#define VPC_ES11LINEWIDTHX (VPG_ES11 + ES11_LINEWIDTHX)
4029-#define VPC_ES11LOADIDENTITY (VPG_ES11 + ES11_LOADIDENTITY)
4030-#define VPC_ES11LOADMATRIXF (VPG_ES11 + ES11_LOADMATRIXF)
4031-#define VPC_ES11LOADMATRIXX (VPG_ES11 + ES11_LOADMATRIXX)
4032-#define VPC_ES11LOGICOP (VPG_ES11 + ES11_LOGICOP)
4033-#define VPC_ES11MATERIALF (VPG_ES11 + ES11_MATERIALF)
4034-#define VPC_ES11MATERIALFV (VPG_ES11 + ES11_MATERIALFV)
4035-#define VPC_ES11MATERIALX (VPG_ES11 + ES11_MATERIALX)
4036-#define VPC_ES11MATERIALXV (VPG_ES11 + ES11_MATERIALXV)
4037-#define VPC_ES11MATRIXMODE (VPG_ES11 + ES11_MATRIXMODE)
4038-#define VPC_ES11MULTITEXCOORD4F (VPG_ES11 + ES11_MULTITEXCOORD4F)
4039-#define VPC_ES11MULTITEXCOORD4X (VPG_ES11 + ES11_MULTITEXCOORD4X)
4040-#define VPC_ES11MULTMATRIXF (VPG_ES11 + ES11_MULTMATRIXF)
4041-#define VPC_ES11MULTMATRIXX (VPG_ES11 + ES11_MULTMATRIXX)
4042-#define VPC_ES11NORMAL3F (VPG_ES11 + ES11_NORMAL3F)
4043-#define VPC_ES11NORMAL3X (VPG_ES11 + ES11_NORMAL3X)
4044-#define VPC_ES11NORMALPOINTER (VPG_ES11 + ES11_NORMALPOINTER)
4045-#define VPC_ES11ORTHOF (VPG_ES11 + ES11_ORTHOF)
4046-#define VPC_ES11ORTHOX (VPG_ES11 + ES11_ORTHOX)
4047-#define VPC_ES11PIXELSTOREI (VPG_ES11 + ES11_PIXELSTOREI)
4048-#define VPC_ES11POINTPARAMETERF (VPG_ES11 + ES11_POINTPARAMETERF)
4049-#define VPC_ES11POINTPARAMETERFV (VPG_ES11 + ES11_POINTPARAMETERFV)
4050-#define VPC_ES11POINTPARAMETERX (VPG_ES11 + ES11_POINTPARAMETERX)
4051-#define VPC_ES11POINTPARAMETERXV (VPG_ES11 + ES11_POINTPARAMETERXV)
4052-#define VPC_ES11POINTSIZE (VPG_ES11 + ES11_POINTSIZE)
4053-#define VPC_ES11POINTSIZEX (VPG_ES11 + ES11_POINTSIZEX)
4054-#define VPC_ES11POLYGONOFFSET (VPG_ES11 + ES11_POLYGONOFFSET)
4055-#define VPC_ES11POLYGONOFFSETX (VPG_ES11 + ES11_POLYGONOFFSETX)
4056-#define VPC_ES11POPMATRIX (VPG_ES11 + ES11_POPMATRIX)
4057-#define VPC_ES11PUSHMATRIX (VPG_ES11 + ES11_PUSHMATRIX)
4058-#define VPC_ES11READPIXELS (VPG_ES11 + ES11_READPIXELS)
4059-#define VPC_ES11ROTATEF (VPG_ES11 + ES11_ROTATEF)
4060-#define VPC_ES11ROTATEX (VPG_ES11 + ES11_ROTATEX)
4061-#define VPC_ES11SAMPLECOVERAGE (VPG_ES11 + ES11_SAMPLECOVERAGE)
4062-#define VPC_ES11SAMPLECOVERAGEX (VPG_ES11 + ES11_SAMPLECOVERAGEX)
4063-#define VPC_ES11SCALEF (VPG_ES11 + ES11_SCALEF)
4064-#define VPC_ES11SCALEX (VPG_ES11 + ES11_SCALEX)
4065-#define VPC_ES11SCISSOR (VPG_ES11 + ES11_SCISSOR)
4066-#define VPC_ES11SHADEMODEL (VPG_ES11 + ES11_SHADEMODEL)
4067-#define VPC_ES11STENCILFUNC (VPG_ES11 + ES11_STENCILFUNC)
4068-#define VPC_ES11STENCILMASK (VPG_ES11 + ES11_STENCILMASK)
4069-#define VPC_ES11STENCILOP (VPG_ES11 + ES11_STENCILOP)
4070-#define VPC_ES11TEXCOORDPOINTER (VPG_ES11 + ES11_TEXCOORDPOINTER)
4071-#define VPC_ES11TEXENVF (VPG_ES11 + ES11_TEXENVF)
4072-#define VPC_ES11TEXENVFV (VPG_ES11 + ES11_TEXENVFV)
4073-#define VPC_ES11TEXENVI (VPG_ES11 + ES11_TEXENVI)
4074-#define VPC_ES11TEXENVIV (VPG_ES11 + ES11_TEXENVIV)
4075-#define VPC_ES11TEXENVX (VPG_ES11 + ES11_TEXENVX)
4076-#define VPC_ES11TEXENVXV (VPG_ES11 + ES11_TEXENVXV)
4077-#define VPC_ES11TEXIMAGE2D (VPG_ES11 + ES11_TEXIMAGE2D)
4078-#define VPC_ES11TEXPARAMETERF (VPG_ES11 + ES11_TEXPARAMETERF)
4079-#define VPC_ES11TEXPARAMETERFV (VPG_ES11 + ES11_TEXPARAMETERFV)
4080-#define VPC_ES11TEXPARAMETERI (VPG_ES11 + ES11_TEXPARAMETERI)
4081-#define VPC_ES11TEXPARAMETERIV (VPG_ES11 + ES11_TEXPARAMETERIV)
4082-#define VPC_ES11TEXPARAMETERX (VPG_ES11 + ES11_TEXPARAMETERX)
4083-#define VPC_ES11TEXPARAMETERXV (VPG_ES11 + ES11_TEXPARAMETERXV)
4084-#define VPC_ES11TEXSUBIMAGE2D (VPG_ES11 + ES11_TEXSUBIMAGE2D)
4085-#define VPC_ES11TRANSLATEF (VPG_ES11 + ES11_TRANSLATEF)
4086-#define VPC_ES11TRANSLATEX (VPG_ES11 + ES11_TRANSLATEX)
4087-#define VPC_ES11VERTEXPOINTER (VPG_ES11 + ES11_VERTEXPOINTER)
4088-#define VPC_ES11VIEWPORT (VPG_ES11 + ES11_VIEWPORT)
4089 /* OpenGL ES11 Statics Counter IDs. */
4090-#define VPC_ES11CALLS (VPG_ES11 + ES11_CALLS)
4091-#define VPC_ES11DRAWCALLS (VPG_ES11 + ES11_DRAWCALLS)
4092-#define VPC_ES11STATECHANGECALLS (VPG_ES11 + ES11_STATECHANGECALLS)
4093-#define VPC_ES11POINTCOUNT (VPG_ES11 + ES11_POINTCOUNT)
4094-#define VPC_ES11LINECOUNT (VPG_ES11 + ES11_LINECOUNT)
4095-#define VPC_ES11TRIANGLECOUNT (VPG_ES11 + ES11_TRIANGLECOUNT)
4096-
4097-/* OpenGLES 2.x */
4098-#define VPC_ES20ACTIVETEXTURE (VPG_ES20 + ES20_ACTIVETEXTURE)
4099-#define VPC_ES20ATTACHSHADER (VPG_ES20 + ES20_ATTACHSHADER)
4100-#define VPC_ES20BINDATTRIBLOCATION (VPG_ES20 + ES20_BINDATTRIBLOCATION)
4101-#define VPC_ES20BINDBUFFER (VPG_ES20 + ES20_BINDBUFFER)
4102-#define VPC_ES20BINDFRAMEBUFFER (VPG_ES20 + ES20_BINDFRAMEBUFFER)
4103-#define VPC_ES20BINDRENDERBUFFER (VPG_ES20 + ES20_BINDRENDERBUFFER)
4104-#define VPC_ES20BINDTEXTURE (VPG_ES20 + ES20_BINDTEXTURE)
4105-#define VPC_ES20BLENDCOLOR (VPG_ES20 + ES20_BLENDCOLOR)
4106-#define VPC_ES20BLENDEQUATION (VPG_ES20 + ES20_BLENDEQUATION)
4107-#define VPC_ES20BLENDEQUATIONSEPARATE (VPG_ES20 + ES20_BLENDEQUATIONSEPARATE)
4108-#define VPC_ES20BLENDFUNC (VPG_ES20 + ES20_BLENDFUNC)
4109-#define VPC_ES20BLENDFUNCSEPARATE (VPG_ES20 + ES20_BLENDFUNCSEPARATE)
4110-#define VPC_ES20BUFFERDATA (VPG_ES20 + ES20_BUFFERDATA)
4111-#define VPC_ES20BUFFERSUBDATA (VPG_ES20 + ES20_BUFFERSUBDATA)
4112-#define VPC_ES20CHECKFRAMEBUFFERSTATUS (VPG_ES20 + ES20_CHECKFRAMEBUFFERSTATUS)
4113-#define VPC_ES20CLEAR (VPG_ES20 + ES20_CLEAR)
4114-#define VPC_ES20CLEARCOLOR (VPG_ES20 + ES20_CLEARCOLOR)
4115-#define VPC_ES20CLEARDEPTHF (VPG_ES20 + ES20_CLEARDEPTHF)
4116-#define VPC_ES20CLEARSTENCIL (VPG_ES20 + ES20_CLEARSTENCIL)
4117-#define VPC_ES20COLORMASK (VPG_ES20 + ES20_COLORMASK)
4118-#define VPC_ES20COMPILESHADER (VPG_ES20 + ES20_COMPILESHADER)
4119-#define VPC_ES20COMPRESSEDTEXIMAGE2D (VPG_ES20 + ES20_COMPRESSEDTEXIMAGE2D)
4120-#define VPC_ES20COMPRESSEDTEXSUBIMAGE2D (VPG_ES20 + ES20_COMPRESSEDTEXSUBIMAGE2D)
4121-#define VPC_ES20COPYTEXIMAGE2D (VPG_ES20 + ES20_COPYTEXIMAGE2D)
4122-#define VPC_ES20COPYTEXSUBIMAGE2D (VPG_ES20 + ES20_COPYTEXSUBIMAGE2D)
4123-#define VPC_ES20CREATEPROGRAM (VPG_ES20 + ES20_CREATEPROGRAM)
4124-#define VPC_ES20CREATESHADER (VPG_ES20 + ES20_CREATESHADER)
4125-#define VPC_ES20CULLFACE (VPG_ES20 + ES20_CULLFACE)
4126-#define VPC_ES20DELETEBUFFERS (VPG_ES20 + ES20_DELETEBUFFERS)
4127-#define VPC_ES20DELETEFRAMEBUFFERS (VPG_ES20 + ES20_DELETEFRAMEBUFFERS)
4128-#define VPC_ES20DELETEPROGRAM (VPG_ES20 + ES20_DELETEPROGRAM)
4129-#define VPC_ES20DELETERENDERBUFFERS (VPG_ES20 + ES20_DELETERENDERBUFFERS)
4130-#define VPC_ES20DELETESHADER (VPG_ES20 + ES20_DELETESHADER)
4131-#define VPC_ES20DELETETEXTURES (VPG_ES20 + ES20_DELETETEXTURES)
4132-#define VPC_ES20DEPTHFUNC (VPG_ES20 + ES20_DEPTHFUNC)
4133-#define VPC_ES20DEPTHMASK (VPG_ES20 + ES20_DEPTHMASK)
4134-#define VPC_ES20DEPTHRANGEF (VPG_ES20 + ES20_DEPTHRANGEF)
4135-#define VPC_ES20DETACHSHADER (VPG_ES20 + ES20_DETACHSHADER)
4136-#define VPC_ES20DISABLE (VPG_ES20 + ES20_DISABLE)
4137-#define VPC_ES20DISABLEVERTEXATTRIBARRAY (VPG_ES20 + ES20_DISABLEVERTEXATTRIBARRAY)
4138-#define VPC_ES20DRAWARRAYS (VPG_ES20 + ES20_DRAWARRAYS)
4139-#define VPC_ES20DRAWELEMENTS (VPG_ES20 + ES20_DRAWELEMENTS)
4140-#define VPC_ES20ENABLE (VPG_ES20 + ES20_ENABLE)
4141-#define VPC_ES20ENABLEVERTEXATTRIBARRAY (VPG_ES20 + ES20_ENABLEVERTEXATTRIBARRAY)
4142-#define VPC_ES20FINISH (VPG_ES20 + ES20_FINISH)
4143-#define VPC_ES20FLUSH (VPG_ES20 + ES20_FLUSH)
4144-#define VPC_ES20FRAMEBUFFERRENDERBUFFER (VPG_ES20 + ES20_FRAMEBUFFERRENDERBUFFER)
4145-#define VPC_ES20FRAMEBUFFERTEXTURE2D (VPG_ES20 + ES20_FRAMEBUFFERTEXTURE2D)
4146-#define VPC_ES20FRONTFACE (VPG_ES20 + ES20_FRONTFACE)
4147-#define VPC_ES20GENBUFFERS (VPG_ES20 + ES20_GENBUFFERS)
4148-#define VPC_ES20GENERATEMIPMAP (VPG_ES20 + ES20_GENERATEMIPMAP)
4149-#define VPC_ES20GENFRAMEBUFFERS (VPG_ES20 + ES20_GENFRAMEBUFFERS)
4150-#define VPC_ES20GENRENDERBUFFERS (VPG_ES20 + ES20_GENRENDERBUFFERS)
4151-#define VPC_ES20GENTEXTURES (VPG_ES20 + ES20_GENTEXTURES)
4152-#define VPC_ES20GETACTIVEATTRIB (VPG_ES20 + ES20_GETACTIVEATTRIB)
4153-#define VPC_ES20GETACTIVEUNIFORM (VPG_ES20 + ES20_GETACTIVEUNIFORM)
4154-#define VPC_ES20GETATTACHEDSHADERS (VPG_ES20 + ES20_GETATTACHEDSHADERS)
4155-#define VPC_ES20GETATTRIBLOCATION (VPG_ES20 + ES20_GETATTRIBLOCATION)
4156-#define VPC_ES20GETBOOLEANV (VPG_ES20 + ES20_GETBOOLEANV)
4157-#define VPC_ES20GETBUFFERPARAMETERIV (VPG_ES20 + ES20_GETBUFFERPARAMETERIV)
4158-#define VPC_ES20GETERROR (VPG_ES20 + ES20_GETERROR)
4159-#define VPC_ES20GETFLOATV (VPG_ES20 + ES20_GETFLOATV)
4160-#define VPC_ES20GETFRAMEBUFFERATTACHMENTPARAMETERIV (VPG_ES20 + ES20_GETFRAMEBUFFERATTACHMENTPARAMETERIV)
4161-#define VPC_ES20GETINTEGERV (VPG_ES20 + ES20_GETINTEGERV)
4162-#define VPC_ES20GETPROGRAMIV (VPG_ES20 + ES20_GETPROGRAMIV)
4163-#define VPC_ES20GETPROGRAMINFOLOG (VPG_ES20 + ES20_GETPROGRAMINFOLOG)
4164-#define VPC_ES20GETRENDERBUFFERPARAMETERIV (VPG_ES20 + ES20_GETRENDERBUFFERPARAMETERIV)
4165-#define VPC_ES20GETSHADERIV (VPG_ES20 + ES20_GETSHADERIV)
4166-#define VPC_ES20GETSHADERINFOLOG (VPG_ES20 + ES20_GETSHADERINFOLOG)
4167-#define VPC_ES20GETSHADERPRECISIONFORMAT (VPG_ES20 + ES20_GETSHADERPRECISIONFORMAT)
4168-#define VPC_ES20GETSHADERSOURCE (VPG_ES20 + ES20_GETSHADERSOURCE)
4169-#define VPC_ES20GETSTRING (VPG_ES20 + ES20_GETSTRING)
4170-#define VPC_ES20GETTEXPARAMETERFV (VPG_ES20 + ES20_GETTEXPARAMETERFV)
4171-#define VPC_ES20GETTEXPARAMETERIV (VPG_ES20 + ES20_GETTEXPARAMETERIV)
4172-#define VPC_ES20GETUNIFORMFV (VPG_ES20 + ES20_GETUNIFORMFV)
4173-#define VPC_ES20GETUNIFORMIV (VPG_ES20 + ES20_GETUNIFORMIV)
4174-#define VPC_ES20GETUNIFORMLOCATION (VPG_ES20 + ES20_GETUNIFORMLOCATION)
4175-#define VPC_ES20GETVERTEXATTRIBFV (VPG_ES20 + ES20_GETVERTEXATTRIBFV)
4176-#define VPC_ES20GETVERTEXATTRIBIV (VPG_ES20 + ES20_GETVERTEXATTRIBIV)
4177-#define VPC_ES20GETVERTEXATTRIBPOINTERV (VPG_ES20 + ES20_GETVERTEXATTRIBPOINTERV)
4178-#define VPC_ES20HINT (VPG_ES20 + ES20_HINT)
4179-#define VPC_ES20ISBUFFER (VPG_ES20 + ES20_ISBUFFER)
4180-#define VPC_ES20ISENABLED (VPG_ES20 + ES20_ISENABLED)
4181-#define VPC_ES20ISFRAMEBUFFER (VPG_ES20 + ES20_ISFRAMEBUFFER)
4182-#define VPC_ES20ISPROGRAM (VPG_ES20 + ES20_ISPROGRAM)
4183-#define VPC_ES20ISRENDERBUFFER (VPG_ES20 + ES20_ISRENDERBUFFER)
4184-#define VPC_ES20ISSHADER (VPG_ES20 + ES20_ISSHADER)
4185-#define VPC_ES20ISTEXTURE (VPG_ES20 + ES20_ISTEXTURE)
4186-#define VPC_ES20LINEWIDTH (VPG_ES20 + ES20_LINEWIDTH)
4187-#define VPC_ES20LINKPROGRAM (VPG_ES20 + ES20_LINKPROGRAM)
4188-#define VPC_ES20PIXELSTOREI (VPG_ES20 + ES20_PIXELSTOREI)
4189-#define VPC_ES20POLYGONOFFSET (VPG_ES20 + ES20_POLYGONOFFSET)
4190-#define VPC_ES20READPIXELS (VPG_ES20 + ES20_READPIXELS)
4191-#define VPC_ES20RELEASESHADERCOMPILER (VPG_ES20 + ES20_RELEASESHADERCOMPILER)
4192-#define VPC_ES20RENDERBUFFERSTORAGE (VPG_ES20 + ES20_RENDERBUFFERSTORAGE)
4193-#define VPC_ES20SAMPLECOVERAGE (VPG_ES20 + ES20_SAMPLECOVERAGE)
4194-#define VPC_ES20SCISSOR (VPG_ES20 + ES20_SCISSOR)
4195-#define VPC_ES20SHADERBINARY (VPG_ES20 + ES20_SHADERBINARY)
4196-#define VPC_ES20SHADERSOURCE (VPG_ES20 + ES20_SHADERSOURCE)
4197-#define VPC_ES20STENCILFUNC (VPG_ES20 + ES20_STENCILFUNC)
4198-#define VPC_ES20STENCILFUNCSEPARATE (VPG_ES20 + ES20_STENCILFUNCSEPARATE)
4199-#define VPC_ES20STENCILMASK (VPG_ES20 + ES20_STENCILMASK)
4200-#define VPC_ES20STENCILMASKSEPARATE (VPG_ES20 + ES20_STENCILMASKSEPARATE)
4201-#define VPC_ES20STENCILOP (VPG_ES20 + ES20_STENCILOP)
4202-#define VPC_ES20STENCILOPSEPARATE (VPG_ES20 + ES20_STENCILOPSEPARATE)
4203-#define VPC_ES20TEXIMAGE2D (VPG_ES20 + ES20_TEXIMAGE2D)
4204-#define VPC_ES20TEXPARAMETERF (VPG_ES20 + ES20_TEXPARAMETERF)
4205-#define VPC_ES20TEXPARAMETERFV (VPG_ES20 + ES20_TEXPARAMETERFV)
4206-#define VPC_ES20TEXPARAMETERI (VPG_ES20 + ES20_TEXPARAMETERI)
4207-#define VPC_ES20TEXPARAMETERIV (VPG_ES20 + ES20_TEXPARAMETERIV)
4208-#define VPC_ES20TEXSUBIMAGE2D (VPG_ES20 + ES20_TEXSUBIMAGE2D)
4209-#define VPC_ES20UNIFORM1F (VPG_ES20 + ES20_UNIFORM1F)
4210-#define VPC_ES20UNIFORM1FV (VPG_ES20 + ES20_UNIFORM1FV)
4211-#define VPC_ES20UNIFORM1I (VPG_ES20 + ES20_UNIFORM1I)
4212-#define VPC_ES20UNIFORM1IV (VPG_ES20 + ES20_UNIFORM1IV)
4213-#define VPC_ES20UNIFORM2F (VPG_ES20 + ES20_UNIFORM2F)
4214-#define VPC_ES20UNIFORM2FV (VPG_ES20 + ES20_UNIFORM2FV)
4215-#define VPC_ES20UNIFORM2I (VPG_ES20 + ES20_UNIFORM2I)
4216-#define VPC_ES20UNIFORM2IV (VPG_ES20 + ES20_UNIFORM2IV)
4217-#define VPC_ES20UNIFORM3F (VPG_ES20 + ES20_UNIFORM3F)
4218-#define VPC_ES20UNIFORM3FV (VPG_ES20 + ES20_UNIFORM3FV)
4219-#define VPC_ES20UNIFORM3I (VPG_ES20 + ES20_UNIFORM3I)
4220-#define VPC_ES20UNIFORM3IV (VPG_ES20 + ES20_UNIFORM3IV)
4221-#define VPC_ES20UNIFORM4F (VPG_ES20 + ES20_UNIFORM4F)
4222-#define VPC_ES20UNIFORM4FV (VPG_ES20 + ES20_UNIFORM4FV)
4223-#define VPC_ES20UNIFORM4I (VPG_ES20 + ES20_UNIFORM4I)
4224-#define VPC_ES20UNIFORM4IV (VPG_ES20 + ES20_UNIFORM4IV)
4225-#define VPC_ES20UNIFORMMATRIX2FV (VPG_ES20 + ES20_UNIFORMMATRIX2FV)
4226-#define VPC_ES20UNIFORMMATRIX3FV (VPG_ES20 + ES20_UNIFORMMATRIX3FV)
4227-#define VPC_ES20UNIFORMMATRIX4FV (VPG_ES20 + ES20_UNIFORMMATRIX4FV)
4228-#define VPC_ES20USEPROGRAM (VPG_ES20 + ES20_USEPROGRAM)
4229-#define VPC_ES20VALIDATEPROGRAM (VPG_ES20 + ES20_VALIDATEPROGRAM)
4230-#define VPC_ES20VERTEXATTRIB1F (VPG_ES20 + ES20_VERTEXATTRIB1F)
4231-#define VPC_ES20VERTEXATTRIB1FV (VPG_ES20 + ES20_VERTEXATTRIB1FV)
4232-#define VPC_ES20VERTEXATTRIB2F (VPG_ES20 + ES20_VERTEXATTRIB2F)
4233-#define VPC_ES20VERTEXATTRIB2FV (VPG_ES20 + ES20_VERTEXATTRIB2FV)
4234-#define VPC_ES20VERTEXATTRIB3F (VPG_ES20 + ES20_VERTEXATTRIB3F)
4235-#define VPC_ES20VERTEXATTRIB3FV (VPG_ES20 + ES20_VERTEXATTRIB3FV)
4236-#define VPC_ES20VERTEXATTRIB4F (VPG_ES20 + ES20_VERTEXATTRIB4F)
4237-#define VPC_ES20VERTEXATTRIB4FV (VPG_ES20 + ES20_VERTEXATTRIB4FV)
4238-#define VPC_ES20VERTEXATTRIBPOINTER (VPG_ES20 + ES20_VERTEXATTRIBPOINTER)
4239-#define VPC_ES20VIEWPORT (VPG_ES20 + ES20_VIEWPORT)
4240+#define VPC_ES11CALLS (VPG_ES11 + ES11_CALLS)
4241+#define VPC_ES11DRAWCALLS (VPG_ES11 + ES11_DRAWCALLS)
4242+#define VPC_ES11STATECHANGECALLS (VPG_ES11 + ES11_STATECHANGECALLS)
4243+#define VPC_ES11POINTCOUNT (VPG_ES11 + ES11_POINTCOUNT)
4244+#define VPC_ES11LINECOUNT (VPG_ES11 + ES11_LINECOUNT)
4245+#define VPC_ES11TRIANGLECOUNT (VPG_ES11 + ES11_TRIANGLECOUNT)
4246+
4247 /* OpenGL ES20 Statistics Counter IDs. */
4248-#define VPC_ES20CALLS (VPG_ES20 + ES20_CALLS)
4249-#define VPC_ES20DRAWCALLS (VPG_ES20 + ES20_DRAWCALLS)
4250-#define VPC_ES20STATECHANGECALLS (VPG_ES20 + ES20_STATECHANGECALLS)
4251-#define VPC_ES20POINTCOUNT (VPG_ES20 + ES20_POINTCOUNT)
4252-#define VPC_ES20LINECOUNT (VPG_ES20 + ES20_LINECOUNT)
4253-#define VPC_ES20TRIANGLECOUNT (VPG_ES20 + ES20_TRIANGLECOUNT)
4254-
4255-/* VG11 Counters. */
4256-#define VPC_VG11APPENDPATH (VPG_VG11 + VG11_APPENDPATH)
4257-#define VPC_VG11APPENDPATHDATA (VPG_VG11 + VG11_APPENDPATHDATA)
4258-#define VPC_VG11CHILDIMAGE (VPG_VG11 + VG11_CHILDIMAGE)
4259-#define VPC_VG11CLEAR (VPG_VG11 + VG11_CLEAR)
4260-#define VPC_VG11CLEARGLYPH (VPG_VG11 + VG11_CLEARGLYPH)
4261-#define VPC_VG11CLEARIMAGE (VPG_VG11 + VG11_CLEARIMAGE)
4262-#define VPC_VG11CLEARPATH (VPG_VG11 + VG11_CLEARPATH)
4263-#define VPC_VG11COLORMATRIX (VPG_VG11 + VG11_COLORMATRIX)
4264-#define VPC_VG11CONVOLVE (VPG_VG11 + VG11_CONVOLVE)
4265-#define VPC_VG11COPYIMAGE (VPG_VG11 + VG11_COPYIMAGE)
4266-#define VPC_VG11COPYMASK (VPG_VG11 + VG11_COPYMASK)
4267-#define VPC_VG11COPYPIXELS (VPG_VG11 + VG11_COPYPIXELS)
4268-#define VPC_VG11CREATEFONT (VPG_VG11 + VG11_CREATEFONT)
4269-#define VPC_VG11CREATEIMAGE (VPG_VG11 + VG11_CREATEIMAGE)
4270-#define VPC_VG11CREATEMASKLAYER (VPG_VG11 + VG11_CREATEMASKLAYER)
4271-#define VPC_VG11CREATEPAINT (VPG_VG11 + VG11_CREATEPAINT)
4272-#define VPC_VG11CREATEPATH (VPG_VG11 + VG11_CREATEPATH)
4273-#define VPC_VG11DESTROYFONT (VPG_VG11 + VG11_DESTROYFONT)
4274-#define VPC_VG11DESTROYIMAGE (VPG_VG11 + VG11_DESTROYIMAGE)
4275-#define VPC_VG11DESTROYMASKLAYER (VPG_VG11 + VG11_DESTROYMASKLAYER)
4276-#define VPC_VG11DESTROYPAINT (VPG_VG11 + VG11_DESTROYPAINT)
4277-#define VPC_VG11DESTROYPATH (VPG_VG11 + VG11_DESTROYPATH)
4278-#define VPC_VG11DRAWGLYPH (VPG_VG11 + VG11_DRAWGLYPH)
4279-#define VPC_VG11DRAWGLYPHS (VPG_VG11 + VG11_DRAWGLYPHS)
4280-#define VPC_VG11DRAWIMAGE (VPG_VG11 + VG11_DRAWIMAGE)
4281-#define VPC_VG11DRAWPATH (VPG_VG11 + VG11_DRAWPATH)
4282-#define VPC_VG11FILLMASKLAYER (VPG_VG11 + VG11_FILLMASKLAYER)
4283-#define VPC_VG11FINISH (VPG_VG11 + VG11_FINISH)
4284-#define VPC_VG11FLUSH (VPG_VG11 + VG11_FLUSH)
4285-#define VPC_VG11GAUSSIANBLUR (VPG_VG11 + VG11_GAUSSIANBLUR)
4286-#define VPC_VG11GETCOLOR (VPG_VG11 + VG11_GETCOLOR)
4287-#define VPC_VG11GETERROR (VPG_VG11 + VG11_GETERROR)
4288-#define VPC_VG11GETF (VPG_VG11 + VG11_GETF)
4289-#define VPC_VG11GETFV (VPG_VG11 + VG11_GETFV)
4290-#define VPC_VG11GETI (VPG_VG11 + VG11_GETI)
4291-#define VPC_VG11GETIMAGESUBDATA (VPG_VG11 + VG11_GETIMAGESUBDATA)
4292-#define VPC_VG11GETIV (VPG_VG11 + VG11_GETIV)
4293-#define VPC_VG11GETMATRIX (VPG_VG11 + VG11_GETMATRIX)
4294-#define VPC_VG11GETPAINT (VPG_VG11 + VG11_GETPAINT)
4295-#define VPC_VG11GETPARAMETERF (VPG_VG11 + VG11_GETPARAMETERF)
4296-#define VPC_VG11GETPARAMETERFV (VPG_VG11 + VG11_GETPARAMETERFV)
4297-#define VPC_VG11GETPARAMETERI (VPG_VG11 + VG11_GETPARAMETERI)
4298-#define VPC_VG11GETPARAMETERIV (VPG_VG11 + VG11_GETPARAMETERIV)
4299-#define VPC_VG11GETPARAMETERVECTORSIZE (VPG_VG11 + VG11_GETPARAMETERVECTORSIZE)
4300-#define VPC_VG11GETPARENT (VPG_VG11 + VG11_GETPARENT)
4301-#define VPC_VG11GETPATHCAPABILITIES (VPG_VG11 + VG11_GETPATHCAPABILITIES)
4302-#define VPC_VG11GETPIXELS (VPG_VG11 + VG11_GETPIXELS)
4303-#define VPC_VG11GETSTRING (VPG_VG11 + VG11_GETSTRING)
4304-#define VPC_VG11GETVECTORSIZE (VPG_VG11 + VG11_GETVECTORSIZE)
4305-#define VPC_VG11HARDWAREQUERY (VPG_VG11 + VG11_HARDWAREQUERY)
4306-#define VPC_VG11IMAGESUBDATA (VPG_VG11 + VG11_IMAGESUBDATA)
4307-#define VPC_VG11INTERPOLATEPATH (VPG_VG11 + VG11_INTERPOLATEPATH)
4308-#define VPC_VG11LOADIDENTITY (VPG_VG11 + VG11_LOADIDENTITY)
4309-#define VPC_VG11LOADMATRIX (VPG_VG11 + VG11_LOADMATRIX)
4310-#define VPC_VG11LOOKUP (VPG_VG11 + VG11_LOOKUP)
4311-#define VPC_VG11LOOKUPSINGLE (VPG_VG11 + VG11_LOOKUPSINGLE)
4312-#define VPC_VG11MASK (VPG_VG11 + VG11_MASK)
4313-#define VPC_VG11MODIFYPATHCOORDS (VPG_VG11 + VG11_MODIFYPATHCOORDS)
4314-#define VPC_VG11MULTMATRIX (VPG_VG11 + VG11_MULTMATRIX)
4315-#define VPC_VG11PAINTPATTERN (VPG_VG11 + VG11_PAINTPATTERN)
4316-#define VPC_VG11PATHBOUNDS (VPG_VG11 + VG11_PATHBOUNDS)
4317-#define VPC_VG11PATHLENGTH (VPG_VG11 + VG11_PATHLENGTH)
4318-#define VPC_VG11PATHTRANSFORMEDBOUNDS (VPG_VG11 + VG11_PATHTRANSFORMEDBOUNDS)
4319-#define VPC_VG11POINTALONGPATH (VPG_VG11 + VG11_POINTALONGPATH)
4320-#define VPC_VG11READPIXELS (VPG_VG11 + VG11_READPIXELS)
4321-#define VPC_VG11REMOVEPATHCAPABILITIES (VPG_VG11 + VG11_REMOVEPATHCAPABILITIES)
4322-#define VPC_VG11RENDERTOMASK (VPG_VG11 + VG11_RENDERTOMASK)
4323-#define VPC_VG11ROTATE (VPG_VG11 + VG11_ROTATE)
4324-#define VPC_VG11SCALE (VPG_VG11 + VG11_SCALE)
4325-#define VPC_VG11SEPARABLECONVOLVE (VPG_VG11 + VG11_SEPARABLECONVOLVE)
4326-#define VPC_VG11SETCOLOR (VPG_VG11 + VG11_SETCOLOR)
4327-#define VPC_VG11SETF (VPG_VG11 + VG11_SETF)
4328-#define VPC_VG11SETFV (VPG_VG11 + VG11_SETFV)
4329-#define VPC_VG11SETGLYPHTOIMAGE (VPG_VG11 + VG11_SETGLYPHTOIMAGE)
4330-#define VPC_VG11SETGLYPHTOPATH (VPG_VG11 + VG11_SETGLYPHTOPATH)
4331-#define VPC_VG11SETI (VPG_VG11 + VG11_SETI)
4332-#define VPC_VG11SETIV (VPG_VG11 + VG11_SETIV)
4333-#define VPC_VG11SETPAINT (VPG_VG11 + VG11_SETPAINT)
4334-#define VPC_VG11SETPARAMETERF (VPG_VG11 + VG11_SETPARAMETERF)
4335-#define VPC_VG11SETPARAMETERFV (VPG_VG11 + VG11_SETPARAMETERFV)
4336-#define VPC_VG11SETPARAMETERI (VPG_VG11 + VG11_SETPARAMETERI)
4337-#define VPC_VG11SETPARAMETERIV (VPG_VG11 + VG11_SETPARAMETERIV)
4338-#define VPC_VG11SETPIXELS (VPG_VG11 + VG11_SETPIXELS)
4339-#define VPC_VG11SHEAR (VPG_VG11 + VG11_SHEAR)
4340-#define VPC_VG11TRANSFORMPATH (VPG_VG11 + VG11_TRANSFORMPATH)
4341-#define VPC_VG11TRANSLATE (VPG_VG11 + VG11_TRANSLATE)
4342-#define VPC_VG11WRITEPIXELS (VPG_VG11 + VG11_WRITEPIXELS)
4343+#define VPC_ES20CALLS (VPG_ES20 + ES20_CALLS)
4344+#define VPC_ES20DRAWCALLS (VPG_ES20 + ES20_DRAWCALLS)
4345+#define VPC_ES20STATECHANGECALLS (VPG_ES20 + ES20_STATECHANGECALLS)
4346+#define VPC_ES20POINTCOUNT (VPG_ES20 + ES20_POINTCOUNT)
4347+#define VPC_ES20LINECOUNT (VPG_ES20 + ES20_LINECOUNT)
4348+#define VPC_ES20TRIANGLECOUNT (VPG_ES20 + ES20_TRIANGLECOUNT)
4349+
4350 /* OpenVG Statistics Counter IDs. */
4351-#define VPC_VG11CALLS (VPG_VG11 + VG11_CALLS)
4352-#define VPC_VG11DRAWCALLS (VPG_VG11 + VG11_DRAWCALLS)
4353-#define VPC_VG11STATECHANGECALLS (VPG_VG11 + VG11_STATECHANGECALLS)
4354-#define VPC_VG11FILLCOUNT (VPG_VG11 + VG11_FILLCOUNT)
4355-#define VPC_VG11STROKECOUNT (VPG_VG11 + VG11_STROKECOUNT)
4356+#define VPC_VG11CALLS (VPG_VG11 + VG11_CALLS)
4357+#define VPC_VG11DRAWCALLS (VPG_VG11 + VG11_DRAWCALLS)
4358+#define VPC_VG11STATECHANGECALLS (VPG_VG11 + VG11_STATECHANGECALLS)
4359+#define VPC_VG11FILLCOUNT (VPG_VG11 + VG11_FILLCOUNT)
4360+#define VPC_VG11STROKECOUNT (VPG_VG11 + VG11_STROKECOUNT)
4361
4362 /* HAL Counters. */
4363 #define VPC_HALVERTBUFNEWBYTEALLOC (VPG_HAL + HAL_VERTBUFNEWBYTEALLOC)
4364@@ -1018,7 +248,7 @@ extern "C" {
4365 #define VPC_GPUREAD64BYTE (VPG_GPU + GPU_READ64BYTE)
4366 #define VPC_GPUWRITE64BYTE (VPG_GPU + GPU_WRITE64BYTE)
4367 #define VPC_GPUTOTALCYCLES (VPG_GPU + GPU_TOTALCYCLES)
4368-#define VPC_GPUIDLECYCLES (VPG_GPU + GPU_IDLECYCLES)
4369+#define VPC_GPUIDLECYCLES (VPG_GPU + GPU_IDLECYCLES)
4370
4371 /* HW: Shader Counters. */
4372 #define VPC_VSINSTCOUNT (VPG_VS + VS_INSTCOUNT)
4373@@ -1026,9 +256,9 @@ extern "C" {
4374 #define VPC_VSTEXLDINSTCOUNT (VPG_VS + VS_TEXLDINSTCOUNT)
4375 #define VPC_VSRENDEREDVERTCOUNT (VPG_VS + VS_RENDEREDVERTCOUNT)
4376 /* HW: PS Count. */
4377-#define VPC_PSINSTCOUNT (VPG_PS + PS_INSTCOUNT)
4378-#define VPC_PSBRANCHINSTCOUNT (VPG_PS + PS_BRANCHINSTCOUNT)
4379-#define VPC_PSTEXLDINSTCOUNT (VPG_PS + PS_TEXLDINSTCOUNT)
4380+#define VPC_PSINSTCOUNT (VPG_PS + PS_INSTCOUNT)
4381+#define VPC_PSBRANCHINSTCOUNT (VPG_PS + PS_BRANCHINSTCOUNT)
4382+#define VPC_PSTEXLDINSTCOUNT (VPG_PS + PS_TEXLDINSTCOUNT)
4383 #define VPC_PSRENDEREDPIXCOUNT (VPG_PS + PS_RENDEREDPIXCOUNT)
4384
4385
4386@@ -1071,7 +301,7 @@ extern "C" {
4387 #define VPC_PEDRAWNBYDEPTH (VPG_PE + PE_DRAWNBYDEPTH)
4388
4389 /* HW: MC Counters. */
4390-#define VPC_MCREADREQ8BPIPE (VPG_MC + MC_READREQ8BPIPE)
4391+#define VPC_MCREADREQ8BPIPE (VPG_MC + MC_READREQ8BPIPE)
4392 #define VPC_MCREADREQ8BIP (VPG_MC + MC_READREQ8BIP)
4393 #define VPC_MCWRITEREQ8BPIPE (VPG_MC + MC_WRITEREQ8BPIPE)
4394
4395@@ -1087,6 +317,7 @@ extern "C" {
4396 #define VPC_PVSATTRIBCOUNT (VPG_PVS + PVS_ATTRIBCOUNT)
4397 #define VPC_PVSUNIFORMCOUNT (VPG_PVS + PVS_UNIFORMCOUNT)
4398 #define VPC_PVSFUNCTIONCOUNT (VPG_PVS + PVS_FUNCTIONCOUNT)
4399+#define VPC_PVSSOURCE (VPG_PVS + PVS_SOURCE)
4400
4401 #define VPC_PPSINSTRCOUNT (VPG_PPS + PPS_INSTRCOUNT)
4402 #define VPC_PPSALUINSTRCOUNT (VPG_PPS + PPS_ALUINSTRCOUNT)
4403@@ -1094,7 +325,9 @@ extern "C" {
4404 #define VPC_PPSATTRIBCOUNT (VPG_PPS + PPS_ATTRIBCOUNT)
4405 #define VPC_PPSUNIFORMCOUNT (VPG_PPS + PPS_UNIFORMCOUNT)
4406 #define VPC_PPSFUNCTIONCOUNT (VPG_PPS + PPS_FUNCTIONCOUNT)
4407+#define VPC_PPSSOURCE (VPG_PPS + PPS_SOURCE)
4408
4409+#define VPC_PROGRAMHANDLE (VPG_PROG + 1)
4410
4411 #define VPG_ES20_DRAW_NO (VPG_ES20_DRAW + 1)
4412 #define VPG_ES11_DRAW_NO (VPG_ES11_DRAW + 1)
4413@@ -1118,8 +351,8 @@ typedef struct _gcsPROFILER_COUNTERS
4414
4415 /* HW vairable counters. */
4416 gctUINT32 gpuCyclesCounter;
4417- gctUINT32 gpuTotalCyclesCounter;
4418- gctUINT32 gpuIdleCyclesCounter;
4419+ gctUINT32 gpuTotalCyclesCounter;
4420+ gctUINT32 gpuIdleCyclesCounter;
4421 gctUINT32 gpuTotalRead64BytesPerFrame;
4422 gctUINT32 gpuTotalWrite64BytesPerFrame;
4423
4424@@ -1158,7 +391,7 @@ typedef struct _gcsPROFILER_COUNTERS
4425 gctUINT32 ra_total_primitive_count;
4426 gctUINT32 ra_pipe_cache_miss_counter;
4427 gctUINT32 ra_prefetch_cache_miss_counter;
4428- gctUINT32 ra_eez_culled_counter;
4429+ gctUINT32 ra_eez_culled_counter;
4430
4431 /* TX */
4432 gctUINT32 tx_total_bilinear_requests;
4433@@ -1190,7 +423,7 @@ typedef struct _gcsPROFILER
4434 gctBOOL enableHal;
4435 gctBOOL enableHW;
4436 gctBOOL enableSH;
4437- gctBOOL isSyncMode;
4438+ gctBOOL isSyncMode;
4439
4440 gctBOOL useSocket;
4441 gctINT sockFd;
4442@@ -1234,14 +467,17 @@ typedef struct _gcsPROFILER
4443 gctUINT32 redundantStateChangeCalls;
4444 #endif
4445
4446- gctUINT32 prevVSInstCount;
4447- gctUINT32 prevVSBranchInstCount;
4448- gctUINT32 prevVSTexInstCount;
4449- gctUINT32 prevVSVertexCount;
4450- gctUINT32 prevPSInstCount;
4451- gctUINT32 prevPSBranchInstCount;
4452- gctUINT32 prevPSTexInstCount;
4453- gctUINT32 prevPSPixelCount;
4454+ gctUINT32 prevVSInstCount;
4455+ gctUINT32 prevVSBranchInstCount;
4456+ gctUINT32 prevVSTexInstCount;
4457+ gctUINT32 prevVSVertexCount;
4458+ gctUINT32 prevPSInstCount;
4459+ gctUINT32 prevPSBranchInstCount;
4460+ gctUINT32 prevPSTexInstCount;
4461+ gctUINT32 prevPSPixelCount;
4462+
4463+ char* psSource;
4464+ char* vsSource;
4465
4466 }
4467 gcsPROFILER;
4468@@ -1315,6 +551,18 @@ gcoPROFILER_Count(
4469 IN gctINT Value
4470 );
4471
4472+gceSTATUS
4473+gcoPROFILER_ShaderSourceFS(
4474+ IN gcoHAL Hal,
4475+ IN char* source
4476+ );
4477+
4478+gceSTATUS
4479+gcoPROFILER_ShaderSourceVS(
4480+ IN gcoHAL Hal,
4481+ IN char* source
4482+ );
4483+
4484 /* Profile input vertex shader. */
4485 gceSTATUS
4486 gcoPROFILER_ShaderVS(
4487diff --git a/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_raster.h b/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_raster.h
4488index bc4171e..6e4d830 100644
4489--- a/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_raster.h
4490+++ b/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_raster.h
4491@@ -568,6 +568,23 @@ gco2D_MonoBlit(
4492 IN gceSURF_FORMAT DestFormat
4493 );
4494
4495+gceSTATUS
4496+gco2D_MonoBlitEx(
4497+ IN gco2D Engine,
4498+ IN gctPOINTER StreamBits,
4499+ IN gctINT32 StreamStride,
4500+ IN gctINT32 StreamWidth,
4501+ IN gctINT32 StreamHeight,
4502+ IN gctINT32 StreamX,
4503+ IN gctINT32 StreamY,
4504+ IN gctUINT32 FgColor,
4505+ IN gctUINT32 BgColor,
4506+ IN gcsRECT_PTR SrcRect,
4507+ IN gcsRECT_PTR DstRect,
4508+ IN gctUINT8 FgRop,
4509+ IN gctUINT8 BgRop
4510+ );
4511+
4512 /* Set kernel size. */
4513 gceSTATUS
4514 gco2D_SetKernelSize(
4515@@ -942,6 +959,15 @@ gco2D_SetSourceTileStatus(
4516 );
4517
4518 gceSTATUS
4519+gco2D_SetTargetTileStatus(
4520+ IN gco2D Engine,
4521+ IN gce2D_TILE_STATUS_CONFIG TileStatusConfig,
4522+ IN gceSURF_FORMAT CompressedFormat,
4523+ IN gctUINT32 ClearValue,
4524+ IN gctUINT32 GpuAddress
4525+ );
4526+
4527+gceSTATUS
4528 gco2D_QueryU32(
4529 IN gco2D Engine,
4530 IN gce2D_QUERY Item,
4531@@ -955,6 +981,28 @@ gco2D_SetStateU32(
4532 IN gctUINT32 Value
4533 );
4534
4535+gceSTATUS
4536+gco2D_SetStateArrayI32(
4537+ IN gco2D Engine,
4538+ IN gce2D_STATE State,
4539+ IN gctINT32_PTR Array,
4540+ IN gctINT32 ArraySize
4541+ );
4542+
4543+gceSTATUS
4544+gco2D_SetStateArrayU32(
4545+ IN gco2D Engine,
4546+ IN gce2D_STATE State,
4547+ IN gctUINT32_PTR Array,
4548+ IN gctINT32 ArraySize
4549+ );
4550+
4551+gceSTATUS
4552+gco2D_SetTargetRect(
4553+ IN gco2D Engine,
4554+ IN gcsRECT_PTR Rect
4555+ );
4556+
4557 #ifdef __cplusplus
4558 }
4559 #endif
4560diff --git a/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_types.h b/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_types.h
4561index 5c0877d..14801aa 100644
4562--- a/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_types.h
4563+++ b/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_types.h
4564@@ -128,6 +128,7 @@ typedef int gctBOOL;
4565 typedef gctBOOL * gctBOOL_PTR;
4566
4567 typedef int gctINT;
4568+typedef long gctLONG;
4569 typedef signed char gctINT8;
4570 typedef signed short gctINT16;
4571 typedef signed int gctINT32;
4572@@ -171,6 +172,7 @@ typedef void * gctFILE;
4573 typedef void * gctSIGNAL;
4574 typedef void * gctWINDOW;
4575 typedef void * gctIMAGE;
4576+typedef void * gctSYNC_POINT;
4577
4578 typedef void * gctSEMAPHORE;
4579
4580@@ -941,12 +943,19 @@ typedef struct _gcsHAL_FRAME_INFO
4581 OUT gctUINT readRequests[8];
4582 OUT gctUINT writeRequests[8];
4583
4584+ /* FE counters. */
4585+ OUT gctUINT drawCount;
4586+ OUT gctUINT vertexOutCount;
4587+ OUT gctUINT vertexMissCount;
4588+
4589 /* 3D counters. */
4590 OUT gctUINT vertexCount;
4591 OUT gctUINT primitiveCount;
4592 OUT gctUINT rejectedPrimitives;
4593 OUT gctUINT culledPrimitives;
4594 OUT gctUINT clippedPrimitives;
4595+ OUT gctUINT droppedPrimitives;
4596+ OUT gctUINT frustumClippedPrimitives;
4597 OUT gctUINT outPrimitives;
4598 OUT gctUINT inPrimitives;
4599 OUT gctUINT culledQuadCount;
4600@@ -964,18 +973,86 @@ typedef struct _gcsHAL_FRAME_INFO
4601 OUT gctUINT shaderCycles;
4602 OUT gctUINT vsInstructionCount;
4603 OUT gctUINT vsTextureCount;
4604+ OUT gctUINT vsBranchCount;
4605+ OUT gctUINT vsVertices;
4606 OUT gctUINT psInstructionCount;
4607 OUT gctUINT psTextureCount;
4608+ OUT gctUINT psBranchCount;
4609+ OUT gctUINT psPixels;
4610
4611 /* Texture counters. */
4612 OUT gctUINT bilinearRequests;
4613 OUT gctUINT trilinearRequests;
4614- OUT gctUINT txBytes8;
4615+ OUT gctUINT txBytes8[2];
4616 OUT gctUINT txHitCount;
4617 OUT gctUINT txMissCount;
4618 }
4619 gcsHAL_FRAME_INFO;
4620
4621+typedef enum _gcePATCH_ID
4622+{
4623+ gcePATCH_UNKNOWN = 0xFFFFFFFF,
4624+
4625+ /* Benchmark list*/
4626+ gcePATCH_GLB11 = 0x0,
4627+ gcePATCH_GLB21,
4628+ gcePATCH_GLB25,
4629+ gcePATCH_GLB27,
4630+
4631+ gcePATCH_BM21,
4632+ gcePATCH_MM,
4633+ gcePATCH_MM06,
4634+ gcePATCH_MM07,
4635+ gcePATCH_QUADRANT,
4636+ gcePATCH_ANTUTU,
4637+ gcePATCH_SMARTBENCH,
4638+ gcePATCH_JPCT,
4639+ gcePATCH_NENAMARK,
4640+ gcePATCH_NENAMARK2,
4641+ gcePATCH_NEOCORE,
4642+ gcePATCH_GLB,
4643+ gcePATCH_GB,
4644+ gcePATCH_RTESTVA,
4645+ gcePATCH_BMX,
4646+ gcePATCH_BMGUI,
4647+
4648+ /* Game list */
4649+ gcePATCH_NBA2013,
4650+ gcePATCH_BARDTALE,
4651+ gcePATCH_BUSPARKING3D,
4652+ gcePATCH_FISHBOODLE,
4653+ gcePATCH_SUBWAYSURFER,
4654+ gcePATCH_HIGHWAYDRIVER,
4655+ gcePATCH_PREMIUM,
4656+ gcePATCH_RACEILLEGAL,
4657+ gcePATCH_BLABLA,
4658+ gcePATCH_MEGARUN,
4659+ gcePATCH_GALAXYONFIRE2,
4660+ gcePATCH_GLOFTR3HM,
4661+ gcePATCH_GLOFTSXHM,
4662+ gcePATCH_GLOFTF3HM,
4663+ gcePATCH_GLOFTGANG,
4664+ gcePATCH_XRUNNER,
4665+ gcePATCH_WP,
4666+ gcePATCH_DEVIL,
4667+ gcePATCH_HOLYARCH,
4668+ gcePATCH_MUSE,
4669+ gcePATCH_SG,
4670+ gcePATCH_SIEGECRAFT,
4671+ gcePATCH_CARCHALLENGE,
4672+ gcePATCH_HEROESCALL,
4673+ gcePATCH_MONOPOLY,
4674+ gcePATCH_CTGL20,
4675+ gcePATCH_FIREFOX,
4676+ gcePATCH_CHORME,
4677+ gcePATCH_DUOKANTV,
4678+ gcePATCH_TESTAPP,
4679+
4680+ /* Count enum*/
4681+ gcePATCH_COUNT,
4682+}
4683+gcePATCH_ID;
4684+
4685 #if gcdLINK_QUEUE_SIZE
4686 typedef struct _gckLINKDATA * gckLINKDATA;
4687 struct _gckLINKDATA
4688diff --git a/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_version.h b/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_version.h
4689index 03cb4d6..2eab666 100644
4690--- a/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_version.h
4691+++ b/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_version.h
4692@@ -28,7 +28,7 @@
4693
4694 #define gcvVERSION_PATCH 9
4695
4696-#define gcvVERSION_BUILD 6622
4697+#define gcvVERSION_BUILD 9754
4698
4699 #define gcvVERSION_DATE __DATE__
4700
4701diff --git a/drivers/mxc/gpu-viv/hal/os/linux/kernel/gc_hal_kernel_device.c b/drivers/mxc/gpu-viv/hal/os/linux/kernel/gc_hal_kernel_device.c
4702index 4d48bd5..b029428 100644
4703--- a/drivers/mxc/gpu-viv/hal/os/linux/kernel/gc_hal_kernel_device.c
4704+++ b/drivers/mxc/gpu-viv/hal/os/linux/kernel/gc_hal_kernel_device.c
4705@@ -25,7 +25,9 @@
4706 #include <linux/mm.h>
4707 #include <linux/mman.h>
4708 #include <linux/slab.h>
4709+#if LINUX_VERSION_CODE < KERNEL_VERSION(3,10,0)
4710 #include <mach/hardware.h>
4711+#endif
4712 #include <linux/pm_runtime.h>
4713
4714 #define _GC_OBJ_ZONE gcvZONE_DEVICE
4715@@ -305,6 +307,7 @@ gckGALDEVICE_Construct(
4716 IN gctUINT LogFileSize,
4717 IN struct device *pdev,
4718 IN gctINT PowerManagement,
4719+ IN gctINT GpuProfiler,
4720 OUT gckGALDEVICE *Device
4721 )
4722 {
4723@@ -369,6 +372,10 @@ gckGALDEVICE_Construct(
4724 #if LINUX_VERSION_CODE < KERNEL_VERSION(3,5,0)
4725 /*get gpu regulator*/
4726 device->gpu_regulator = regulator_get(pdev, "cpu_vddgpu");
4727+#elif LINUX_VERSION_CODE >= KERNEL_VERSION(3,10,0)
4728+ device->gpu_regulator = regulator_get(pdev, "vddpu");
4729+#endif
4730+#if LINUX_VERSION_CODE < KERNEL_VERSION(3,5,0) || LINUX_VERSION_CODE >= KERNEL_VERSION(3,10,0)
4731 if (IS_ERR(device->gpu_regulator)) {
4732 gcmkTRACE_ZONE(gcvLEVEL_ERROR, gcvZONE_DRIVER,
4733 "%s(%d): Failed to get gpu regulator %s/%s \n",
4734@@ -541,6 +548,10 @@ gckGALDEVICE_Construct(
4735 device->kernels[gcvCORE_MAJOR]->hardware, PowerManagement
4736 ));
4737
4738+ gcmkONERROR(gckHARDWARE_SetGpuProfiler(
4739+ device->kernels[gcvCORE_MAJOR]->hardware, GpuProfiler
4740+ ));
4741+
4742 #if COMMAND_PROCESSOR_VERSION == 1
4743 /* Start the command queue. */
4744 gcmkONERROR(gckCOMMAND_Start(device->kernels[gcvCORE_MAJOR]->command));
4745@@ -599,6 +610,7 @@ gckGALDEVICE_Construct(
4746 device->kernels[gcvCORE_2D]->hardware, PowerManagement
4747 ));
4748
4749+
4750 #if COMMAND_PROCESSOR_VERSION == 1
4751 /* Start the command queue. */
4752 gcmkONERROR(gckCOMMAND_Start(device->kernels[gcvCORE_2D]->command));
4753@@ -635,6 +647,7 @@ gckGALDEVICE_Construct(
4754 device->kernels[gcvCORE_VG]->vg->hardware,
4755 PowerManagement
4756 ));
4757+
4758 #endif
4759 }
4760 else
4761@@ -849,6 +862,7 @@ gckGALDEVICE_Construct(
4762 }
4763 else
4764 {
4765+#if LINUX_VERSION_CODE < KERNEL_VERSION(3,10,0)
4766 mem_region = request_mem_region(
4767 ContiguousBase, ContiguousSize, "galcore managed memory"
4768 );
4769@@ -864,6 +878,7 @@ gckGALDEVICE_Construct(
4770
4771 gcmkONERROR(gcvSTATUS_OUT_OF_RESOURCES);
4772 }
4773+#endif
4774
4775 device->requestedContiguousBase = ContiguousBase;
4776 device->requestedContiguousSize = ContiguousSize;
4777@@ -1107,7 +1122,7 @@ gckGALDEVICE_Destroy(
4778 pm_runtime_disable(Device->pmdev);
4779 #endif
4780
4781-#if LINUX_VERSION_CODE < KERNEL_VERSION(3,5,0)
4782+#if LINUX_VERSION_CODE < KERNEL_VERSION(3,5,0) || LINUX_VERSION_CODE >= KERNEL_VERSION(3,10,0)
4783 if (Device->gpu_regulator) {
4784 regulator_put(Device->gpu_regulator);
4785 Device->gpu_regulator = NULL;
4786diff --git a/drivers/mxc/gpu-viv/hal/os/linux/kernel/gc_hal_kernel_device.h b/drivers/mxc/gpu-viv/hal/os/linux/kernel/gc_hal_kernel_device.h
4787index dde4f03..c51432f 100644
4788--- a/drivers/mxc/gpu-viv/hal/os/linux/kernel/gc_hal_kernel_device.h
4789+++ b/drivers/mxc/gpu-viv/hal/os/linux/kernel/gc_hal_kernel_device.h
4790@@ -26,6 +26,15 @@
4791 ******************************* gckGALDEVICE Structure *******************************
4792 \******************************************************************************/
4793
4794+#if LINUX_VERSION_CODE >= KERNEL_VERSION(3,10,0)
4795+struct contiguous_mem_pool {
4796+ struct dma_attrs attrs;
4797+ dma_addr_t phys;
4798+ void *virt;
4799+ size_t size;
4800+};
4801+#endif
4802+
4803 typedef struct _gckGALDEVICE
4804 {
4805 /* Objects. */
4806@@ -91,12 +100,16 @@ typedef struct _gckGALDEVICE
4807 struct clk *clk_2d_axi;
4808 struct clk *clk_vg_axi;
4809
4810-#if LINUX_VERSION_CODE < KERNEL_VERSION(3,5,0)
4811+#if LINUX_VERSION_CODE < KERNEL_VERSION(3,5,0) || LINUX_VERSION_CODE >= KERNEL_VERSION(3,10,0)
4812 /*Power management.*/
4813 struct regulator *gpu_regulator;
4814 #endif
4815 /*Run time pm*/
4816 struct device *pmdev;
4817+#if LINUX_VERSION_CODE >= KERNEL_VERSION(3,10,0)
4818+ struct contiguous_mem_pool *pool;
4819+ struct reset_control *rstc[gcdMAX_GPU_COUNT];
4820+#endif
4821 }
4822 * gckGALDEVICE;
4823
4824@@ -171,6 +184,7 @@ gceSTATUS gckGALDEVICE_Construct(
4825 IN gctUINT LogFileSize,
4826 IN struct device *pdev,
4827 IN gctINT PowerManagement,
4828+ IN gctINT GpuProfiler,
4829 OUT gckGALDEVICE *Device
4830 );
4831
4832diff --git a/drivers/mxc/gpu-viv/hal/os/linux/kernel/gc_hal_kernel_driver.c b/drivers/mxc/gpu-viv/hal/os/linux/kernel/gc_hal_kernel_driver.c
4833index bacd531..88a7e4e6 100644
4834--- a/drivers/mxc/gpu-viv/hal/os/linux/kernel/gc_hal_kernel_driver.c
4835+++ b/drivers/mxc/gpu-viv/hal/os/linux/kernel/gc_hal_kernel_driver.c
4836@@ -1,7 +1,7 @@
4837 /****************************************************************************
4838 *
4839 * Copyright (C) 2005 - 2013 by Vivante Corp.
4840-* Copyright (C) 2011-2012 Freescale Semiconductor, Inc.
4841+* Copyright (C) 2011-2013 Freescale Semiconductor, Inc.
4842 *
4843 * This program is free software; you can redistribute it and/or modify
4844 * it under the terms of the GNU General Public License as published by
4845@@ -69,14 +69,26 @@ task_notify_func(struct notifier_block *self, unsigned long val, void *data)
4846 #include <mach/viv_gpu.h>
4847 #else
4848 #include <linux/pm_runtime.h>
4849+#if LINUX_VERSION_CODE < KERNEL_VERSION(3,10,0)
4850 #include <mach/busfreq.h>
4851+#else
4852+#include <linux/reset.h>
4853+#endif
4854 #endif
4855 /* Zone used for header/footer. */
4856 #define _GC_OBJ_ZONE gcvZONE_DRIVER
4857
4858 #if gcdENABLE_FSCALE_VAL_ADJUST
4859+#if LINUX_VERSION_CODE >= KERNEL_VERSION(3,10,0)
4860+#include <linux/device_cooling.h>
4861+#define REG_THERMAL_NOTIFIER(a) register_devfreq_cooling_notifier(a);
4862+#define UNREG_THERMAL_NOTIFIER(a) unregister_devfreq_cooling_notifier(a);
4863+#else
4864 extern int register_thermal_notifier(struct notifier_block *nb);
4865 extern int unregister_thermal_notifier(struct notifier_block *nb);
4866+#define REG_THERMAL_NOTIFIER(a) register_thermal_notifier(a);
4867+#define UNREG_THERMAL_NOTIFIER(a) unregister_thermal_notifier(a);
4868+#endif
4869 #endif
4870
4871 MODULE_DESCRIPTION("Vivante Graphics Driver");
4872@@ -116,7 +128,11 @@ module_param(registerMemBaseVG, ulong, 0644);
4873 static ulong registerMemSizeVG = 2 << 10;
4874 module_param(registerMemSizeVG, ulong, 0644);
4875
4876+#if gcdENABLE_FSCALE_VAL_ADJUST
4877+static ulong contiguousSize = 128 << 20;
4878+#else
4879 static ulong contiguousSize = 4 << 20;
4880+#endif
4881 module_param(contiguousSize, ulong, 0644);
4882
4883 static ulong contiguousBase = 0;
4884@@ -134,6 +150,9 @@ module_param(compression, int, 0644);
4885 static int powerManagement = 1;
4886 module_param(powerManagement, int, 0644);
4887
4888+static int gpuProfiler = 0;
4889+module_param(gpuProfiler, int, 0644);
4890+
4891 static int signal = 48;
4892 module_param(signal, int, 0644);
4893
4894@@ -786,7 +805,9 @@ static int drv_init(struct device *pdev)
4895
4896 printk(KERN_INFO "Galcore version %d.%d.%d.%d\n",
4897 gcvVERSION_MAJOR, gcvVERSION_MINOR, gcvVERSION_PATCH, gcvVERSION_BUILD);
4898-
4899+ /* when enable gpu profiler, we need to turn off gpu powerMangement */
4900+ if(gpuProfiler)
4901+ powerManagement = 0;
4902 if (showArgs)
4903 {
4904 printk("galcore options:\n");
4905@@ -818,6 +839,7 @@ static int drv_init(struct device *pdev)
4906 printk(" physSize = 0x%08lX\n", physSize);
4907 printk(" logFileSize = %d KB \n", logFileSize);
4908 printk(" powerManagement = %d\n", powerManagement);
4909+ printk(" gpuProfiler = %d\n", gpuProfiler);
4910 #if ENABLE_GPU_CLOCK_BY_DRIVER
4911 printk(" coreClock = %lu\n", coreClock);
4912 #endif
4913@@ -841,9 +863,14 @@ static int drv_init(struct device *pdev)
4914 logFileSize,
4915 pdev,
4916 powerManagement,
4917+ gpuProfiler,
4918 &device
4919 ));
4920
4921+#if LINUX_VERSION_CODE >= KERNEL_VERSION(3,10,0)
4922+ device->pool = dev_get_drvdata(pdev);
4923+#endif
4924+
4925 /* Start the GAL device. */
4926 gcmkONERROR(gckGALDEVICE_Start(device));
4927
4928@@ -1028,11 +1055,18 @@ static struct notifier_block thermal_hot_pm_notifier = {
4929
4930
4931
4932+#if LINUX_VERSION_CODE >= KERNEL_VERSION(3, 8, 0)
4933+static int gpu_probe(struct platform_device *pdev)
4934+#else
4935 static int __devinit gpu_probe(struct platform_device *pdev)
4936+#endif
4937 {
4938 int ret = -ENODEV;
4939 struct resource* res;
4940-#if LINUX_VERSION_CODE >= KERNEL_VERSION(3,5,0)
4941+#if LINUX_VERSION_CODE >= KERNEL_VERSION(3,10,0)
4942+ struct contiguous_mem_pool *pool;
4943+ struct reset_control *rstc;
4944+#elif LINUX_VERSION_CODE >= KERNEL_VERSION(3,5,0)
4945 struct device_node *dn =pdev->dev.of_node;
4946 const u32 *prop;
4947 #else
4948@@ -1077,7 +1111,22 @@ static int __devinit gpu_probe(struct platform_device *pdev)
4949 registerMemSizeVG = res->end - res->start + 1;
4950 }
4951
4952-#if LINUX_VERSION_CODE >= KERNEL_VERSION(3,5,0)
4953+#if LINUX_VERSION_CODE >= KERNEL_VERSION(3,10,0)
4954+ pool = devm_kzalloc(&pdev->dev, sizeof(*pool), GFP_KERNEL);
4955+ if (!pool)
4956+ return -ENOMEM;
4957+ pool->size = contiguousSize;
4958+ init_dma_attrs(&pool->attrs);
4959+ dma_set_attr(DMA_ATTR_WRITE_COMBINE, &pool->attrs);
4960+ pool->virt = dma_alloc_attrs(&pdev->dev, pool->size, &pool->phys,
4961+ GFP_KERNEL, &pool->attrs);
4962+ if (!pool->virt) {
4963+ dev_err(&pdev->dev, "Failed to allocate contiguous memory\n");
4964+ return -ENOMEM;
4965+ }
4966+ contiguousBase = pool->phys;
4967+ dev_set_drvdata(&pdev->dev, pool);
4968+#elif LINUX_VERSION_CODE >= KERNEL_VERSION(3,5,0)
4969 prop = of_get_property(dn, "contiguousbase", NULL);
4970 if(prop)
4971 contiguousBase = *prop;
4972@@ -1095,30 +1144,56 @@ static int __devinit gpu_probe(struct platform_device *pdev)
4973
4974 if (!ret)
4975 {
4976+#if LINUX_VERSION_CODE >= KERNEL_VERSION(3,10,0)
4977+ rstc = devm_reset_control_get(&pdev->dev, "gpu3d");
4978+ galDevice->rstc[gcvCORE_MAJOR] = IS_ERR(rstc) ? NULL : rstc;
4979+
4980+ rstc = devm_reset_control_get(&pdev->dev, "gpu2d");
4981+ galDevice->rstc[gcvCORE_2D] = IS_ERR(rstc) ? NULL : rstc;
4982+
4983+ rstc = devm_reset_control_get(&pdev->dev, "gpuvg");
4984+ galDevice->rstc[gcvCORE_VG] = IS_ERR(rstc) ? NULL : rstc;
4985+#endif
4986 platform_set_drvdata(pdev, galDevice);
4987
4988 #if gcdENABLE_FSCALE_VAL_ADJUST
4989- if(galDevice->kernels[gcvCORE_MAJOR])
4990- register_thermal_notifier(&thermal_hot_pm_notifier);
4991+ if (galDevice->kernels[gcvCORE_MAJOR])
4992+ REG_THERMAL_NOTIFIER(&thermal_hot_pm_notifier);
4993 #endif
4994 gcmkFOOTER_NO();
4995 return ret;
4996 }
4997 #if gcdENABLE_FSCALE_VAL_ADJUST
4998- unregister_thermal_notifier(&thermal_hot_pm_notifier);
4999+ UNREG_THERMAL_NOTIFIER(&thermal_hot_pm_notifier);
5000+#endif
5001+#if LINUX_VERSION_CODE >= KERNEL_VERSION(3,10,0)
5002+ dma_free_attrs(&pdev->dev, pool->size, pool->virt, pool->phys,
5003+ &pool->attrs);
5004 #endif
5005 gcmkFOOTER_ARG(KERN_INFO "Failed to register gpu driver: %d\n", ret);
5006 return ret;
5007 }
5008
5009+#if LINUX_VERSION_CODE >= KERNEL_VERSION(3, 8, 0)
5010+static int gpu_remove(struct platform_device *pdev)
5011+#else
5012 static int __devexit gpu_remove(struct platform_device *pdev)
5013+#endif
5014 {
5015+#if LINUX_VERSION_CODE >= KERNEL_VERSION(3,10,0)
5016+ gckGALDEVICE device = platform_get_drvdata(pdev);
5017+ struct contiguous_mem_pool *pool = device->pool;
5018+#endif
5019 gcmkHEADER();
5020 #if gcdENABLE_FSCALE_VAL_ADJUST
5021 if(galDevice->kernels[gcvCORE_MAJOR])
5022- unregister_thermal_notifier(&thermal_hot_pm_notifier);
5023+ UNREG_THERMAL_NOTIFIER(&thermal_hot_pm_notifier);
5024 #endif
5025 drv_exit();
5026+#if LINUX_VERSION_CODE >= KERNEL_VERSION(3,10,0)
5027+ dma_free_attrs(&pdev->dev, pool->size, pool->virt, pool->phys,
5028+ &pool->attrs);
5029+#endif
5030 gcmkFOOTER_NO();
5031 return 0;
5032 }
5033@@ -1254,13 +1329,17 @@ MODULE_DEVICE_TABLE(of, mxs_gpu_dt_ids);
5034 #ifdef CONFIG_PM
5035 static int gpu_runtime_suspend(struct device *dev)
5036 {
5037+#if LINUX_VERSION_CODE < KERNEL_VERSION(3,10,0)
5038 release_bus_freq(BUS_FREQ_HIGH);
5039+#endif
5040 return 0;
5041 }
5042
5043 static int gpu_runtime_resume(struct device *dev)
5044 {
5045+#if LINUX_VERSION_CODE < KERNEL_VERSION(3,10,0)
5046 request_bus_freq(BUS_FREQ_HIGH);
5047+#endif
5048 return 0;
5049 }
5050
5051@@ -1284,7 +1363,11 @@ static const struct dev_pm_ops gpu_pm_ops = {
5052
5053 static struct platform_driver gpu_driver = {
5054 .probe = gpu_probe,
5055+#if LINUX_VERSION_CODE >= KERNEL_VERSION(3, 8, 0)
5056+ .remove = gpu_remove,
5057+#else
5058 .remove = __devexit_p(gpu_remove),
5059+#endif
5060
5061 .suspend = gpu_suspend,
5062 .resume = gpu_resume,
5063diff --git a/drivers/mxc/gpu-viv/hal/os/linux/kernel/gc_hal_kernel_os.c b/drivers/mxc/gpu-viv/hal/os/linux/kernel/gc_hal_kernel_os.c
5064index e7edc39..331c73f 100644
5065--- a/drivers/mxc/gpu-viv/hal/os/linux/kernel/gc_hal_kernel_os.c
5066+++ b/drivers/mxc/gpu-viv/hal/os/linux/kernel/gc_hal_kernel_os.c
5067@@ -30,19 +30,30 @@
5068 #include <linux/dma-mapping.h>
5069 #include <linux/slab.h>
5070 #include <linux/idr.h>
5071+#if LINUX_VERSION_CODE < KERNEL_VERSION(3,10,0)
5072 #include <mach/hardware.h>
5073+#endif
5074 #include <linux/workqueue.h>
5075 #include <linux/idr.h>
5076 #if LINUX_VERSION_CODE > KERNEL_VERSION(2,6,23)
5077 #include <linux/math64.h>
5078 #endif
5079-#if LINUX_VERSION_CODE >= KERNEL_VERSION(3,5,0)
5080+#if LINUX_VERSION_CODE >= KERNEL_VERSION(3,10,0)
5081+#include <linux/reset.h>
5082+static inline void imx_gpc_power_up_pu(bool flag) {}
5083+#elif LINUX_VERSION_CODE >= KERNEL_VERSION(3,5,0)
5084 #include <mach/common.h>
5085 #endif
5086 #include <linux/delay.h>
5087 #include <linux/pm_runtime.h>
5088
5089
5090+#if gcdANDROID_NATIVE_FENCE_SYNC
5091+#include <linux/file.h>
5092+#include "gc_hal_kernel_sync.h"
5093+#endif
5094+
5095+
5096 #define _GC_OBJ_ZONE gcvZONE_OS
5097
5098 /*******************************************************************************
5099@@ -148,6 +159,7 @@ typedef struct _gcsINTEGER_DB
5100 {
5101 struct idr idr;
5102 spinlock_t lock;
5103+ gctINT curr;
5104 }
5105 gcsINTEGER_DB;
5106
5107@@ -180,6 +192,14 @@ struct _gckOS
5108 /* signal id database. */
5109 gcsINTEGER_DB signalDB;
5110
5111+#if gcdANDROID_NATIVE_FENCE_SYNC
5112+ /* Lock. */
5113+ gctPOINTER syncPointMutex;
5114+
5115+ /* sync point id database. */
5116+ gcsINTEGER_DB syncPointDB;
5117+#endif
5118+
5119 gcsUSER_MAPPING_PTR userMap;
5120 gctPOINTER debugLock;
5121
5122@@ -215,6 +235,25 @@ typedef struct _gcsSIGNAL
5123 }
5124 gcsSIGNAL;
5125
5126+#if gcdANDROID_NATIVE_FENCE_SYNC
5127+typedef struct _gcsSYNC_POINT * gcsSYNC_POINT_PTR;
5128+typedef struct _gcsSYNC_POINT
5129+{
5130+ /* The reference counter. */
5131+ atomic_t ref;
5132+
5133+ /* State. */
5134+ atomic_t state;
5135+
5136+ /* timeline. */
5137+ struct sync_timeline * timeline;
5138+
5139+ /* ID. */
5140+ gctUINT32 id;
5141+}
5142+gcsSYNC_POINT;
5143+#endif
5144+
5145 typedef struct _gcsPageInfo * gcsPageInfo_PTR;
5146 typedef struct _gcsPageInfo
5147 {
5148@@ -767,7 +806,32 @@ _AllocateIntegerId(
5149 )
5150 {
5151 int result;
5152+ gctINT next;
5153+
5154+#if LINUX_VERSION_CODE >= KERNEL_VERSION(3, 9, 0)
5155+ idr_preload(GFP_KERNEL | gcdNOWARN);
5156
5157+ spin_lock(&Database->lock);
5158+
5159+ next = (Database->curr + 1 <= 0) ? 1 : Database->curr + 1;
5160+ result = idr_alloc(&Database->idr, KernelPointer, next, 0, GFP_ATOMIC);
5161+
5162+ if (!result)
5163+ {
5164+ Database->curr = *Id;
5165+ }
5166+
5167+ spin_unlock(&Database->lock);
5168+
5169+ idr_preload_end();
5170+
5171+ if (result < 0)
5172+ {
5173+ return gcvSTATUS_OUT_OF_RESOURCES;
5174+ }
5175+
5176+ *Id = result;
5177+#else
5178 again:
5179 if (idr_pre_get(&Database->idr, GFP_KERNEL | gcdNOWARN) == 0)
5180 {
5181@@ -776,8 +840,15 @@ again:
5182
5183 spin_lock(&Database->lock);
5184
5185- /* Try to get a id greater than 0. */
5186- result = idr_get_new_above(&Database->idr, KernelPointer, 1, Id);
5187+ next = (Database->curr + 1 <= 0) ? 1 : Database->curr + 1;
5188+
5189+ /* Try to get a id greater than current id. */
5190+ result = idr_get_new_above(&Database->idr, KernelPointer, next, Id);
5191+
5192+ if (!result)
5193+ {
5194+ Database->curr = *Id;
5195+ }
5196
5197 spin_unlock(&Database->lock);
5198
5199@@ -790,6 +861,7 @@ again:
5200 {
5201 return gcvSTATUS_OUT_OF_RESOURCES;
5202 }
5203+#endif
5204
5205 return gcvSTATUS_OK;
5206 }
5207@@ -1008,6 +1080,21 @@ gckOS_Construct(
5208 /* Initialize signal id database. */
5209 idr_init(&os->signalDB.idr);
5210
5211+#if gcdANDROID_NATIVE_FENCE_SYNC
5212+ /*
5213+ * Initialize the sync point manager.
5214+ */
5215+
5216+ /* Initialize mutex. */
5217+ gcmkONERROR(gckOS_CreateMutex(os, &os->syncPointMutex));
5218+
5219+ /* Initialize sync point id database lock. */
5220+ spin_lock_init(&os->syncPointDB.lock);
5221+
5222+ /* Initialize sync point id database. */
5223+ idr_init(&os->syncPointDB.idr);
5224+#endif
5225+
5226 #if gcdUSE_NON_PAGED_MEMORY_CACHE
5227 os->cacheSize = 0;
5228 os->cacheHead = gcvNULL;
5229@@ -1031,6 +1118,15 @@ gckOS_Construct(
5230 return gcvSTATUS_OK;
5231
5232 OnError:
5233+
5234+#if gcdANDROID_NATIVE_FENCE_SYNC
5235+ if (os->syncPointMutex != gcvNULL)
5236+ {
5237+ gcmkVERIFY_OK(
5238+ gckOS_DeleteMutex(os, os->syncPointMutex));
5239+ }
5240+#endif
5241+
5242 if (os->signalMutex != gcvNULL)
5243 {
5244 gcmkVERIFY_OK(
5245@@ -1104,6 +1200,15 @@ gckOS_Destroy(
5246 _FreeAllNonPagedMemoryCache(Os);
5247 #endif
5248
5249+#if gcdANDROID_NATIVE_FENCE_SYNC
5250+ /*
5251+ * Destroy the sync point manager.
5252+ */
5253+
5254+ /* Destroy the mutex. */
5255+ gcmkVERIFY_OK(gckOS_DeleteMutex(Os, Os->syncPointMutex));
5256+#endif
5257+
5258 /*
5259 * Destroy the signal manager.
5260 */
5261@@ -1961,12 +2066,6 @@ gckOS_AllocateNonPagedMemory(
5262 gcmkONERROR(gcvSTATUS_OUT_OF_MEMORY);
5263 }
5264
5265- if ((Os->device->baseAddress & 0x80000000) != (mdl->dmaHandle & 0x80000000))
5266- {
5267- mdl->dmaHandle = (mdl->dmaHandle & ~0x80000000)
5268- | (Os->device->baseAddress & 0x80000000);
5269- }
5270-
5271 mdl->addr = addr;
5272
5273 /* Return allocated memory. */
5274@@ -2307,6 +2406,7 @@ gckOS_ReadRegisterEx(
5275
5276 /* Verify the arguments. */
5277 gcmkVERIFY_OBJECT(Os, gcvOBJ_OS);
5278+ gcmkVERIFY_ARGUMENT(Address < Os->device->requestedRegisterMemSizes[Core]);
5279 gcmkVERIFY_ARGUMENT(Data != gcvNULL);
5280
5281 *Data = readl((gctUINT8 *)Os->device->registerBases[Core] + Address);
5282@@ -2357,6 +2457,8 @@ gckOS_WriteRegisterEx(
5283 {
5284 gcmkHEADER_ARG("Os=0x%X Core=%d Address=0x%X Data=0x%08x", Os, Core, Address, Data);
5285
5286+ gcmkVERIFY_ARGUMENT(Address < Os->device->requestedRegisterMemSizes[Core]);
5287+
5288 writel(Data, (gctUINT8 *)Os->device->registerBases[Core] + Address);
5289
5290 /* Success. */
5291@@ -2799,16 +2901,25 @@ gckOS_MapPhysical(
5292
5293 if (mdl == gcvNULL)
5294 {
5295+#if LINUX_VERSION_CODE >= KERNEL_VERSION(3,10,0)
5296+ struct contiguous_mem_pool *pool = Os->device->pool;
5297+
5298+ if (Physical >= pool->phys && Physical < pool->phys + pool->size)
5299+ logical = (gctPOINTER)(Physical - pool->phys + pool->virt);
5300+ else
5301+ logical = gcvNULL;
5302+#else
5303 /* Map memory as cached memory. */
5304 request_mem_region(physical, Bytes, "MapRegion");
5305 logical = (gctPOINTER) ioremap_nocache(physical, Bytes);
5306+#endif
5307
5308 if (logical == gcvNULL)
5309 {
5310 gcmkTRACE_ZONE(
5311 gcvLEVEL_INFO, gcvZONE_OS,
5312- "%s(%d): Failed to ioremap",
5313- __FUNCTION__, __LINE__
5314+ "%s(%d): Failed to map physical address 0x%08x",
5315+ __FUNCTION__, __LINE__, Physical
5316 );
5317
5318 MEMORY_UNLOCK(Os);
5319@@ -3621,7 +3732,7 @@ gckOS_Delay(
5320 if (Delay > 0)
5321 {
5322 #if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 28)
5323- ktime_t delay = ktime_set(0, Delay * NSEC_PER_MSEC);
5324+ ktime_t delay = ktime_set(Delay/1000, (Delay%1000) * NSEC_PER_MSEC);
5325 __set_current_state(TASK_UNINTERRUPTIBLE);
5326 schedule_hrtimeout(&delay, HRTIMER_MODE_REL);
5327 #else
5328@@ -3881,8 +3992,13 @@ gckOS_AllocatePagedMemoryEx(
5329
5330 if (Contiguous)
5331 {
5332- /* Get contiguous pages, and suppress warning (stack dump) from kernel when
5333- we run out of memory. */
5334+ gctUINT32 order = get_order(bytes);
5335+
5336+ if (order >= MAX_ORDER)
5337+ {
5338+ gcmkONERROR(gcvSTATUS_OUT_OF_MEMORY);
5339+ }
5340+
5341 #if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 27)
5342 addr =
5343 alloc_pages_exact(numPages * PAGE_SIZE, GFP_KERNEL | gcdNOWARN | __GFP_NORETRY);
5344@@ -3894,12 +4010,12 @@ gckOS_AllocatePagedMemoryEx(
5345 mdl->exact = gcvTRUE;
5346 #else
5347 mdl->u.contiguousPages =
5348- alloc_pages(GFP_KERNEL | gcdNOWARN | __GFP_NORETRY, GetOrder(numPages));
5349+ alloc_pages(GFP_KERNEL | gcdNOWARN | __GFP_NORETRY, order);
5350 #endif
5351 if (mdl->u.contiguousPages == gcvNULL)
5352 {
5353 mdl->u.contiguousPages =
5354- alloc_pages(GFP_KERNEL | __GFP_HIGHMEM | gcdNOWARN, GetOrder(numPages));
5355+ alloc_pages(GFP_KERNEL | __GFP_HIGHMEM | gcdNOWARN, order);
5356
5357 #if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 27)
5358 mdl->exact = gcvFALSE;
5359@@ -4239,13 +4355,13 @@ gckOS_LockPages(
5360 }
5361
5362 mdlMap->vma->vm_flags |= gcdVM_FLAGS;
5363-#if !gcdPAGED_MEMORY_CACHEABLE
5364+
5365 if (Cacheable == gcvFALSE)
5366 {
5367 /* Make this mapping non-cached. */
5368 mdlMap->vma->vm_page_prot = gcmkPAGED_MEMROY_PROT(mdlMap->vma->vm_page_prot);
5369 }
5370-#endif
5371+
5372 addr = mdl->addr;
5373
5374 /* Now map all the vmalloc pages to this user address. */
5375@@ -5336,6 +5452,7 @@ OnError:
5376 {
5377 /* Get the user pages. */
5378 down_read(&current->mm->mmap_sem);
5379+
5380 result = get_user_pages(current,
5381 current->mm,
5382 memory & PAGE_MASK,
5383@@ -5345,105 +5462,127 @@ OnError:
5384 pages,
5385 gcvNULL
5386 );
5387+
5388 up_read(&current->mm->mmap_sem);
5389
5390 if (result <=0 || result < pageCount)
5391 {
5392 struct vm_area_struct *vma;
5393
5394- /* Free the page table. */
5395- if (pages != gcvNULL)
5396+ /* Release the pages if any. */
5397+ if (result > 0)
5398 {
5399- /* Release the pages if any. */
5400- if (result > 0)
5401+ for (i = 0; i < result; i++)
5402 {
5403- for (i = 0; i < result; i++)
5404+ if (pages[i] == gcvNULL)
5405 {
5406- if (pages[i] == gcvNULL)
5407- {
5408- break;
5409- }
5410-
5411- page_cache_release(pages[i]);
5412+ break;
5413 }
5414+
5415+ page_cache_release(pages[i]);
5416+ pages[i] = gcvNULL;
5417 }
5418
5419- kfree(pages);
5420- pages = gcvNULL;
5421+ result = 0;
5422 }
5423
5424 vma = find_vma(current->mm, memory);
5425
5426- if (vma && (vma->vm_flags & VM_PFNMAP) )
5427+ if (vma && (vma->vm_flags & VM_PFNMAP))
5428 {
5429 pte_t * pte;
5430 spinlock_t * ptl;
5431- unsigned long pfn;
5432+ gctUINTPTR_T logical = memory;
5433
5434- pgd_t * pgd = pgd_offset(current->mm, memory);
5435- pud_t * pud = pud_offset(pgd, memory);
5436- if (pud)
5437+ for (i = 0; i < pageCount; i++)
5438 {
5439- pmd_t * pmd = pmd_offset(pud, memory);
5440- pte = pte_offset_map_lock(current->mm, pmd, memory, &ptl);
5441- if (!pte)
5442+ pgd_t * pgd = pgd_offset(current->mm, logical);
5443+ pud_t * pud = pud_offset(pgd, logical);
5444+
5445+ if (pud)
5446+ {
5447+ pmd_t * pmd = pmd_offset(pud, logical);
5448+ pte = pte_offset_map_lock(current->mm, pmd, logical, &ptl);
5449+ if (!pte)
5450+ {
5451+ gcmkONERROR(gcvSTATUS_OUT_OF_RESOURCES);
5452+ }
5453+ }
5454+ else
5455 {
5456 gcmkONERROR(gcvSTATUS_OUT_OF_RESOURCES);
5457 }
5458+
5459+ pages[i] = pte_page(*pte);
5460+ pte_unmap_unlock(pte, ptl);
5461+
5462+ /* Advance to next. */
5463+ logical += PAGE_SIZE;
5464 }
5465- else
5466+ }
5467+ else
5468+ {
5469+ gcmkONERROR(gcvSTATUS_OUT_OF_RESOURCES);
5470+ }
5471+
5472+ /* Check if this memory is contiguous for old mmu. */
5473+ if (Os->device->kernels[Core]->hardware->mmuVersion == 0)
5474+ {
5475+ for (i = 1; i < pageCount; i++)
5476 {
5477- gcmkONERROR(gcvSTATUS_OUT_OF_RESOURCES);
5478+ if (pages[i] != nth_page(pages[0], i))
5479+ {
5480+ /* Non-contiguous. */
5481+ break;
5482+ }
5483 }
5484
5485- pfn = pte_pfn(*pte);
5486-
5487- physical = (pfn << PAGE_SHIFT) | (memory & ~PAGE_MASK);
5488+ if (i == pageCount)
5489+ {
5490+ /* Contiguous memory. */
5491+ physical = page_to_phys(pages[0]) | (memory & ~PAGE_MASK);
5492
5493- pte_unmap_unlock(pte, ptl);
5494+ if (!((physical - Os->device->baseAddress) & 0x80000000))
5495+ {
5496+ kfree(pages);
5497+ pages = gcvNULL;
5498
5499- if ((Os->device->kernels[Core]->hardware->mmuVersion == 0)
5500- && !((physical - Os->device->baseAddress) & 0x80000000))
5501- {
5502- info->pages = gcvNULL;
5503- info->pageTable = gcvNULL;
5504+ info->pages = gcvNULL;
5505+ info->pageTable = gcvNULL;
5506
5507- MEMORY_MAP_UNLOCK(Os);
5508+ MEMORY_MAP_UNLOCK(Os);
5509
5510- *Address = physical - Os->device->baseAddress;
5511- *Info = info;
5512+ *Address = physical - Os->device->baseAddress;
5513+ *Info = info;
5514
5515- gcmkFOOTER_ARG("*Info=0x%X *Address=0x%08x",
5516- *Info, *Address);
5517+ gcmkFOOTER_ARG("*Info=0x%X *Address=0x%08x",
5518+ *Info, *Address);
5519
5520- return gcvSTATUS_OK;
5521+ return gcvSTATUS_OK;
5522+ }
5523 }
5524 }
5525- else
5526+
5527+ /* Reference pages. */
5528+ for (i = 0; i < pageCount; i++)
5529 {
5530- gcmkONERROR(gcvSTATUS_OUT_OF_RESOURCES);
5531+ get_page(pages[i]);
5532 }
5533 }
5534 }
5535
5536- if (pages)
5537- {
5538- for (i = 0; i < pageCount; i++)
5539- {
5540- /* Flush(clean) the data cache. */
5541- gcmkONERROR(gckOS_CacheFlush(Os, _GetProcessID(), gcvNULL,
5542- (gctPOINTER)(gctUINTPTR_T)page_to_phys(pages[i]),
5543- (gctPOINTER)(memory & PAGE_MASK) + i*PAGE_SIZE,
5544- PAGE_SIZE));
5545- }
5546- }
5547- else
5548+ for (i = 0; i < pageCount; i++)
5549 {
5550+#ifdef CONFIG_ARM
5551+ gctUINT32 data;
5552+ get_user(data, (gctUINT32*)((memory & PAGE_MASK) + i * PAGE_SIZE));
5553+#endif
5554+
5555 /* Flush(clean) the data cache. */
5556 gcmkONERROR(gckOS_CacheFlush(Os, _GetProcessID(), gcvNULL,
5557- (gctPOINTER)(gctUINTPTR_T)(physical & PAGE_MASK),
5558- (gctPOINTER)(memory & PAGE_MASK),
5559- PAGE_SIZE * pageCount));
5560+ (gctPOINTER)(gctUINTPTR_T)page_to_phys(pages[i]),
5561+ (gctPOINTER)(memory & PAGE_MASK) + i*PAGE_SIZE,
5562+ PAGE_SIZE));
5563 }
5564
5565 #if gcdENABLE_VG
5566@@ -5464,20 +5603,14 @@ OnError:
5567 (gctPOINTER *) &pageTable,
5568 &address));
5569 }
5570+
5571 /* Fill the page table. */
5572 for (i = 0; i < pageCount; i++)
5573 {
5574 gctUINT32 phys;
5575 gctUINT32_PTR tab = pageTable + i * (PAGE_SIZE/4096);
5576
5577- if (pages)
5578- {
5579- phys = page_to_phys(pages[i]);
5580- }
5581- else
5582- {
5583- phys = (physical & PAGE_MASK) + i * PAGE_SIZE;
5584- }
5585+ phys = page_to_phys(pages[i]);
5586
5587 #if gcdENABLE_VG
5588 if (Core == gcvCORE_VG)
5589@@ -6126,7 +6259,7 @@ gckOS_CacheClean(
5590 #else
5591 dma_sync_single_for_device(
5592 gcvNULL,
5593- Physical,
5594+ (dma_addr_t)Physical,
5595 Bytes,
5596 DMA_TO_DEVICE);
5597 #endif
5598@@ -6205,7 +6338,7 @@ gckOS_CacheInvalidate(
5599 #else
5600 dma_sync_single_for_device(
5601 gcvNULL,
5602- Physical,
5603+ (dma_addr_t)Physical,
5604 Bytes,
5605 DMA_FROM_DEVICE);
5606 #endif
5607@@ -6279,7 +6412,7 @@ gckOS_CacheFlush(
5608 #else
5609 dma_sync_single_for_device(
5610 gcvNULL,
5611- Physical,
5612+ (dma_addr_t)Physical,
5613 Bytes,
5614 DMA_BIDIRECTIONAL);
5615 #endif
5616@@ -6827,6 +6960,9 @@ gckOS_SetGPUPower(
5617 struct clk *clk_2dcore = Os->device->clk_2d_core;
5618 struct clk *clk_2d_axi = Os->device->clk_2d_axi;
5619 struct clk *clk_vg_axi = Os->device->clk_vg_axi;
5620+#if LINUX_VERSION_CODE < KERNEL_VERSION(3,5,0) || LINUX_VERSION_CODE >= KERNEL_VERSION(3,10,0)
5621+ int ret;
5622+#endif
5623
5624 gctBOOL oldClockState = gcvFALSE;
5625 gctBOOL oldPowerState = gcvFALSE;
5626@@ -6852,9 +6988,13 @@ gckOS_SetGPUPower(
5627 }
5628 if((Power == gcvTRUE) && (oldPowerState == gcvFALSE))
5629 {
5630-#if LINUX_VERSION_CODE < KERNEL_VERSION(3,5,0)
5631- if(!IS_ERR(Os->device->gpu_regulator))
5632- regulator_enable(Os->device->gpu_regulator);
5633+#if LINUX_VERSION_CODE < KERNEL_VERSION(3,5,0) || LINUX_VERSION_CODE >= KERNEL_VERSION(3,10,0)
5634+ if(!IS_ERR(Os->device->gpu_regulator)) {
5635+ ret = regulator_enable(Os->device->gpu_regulator);
5636+ if (ret != 0)
5637+ gckOS_Print("%s(%d): fail to enable pu regulator %d!\n",
5638+ __FUNCTION__, __LINE__, ret);
5639+ }
5640 #else
5641 imx_gpc_power_up_pu(true);
5642 #endif
5643@@ -6969,7 +7109,7 @@ gckOS_SetGPUPower(
5644 pm_runtime_put_sync(Os->device->pmdev);
5645 #endif
5646
5647-#if LINUX_VERSION_CODE < KERNEL_VERSION(3,5,0)
5648+#if LINUX_VERSION_CODE < KERNEL_VERSION(3,5,0) || LINUX_VERSION_CODE >= KERNEL_VERSION(3,10,0)
5649 if(!IS_ERR(Os->device->gpu_regulator))
5650 regulator_disable(Os->device->gpu_regulator);
5651 #else
5652@@ -7033,6 +7173,10 @@ gckOS_ResetGPU(
5653 }
5654
5655 gcmkFOOTER_NO();
5656+#elif LINUX_VERSION_CODE >= KERNEL_VERSION(3,10,0)
5657+ struct reset_control *rstc = Os->device->rstc[Core];
5658+ if (rstc)
5659+ reset_control_reset(rstc);
5660 #else
5661 imx_src_reset_gpu((int)Core);
5662 #endif
5663@@ -8529,3 +8673,338 @@ gckOS_GetProcessNameByPid(
5664 return gcvSTATUS_OK;
5665 }
5666
5667+#if gcdANDROID_NATIVE_FENCE_SYNC
5668+
5669+gceSTATUS
5670+gckOS_CreateSyncPoint(
5671+ IN gckOS Os,
5672+ OUT gctSYNC_POINT * SyncPoint
5673+ )
5674+{
5675+ gceSTATUS status;
5676+ gcsSYNC_POINT_PTR syncPoint;
5677+
5678+ gcmkHEADER_ARG("Os=0x%X", Os);
5679+
5680+ /* Verify the arguments. */
5681+ gcmkVERIFY_OBJECT(Os, gcvOBJ_OS);
5682+
5683+ /* Create an sync point structure. */
5684+ syncPoint = (gcsSYNC_POINT_PTR) kmalloc(
5685+ sizeof(gcsSYNC_POINT), GFP_KERNEL | gcdNOWARN);
5686+
5687+ if (syncPoint == gcvNULL)
5688+ {
5689+ gcmkONERROR(gcvSTATUS_OUT_OF_MEMORY);
5690+ }
5691+
5692+ /* Initialize the sync point. */
5693+ atomic_set(&syncPoint->ref, 1);
5694+ atomic_set(&syncPoint->state, 0);
5695+
5696+ gcmkONERROR(_AllocateIntegerId(&Os->syncPointDB, syncPoint, &syncPoint->id));
5697+
5698+ *SyncPoint = (gctSYNC_POINT)(gctUINTPTR_T)syncPoint->id;
5699+
5700+ gcmkFOOTER_ARG("*SyncPonint=%d", syncPoint->id);
5701+ return gcvSTATUS_OK;
5702+
5703+OnError:
5704+ if (syncPoint != gcvNULL)
5705+ {
5706+ kfree(syncPoint);
5707+ }
5708+
5709+ gcmkFOOTER();
5710+ return status;
5711+}
5712+
5713+gceSTATUS
5714+gckOS_ReferenceSyncPoint(
5715+ IN gckOS Os,
5716+ IN gctSYNC_POINT SyncPoint
5717+ )
5718+{
5719+ gceSTATUS status;
5720+ gcsSYNC_POINT_PTR syncPoint;
5721+
5722+ gcmkHEADER_ARG("Os=0x%X", Os);
5723+
5724+ /* Verify the arguments. */
5725+ gcmkVERIFY_OBJECT(Os, gcvOBJ_OS);
5726+ gcmkVERIFY_ARGUMENT(SyncPoint != gcvNULL);
5727+
5728+ gcmkONERROR(
5729+ _QueryIntegerId(&Os->syncPointDB,
5730+ (gctUINT32)(gctUINTPTR_T)SyncPoint,
5731+ (gctPOINTER)&syncPoint));
5732+
5733+ /* Initialize the sync point. */
5734+ atomic_inc(&syncPoint->ref);
5735+
5736+ gcmkFOOTER_NO();
5737+ return gcvSTATUS_OK;
5738+
5739+OnError:
5740+ gcmkFOOTER();
5741+ return status;
5742+}
5743+
5744+gceSTATUS
5745+gckOS_DestroySyncPoint(
5746+ IN gckOS Os,
5747+ IN gctSYNC_POINT SyncPoint
5748+ )
5749+{
5750+ gceSTATUS status;
5751+ gcsSYNC_POINT_PTR syncPoint;
5752+ gctBOOL acquired = gcvFALSE;
5753+
5754+ gcmkHEADER_ARG("Os=0x%X SyncPoint=%d", Os, (gctUINT32)(gctUINTPTR_T)SyncPoint);
5755+
5756+ /* Verify the arguments. */
5757+ gcmkVERIFY_OBJECT(Os, gcvOBJ_OS);
5758+ gcmkVERIFY_ARGUMENT(SyncPoint != gcvNULL);
5759+
5760+ gcmkONERROR(gckOS_AcquireMutex(Os, Os->syncPointMutex, gcvINFINITE));
5761+ acquired = gcvTRUE;
5762+
5763+ gcmkONERROR(
5764+ _QueryIntegerId(&Os->syncPointDB,
5765+ (gctUINT32)(gctUINTPTR_T)SyncPoint,
5766+ (gctPOINTER)&syncPoint));
5767+
5768+ gcmkASSERT(syncPoint->id == (gctUINT32)(gctUINTPTR_T)SyncPoint);
5769+
5770+ if (atomic_dec_and_test(&syncPoint->ref))
5771+ {
5772+ gcmkVERIFY_OK(_DestroyIntegerId(&Os->syncPointDB, syncPoint->id));
5773+
5774+ /* Free the sgianl. */
5775+ syncPoint->timeline = gcvNULL;
5776+ kfree(syncPoint);
5777+ }
5778+
5779+ gcmkVERIFY_OK(gckOS_ReleaseMutex(Os, Os->syncPointMutex));
5780+ acquired = gcvFALSE;
5781+
5782+ /* Success. */
5783+ gcmkFOOTER_NO();
5784+ return gcvSTATUS_OK;
5785+
5786+OnError:
5787+ if (acquired)
5788+ {
5789+ /* Release the mutex. */
5790+ gcmkVERIFY_OK(gckOS_ReleaseMutex(Os, Os->syncPointMutex));
5791+ }
5792+
5793+ gcmkFOOTER();
5794+ return status;
5795+}
5796+
5797+gceSTATUS
5798+gckOS_SignalSyncPoint(
5799+ IN gckOS Os,
5800+ IN gctSYNC_POINT SyncPoint
5801+ )
5802+{
5803+ gceSTATUS status;
5804+ gcsSYNC_POINT_PTR syncPoint;
5805+ gctBOOL acquired = gcvFALSE;
5806+
5807+ gcmkHEADER_ARG("Os=0x%X SyncPoint=%d", Os, (gctUINT32)(gctUINTPTR_T)SyncPoint);
5808+
5809+ /* Verify the arguments. */
5810+ gcmkVERIFY_OBJECT(Os, gcvOBJ_OS);
5811+ gcmkVERIFY_ARGUMENT(SyncPoint != gcvNULL);
5812+
5813+ gcmkONERROR(gckOS_AcquireMutex(Os, Os->syncPointMutex, gcvINFINITE));
5814+ acquired = gcvTRUE;
5815+
5816+ gcmkONERROR(
5817+ _QueryIntegerId(&Os->syncPointDB,
5818+ (gctUINT32)(gctUINTPTR_T)SyncPoint,
5819+ (gctPOINTER)&syncPoint));
5820+
5821+ gcmkASSERT(syncPoint->id == (gctUINT32)(gctUINTPTR_T)SyncPoint);
5822+
5823+ /* Get state. */
5824+ atomic_set(&syncPoint->state, gcvTRUE);
5825+
5826+ /* Signal timeline. */
5827+ if (syncPoint->timeline)
5828+ {
5829+ sync_timeline_signal(syncPoint->timeline);
5830+ }
5831+
5832+ gcmkVERIFY_OK(gckOS_ReleaseMutex(Os, Os->syncPointMutex));
5833+ acquired = gcvFALSE;
5834+
5835+ /* Success. */
5836+ gcmkFOOTER_NO();
5837+ return gcvSTATUS_OK;
5838+
5839+OnError:
5840+ if (acquired)
5841+ {
5842+ /* Release the mutex. */
5843+ gcmkVERIFY_OK(gckOS_ReleaseMutex(Os, Os->syncPointMutex));
5844+ }
5845+
5846+ gcmkFOOTER();
5847+ return status;
5848+}
5849+
5850+gceSTATUS
5851+gckOS_QuerySyncPoint(
5852+ IN gckOS Os,
5853+ IN gctSYNC_POINT SyncPoint,
5854+ OUT gctBOOL_PTR State
5855+ )
5856+{
5857+ gceSTATUS status;
5858+ gcsSYNC_POINT_PTR syncPoint;
5859+
5860+ gcmkHEADER_ARG("Os=0x%X SyncPoint=%d", Os, (gctUINT32)(gctUINTPTR_T)SyncPoint);
5861+
5862+ /* Verify the arguments. */
5863+ gcmkVERIFY_OBJECT(Os, gcvOBJ_OS);
5864+ gcmkVERIFY_ARGUMENT(SyncPoint != gcvNULL);
5865+
5866+ gcmkONERROR(
5867+ _QueryIntegerId(&Os->syncPointDB,
5868+ (gctUINT32)(gctUINTPTR_T)SyncPoint,
5869+ (gctPOINTER)&syncPoint));
5870+
5871+ gcmkASSERT(syncPoint->id == (gctUINT32)(gctUINTPTR_T)SyncPoint);
5872+
5873+ /* Get state. */
5874+ *State = atomic_read(&syncPoint->state);
5875+
5876+ /* Success. */
5877+ gcmkFOOTER_ARG("*State=%d", *State);
5878+ return gcvSTATUS_OK;
5879+
5880+OnError:
5881+ gcmkFOOTER();
5882+ return status;
5883+}
5884+
5885+gceSTATUS
5886+gckOS_CreateSyncTimeline(
5887+ IN gckOS Os,
5888+ OUT gctHANDLE * Timeline
5889+ )
5890+{
5891+ struct viv_sync_timeline * timeline;
5892+
5893+ /* Create viv sync timeline. */
5894+ timeline = viv_sync_timeline_create("viv timeline", Os);
5895+
5896+ if (timeline == gcvNULL)
5897+ {
5898+ /* Out of memory. */
5899+ return gcvSTATUS_OUT_OF_MEMORY;
5900+ }
5901+
5902+ *Timeline = (gctHANDLE) timeline;
5903+ return gcvSTATUS_OK;
5904+}
5905+
5906+gceSTATUS
5907+gckOS_DestroySyncTimeline(
5908+ IN gckOS Os,
5909+ IN gctHANDLE Timeline
5910+ )
5911+{
5912+ struct viv_sync_timeline * timeline;
5913+ gcmkASSERT(Timeline != gcvNULL);
5914+
5915+ /* Destroy timeline. */
5916+ timeline = (struct viv_sync_timeline *) Timeline;
5917+ sync_timeline_destroy(&timeline->obj);
5918+
5919+ return gcvSTATUS_OK;
5920+}
5921+
5922+gceSTATUS
5923+gckOS_CreateNativeFence(
5924+ IN gckOS Os,
5925+ IN gctHANDLE Timeline,
5926+ IN gctSYNC_POINT SyncPoint,
5927+ OUT gctINT * FenceFD
5928+ )
5929+{
5930+ int fd = -1;
5931+ struct viv_sync_timeline *timeline;
5932+ struct sync_pt * pt = gcvNULL;
5933+ struct sync_fence * fence;
5934+ char name[32];
5935+ gcsSYNC_POINT_PTR syncPoint;
5936+ gceSTATUS status;
5937+
5938+ gcmkHEADER_ARG("Os=0x%X Timeline=0x%X SyncPoint=%d",
5939+ Os, Timeline, (gctUINT)(gctUINTPTR_T)SyncPoint);
5940+
5941+ gcmkONERROR(
5942+ _QueryIntegerId(&Os->syncPointDB,
5943+ (gctUINT32)(gctUINTPTR_T)SyncPoint,
5944+ (gctPOINTER)&syncPoint));
5945+
5946+ /* Cast timeline. */
5947+ timeline = (struct viv_sync_timeline *) Timeline;
5948+
5949+ fd = get_unused_fd();
5950+
5951+ if (fd < 0)
5952+ {
5953+ /* Out of resources. */
5954+ gcmkONERROR(gcvSTATUS_OUT_OF_RESOURCES);
5955+ }
5956+
5957+ /* Create viv_sync_pt. */
5958+ pt = viv_sync_pt_create(timeline, SyncPoint);
5959+
5960+ if (pt == gcvNULL)
5961+ {
5962+ gcmkONERROR(gcvSTATUS_OUT_OF_MEMORY);
5963+ }
5964+
5965+ /* Reference sync_timeline. */
5966+ syncPoint->timeline = &timeline->obj;
5967+
5968+ /* Build fence name. */
5969+ snprintf(name, 32, "viv sync_fence-%u", (gctUINT)(gctUINTPTR_T)SyncPoint);
5970+
5971+ /* Create sync_fence. */
5972+ fence = sync_fence_create(name, pt);
5973+
5974+ if (fence == NULL)
5975+ {
5976+ gcmkONERROR(gcvSTATUS_OUT_OF_MEMORY);
5977+ }
5978+
5979+ /* Install fence to fd. */
5980+ sync_fence_install(fence, fd);
5981+
5982+ *FenceFD = fd;
5983+ gcmkFOOTER_ARG("*FenceFD=%d", fd);
5984+ return gcvSTATUS_OK;
5985+
5986+OnError:
5987+ /* Error roll back. */
5988+ if (pt)
5989+ {
5990+ sync_pt_free(pt);
5991+ }
5992+
5993+ if (fd > 0)
5994+ {
5995+ put_unused_fd(fd);
5996+ }
5997+
5998+ gcmkFOOTER();
5999+ return status;
6000+}
6001+#endif
6002diff --git a/drivers/mxc/gpu-viv/hal/os/linux/kernel/gc_hal_kernel_sync.c b/drivers/mxc/gpu-viv/hal/os/linux/kernel/gc_hal_kernel_sync.c
6003new file mode 100644
6004index 0000000..7efae1c
6005--- /dev/null
6006+++ b/drivers/mxc/gpu-viv/hal/os/linux/kernel/gc_hal_kernel_sync.c
6007@@ -0,0 +1,174 @@
6008+/****************************************************************************
6009+*
6010+* Copyright (C) 2005 - 2013 by Vivante Corp.
6011+*
6012+* This program is free software; you can redistribute it and/or modify
6013+* it under the terms of the GNU General Public License as published by
6014+* the Free Software Foundation; either version 2 of the license, or
6015+* (at your option) any later version.
6016+*
6017+* This program is distributed in the hope that it will be useful,
6018+* but WITHOUT ANY WARRANTY; without even the implied warranty of
6019+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
6020+* GNU General Public License for more details.
6021+*
6022+* You should have received a copy of the GNU General Public License
6023+* along with this program; if not write to the Free Software
6024+* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
6025+*
6026+*****************************************************************************/
6027+
6028+
6029+#include <linux/kernel.h>
6030+#include <linux/file.h>
6031+#include <linux/fs.h>
6032+#include <linux/miscdevice.h>
6033+#include <linux/module.h>
6034+#include <linux/syscalls.h>
6035+#include <linux/uaccess.h>
6036+
6037+#include "gc_hal_kernel_sync.h"
6038+
6039+#if gcdANDROID_NATIVE_FENCE_SYNC
6040+
6041+static struct sync_pt *
6042+viv_sync_pt_dup(
6043+ struct sync_pt * sync_pt
6044+ )
6045+{
6046+ gceSTATUS status;
6047+ struct viv_sync_pt *pt;
6048+ struct viv_sync_pt *src;
6049+ struct viv_sync_timeline *obj;
6050+
6051+ src = (struct viv_sync_pt *) sync_pt;
6052+ obj = (struct viv_sync_timeline *) sync_pt->parent;
6053+
6054+ /* Create the new sync_pt. */
6055+ pt = (struct viv_sync_pt *)
6056+ sync_pt_create(&obj->obj, sizeof(struct viv_sync_pt));
6057+
6058+ pt->stamp = src->stamp;
6059+ pt->sync = src->sync;
6060+
6061+ /* Reference sync point. */
6062+ status = gckOS_ReferenceSyncPoint(obj->os, pt->sync);
6063+
6064+ if (gcmIS_ERROR(status))
6065+ {
6066+ sync_pt_free((struct sync_pt *)pt);
6067+ return NULL;
6068+ }
6069+
6070+ return (struct sync_pt *)pt;
6071+}
6072+
6073+static int
6074+viv_sync_pt_has_signaled(
6075+ struct sync_pt * sync_pt
6076+ )
6077+{
6078+ gceSTATUS status;
6079+ gctBOOL state;
6080+ struct viv_sync_pt * pt;
6081+ struct viv_sync_timeline * obj;
6082+
6083+ pt = (struct viv_sync_pt *)sync_pt;
6084+ obj = (struct viv_sync_timeline *)sync_pt->parent;
6085+
6086+ status = gckOS_QuerySyncPoint(obj->os, pt->sync, &state);
6087+
6088+ if (gcmIS_ERROR(status))
6089+ {
6090+ /* Error. */
6091+ return -1;
6092+ }
6093+
6094+ return state;
6095+}
6096+
6097+static int
6098+viv_sync_pt_compare(
6099+ struct sync_pt * a,
6100+ struct sync_pt * b
6101+ )
6102+{
6103+ int ret;
6104+ struct viv_sync_pt * pt1 = (struct viv_sync_pt *) a;
6105+ struct viv_sync_pt * pt2 = (struct viv_sync_pt *) b;
6106+
6107+ ret = (pt1->stamp < pt2->stamp) ? -1
6108+ : (pt1->stamp == pt2->stamp) ? 0
6109+ : 1;
6110+
6111+ return ret;
6112+}
6113+
6114+static void
6115+viv_sync_pt_free(
6116+ struct sync_pt * sync_pt
6117+ )
6118+{
6119+ struct viv_sync_pt * pt;
6120+ struct viv_sync_timeline * obj;
6121+
6122+ pt = (struct viv_sync_pt *) sync_pt;
6123+ obj = (struct viv_sync_timeline *) sync_pt->parent;
6124+
6125+ gckOS_DestroySyncPoint(obj->os, pt->sync);
6126+}
6127+
6128+static struct sync_timeline_ops viv_timeline_ops =
6129+{
6130+ .driver_name = "viv_sync",
6131+ .dup = viv_sync_pt_dup,
6132+ .has_signaled = viv_sync_pt_has_signaled,
6133+ .compare = viv_sync_pt_compare,
6134+ .free_pt = viv_sync_pt_free,
6135+};
6136+
6137+struct viv_sync_timeline *
6138+viv_sync_timeline_create(
6139+ const char * name,
6140+ gckOS os
6141+ )
6142+{
6143+ struct viv_sync_timeline * obj;
6144+
6145+ obj = (struct viv_sync_timeline *)
6146+ sync_timeline_create(&viv_timeline_ops, sizeof(struct viv_sync_timeline), name);
6147+
6148+ obj->os = os;
6149+ obj->stamp = 0;
6150+
6151+ return obj;
6152+}
6153+
6154+struct sync_pt *
6155+viv_sync_pt_create(
6156+ struct viv_sync_timeline * obj,
6157+ gctSYNC_POINT SyncPoint
6158+ )
6159+{
6160+ gceSTATUS status;
6161+ struct viv_sync_pt * pt;
6162+
6163+ pt = (struct viv_sync_pt *)
6164+ sync_pt_create(&obj->obj, sizeof(struct viv_sync_pt));
6165+
6166+ pt->stamp = obj->stamp++;
6167+ pt->sync = SyncPoint;
6168+
6169+ /* Dup signal. */
6170+ status = gckOS_ReferenceSyncPoint(obj->os, SyncPoint);
6171+
6172+ if (gcmIS_ERROR(status))
6173+ {
6174+ sync_pt_free((struct sync_pt *)pt);
6175+ return NULL;
6176+ }
6177+
6178+ return (struct sync_pt *) pt;
6179+}
6180+
6181+#endif
6182diff --git a/drivers/mxc/gpu-viv/hal/os/linux/kernel/gc_hal_kernel_sync.h b/drivers/mxc/gpu-viv/hal/os/linux/kernel/gc_hal_kernel_sync.h
6183new file mode 100644
6184index 0000000..6fc12e5
6185--- /dev/null
6186+++ b/drivers/mxc/gpu-viv/hal/os/linux/kernel/gc_hal_kernel_sync.h
6187@@ -0,0 +1,71 @@
6188+/****************************************************************************
6189+*
6190+* Copyright (C) 2005 - 2013 by Vivante Corp.
6191+*
6192+* This program is free software; you can redistribute it and/or modify
6193+* it under the terms of the GNU General Public License as published by
6194+* the Free Software Foundation; either version 2 of the license, or
6195+* (at your option) any later version.
6196+*
6197+* This program is distributed in the hope that it will be useful,
6198+* but WITHOUT ANY WARRANTY; without even the implied warranty of
6199+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
6200+* GNU General Public License for more details.
6201+*
6202+* You should have received a copy of the GNU General Public License
6203+* along with this program; if not write to the Free Software
6204+* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
6205+*
6206+*****************************************************************************/
6207+
6208+
6209+#ifndef __gc_hal_kernel_sync_h_
6210+#define __gc_hal_kernel_sync_h_
6211+
6212+#include <linux/types.h>
6213+
6214+#include <linux/sync.h>
6215+
6216+#include <gc_hal.h>
6217+#include <gc_hal_base.h>
6218+
6219+struct viv_sync_timeline
6220+{
6221+ /* Parent object. */
6222+ struct sync_timeline obj;
6223+
6224+ /* Timestamp when sync_pt is created. */
6225+ gctUINT stamp;
6226+
6227+ /* Pointer to os struct. */
6228+ gckOS os;
6229+};
6230+
6231+
6232+struct viv_sync_pt
6233+{
6234+ /* Parent object. */
6235+ struct sync_pt pt;
6236+
6237+ /* Reference sync point*/
6238+ gctSYNC_POINT sync;
6239+
6240+ /* Timestamp when sync_pt is created. */
6241+ gctUINT stamp;
6242+};
6243+
6244+/* Create viv_sync_timeline object. */
6245+struct viv_sync_timeline *
6246+viv_sync_timeline_create(
6247+ const char * Name,
6248+ gckOS Os
6249+ );
6250+
6251+/* Create viv_sync_pt object. */
6252+struct sync_pt *
6253+viv_sync_pt_create(
6254+ struct viv_sync_timeline * Obj,
6255+ gctSYNC_POINT SyncPoint
6256+ );
6257+
6258+#endif /* __gc_hal_kernel_sync_h_ */
6259--
62601.7.9.5
6261
diff --git a/recipes-kernel/linux/linux-congatec-3.0.35/defconfig b/recipes-kernel/linux/linux-congatec-3.0.35/defconfig
new file mode 100644
index 0000000..fa861ea
--- /dev/null
+++ b/recipes-kernel/linux/linux-congatec-3.0.35/defconfig
@@ -0,0 +1,2684 @@
1#
2# Automatically generated make config: don't edit
3# Linux/arm 3.0.35 Kernel Configuration
4#
5CONFIG_ARM=y
6CONFIG_HAVE_PWM=y
7CONFIG_SYS_SUPPORTS_APM_EMULATION=y
8CONFIG_HAVE_SCHED_CLOCK=y
9CONFIG_GENERIC_GPIO=y
10# CONFIG_ARCH_USES_GETTIMEOFFSET is not set
11CONFIG_GENERIC_CLOCKEVENTS=y
12CONFIG_GENERIC_CLOCKEVENTS_BROADCAST=y
13CONFIG_KTIME_SCALAR=y
14CONFIG_HAVE_PROC_CPU=y
15CONFIG_STACKTRACE_SUPPORT=y
16CONFIG_LOCKDEP_SUPPORT=y
17CONFIG_TRACE_IRQFLAGS_SUPPORT=y
18CONFIG_HARDIRQS_SW_RESEND=y
19CONFIG_GENERIC_IRQ_PROBE=y
20CONFIG_GENERIC_LOCKBREAK=y
21CONFIG_RWSEM_GENERIC_SPINLOCK=y
22CONFIG_ARCH_HAS_CPUFREQ=y
23CONFIG_ARCH_HAS_CPU_IDLE_WAIT=y
24CONFIG_GENERIC_HWEIGHT=y
25CONFIG_GENERIC_CALIBRATE_DELAY=y
26CONFIG_ZONE_DMA=y
27CONFIG_NEED_DMA_MAP_STATE=y
28CONFIG_FIQ=y
29CONFIG_VECTORS_BASE=0xffff0000
30# CONFIG_ARM_PATCH_PHYS_VIRT is not set
31CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
32CONFIG_HAVE_IRQ_WORK=y
33CONFIG_IRQ_WORK=y
34
35#
36# General setup
37#
38CONFIG_EXPERIMENTAL=y
39CONFIG_INIT_ENV_ARG_LIMIT=32
40CONFIG_CROSS_COMPILE=""
41CONFIG_LOCALVERSION=""
42CONFIG_LOCALVERSION_AUTO=y
43CONFIG_HAVE_KERNEL_GZIP=y
44CONFIG_HAVE_KERNEL_LZMA=y
45CONFIG_HAVE_KERNEL_LZO=y
46CONFIG_KERNEL_GZIP=y
47# CONFIG_KERNEL_LZMA is not set
48# CONFIG_KERNEL_LZO is not set
49CONFIG_DEFAULT_HOSTNAME="(none)"
50CONFIG_SWAP=y
51CONFIG_SYSVIPC=y
52CONFIG_SYSVIPC_SYSCTL=y
53# CONFIG_POSIX_MQUEUE is not set
54# CONFIG_BSD_PROCESS_ACCT is not set
55# CONFIG_FHANDLE is not set
56# CONFIG_TASKSTATS is not set
57# CONFIG_AUDIT is not set
58CONFIG_HAVE_GENERIC_HARDIRQS=y
59
60#
61# IRQ subsystem
62#
63CONFIG_GENERIC_HARDIRQS=y
64CONFIG_HAVE_SPARSE_IRQ=y
65CONFIG_GENERIC_IRQ_SHOW=y
66# CONFIG_SPARSE_IRQ is not set
67
68#
69# RCU Subsystem
70#
71CONFIG_TREE_PREEMPT_RCU=y
72CONFIG_PREEMPT_RCU=y
73# CONFIG_RCU_TRACE is not set
74CONFIG_RCU_FANOUT=32
75# CONFIG_RCU_FANOUT_EXACT is not set
76# CONFIG_TREE_RCU_TRACE is not set
77# CONFIG_RCU_BOOST is not set
78CONFIG_IKCONFIG=y
79CONFIG_IKCONFIG_PROC=y
80CONFIG_LOG_BUF_SHIFT=14
81# CONFIG_CGROUPS is not set
82# CONFIG_NAMESPACES is not set
83# CONFIG_SCHED_AUTOGROUP is not set
84# CONFIG_SYSFS_DEPRECATED is not set
85# CONFIG_RELAY is not set
86CONFIG_BLK_DEV_INITRD=y
87CONFIG_INITRAMFS_SOURCE=""
88CONFIG_RD_GZIP=y
89# CONFIG_RD_BZIP2 is not set
90# CONFIG_RD_LZMA is not set
91# CONFIG_RD_XZ is not set
92# CONFIG_RD_LZO is not set
93# CONFIG_CC_OPTIMIZE_FOR_SIZE is not set
94CONFIG_SYSCTL=y
95CONFIG_ANON_INODES=y
96CONFIG_EXPERT=y
97CONFIG_UID16=y
98CONFIG_SYSCTL_SYSCALL=y
99CONFIG_KALLSYMS=y
100CONFIG_HOTPLUG=y
101CONFIG_PRINTK=y
102CONFIG_BUG=y
103CONFIG_ELF_CORE=y
104CONFIG_BASE_FULL=y
105CONFIG_FUTEX=y
106CONFIG_EPOLL=y
107CONFIG_SIGNALFD=y
108CONFIG_TIMERFD=y
109CONFIG_EVENTFD=y
110CONFIG_SHMEM=y
111CONFIG_AIO=y
112CONFIG_EMBEDDED=y
113CONFIG_HAVE_PERF_EVENTS=y
114CONFIG_PERF_USE_VMALLOC=y
115
116#
117# Kernel Performance Events And Counters
118#
119CONFIG_PERF_EVENTS=y
120# CONFIG_PERF_COUNTERS is not set
121CONFIG_VM_EVENT_COUNTERS=y
122CONFIG_SLUB_DEBUG=y
123CONFIG_COMPAT_BRK=y
124# CONFIG_SLAB is not set
125CONFIG_SLUB=y
126# CONFIG_SLOB is not set
127# CONFIG_PROFILING is not set
128CONFIG_HAVE_OPROFILE=y
129# CONFIG_KPROBES is not set
130CONFIG_HAVE_KPROBES=y
131CONFIG_HAVE_KRETPROBES=y
132CONFIG_USE_GENERIC_SMP_HELPERS=y
133CONFIG_HAVE_REGS_AND_STACK_ACCESS_API=y
134CONFIG_HAVE_CLK=y
135CONFIG_HAVE_DMA_API_DEBUG=y
136CONFIG_HAVE_HW_BREAKPOINT=y
137
138#
139# GCOV-based kernel profiling
140#
141# CONFIG_GCOV_KERNEL is not set
142CONFIG_HAVE_GENERIC_DMA_COHERENT=y
143CONFIG_SLABINFO=y
144CONFIG_RT_MUTEXES=y
145CONFIG_BASE_SMALL=0
146CONFIG_MODULES=y
147# CONFIG_MODULE_FORCE_LOAD is not set
148CONFIG_MODULE_UNLOAD=y
149CONFIG_MODULE_FORCE_UNLOAD=y
150CONFIG_MODVERSIONS=y
151# CONFIG_MODULE_SRCVERSION_ALL is not set
152CONFIG_STOP_MACHINE=y
153CONFIG_BLOCK=y
154CONFIG_LBDAF=y
155# CONFIG_BLK_DEV_BSG is not set
156# CONFIG_BLK_DEV_INTEGRITY is not set
157
158#
159# IO Schedulers
160#
161CONFIG_IOSCHED_NOOP=y
162CONFIG_IOSCHED_DEADLINE=y
163CONFIG_IOSCHED_CFQ=y
164# CONFIG_DEFAULT_DEADLINE is not set
165CONFIG_DEFAULT_CFQ=y
166# CONFIG_DEFAULT_NOOP is not set
167CONFIG_DEFAULT_IOSCHED="cfq"
168# CONFIG_INLINE_SPIN_TRYLOCK is not set
169# CONFIG_INLINE_SPIN_TRYLOCK_BH is not set
170# CONFIG_INLINE_SPIN_LOCK is not set
171# CONFIG_INLINE_SPIN_LOCK_BH is not set
172# CONFIG_INLINE_SPIN_LOCK_IRQ is not set
173# CONFIG_INLINE_SPIN_LOCK_IRQSAVE is not set
174# CONFIG_INLINE_SPIN_UNLOCK is not set
175# CONFIG_INLINE_SPIN_UNLOCK_BH is not set
176# CONFIG_INLINE_SPIN_UNLOCK_IRQ is not set
177# CONFIG_INLINE_SPIN_UNLOCK_IRQRESTORE is not set
178# CONFIG_INLINE_READ_TRYLOCK is not set
179# CONFIG_INLINE_READ_LOCK is not set
180# CONFIG_INLINE_READ_LOCK_BH is not set
181# CONFIG_INLINE_READ_LOCK_IRQ is not set
182# CONFIG_INLINE_READ_LOCK_IRQSAVE is not set
183# CONFIG_INLINE_READ_UNLOCK is not set
184# CONFIG_INLINE_READ_UNLOCK_BH is not set
185# CONFIG_INLINE_READ_UNLOCK_IRQ is not set
186# CONFIG_INLINE_READ_UNLOCK_IRQRESTORE is not set
187# CONFIG_INLINE_WRITE_TRYLOCK is not set
188# CONFIG_INLINE_WRITE_LOCK is not set
189# CONFIG_INLINE_WRITE_LOCK_BH is not set
190# CONFIG_INLINE_WRITE_LOCK_IRQ is not set
191# CONFIG_INLINE_WRITE_LOCK_IRQSAVE is not set
192# CONFIG_INLINE_WRITE_UNLOCK is not set
193# CONFIG_INLINE_WRITE_UNLOCK_BH is not set
194# CONFIG_INLINE_WRITE_UNLOCK_IRQ is not set
195# CONFIG_INLINE_WRITE_UNLOCK_IRQRESTORE is not set
196CONFIG_MUTEX_SPIN_ON_OWNER=y
197CONFIG_FREEZER=y
198
199#
200# System Type
201#
202CONFIG_MMU=y
203# CONFIG_ARCH_INTEGRATOR is not set
204# CONFIG_ARCH_REALVIEW is not set
205# CONFIG_ARCH_VERSATILE is not set
206# CONFIG_ARCH_VEXPRESS is not set
207# CONFIG_ARCH_AT91 is not set
208# CONFIG_ARCH_BCMRING is not set
209# CONFIG_ARCH_CLPS711X is not set
210# CONFIG_ARCH_CNS3XXX is not set
211# CONFIG_ARCH_GEMINI is not set
212# CONFIG_ARCH_EBSA110 is not set
213# CONFIG_ARCH_EP93XX is not set
214# CONFIG_ARCH_FOOTBRIDGE is not set
215CONFIG_ARCH_MXC=y
216# CONFIG_ARCH_MXS is not set
217# CONFIG_ARCH_NETX is not set
218# CONFIG_ARCH_H720X is not set
219# CONFIG_ARCH_IOP13XX is not set
220# CONFIG_ARCH_IOP32X is not set
221# CONFIG_ARCH_IOP33X is not set
222# CONFIG_ARCH_IXP23XX is not set
223# CONFIG_ARCH_IXP2000 is not set
224# CONFIG_ARCH_IXP4XX is not set
225# CONFIG_ARCH_DOVE is not set
226# CONFIG_ARCH_KIRKWOOD is not set
227# CONFIG_ARCH_LOKI is not set
228# CONFIG_ARCH_LPC32XX is not set
229# CONFIG_ARCH_MV78XX0 is not set
230# CONFIG_ARCH_ORION5X is not set
231# CONFIG_ARCH_MMP is not set
232# CONFIG_ARCH_KS8695 is not set
233# CONFIG_ARCH_W90X900 is not set
234# CONFIG_ARCH_NUC93X is not set
235# CONFIG_ARCH_TEGRA is not set
236# CONFIG_ARCH_PNX4008 is not set
237# CONFIG_ARCH_PXA is not set
238# CONFIG_ARCH_MSM is not set
239# CONFIG_ARCH_SHMOBILE is not set
240# CONFIG_ARCH_RPC is not set
241# CONFIG_ARCH_SA1100 is not set
242# CONFIG_ARCH_S3C2410 is not set
243# CONFIG_ARCH_S3C64XX is not set
244# CONFIG_ARCH_S5P64X0 is not set
245# CONFIG_ARCH_S5PC100 is not set
246# CONFIG_ARCH_S5PV210 is not set
247# CONFIG_ARCH_EXYNOS4 is not set
248# CONFIG_ARCH_SHARK is not set
249# CONFIG_ARCH_TCC_926 is not set
250# CONFIG_ARCH_U300 is not set
251# CONFIG_ARCH_U8500 is not set
252# CONFIG_ARCH_NOMADIK is not set
253# CONFIG_ARCH_DAVINCI is not set
254# CONFIG_ARCH_OMAP is not set
255# CONFIG_PLAT_SPEAR is not set
256# CONFIG_ARCH_VT8500 is not set
257CONFIG_GPIO_PCA953X=y
258# CONFIG_KEYBOARD_GPIO_POLLED is not set
259CONFIG_IMX_HAVE_PLATFORM_DMA=y
260CONFIG_IMX_HAVE_PLATFORM_FEC=y
261CONFIG_IMX_HAVE_PLATFORM_FLEXCAN=y
262CONFIG_IMX_HAVE_PLATFORM_FSL_USB2_UDC=y
263CONFIG_IMX_HAVE_PLATFORM_GPMI_NFC=y
264CONFIG_IMX_HAVE_PLATFORM_IMX2_WDT=y
265CONFIG_IMX_HAVE_PLATFORM_IMX_SNVS_RTC=y
266CONFIG_IMX_HAVE_PLATFORM_IMX_CAAM=y
267CONFIG_IMX_HAVE_PLATFORM_IMX_I2C=y
268CONFIG_IMX_HAVE_PLATFORM_IMX_SSI=y
269CONFIG_IMX_HAVE_PLATFORM_IMX_UART=y
270CONFIG_IMX_HAVE_PLATFORM_MXC_EHCI=y
271CONFIG_IMX_HAVE_PLATFORM_MXC_PWM=y
272CONFIG_IMX_HAVE_PLATFORM_SDHCI_ESDHC_IMX=y
273CONFIG_IMX_HAVE_PLATFORM_SPI_IMX=y
274CONFIG_IMX_HAVE_PLATFORM_IMX_IPUV3=y
275CONFIG_IMX_HAVE_PLATFORM_IMX_VPU=y
276CONFIG_IMX_HAVE_PLATFORM_IMX_DVFS=y
277CONFIG_IMX_HAVE_PLATFORM_AHCI=y
278CONFIG_IMX_HAVE_PLATFORM_IMX_OCOTP=y
279CONFIG_IMX_HAVE_PLATFORM_IMX_VIIM=y
280CONFIG_IMX_HAVE_PLATFORM_LDB=y
281CONFIG_IMX_HAVE_PLATFORM_IMX_SPDIF=y
282CONFIG_IMX_HAVE_PLATFORM_VIV_GPU=y
283CONFIG_IMX_HAVE_PLATFORM_MXC_HDMI=y
284CONFIG_IMX_HAVE_PLATFORM_IMX_ANATOP_THERMAL=y
285CONFIG_IMX_HAVE_PLATFORM_FSL_OTG=y
286CONFIG_IMX_HAVE_PLATFORM_FSL_USB_WAKEUP=y
287CONFIG_IMX_HAVE_PLATFORM_IMX_PM=y
288CONFIG_IMX_HAVE_PLATFORM_IMX_ASRC=y
289CONFIG_IMX_HAVE_PLATFORM_IMX_MIPI_CSI2=y
290CONFIG_IMX_HAVE_PLATFORM_IMX_VDOA=y
291CONFIG_IMX_HAVE_PLATFORM_IMX_PCIE=y
292
293#
294# Freescale MXC Implementations
295#
296# CONFIG_ARCH_MX1 is not set
297# CONFIG_ARCH_MX2 is not set
298# CONFIG_ARCH_MX25 is not set
299# CONFIG_ARCH_MX3 is not set
300# CONFIG_ARCH_MX503 is not set
301# CONFIG_ARCH_MX51 is not set
302CONFIG_ARCH_MX6=y
303# CONFIG_MACH_IMX_BLUETOOTH_RFKILL is not set
304CONFIG_ARCH_MX6Q=y
305CONFIG_FORCE_MAX_ZONEORDER=14
306CONFIG_SOC_IMX6Q=y
307# CONFIG_MACH_MX6Q_ARM2 is not set
308# CONFIG_MACH_MX6SL_ARM2 is not set
309# CONFIG_MACH_MX6SL_EVK is not set
310# CONFIG_MACH_MX6Q_SABRELITE is not set
311CONFIG_MACH_MX6Q_QMX6=y
312# CONFIG_MACH_MX6Q_SABRESD is not set
313# CONFIG_MACH_MX6Q_SABREAUTO is not set
314# CONFIG_MACH_MX6Q_HDMIDONGLE is not set
315
316#
317# MX6 Options:
318#
319# CONFIG_IMX_PCIE is not set
320CONFIG_USB_EHCI_ARC_H1=y
321CONFIG_USB_FSL_ARC_OTG=y
322# CONFIG_MX6_INTER_LDO_BYPASS is not set
323# CONFIG_MX6_CLK_FOR_BOOTUI_TRANS is not set
324# CONFIG_MX6_ENET_IRQ_TO_GPIO is not set
325CONFIG_ISP1504_MXC=y
326# CONFIG_MXC_IRQ_PRIOR is not set
327CONFIG_MXC_PWM=y
328# CONFIG_MXC_DEBUG_BOARD is not set
329# CONFIG_MXC_REBOOT_MFGMODE is not set
330# CONFIG_MXC_REBOOT_ANDROID_CMD is not set
331CONFIG_ARCH_MXC_IOMUX_V3=y
332CONFIG_ARCH_MXC_AUDMUX_V2=y
333CONFIG_IRAM_ALLOC=y
334CONFIG_CLK_DEBUG=y
335CONFIG_DMA_ZONE_SIZE=184
336
337#
338# System MMU
339#
340
341#
342# Processor Type
343#
344CONFIG_CPU_V7=y
345CONFIG_CPU_32v6K=y
346CONFIG_CPU_32v7=y
347CONFIG_CPU_ABRT_EV7=y
348CONFIG_CPU_PABRT_V7=y
349CONFIG_CPU_CACHE_V7=y
350CONFIG_CPU_CACHE_VIPT=y
351CONFIG_CPU_COPY_V6=y
352CONFIG_CPU_TLB_V7=y
353CONFIG_CPU_HAS_ASID=y
354CONFIG_CPU_CP15=y
355CONFIG_CPU_CP15_MMU=y
356
357#
358# Processor Features
359#
360CONFIG_ARM_THUMB=y
361# CONFIG_ARM_THUMBEE is not set
362# CONFIG_SWP_EMULATE is not set
363# CONFIG_CPU_ICACHE_DISABLE is not set
364# CONFIG_CPU_DCACHE_DISABLE is not set
365# CONFIG_CPU_BPREDICT_DISABLE is not set
366CONFIG_OUTER_CACHE=y
367CONFIG_OUTER_CACHE_SYNC=y
368CONFIG_CACHE_L2X0=y
369CONFIG_CACHE_PL310=y
370CONFIG_ARM_L1_CACHE_SHIFT=5
371CONFIG_ARM_DMA_MEM_BUFFERABLE=y
372CONFIG_CPU_HAS_PMU=y
373# CONFIG_ARM_ERRATA_430973 is not set
374# CONFIG_ARM_ERRATA_458693 is not set
375# CONFIG_ARM_ERRATA_460075 is not set
376# CONFIG_ARM_ERRATA_742230 is not set
377# CONFIG_ARM_ERRATA_742231 is not set
378# CONFIG_PL310_ERRATA_588369 is not set
379# CONFIG_ARM_ERRATA_720789 is not set
380# CONFIG_PL310_ERRATA_727915 is not set
381CONFIG_ARM_ERRATA_743622=y
382CONFIG_ARM_ERRATA_751472=y
383# CONFIG_ARM_ERRATA_753970 is not set
384CONFIG_ARM_ERRATA_754322=y
385# CONFIG_ARM_ERRATA_754327 is not set
386CONFIG_ARM_GIC=y
387
388#
389# Bus support
390#
391CONFIG_ARM_AMBA=y
392# CONFIG_PCI_SYSCALL is not set
393CONFIG_ARCH_SUPPORTS_MSI=y
394# CONFIG_PCCARD is not set
395CONFIG_ARM_ERRATA_764369=y
396# CONFIG_PL310_ERRATA_769419 is not set
397
398#
399# Kernel Features
400#
401CONFIG_TICK_ONESHOT=y
402CONFIG_NO_HZ=y
403CONFIG_HIGH_RES_TIMERS=y
404CONFIG_GENERIC_CLOCKEVENTS_BUILD=y
405CONFIG_SMP=y
406CONFIG_SMP_ON_UP=y
407CONFIG_HAVE_ARM_SCU=y
408CONFIG_HAVE_ARM_TWD=y
409# CONFIG_VMSPLIT_3G is not set
410CONFIG_VMSPLIT_2G=y
411# CONFIG_VMSPLIT_1G is not set
412CONFIG_PAGE_OFFSET=0x80000000
413CONFIG_NR_CPUS=4
414CONFIG_HOTPLUG_CPU=y
415CONFIG_LOCAL_TIMERS=y
416# CONFIG_PREEMPT_NONE is not set
417# CONFIG_PREEMPT_VOLUNTARY is not set
418CONFIG_PREEMPT=y
419CONFIG_HZ=100
420# CONFIG_THUMB2_KERNEL is not set
421CONFIG_AEABI=y
422# CONFIG_OABI_COMPAT is not set
423# CONFIG_ARCH_SPARSEMEM_DEFAULT is not set
424# CONFIG_ARCH_SELECT_MEMORY_MODEL is not set
425CONFIG_HAVE_ARCH_PFN_VALID=y
426CONFIG_HIGHMEM=y
427# CONFIG_HIGHPTE is not set
428CONFIG_HW_PERF_EVENTS=y
429CONFIG_SELECT_MEMORY_MODEL=y
430CONFIG_FLATMEM_MANUAL=y
431CONFIG_FLATMEM=y
432CONFIG_FLAT_NODE_MEM_MAP=y
433CONFIG_HAVE_MEMBLOCK=y
434CONFIG_PAGEFLAGS_EXTENDED=y
435CONFIG_SPLIT_PTLOCK_CPUS=4
436CONFIG_COMPACTION=y
437CONFIG_MIGRATION=y
438# CONFIG_PHYS_ADDR_T_64BIT is not set
439CONFIG_ZONE_DMA_FLAG=1
440CONFIG_BOUNCE=y
441CONFIG_VIRT_TO_BUS=y
442CONFIG_KSM=y
443CONFIG_DEFAULT_MMAP_MIN_ADDR=4096
444# CONFIG_CLEANCACHE is not set
445CONFIG_ALIGNMENT_TRAP=y
446# CONFIG_UACCESS_WITH_MEMCPY is not set
447# CONFIG_SECCOMP is not set
448# CONFIG_CC_STACKPROTECTOR is not set
449# CONFIG_DEPRECATED_PARAM_STRUCT is not set
450
451#
452# Boot options
453#
454# CONFIG_USE_OF is not set
455CONFIG_ZBOOT_ROM_TEXT=0x0
456CONFIG_ZBOOT_ROM_BSS=0x0
457CONFIG_CMDLINE="noinitrd console=ttymxc0,115200 root=/dev/mtdblock2 rw rootfstype=jffs2 ip=off"
458CONFIG_CMDLINE_FROM_BOOTLOADER=y
459# CONFIG_CMDLINE_EXTEND is not set
460# CONFIG_CMDLINE_FORCE is not set
461# CONFIG_XIP_KERNEL is not set
462# CONFIG_KEXEC is not set
463# CONFIG_CRASH_DUMP is not set
464# CONFIG_AUTO_ZRELADDR is not set
465
466#
467# CPU Power Management
468#
469
470#
471# CPU Frequency scaling
472#
473CONFIG_CPU_FREQ=y
474CONFIG_CPU_FREQ_TABLE=y
475CONFIG_CPU_FREQ_STAT=y
476# CONFIG_CPU_FREQ_STAT_DETAILS is not set
477# CONFIG_CPU_FREQ_DEFAULT_GOV_PERFORMANCE is not set
478# CONFIG_CPU_FREQ_DEFAULT_GOV_POWERSAVE is not set
479# CONFIG_CPU_FREQ_DEFAULT_GOV_USERSPACE is not set
480# CONFIG_CPU_FREQ_DEFAULT_GOV_ONDEMAND is not set
481# CONFIG_CPU_FREQ_DEFAULT_GOV_CONSERVATIVE is not set
482CONFIG_CPU_FREQ_DEFAULT_GOV_INTERACTIVE=y
483# CONFIG_CPU_FREQ_GOV_PERFORMANCE is not set
484CONFIG_CPU_FREQ_GOV_POWERSAVE=y
485CONFIG_CPU_FREQ_GOV_USERSPACE=y
486# CONFIG_CPU_FREQ_GOV_ONDEMAND is not set
487CONFIG_CPU_FREQ_GOV_INTERACTIVE=y
488CONFIG_CPU_FREQ_GOV_CONSERVATIVE=y
489CONFIG_CPU_FREQ_IMX=y
490# CONFIG_CPU_IDLE is not set
491
492#
493# Floating point emulation
494#
495
496#
497# At least one emulation must be selected
498#
499CONFIG_VFP=y
500CONFIG_VFPv3=y
501CONFIG_NEON=y
502
503#
504# Userspace binary formats
505#
506CONFIG_BINFMT_ELF=y
507# CONFIG_CORE_DUMP_DEFAULT_ELF_HEADERS is not set
508CONFIG_HAVE_AOUT=y
509# CONFIG_BINFMT_AOUT is not set
510# CONFIG_BINFMT_MISC is not set
511
512#
513# Power management options
514#
515CONFIG_SUSPEND=y
516# CONFIG_PM_TEST_SUSPEND is not set
517CONFIG_SUSPEND_DEVICE_TIME_DEBUG=y
518CONFIG_SUSPEND_FREEZER=y
519CONFIG_PM_SLEEP=y
520CONFIG_PM_SLEEP_SMP=y
521CONFIG_PM_RUNTIME=y
522CONFIG_PM=y
523CONFIG_PM_DEBUG=y
524# CONFIG_PM_ADVANCED_DEBUG is not set
525CONFIG_CAN_PM_TRACE=y
526CONFIG_APM_EMULATION=y
527CONFIG_PM_RUNTIME_CLK=y
528CONFIG_ARCH_SUSPEND_POSSIBLE=y
529CONFIG_NET=y
530
531#
532# Networking options
533#
534CONFIG_PACKET=y
535CONFIG_UNIX=y
536CONFIG_XFRM=y
537# CONFIG_XFRM_USER is not set
538# CONFIG_XFRM_SUB_POLICY is not set
539# CONFIG_XFRM_MIGRATE is not set
540# CONFIG_XFRM_STATISTICS is not set
541# CONFIG_NET_KEY is not set
542CONFIG_INET=y
543CONFIG_IP_MULTICAST=y
544# CONFIG_IP_ADVANCED_ROUTER is not set
545CONFIG_IP_PNP=y
546CONFIG_IP_PNP_DHCP=y
547CONFIG_IP_PNP_BOOTP=y
548# CONFIG_IP_PNP_RARP is not set
549# CONFIG_NET_IPIP is not set
550# CONFIG_NET_IPGRE_DEMUX is not set
551# CONFIG_IP_MROUTE is not set
552# CONFIG_ARPD is not set
553# CONFIG_SYN_COOKIES is not set
554# CONFIG_INET_AH is not set
555# CONFIG_INET_ESP is not set
556# CONFIG_INET_IPCOMP is not set
557# CONFIG_INET_XFRM_TUNNEL is not set
558# CONFIG_INET_TUNNEL is not set
559CONFIG_INET_XFRM_MODE_TRANSPORT=y
560CONFIG_INET_XFRM_MODE_TUNNEL=y
561CONFIG_INET_XFRM_MODE_BEET=y
562# CONFIG_INET_LRO is not set
563CONFIG_INET_DIAG=y
564CONFIG_INET_TCP_DIAG=y
565# CONFIG_TCP_CONG_ADVANCED is not set
566CONFIG_TCP_CONG_CUBIC=y
567CONFIG_DEFAULT_TCP_CONG="cubic"
568# CONFIG_TCP_MD5SIG is not set
569# CONFIG_IPV6 is not set
570# CONFIG_NETWORK_SECMARK is not set
571# CONFIG_NETWORK_PHY_TIMESTAMPING is not set
572# CONFIG_NETFILTER is not set
573# CONFIG_IP_DCCP is not set
574# CONFIG_IP_SCTP is not set
575# CONFIG_RDS is not set
576# CONFIG_TIPC is not set
577# CONFIG_ATM is not set
578# CONFIG_L2TP is not set
579# CONFIG_BRIDGE is not set
580# CONFIG_NET_DSA is not set
581# CONFIG_VLAN_8021Q is not set
582# CONFIG_DECNET is not set
583# CONFIG_LLC2 is not set
584# CONFIG_IPX is not set
585# CONFIG_ATALK is not set
586# CONFIG_X25 is not set
587# CONFIG_LAPB is not set
588# CONFIG_ECONET is not set
589# CONFIG_WAN_ROUTER is not set
590# CONFIG_PHONET is not set
591# CONFIG_IEEE802154 is not set
592# CONFIG_NET_SCHED is not set
593# CONFIG_DCB is not set
594# CONFIG_BATMAN_ADV is not set
595CONFIG_RPS=y
596CONFIG_RFS_ACCEL=y
597CONFIG_XPS=y
598
599#
600# Network testing
601#
602# CONFIG_NET_PKTGEN is not set
603# CONFIG_HAMRADIO is not set
604CONFIG_CAN=y
605CONFIG_CAN_RAW=y
606CONFIG_CAN_BCM=y
607
608#
609# CAN Device Drivers
610#
611CONFIG_CAN_VCAN=y
612# CONFIG_CAN_SLCAN is not set
613CONFIG_CAN_DEV=y
614CONFIG_CAN_CALC_BITTIMING=y
615# CONFIG_CAN_MCP251X is not set
616CONFIG_HAVE_CAN_FLEXCAN=y
617CONFIG_CAN_FLEXCAN=y
618# CONFIG_CAN_SJA1000 is not set
619# CONFIG_CAN_C_CAN is not set
620
621#
622# CAN USB interfaces
623#
624# CONFIG_CAN_EMS_USB is not set
625# CONFIG_CAN_ESD_USB2 is not set
626# CONFIG_CAN_SOFTING is not set
627# CONFIG_CAN_DEBUG_DEVICES is not set
628# CONFIG_IRDA is not set
629CONFIG_BT=y
630CONFIG_BT_L2CAP=y
631CONFIG_BT_SCO=y
632CONFIG_BT_RFCOMM=y
633CONFIG_BT_RFCOMM_TTY=y
634CONFIG_BT_BNEP=y
635CONFIG_BT_BNEP_MC_FILTER=y
636CONFIG_BT_BNEP_PROTO_FILTER=y
637CONFIG_BT_HIDP=y
638
639#
640# Bluetooth device drivers
641#
642CONFIG_BT_HCIBTUSB=y
643# CONFIG_BT_HCIBTSDIO is not set
644CONFIG_BT_HCIUART=y
645# CONFIG_BT_HCIUART_H4 is not set
646# CONFIG_BT_HCIUART_BCSP is not set
647CONFIG_BT_HCIUART_ATH3K=y
648# CONFIG_BT_HCIUART_LL is not set
649# CONFIG_BT_HCIBCM203X is not set
650# CONFIG_BT_HCIBPA10X is not set
651# CONFIG_BT_HCIBFUSB is not set
652CONFIG_BT_HCIVHCI=y
653# CONFIG_BT_MRVL is not set
654# CONFIG_BT_ATH3K is not set
655# CONFIG_AF_RXRPC is not set
656CONFIG_WIRELESS=y
657CONFIG_WIRELESS_EXT=y
658CONFIG_WEXT_CORE=y
659CONFIG_WEXT_PROC=y
660CONFIG_WEXT_SPY=y
661CONFIG_WEXT_PRIV=y
662CONFIG_CFG80211=y
663# CONFIG_NL80211_TESTMODE is not set
664# CONFIG_CFG80211_DEVELOPER_WARNINGS is not set
665# CONFIG_CFG80211_REG_DEBUG is not set
666CONFIG_CFG80211_DEFAULT_PS=y
667# CONFIG_CFG80211_DEBUGFS is not set
668# CONFIG_CFG80211_INTERNAL_REGDB is not set
669CONFIG_CFG80211_WEXT=y
670CONFIG_WIRELESS_EXT_SYSFS=y
671CONFIG_LIB80211=y
672CONFIG_LIB80211_CRYPT_WEP=y
673CONFIG_LIB80211_CRYPT_CCMP=y
674CONFIG_LIB80211_CRYPT_TKIP=y
675# CONFIG_LIB80211_DEBUG is not set
676# CONFIG_MAC80211 is not set
677# CONFIG_WIMAX is not set
678CONFIG_RFKILL=y
679CONFIG_RFKILL_INPUT=y
680# CONFIG_RFKILL_REGULATOR is not set
681# CONFIG_RFKILL_GPIO is not set
682# CONFIG_NET_9P is not set
683# CONFIG_CAIF is not set
684# CONFIG_CEPH_LIB is not set
685
686#
687# Device Drivers
688#
689
690#
691# Generic Driver Options
692#
693CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug"
694CONFIG_DEVTMPFS=y
695CONFIG_DEVTMPFS_MOUNT=y
696CONFIG_STANDALONE=y
697CONFIG_PREVENT_FIRMWARE_BUILD=y
698CONFIG_FW_LOADER=y
699CONFIG_FIRMWARE_IN_KERNEL=y
700CONFIG_EXTRA_FIRMWARE=""
701# CONFIG_SYS_HYPERVISOR is not set
702CONFIG_CONNECTOR=y
703CONFIG_PROC_EVENTS=y
704CONFIG_MTD=y
705# CONFIG_MTD_DEBUG is not set
706# CONFIG_MTD_TESTS is not set
707# CONFIG_MTD_REDBOOT_PARTS is not set
708CONFIG_MTD_CMDLINE_PARTS=y
709# CONFIG_MTD_AFS_PARTS is not set
710# CONFIG_MTD_AR7_PARTS is not set
711
712#
713# User Modules And Translation Layers
714#
715CONFIG_MTD_CHAR=y
716CONFIG_MTD_BLKDEVS=y
717CONFIG_MTD_BLOCK=y
718# CONFIG_FTL is not set
719# CONFIG_NFTL is not set
720# CONFIG_INFTL is not set
721# CONFIG_RFD_FTL is not set
722# CONFIG_SSFDC is not set
723# CONFIG_SM_FTL is not set
724# CONFIG_MTD_OOPS is not set
725# CONFIG_MTD_SWAP is not set
726
727#
728# RAM/ROM/Flash chip drivers
729#
730# CONFIG_MTD_CFI is not set
731# CONFIG_MTD_JEDECPROBE is not set
732CONFIG_MTD_MAP_BANK_WIDTH_1=y
733CONFIG_MTD_MAP_BANK_WIDTH_2=y
734CONFIG_MTD_MAP_BANK_WIDTH_4=y
735# CONFIG_MTD_MAP_BANK_WIDTH_8 is not set
736# CONFIG_MTD_MAP_BANK_WIDTH_16 is not set
737# CONFIG_MTD_MAP_BANK_WIDTH_32 is not set
738CONFIG_MTD_CFI_I1=y
739CONFIG_MTD_CFI_I2=y
740# CONFIG_MTD_CFI_I4 is not set
741# CONFIG_MTD_CFI_I8 is not set
742# CONFIG_MTD_RAM is not set
743# CONFIG_MTD_ROM is not set
744# CONFIG_MTD_ABSENT is not set
745
746#
747# Mapping drivers for chip access
748#
749# CONFIG_MTD_COMPLEX_MAPPINGS is not set
750# CONFIG_MTD_PLATRAM is not set
751
752#
753# Self-contained MTD device drivers
754#
755# CONFIG_MTD_DATAFLASH is not set
756CONFIG_MTD_M25P80=y
757CONFIG_M25PXX_USE_FAST_READ=y
758# CONFIG_MTD_SST25L is not set
759# CONFIG_MTD_SLRAM is not set
760# CONFIG_MTD_PHRAM is not set
761# CONFIG_MTD_MTDRAM is not set
762# CONFIG_MTD_BLOCK2MTD is not set
763
764#
765# Disk-On-Chip Device Drivers
766#
767# CONFIG_MTD_DOC2000 is not set
768# CONFIG_MTD_DOC2001 is not set
769# CONFIG_MTD_DOC2001PLUS is not set
770CONFIG_MTD_NAND_ECC=y
771# CONFIG_MTD_NAND_ECC_SMC is not set
772CONFIG_MTD_NAND=y
773# CONFIG_MTD_NAND_VERIFY_WRITE is not set
774# CONFIG_MTD_NAND_ECC_BCH is not set
775# CONFIG_MTD_SM_COMMON is not set
776# CONFIG_MTD_NAND_MUSEUM_IDS is not set
777# CONFIG_MTD_NAND_GPIO is not set
778CONFIG_MTD_NAND_IDS=y
779# CONFIG_MTD_NAND_DISKONCHIP is not set
780# CONFIG_MTD_NAND_NANDSIM is not set
781# CONFIG_MTD_NAND_GPMI_NAND is not set
782# CONFIG_MTD_NAND_PLATFORM is not set
783# CONFIG_MTD_ALAUDA is not set
784# CONFIG_MTD_ONENAND is not set
785
786#
787# LPDDR flash memory drivers
788#
789# CONFIG_MTD_LPDDR is not set
790CONFIG_MTD_UBI=y
791CONFIG_MTD_UBI_WL_THRESHOLD=4096
792CONFIG_MTD_UBI_BEB_RESERVE=1
793# CONFIG_MTD_UBI_GLUEBI is not set
794# CONFIG_MTD_UBI_DEBUG is not set
795# CONFIG_PARPORT is not set
796CONFIG_BLK_DEV=y
797# CONFIG_BLK_DEV_COW_COMMON is not set
798CONFIG_BLK_DEV_LOOP=y
799# CONFIG_BLK_DEV_CRYPTOLOOP is not set
800# CONFIG_BLK_DEV_DRBD is not set
801# CONFIG_BLK_DEV_NBD is not set
802# CONFIG_BLK_DEV_UB is not set
803CONFIG_BLK_DEV_RAM=y
804CONFIG_BLK_DEV_RAM_COUNT=16
805CONFIG_BLK_DEV_RAM_SIZE=4096
806# CONFIG_BLK_DEV_XIP is not set
807# CONFIG_CDROM_PKTCDVD is not set
808# CONFIG_ATA_OVER_ETH is not set
809# CONFIG_MG_DISK is not set
810# CONFIG_BLK_DEV_RBD is not set
811# CONFIG_SENSORS_LIS3LV02D is not set
812CONFIG_MISC_DEVICES=y
813# CONFIG_AD525X_DPOT is not set
814# CONFIG_INTEL_MID_PTI is not set
815# CONFIG_ICS932S401 is not set
816# CONFIG_ENCLOSURE_SERVICES is not set
817# CONFIG_APDS9802ALS is not set
818# CONFIG_ISL29003 is not set
819# CONFIG_ISL29020 is not set
820# CONFIG_SENSORS_TSL2550 is not set
821# CONFIG_SENSORS_BH1780 is not set
822# CONFIG_SENSORS_BH1770 is not set
823# CONFIG_SENSORS_APDS990X is not set
824# CONFIG_HMC6352 is not set
825# CONFIG_DS1682 is not set
826# CONFIG_TI_DAC7512 is not set
827# CONFIG_BMP085 is not set
828CONFIG_MXS_PERFMON=m
829# CONFIG_C2PORT is not set
830
831#
832# EEPROM support
833#
834# CONFIG_EEPROM_AT24 is not set
835# CONFIG_EEPROM_AT25 is not set
836# CONFIG_EEPROM_LEGACY is not set
837# CONFIG_EEPROM_MAX6875 is not set
838# CONFIG_EEPROM_93CX6 is not set
839# CONFIG_IWMC3200TOP is not set
840
841#
842# Texas Instruments shared transport line discipline
843#
844# CONFIG_TI_ST is not set
845# CONFIG_SENSORS_LIS3_SPI is not set
846# CONFIG_SENSORS_LIS3_I2C is not set
847CONFIG_HAVE_IDE=y
848# CONFIG_IDE is not set
849
850#
851# SCSI device support
852#
853CONFIG_SCSI_MOD=y
854# CONFIG_RAID_ATTRS is not set
855CONFIG_SCSI=y
856CONFIG_SCSI_DMA=y
857# CONFIG_SCSI_TGT is not set
858# CONFIG_SCSI_NETLINK is not set
859CONFIG_SCSI_PROC_FS=y
860
861#
862# SCSI support type (disk, tape, CD-ROM)
863#
864CONFIG_BLK_DEV_SD=y
865# CONFIG_CHR_DEV_ST is not set
866# CONFIG_CHR_DEV_OSST is not set
867# CONFIG_BLK_DEV_SR is not set
868# CONFIG_CHR_DEV_SG is not set
869# CONFIG_CHR_DEV_SCH is not set
870CONFIG_SCSI_MULTI_LUN=y
871# CONFIG_SCSI_CONSTANTS is not set
872# CONFIG_SCSI_LOGGING is not set
873# CONFIG_SCSI_SCAN_ASYNC is not set
874CONFIG_SCSI_WAIT_SCAN=m
875
876#
877# SCSI Transports
878#
879# CONFIG_SCSI_SPI_ATTRS is not set
880# CONFIG_SCSI_FC_ATTRS is not set
881# CONFIG_SCSI_ISCSI_ATTRS is not set
882# CONFIG_SCSI_SAS_ATTRS is not set
883# CONFIG_SCSI_SAS_LIBSAS is not set
884# CONFIG_SCSI_SRP_ATTRS is not set
885CONFIG_SCSI_LOWLEVEL=y
886# CONFIG_ISCSI_TCP is not set
887# CONFIG_ISCSI_BOOT_SYSFS is not set
888# CONFIG_LIBFC is not set
889# CONFIG_LIBFCOE is not set
890# CONFIG_SCSI_DEBUG is not set
891# CONFIG_SCSI_DH is not set
892# CONFIG_SCSI_OSD_INITIATOR is not set
893CONFIG_ATA=y
894# CONFIG_ATA_NONSTANDARD is not set
895CONFIG_ATA_VERBOSE_ERROR=y
896# CONFIG_SATA_PMP is not set
897
898#
899# Controllers with non-SFF native interface
900#
901CONFIG_SATA_AHCI_PLATFORM=y
902CONFIG_ATA_SFF=y
903
904#
905# SFF controllers with custom DMA interface
906#
907CONFIG_ATA_BMDMA=y
908
909#
910# SATA SFF controllers with BMDMA
911#
912# CONFIG_SATA_MV is not set
913
914#
915# PATA SFF controllers with BMDMA
916#
917# CONFIG_PATA_ARASAN_CF is not set
918
919#
920# PIO-only SFF controllers
921#
922# CONFIG_PATA_PLATFORM is not set
923
924#
925# Generic fallback / legacy drivers
926#
927# CONFIG_MD is not set
928# CONFIG_TARGET_CORE is not set
929CONFIG_NETDEVICES=y
930# CONFIG_DUMMY is not set
931# CONFIG_BONDING is not set
932# CONFIG_MACVLAN is not set
933# CONFIG_EQUALIZER is not set
934# CONFIG_TUN is not set
935# CONFIG_VETH is not set
936CONFIG_MII=y
937CONFIG_PHYLIB=y
938
939#
940# MII PHY device drivers
941#
942# CONFIG_MARVELL_PHY is not set
943# CONFIG_DAVICOM_PHY is not set
944# CONFIG_QSEMI_PHY is not set
945# CONFIG_LXT_PHY is not set
946# CONFIG_CICADA_PHY is not set
947# CONFIG_VITESSE_PHY is not set
948# CONFIG_SMSC_PHY is not set
949# CONFIG_BROADCOM_PHY is not set
950# CONFIG_ICPLUS_PHY is not set
951# CONFIG_REALTEK_PHY is not set
952# CONFIG_NATIONAL_PHY is not set
953# CONFIG_STE10XP is not set
954# CONFIG_LSI_ET1011C_PHY is not set
955CONFIG_MICREL_PHY=y
956# CONFIG_FIXED_PHY is not set
957# CONFIG_MDIO_BITBANG is not set
958CONFIG_NET_ETHERNET=y
959# CONFIG_AX88796 is not set
960# CONFIG_SMC91X is not set
961# CONFIG_DM9000 is not set
962# CONFIG_ENC28J60 is not set
963# CONFIG_ETHOC is not set
964# CONFIG_SMC911X is not set
965CONFIG_SMSC911X=y
966# CONFIG_SMSC911X_ARCH_HOOKS is not set
967# CONFIG_DNET is not set
968# CONFIG_IBM_NEW_EMAC_ZMII is not set
969# CONFIG_IBM_NEW_EMAC_RGMII is not set
970# CONFIG_IBM_NEW_EMAC_TAH is not set
971# CONFIG_IBM_NEW_EMAC_EMAC4 is not set
972# CONFIG_IBM_NEW_EMAC_NO_FLOW_CTRL is not set
973# CONFIG_IBM_NEW_EMAC_MAL_CLR_ICINTSTAT is not set
974# CONFIG_IBM_NEW_EMAC_MAL_COMMON_ERR is not set
975# CONFIG_B44 is not set
976# CONFIG_KS8842 is not set
977# CONFIG_KS8851 is not set
978# CONFIG_KS8851_MLL is not set
979CONFIG_FEC=y
980# CONFIG_FEC_NAPI is not set
981# CONFIG_FEC_1588 is not set
982# CONFIG_FTMAC100 is not set
983# CONFIG_NETDEV_1000 is not set
984# CONFIG_NETDEV_10000 is not set
985CONFIG_WLAN=y
986# CONFIG_USB_ZD1201 is not set
987# CONFIG_USB_NET_RNDIS_WLAN is not set
988CONFIG_ATH_COMMON=m
989# CONFIG_ATH_DEBUG is not set
990CONFIG_ATH6KL=m
991# CONFIG_ATH6KL_DEBUG is not set
992CONFIG_HOSTAP=y
993# CONFIG_HOSTAP_FIRMWARE is not set
994# CONFIG_IWM is not set
995# CONFIG_LIBERTAS is not set
996# CONFIG_MWIFIEX is not set
997
998#
999# Enable WiMAX (Networking options) to see the WiMAX drivers
1000#
1001
1002#
1003# USB Network Adapters
1004#
1005# CONFIG_USB_CATC is not set
1006# CONFIG_USB_KAWETH is not set
1007# CONFIG_USB_PEGASUS is not set
1008# CONFIG_USB_RTL8150 is not set
1009# CONFIG_USB_USBNET is not set
1010# CONFIG_USB_HSO is not set
1011# CONFIG_USB_IPHETH is not set
1012# CONFIG_WAN is not set
1013
1014#
1015# CAIF transport drivers
1016#
1017# CONFIG_PPP is not set
1018# CONFIG_SLIP is not set
1019# CONFIG_NETCONSOLE is not set
1020# CONFIG_NETPOLL is not set
1021# CONFIG_NET_POLL_CONTROLLER is not set
1022# CONFIG_ISDN is not set
1023# CONFIG_PHONE is not set
1024
1025#
1026# Input device support
1027#
1028CONFIG_INPUT=y
1029# CONFIG_INPUT_FF_MEMLESS is not set
1030CONFIG_INPUT_POLLDEV=y
1031# CONFIG_INPUT_SPARSEKMAP is not set
1032
1033#
1034# Userland interfaces
1035#
1036CONFIG_INPUT_MOUSEDEV=y
1037CONFIG_INPUT_MOUSEDEV_PSAUX=y
1038CONFIG_INPUT_MOUSEDEV_SCREEN_X=1024
1039CONFIG_INPUT_MOUSEDEV_SCREEN_Y=768
1040# CONFIG_INPUT_JOYDEV is not set
1041CONFIG_INPUT_EVDEV=y
1042# CONFIG_INPUT_EVBUG is not set
1043# CONFIG_INPUT_APMPOWER is not set
1044
1045#
1046# Input Device Drivers
1047#
1048CONFIG_INPUT_KEYBOARD=y
1049# CONFIG_KEYBOARD_ADP5588 is not set
1050# CONFIG_KEYBOARD_ADP5589 is not set
1051CONFIG_KEYBOARD_ATKBD=y
1052# CONFIG_KEYBOARD_QT1070 is not set
1053# CONFIG_KEYBOARD_QT2160 is not set
1054# CONFIG_KEYBOARD_LKKBD is not set
1055CONFIG_KEYBOARD_GPIO=y
1056# CONFIG_KEYBOARD_TCA6416 is not set
1057# CONFIG_KEYBOARD_MATRIX is not set
1058# CONFIG_KEYBOARD_LM8323 is not set
1059# CONFIG_KEYBOARD_MAX7359 is not set
1060# CONFIG_KEYBOARD_MCS is not set
1061# CONFIG_KEYBOARD_MPR121 is not set
1062# CONFIG_KEYBOARD_IMX is not set
1063# CONFIG_KEYBOARD_NEWTON is not set
1064# CONFIG_KEYBOARD_OPENCORES is not set
1065# CONFIG_KEYBOARD_STOWAWAY is not set
1066# CONFIG_KEYBOARD_SUNKBD is not set
1067# CONFIG_KEYBOARD_XTKBD is not set
1068# CONFIG_INPUT_MOUSE is not set
1069# CONFIG_INPUT_JOYSTICK is not set
1070# CONFIG_INPUT_TABLET is not set
1071CONFIG_INPUT_TOUCHSCREEN=y
1072# CONFIG_TOUCHSCREEN_ADS7846 is not set
1073# CONFIG_TOUCHSCREEN_AD7877 is not set
1074# CONFIG_TOUCHSCREEN_AD7879 is not set
1075# CONFIG_TOUCHSCREEN_ATMEL_MXT is not set
1076# CONFIG_TOUCHSCREEN_BU21013 is not set
1077# CONFIG_TOUCHSCREEN_CY8CTMG110 is not set
1078# CONFIG_TOUCHSCREEN_DYNAPRO is not set
1079# CONFIG_TOUCHSCREEN_HAMPSHIRE is not set
1080# CONFIG_TOUCHSCREEN_EETI is not set
1081CONFIG_TOUCHSCREEN_EGALAX=y
1082# CONFIG_TOUCHSCREEN_ELAN is not set
1083# CONFIG_TOUCHSCREEN_EGALAX_SINGLE_TOUCH is not set
1084# CONFIG_TOUCHSCREEN_FUJITSU is not set
1085# CONFIG_TOUCHSCREEN_GUNZE is not set
1086# CONFIG_TOUCHSCREEN_ELO is not set
1087# CONFIG_TOUCHSCREEN_WACOM_W8001 is not set
1088# CONFIG_TOUCHSCREEN_MAX11801 is not set
1089# CONFIG_TOUCHSCREEN_MCS5000 is not set
1090# CONFIG_TOUCHSCREEN_MTOUCH is not set
1091# CONFIG_TOUCHSCREEN_INEXIO is not set
1092# CONFIG_TOUCHSCREEN_MK712 is not set
1093# CONFIG_TOUCHSCREEN_PENMOUNT is not set
1094# CONFIG_TOUCHSCREEN_TOUCHRIGHT is not set
1095# CONFIG_TOUCHSCREEN_TOUCHWIN is not set
1096# CONFIG_TOUCHSCREEN_WM97XX is not set
1097# CONFIG_TOUCHSCREEN_USB_COMPOSITE is not set
1098# CONFIG_TOUCHSCREEN_NOVATEK is not set
1099# CONFIG_TOUCHSCREEN_TOUCHIT213 is not set
1100# CONFIG_TOUCHSCREEN_TSC2005 is not set
1101# CONFIG_TOUCHSCREEN_TSC2007 is not set
1102# CONFIG_TOUCHSCREEN_W90X900 is not set
1103# CONFIG_TOUCHSCREEN_ST1232 is not set
1104# CONFIG_TOUCHSCREEN_P1003 is not set
1105# CONFIG_TOUCHSCREEN_TPS6507X is not set
1106CONFIG_INPUT_MISC=y
1107# CONFIG_INPUT_AD714X is not set
1108# CONFIG_INPUT_ATI_REMOTE is not set
1109# CONFIG_INPUT_ATI_REMOTE2 is not set
1110# CONFIG_INPUT_KEYSPAN_REMOTE is not set
1111# CONFIG_INPUT_POWERMATE is not set
1112# CONFIG_INPUT_YEALINK is not set
1113# CONFIG_INPUT_CM109 is not set
1114CONFIG_INPUT_UINPUT=y
1115# CONFIG_INPUT_PCF8574 is not set
1116# CONFIG_INPUT_PWM_BEEPER is not set
1117# CONFIG_INPUT_GPIO_ROTARY_ENCODER is not set
1118# CONFIG_INPUT_ADXL34X is not set
1119# CONFIG_INPUT_CMA3000 is not set
1120CONFIG_INPUT_ISL29023=y
1121
1122#
1123# Hardware I/O ports
1124#
1125CONFIG_SERIO=y
1126CONFIG_SERIO_SERPORT=y
1127# CONFIG_SERIO_AMBAKMI is not set
1128CONFIG_SERIO_LIBPS2=y
1129# CONFIG_SERIO_RAW is not set
1130# CONFIG_SERIO_ALTERA_PS2 is not set
1131# CONFIG_SERIO_PS2MULT is not set
1132# CONFIG_GAMEPORT is not set
1133
1134#
1135# Character devices
1136#
1137CONFIG_VT=y
1138CONFIG_CONSOLE_TRANSLATIONS=y
1139CONFIG_VT_CONSOLE=y
1140CONFIG_HW_CONSOLE=y
1141# CONFIG_VT_HW_CONSOLE_BINDING is not set
1142CONFIG_UNIX98_PTYS=y
1143# CONFIG_DEVPTS_MULTIPLE_INSTANCES is not set
1144CONFIG_LEGACY_PTYS=y
1145CONFIG_LEGACY_PTY_COUNT=256
1146# CONFIG_SERIAL_NONSTANDARD is not set
1147# CONFIG_N_GSM is not set
1148# CONFIG_TRACE_SINK is not set
1149CONFIG_DEVKMEM=y
1150
1151#
1152# Serial drivers
1153#
1154# CONFIG_SERIAL_8250 is not set
1155
1156#
1157# Non-8250 serial port support
1158#
1159# CONFIG_SERIAL_AMBA_PL010 is not set
1160# CONFIG_SERIAL_AMBA_PL011 is not set
1161# CONFIG_SERIAL_MAX3100 is not set
1162# CONFIG_SERIAL_MAX3107 is not set
1163CONFIG_SERIAL_IMX=y
1164CONFIG_SERIAL_IMX_CONSOLE=y
1165CONFIG_SERIAL_CORE=y
1166CONFIG_SERIAL_CORE_CONSOLE=y
1167# CONFIG_SERIAL_TIMBERDALE is not set
1168# CONFIG_SERIAL_ALTERA_JTAGUART is not set
1169# CONFIG_SERIAL_ALTERA_UART is not set
1170# CONFIG_SERIAL_IFX6X60 is not set
1171# CONFIG_SERIAL_XILINX_PS_UART is not set
1172# CONFIG_TTY_PRINTK is not set
1173CONFIG_FSL_OTP=y
1174# CONFIG_HVC_DCC is not set
1175# CONFIG_IPMI_HANDLER is not set
1176CONFIG_HW_RANDOM=y
1177# CONFIG_HW_RANDOM_TIMERIOMEM is not set
1178# CONFIG_R3964 is not set
1179# CONFIG_RAW_DRIVER is not set
1180# CONFIG_TCG_TPM is not set
1181# CONFIG_RAMOOPS is not set
1182CONFIG_MXS_VIIM=y
1183CONFIG_I2C=y
1184CONFIG_I2C_BOARDINFO=y
1185CONFIG_I2C_COMPAT=y
1186CONFIG_I2C_CHARDEV=y
1187# CONFIG_I2C_MUX is not set
1188CONFIG_I2C_HELPER_AUTO=y
1189
1190#
1191# I2C Hardware Bus support
1192#
1193
1194#
1195# I2C system bus drivers (mostly embedded / system-on-chip)
1196#
1197# CONFIG_I2C_DESIGNWARE is not set
1198# CONFIG_I2C_GPIO is not set
1199CONFIG_I2C_IMX=y
1200# CONFIG_I2C_OCORES is not set
1201# CONFIG_I2C_PCA_PLATFORM is not set
1202# CONFIG_I2C_PXA_PCI is not set
1203# CONFIG_I2C_SIMTEC is not set
1204# CONFIG_I2C_XILINX is not set
1205
1206#
1207# External I2C/SMBus adapter drivers
1208#
1209# CONFIG_I2C_DIOLAN_U2C is not set
1210# CONFIG_I2C_PARPORT_LIGHT is not set
1211# CONFIG_I2C_TAOS_EVM is not set
1212# CONFIG_I2C_TINY_USB is not set
1213
1214#
1215# Other I2C/SMBus bus drivers
1216#
1217# CONFIG_I2C_STUB is not set
1218# CONFIG_I2C_DEBUG_CORE is not set
1219# CONFIG_I2C_DEBUG_ALGO is not set
1220# CONFIG_I2C_DEBUG_BUS is not set
1221CONFIG_SPI=y
1222CONFIG_SPI_MASTER=y
1223
1224#
1225# SPI Master Controller Drivers
1226#
1227# CONFIG_SPI_ALTERA is not set
1228CONFIG_SPI_BITBANG=y
1229# CONFIG_SPI_GPIO is not set
1230CONFIG_SPI_IMX_VER_2_3=y
1231CONFIG_SPI_IMX=y
1232# CONFIG_SPI_OC_TINY is not set
1233# CONFIG_SPI_PL022 is not set
1234# CONFIG_SPI_PXA2XX_PCI is not set
1235# CONFIG_SPI_XILINX is not set
1236# CONFIG_SPI_DESIGNWARE is not set
1237
1238#
1239# SPI Protocol Masters
1240#
1241# CONFIG_SPI_SPIDEV is not set
1242# CONFIG_SPI_TLE62X0 is not set
1243
1244#
1245# PPS support
1246#
1247# CONFIG_PPS is not set
1248
1249#
1250# PPS generators support
1251#
1252
1253#
1254# PTP clock support
1255#
1256
1257#
1258# Enable Device Drivers -> PPS to see the PTP clock options.
1259#
1260CONFIG_ARCH_REQUIRE_GPIOLIB=y
1261CONFIG_GPIOLIB=y
1262CONFIG_GPIO_SYSFS=y
1263
1264#
1265# Memory mapped GPIO drivers:
1266#
1267# CONFIG_GPIO_BASIC_MMIO is not set
1268# CONFIG_GPIO_IT8761E is not set
1269# CONFIG_GPIO_PL061 is not set
1270
1271#
1272# I2C GPIO expanders:
1273#
1274# CONFIG_GPIO_MAX7300 is not set
1275# CONFIG_GPIO_MAX732X is not set
1276# CONFIG_GPIO_PCA953X_IRQ is not set
1277# CONFIG_GPIO_PCF857X is not set
1278# CONFIG_GPIO_SX150X is not set
1279# CONFIG_GPIO_WM8994 is not set
1280# CONFIG_GPIO_ADP5588 is not set
1281
1282#
1283# PCI GPIO expanders:
1284#
1285
1286#
1287# SPI GPIO expanders:
1288#
1289# CONFIG_GPIO_MAX7301 is not set
1290# CONFIG_GPIO_MCP23S08 is not set
1291# CONFIG_GPIO_MC33880 is not set
1292# CONFIG_GPIO_74X164 is not set
1293
1294#
1295# AC97 GPIO expanders:
1296#
1297
1298#
1299# MODULbus GPIO expanders:
1300#
1301# CONFIG_W1 is not set
1302CONFIG_POWER_SUPPLY=y
1303# CONFIG_POWER_SUPPLY_DEBUG is not set
1304# CONFIG_PDA_POWER is not set
1305# CONFIG_APM_POWER is not set
1306# CONFIG_TEST_POWER is not set
1307# CONFIG_BATTERY_DS2780 is not set
1308# CONFIG_BATTERY_DS2782 is not set
1309# CONFIG_BATTERY_BQ20Z75 is not set
1310# CONFIG_BATTERY_BQ27x00 is not set
1311# CONFIG_BATTERY_MAX17040 is not set
1312# CONFIG_BATTERY_MAX17042 is not set
1313# CONFIG_CHARGER_ISP1704 is not set
1314CONFIG_CHARGER_MAX8903=y
1315# CONFIG_SABRESD_MAX8903 is not set
1316# CONFIG_CHARGER_GPIO is not set
1317CONFIG_HWMON=y
1318# CONFIG_HWMON_VID is not set
1319# CONFIG_HWMON_DEBUG_CHIP is not set
1320
1321#
1322# Native drivers
1323#
1324# CONFIG_SENSORS_AD7414 is not set
1325# CONFIG_SENSORS_AD7418 is not set
1326# CONFIG_SENSORS_ADCXX is not set
1327# CONFIG_SENSORS_ADM1021 is not set
1328# CONFIG_SENSORS_ADM1025 is not set
1329# CONFIG_SENSORS_ADM1026 is not set
1330# CONFIG_SENSORS_ADM1029 is not set
1331# CONFIG_SENSORS_ADM1031 is not set
1332# CONFIG_SENSORS_ADM9240 is not set
1333# CONFIG_SENSORS_ADT7411 is not set
1334# CONFIG_SENSORS_ADT7462 is not set
1335# CONFIG_SENSORS_ADT7470 is not set
1336# CONFIG_SENSORS_ADT7475 is not set
1337# CONFIG_SENSORS_ASC7621 is not set
1338# CONFIG_SENSORS_ATXP1 is not set
1339# CONFIG_SENSORS_DS620 is not set
1340# CONFIG_SENSORS_DS1621 is not set
1341# CONFIG_SENSORS_F71805F is not set
1342# CONFIG_SENSORS_F71882FG is not set
1343# CONFIG_SENSORS_F75375S is not set
1344# CONFIG_SENSORS_G760A is not set
1345# CONFIG_SENSORS_GL518SM is not set
1346# CONFIG_SENSORS_GL520SM is not set
1347# CONFIG_SENSORS_GPIO_FAN is not set
1348# CONFIG_SENSORS_IT87 is not set
1349# CONFIG_SENSORS_JC42 is not set
1350# CONFIG_SENSORS_LINEAGE is not set
1351# CONFIG_SENSORS_LM63 is not set
1352# CONFIG_SENSORS_LM70 is not set
1353# CONFIG_SENSORS_LM73 is not set
1354# CONFIG_SENSORS_LM75 is not set
1355# CONFIG_SENSORS_LM77 is not set
1356# CONFIG_SENSORS_LM78 is not set
1357# CONFIG_SENSORS_LM80 is not set
1358# CONFIG_SENSORS_LM83 is not set
1359# CONFIG_SENSORS_LM85 is not set
1360# CONFIG_SENSORS_LM87 is not set
1361# CONFIG_SENSORS_LM90 is not set
1362# CONFIG_SENSORS_LM92 is not set
1363# CONFIG_SENSORS_LM93 is not set
1364# CONFIG_SENSORS_LTC4151 is not set
1365# CONFIG_SENSORS_LTC4215 is not set
1366# CONFIG_SENSORS_LTC4245 is not set
1367# CONFIG_SENSORS_LTC4261 is not set
1368# CONFIG_SENSORS_LM95241 is not set
1369# CONFIG_SENSORS_MAX1111 is not set
1370# CONFIG_SENSORS_MAX16065 is not set
1371# CONFIG_SENSORS_MAX1619 is not set
1372# CONFIG_SENSORS_MAX6639 is not set
1373# CONFIG_SENSORS_MAX6642 is not set
1374# CONFIG_SENSORS_MAX17135 is not set
1375# CONFIG_SENSORS_MAX6650 is not set
1376# CONFIG_SENSORS_PC87360 is not set
1377# CONFIG_SENSORS_PC87427 is not set
1378# CONFIG_SENSORS_PCF8591 is not set
1379# CONFIG_PMBUS is not set
1380# CONFIG_SENSORS_SHT15 is not set
1381# CONFIG_SENSORS_SHT21 is not set
1382# CONFIG_SENSORS_SMM665 is not set
1383# CONFIG_SENSORS_DME1737 is not set
1384# CONFIG_SENSORS_EMC1403 is not set
1385# CONFIG_SENSORS_EMC2103 is not set
1386# CONFIG_SENSORS_EMC6W201 is not set
1387# CONFIG_SENSORS_SMSC47M1 is not set
1388# CONFIG_SENSORS_SMSC47M192 is not set
1389# CONFIG_SENSORS_SMSC47B397 is not set
1390# CONFIG_SENSORS_SCH5627 is not set
1391# CONFIG_SENSORS_ADS1015 is not set
1392# CONFIG_SENSORS_ADS7828 is not set
1393# CONFIG_SENSORS_ADS7871 is not set
1394# CONFIG_SENSORS_AMC6821 is not set
1395# CONFIG_SENSORS_THMC50 is not set
1396# CONFIG_SENSORS_TMP102 is not set
1397# CONFIG_SENSORS_TMP401 is not set
1398# CONFIG_SENSORS_TMP421 is not set
1399# CONFIG_SENSORS_VT1211 is not set
1400# CONFIG_SENSORS_W83781D is not set
1401# CONFIG_SENSORS_W83791D is not set
1402# CONFIG_SENSORS_W83792D is not set
1403# CONFIG_SENSORS_W83793 is not set
1404# CONFIG_SENSORS_W83795 is not set
1405# CONFIG_SENSORS_W83L785TS is not set
1406# CONFIG_SENSORS_W83L786NG is not set
1407# CONFIG_SENSORS_W83627HF is not set
1408# CONFIG_SENSORS_W83627EHF is not set
1409CONFIG_SENSORS_MAG3110=y
1410# CONFIG_MXC_MMA8450 is not set
1411CONFIG_MXC_MMA8451=y
1412CONFIG_THERMAL=y
1413# CONFIG_THERMAL_HWMON is not set
1414CONFIG_WATCHDOG=y
1415CONFIG_WATCHDOG_NOWAYOUT=y
1416
1417#
1418# Watchdog Device Drivers
1419#
1420# CONFIG_SOFT_WATCHDOG is not set
1421# CONFIG_ARM_SP805_WATCHDOG is not set
1422# CONFIG_MPCORE_WATCHDOG is not set
1423# CONFIG_MAX63XX_WATCHDOG is not set
1424CONFIG_IMX2_WDT=y
1425
1426#
1427# USB-based Watchdog Cards
1428#
1429# CONFIG_USBPCWATCHDOG is not set
1430CONFIG_SSB_POSSIBLE=y
1431
1432#
1433# Sonics Silicon Backplane
1434#
1435# CONFIG_SSB is not set
1436CONFIG_BCMA_POSSIBLE=y
1437
1438#
1439# Broadcom specific AMBA
1440#
1441# CONFIG_BCMA is not set
1442CONFIG_MFD_SUPPORT=y
1443CONFIG_MFD_CORE=y
1444# CONFIG_MFD_88PM860X is not set
1445# CONFIG_MFD_SM501 is not set
1446# CONFIG_MFD_ASIC3 is not set
1447# CONFIG_HTC_EGPIO is not set
1448# CONFIG_HTC_PASIC3 is not set
1449# CONFIG_HTC_I2CPLD is not set
1450# CONFIG_UCB1400_CORE is not set
1451# CONFIG_TPS6105X is not set
1452# CONFIG_TPS65010 is not set
1453# CONFIG_TPS6507X is not set
1454# CONFIG_MFD_TPS6586X is not set
1455# CONFIG_TWL4030_CORE is not set
1456# CONFIG_MFD_STMPE is not set
1457# CONFIG_MFD_TC3589X is not set
1458# CONFIG_MFD_TMIO is not set
1459# CONFIG_MFD_T7L66XB is not set
1460# CONFIG_MFD_TC6387XB is not set
1461# CONFIG_MFD_TC6393XB is not set
1462# CONFIG_PMIC_DA903X is not set
1463# CONFIG_PMIC_ADP5520 is not set
1464# CONFIG_MFD_MAX8925 is not set
1465# CONFIG_MFD_MAX8997 is not set
1466# CONFIG_MFD_MAX8998 is not set
1467# CONFIG_MFD_WM8400 is not set
1468# CONFIG_MFD_WM831X_I2C is not set
1469# CONFIG_MFD_WM831X_SPI is not set
1470# CONFIG_MFD_WM8350_I2C is not set
1471CONFIG_MFD_WM8994=y
1472# CONFIG_MFD_PCF50633 is not set
1473# CONFIG_PMIC_DIALOG is not set
1474# CONFIG_MFD_MC_PMIC is not set
1475# CONFIG_MFD_MC34708 is not set
1476CONFIG_MFD_PFUZE=y
1477# CONFIG_MFD_MC13XXX is not set
1478# CONFIG_ABX500_CORE is not set
1479# CONFIG_EZX_PCAP is not set
1480# CONFIG_MFD_WL1273_CORE is not set
1481# CONFIG_MFD_TPS65910 is not set
1482# CONFIG_MFD_MAX17135 is not set
1483CONFIG_MFD_MXC_HDMI=y
1484CONFIG_REGULATOR=y
1485# CONFIG_REGULATOR_DEBUG is not set
1486# CONFIG_REGULATOR_DUMMY is not set
1487CONFIG_REGULATOR_FIXED_VOLTAGE=y
1488# CONFIG_REGULATOR_VIRTUAL_CONSUMER is not set
1489# CONFIG_REGULATOR_USERSPACE_CONSUMER is not set
1490# CONFIG_REGULATOR_BQ24022 is not set
1491# CONFIG_REGULATOR_MAX1586 is not set
1492# CONFIG_REGULATOR_MAX8649 is not set
1493# CONFIG_REGULATOR_MAX8660 is not set
1494# CONFIG_REGULATOR_MAX8952 is not set
1495# CONFIG_REGULATOR_WM8994 is not set
1496# CONFIG_REGULATOR_LP3971 is not set
1497# CONFIG_REGULATOR_LP3972 is not set
1498# CONFIG_REGULATOR_MC34708 is not set
1499CONFIG_REGULATOR_PFUZE100=y
1500# CONFIG_REGULATOR_TPS65023 is not set
1501# CONFIG_REGULATOR_TPS6507X is not set
1502# CONFIG_REGULATOR_ISL6271A is not set
1503# CONFIG_REGULATOR_AD5398 is not set
1504CONFIG_REGULATOR_ANATOP=y
1505# CONFIG_REGULATOR_TPS6524X is not set
1506CONFIG_MEDIA_SUPPORT=y
1507
1508#
1509# Multimedia core support
1510#
1511# CONFIG_MEDIA_CONTROLLER is not set
1512CONFIG_VIDEO_DEV=y
1513CONFIG_VIDEO_V4L2_COMMON=y
1514# CONFIG_DVB_CORE is not set
1515CONFIG_VIDEO_MEDIA=y
1516
1517#
1518# Multimedia drivers
1519#
1520# CONFIG_RC_CORE is not set
1521# CONFIG_MEDIA_ATTACH is not set
1522CONFIG_MEDIA_TUNER=y
1523# CONFIG_MEDIA_TUNER_CUSTOMISE is not set
1524CONFIG_MEDIA_TUNER_SIMPLE=y
1525CONFIG_MEDIA_TUNER_TDA8290=y
1526CONFIG_MEDIA_TUNER_TDA827X=y
1527CONFIG_MEDIA_TUNER_TDA18271=y
1528CONFIG_MEDIA_TUNER_TDA9887=y
1529CONFIG_MEDIA_TUNER_TEA5761=y
1530CONFIG_MEDIA_TUNER_TEA5767=y
1531CONFIG_MEDIA_TUNER_MT20XX=y
1532CONFIG_MEDIA_TUNER_XC2028=y
1533CONFIG_MEDIA_TUNER_XC5000=y
1534CONFIG_MEDIA_TUNER_MC44S803=y
1535CONFIG_VIDEO_V4L2=y
1536CONFIG_VIDEOBUF_GEN=y
1537CONFIG_VIDEOBUF_DMA_CONTIG=y
1538CONFIG_VIDEO_CAPTURE_DRIVERS=y
1539# CONFIG_VIDEO_ADV_DEBUG is not set
1540# CONFIG_VIDEO_FIXED_MINOR_RANGES is not set
1541# CONFIG_VIDEO_HELPER_CHIPS_AUTO is not set
1542
1543#
1544# Encoders, decoders, sensors and other helper chips
1545#
1546
1547#
1548# Audio decoders, processors and mixers
1549#
1550# CONFIG_VIDEO_TVAUDIO is not set
1551# CONFIG_VIDEO_TDA7432 is not set
1552# CONFIG_VIDEO_TDA9840 is not set
1553# CONFIG_VIDEO_TEA6415C is not set
1554# CONFIG_VIDEO_TEA6420 is not set
1555# CONFIG_VIDEO_MSP3400 is not set
1556# CONFIG_VIDEO_CS5345 is not set
1557# CONFIG_VIDEO_CS53L32A is not set
1558# CONFIG_VIDEO_TLV320AIC23B is not set
1559# CONFIG_VIDEO_WM8775 is not set
1560# CONFIG_VIDEO_WM8739 is not set
1561# CONFIG_VIDEO_VP27SMPX is not set
1562
1563#
1564# RDS decoders
1565#
1566# CONFIG_VIDEO_SAA6588 is not set
1567
1568#
1569# Video decoders
1570#
1571# CONFIG_VIDEO_ADV7180 is not set
1572# CONFIG_VIDEO_BT819 is not set
1573# CONFIG_VIDEO_BT856 is not set
1574# CONFIG_VIDEO_BT866 is not set
1575# CONFIG_VIDEO_KS0127 is not set
1576# CONFIG_VIDEO_SAA7110 is not set
1577# CONFIG_VIDEO_SAA711X is not set
1578# CONFIG_VIDEO_SAA7191 is not set
1579# CONFIG_VIDEO_TVP514X is not set
1580# CONFIG_VIDEO_TVP5150 is not set
1581# CONFIG_VIDEO_TVP7002 is not set
1582# CONFIG_VIDEO_VPX3220 is not set
1583
1584#
1585# Video and audio decoders
1586#
1587# CONFIG_VIDEO_SAA717X is not set
1588# CONFIG_VIDEO_CX25840 is not set
1589
1590#
1591# MPEG video encoders
1592#
1593# CONFIG_VIDEO_CX2341X is not set
1594
1595#
1596# Video encoders
1597#
1598# CONFIG_VIDEO_SAA7127 is not set
1599# CONFIG_VIDEO_SAA7185 is not set
1600# CONFIG_VIDEO_ADV7170 is not set
1601# CONFIG_VIDEO_ADV7175 is not set
1602# CONFIG_VIDEO_ADV7343 is not set
1603# CONFIG_VIDEO_AK881X is not set
1604
1605#
1606# Camera sensor devices
1607#
1608# CONFIG_VIDEO_OV7670 is not set
1609# CONFIG_VIDEO_MT9V011 is not set
1610# CONFIG_VIDEO_TCM825X is not set
1611
1612#
1613# Video improvement chips
1614#
1615# CONFIG_VIDEO_UPD64031A is not set
1616# CONFIG_VIDEO_UPD64083 is not set
1617
1618#
1619# Miscelaneous helper chips
1620#
1621# CONFIG_VIDEO_THS7303 is not set
1622# CONFIG_VIDEO_M52790 is not set
1623# CONFIG_VIDEO_VIVI is not set
1624# CONFIG_VIDEO_MXC_CAMERA is not set
1625CONFIG_VIDEO_MXC_OUTPUT=y
1626CONFIG_VIDEO_MXC_IPU_OUTPUT=y
1627# CONFIG_VIDEO_MXC_IPUV1_WVGA_OUTPUT is not set
1628# CONFIG_VIDEO_MXC_OPL is not set
1629# CONFIG_VIDEO_CPIA2 is not set
1630# CONFIG_VIDEO_TIMBERDALE is not set
1631# CONFIG_VIDEO_SR030PC30 is not set
1632# CONFIG_VIDEO_NOON010PC30 is not set
1633# CONFIG_SOC_CAMERA is not set
1634CONFIG_V4L_USB_DRIVERS=y
1635CONFIG_USB_VIDEO_CLASS=m
1636CONFIG_USB_VIDEO_CLASS_INPUT_EVDEV=y
1637CONFIG_USB_GSPCA=m
1638# CONFIG_USB_M5602 is not set
1639# CONFIG_USB_STV06XX is not set
1640# CONFIG_USB_GL860 is not set
1641# CONFIG_USB_GSPCA_BENQ is not set
1642# CONFIG_USB_GSPCA_CONEX is not set
1643# CONFIG_USB_GSPCA_CPIA1 is not set
1644# CONFIG_USB_GSPCA_ETOMS is not set
1645# CONFIG_USB_GSPCA_FINEPIX is not set
1646# CONFIG_USB_GSPCA_JEILINJ is not set
1647# CONFIG_USB_GSPCA_KINECT is not set
1648# CONFIG_USB_GSPCA_KONICA is not set
1649# CONFIG_USB_GSPCA_MARS is not set
1650# CONFIG_USB_GSPCA_MR97310A is not set
1651# CONFIG_USB_GSPCA_NW80X is not set
1652# CONFIG_USB_GSPCA_OV519 is not set
1653# CONFIG_USB_GSPCA_OV534 is not set
1654# CONFIG_USB_GSPCA_OV534_9 is not set
1655# CONFIG_USB_GSPCA_PAC207 is not set
1656# CONFIG_USB_GSPCA_PAC7302 is not set
1657# CONFIG_USB_GSPCA_PAC7311 is not set
1658# CONFIG_USB_GSPCA_SN9C2028 is not set
1659# CONFIG_USB_GSPCA_SN9C20X is not set
1660# CONFIG_USB_GSPCA_SONIXB is not set
1661# CONFIG_USB_GSPCA_SONIXJ is not set
1662# CONFIG_USB_GSPCA_SPCA500 is not set
1663# CONFIG_USB_GSPCA_SPCA501 is not set
1664# CONFIG_USB_GSPCA_SPCA505 is not set
1665# CONFIG_USB_GSPCA_SPCA506 is not set
1666# CONFIG_USB_GSPCA_SPCA508 is not set
1667# CONFIG_USB_GSPCA_SPCA561 is not set
1668# CONFIG_USB_GSPCA_SPCA1528 is not set
1669# CONFIG_USB_GSPCA_SQ905 is not set
1670# CONFIG_USB_GSPCA_SQ905C is not set
1671# CONFIG_USB_GSPCA_SQ930X is not set
1672# CONFIG_USB_GSPCA_STK014 is not set
1673# CONFIG_USB_GSPCA_STV0680 is not set
1674# CONFIG_USB_GSPCA_SUNPLUS is not set
1675# CONFIG_USB_GSPCA_T613 is not set
1676# CONFIG_USB_GSPCA_TV8532 is not set
1677# CONFIG_USB_GSPCA_VC032X is not set
1678# CONFIG_USB_GSPCA_VICAM is not set
1679# CONFIG_USB_GSPCA_XIRLINK_CIT is not set
1680# CONFIG_USB_GSPCA_ZC3XX is not set
1681# CONFIG_VIDEO_PVRUSB2 is not set
1682# CONFIG_VIDEO_HDPVR is not set
1683# CONFIG_VIDEO_USBVISION is not set
1684# CONFIG_USB_ET61X251 is not set
1685# CONFIG_USB_SN9C102 is not set
1686# CONFIG_USB_PWC is not set
1687# CONFIG_USB_ZR364XX is not set
1688# CONFIG_USB_STKWEBCAM is not set
1689# CONFIG_USB_S2255 is not set
1690# CONFIG_V4L_MEM2MEM_DRIVERS is not set
1691# CONFIG_RADIO_ADAPTERS is not set
1692
1693#
1694# Graphics support
1695#
1696# CONFIG_DRM is not set
1697# CONFIG_VGASTATE is not set
1698# CONFIG_VIDEO_OUTPUT_CONTROL is not set
1699CONFIG_FB=y
1700# CONFIG_FIRMWARE_EDID is not set
1701# CONFIG_FB_DDC is not set
1702# CONFIG_FB_BOOT_VESA_SUPPORT is not set
1703CONFIG_FB_CFB_FILLRECT=y
1704CONFIG_FB_CFB_COPYAREA=y
1705CONFIG_FB_CFB_IMAGEBLIT=y
1706# CONFIG_FB_CFB_REV_PIXELS_IN_BYTE is not set
1707# CONFIG_FB_SYS_FILLRECT is not set
1708# CONFIG_FB_SYS_COPYAREA is not set
1709# CONFIG_FB_SYS_IMAGEBLIT is not set
1710# CONFIG_FB_FOREIGN_ENDIAN is not set
1711# CONFIG_FB_SYS_FOPS is not set
1712# CONFIG_FB_WMT_GE_ROPS is not set
1713CONFIG_FB_DEFERRED_IO=y
1714# CONFIG_FB_SVGALIB is not set
1715# CONFIG_FB_MACMODES is not set
1716# CONFIG_FB_BACKLIGHT is not set
1717CONFIG_FB_MODE_HELPERS=y
1718# CONFIG_FB_TILEBLITTING is not set
1719
1720#
1721# Frame buffer hardware drivers
1722#
1723# CONFIG_FB_ARMCLCD is not set
1724# CONFIG_FB_UVESA is not set
1725# CONFIG_FB_S1D13XXX is not set
1726# CONFIG_FB_TMIO is not set
1727# CONFIG_FB_UDL is not set
1728# CONFIG_FB_VIRTUAL is not set
1729# CONFIG_FB_METRONOME is not set
1730# CONFIG_FB_BROADSHEET is not set
1731CONFIG_BACKLIGHT_LCD_SUPPORT=y
1732# CONFIG_LCD_CLASS_DEVICE is not set
1733CONFIG_BACKLIGHT_CLASS_DEVICE=y
1734# CONFIG_BACKLIGHT_GENERIC is not set
1735CONFIG_BACKLIGHT_PWM=y
1736# CONFIG_BACKLIGHT_ADP8860 is not set
1737# CONFIG_BACKLIGHT_ADP8870 is not set
1738
1739#
1740# Display device support
1741#
1742# CONFIG_DISPLAY_SUPPORT is not set
1743CONFIG_FB_MXC=y
1744CONFIG_FB_MXC_EDID=y
1745CONFIG_FB_MXC_SYNC_PANEL=y
1746# CONFIG_FB_MXC_EPSON_VGA_SYNC_PANEL is not set
1747CONFIG_FB_MXC_LDB=y
1748CONFIG_FB_MXC_MIPI_DSI=y
1749CONFIG_FB_MXC_TRULY_WVGA_SYNC_PANEL=y
1750# CONFIG_FB_MXC_CLAA_WVGA_SYNC_PANEL is not set
1751# CONFIG_FB_MXC_SEIKO_WVGA_SYNC_PANEL is not set
1752# CONFIG_FB_MXC_SII902X is not set
1753# CONFIG_FB_MXC_CH7026 is not set
1754# CONFIG_FB_MXC_TVOUT_CH7024 is not set
1755# CONFIG_FB_MXC_ASYNC_PANEL is not set
1756CONFIG_FB_MXC_EINK_PANEL=y
1757# CONFIG_FB_MXC_EINK_AUTO_UPDATE_MODE is not set
1758# CONFIG_FB_MXC_SIPIX_PANEL is not set
1759# CONFIG_FB_MXC_ELCDIF_FB is not set
1760CONFIG_FB_MXC_HDMI=y
1761
1762#
1763# Console display driver support
1764#
1765CONFIG_DUMMY_CONSOLE=y
1766CONFIG_FRAMEBUFFER_CONSOLE=y
1767# CONFIG_FRAMEBUFFER_CONSOLE_DETECT_PRIMARY is not set
1768# CONFIG_FRAMEBUFFER_CONSOLE_ROTATION is not set
1769CONFIG_FONTS=y
1770# CONFIG_FONT_8x8 is not set
1771CONFIG_FONT_8x16=y
1772# CONFIG_FONT_6x11 is not set
1773# CONFIG_FONT_7x14 is not set
1774# CONFIG_FONT_PEARL_8x8 is not set
1775# CONFIG_FONT_ACORN_8x8 is not set
1776# CONFIG_FONT_MINI_4x6 is not set
1777# CONFIG_FONT_SUN8x16 is not set
1778# CONFIG_FONT_SUN12x22 is not set
1779# CONFIG_FONT_10x18 is not set
1780CONFIG_LOGO=y
1781CONFIG_LOGO_LINUX_MONO=y
1782CONFIG_LOGO_LINUX_VGA16=y
1783CONFIG_LOGO_LINUX_CLUT224=y
1784CONFIG_SOUND=y
1785# CONFIG_SOUND_OSS_CORE is not set
1786CONFIG_SND=y
1787CONFIG_SND_TIMER=y
1788CONFIG_SND_PCM=y
1789CONFIG_SND_HWDEP=y
1790CONFIG_SND_RAWMIDI=y
1791CONFIG_SND_JACK=y
1792# CONFIG_SND_SEQUENCER is not set
1793# CONFIG_SND_MIXER_OSS is not set
1794# CONFIG_SND_PCM_OSS is not set
1795# CONFIG_SND_HRTIMER is not set
1796# CONFIG_SND_DYNAMIC_MINORS is not set
1797CONFIG_SND_SUPPORT_OLD_API=y
1798CONFIG_SND_VERBOSE_PROCFS=y
1799# CONFIG_SND_VERBOSE_PRINTK is not set
1800# CONFIG_SND_DEBUG is not set
1801# CONFIG_SND_RAWMIDI_SEQ is not set
1802# CONFIG_SND_OPL3_LIB_SEQ is not set
1803# CONFIG_SND_OPL4_LIB_SEQ is not set
1804# CONFIG_SND_SBAWE_SEQ is not set
1805# CONFIG_SND_EMU10K1_SEQ is not set
1806CONFIG_SND_DRIVERS=y
1807# CONFIG_SND_DUMMY is not set
1808# CONFIG_SND_ALOOP is not set
1809# CONFIG_SND_MTPAV is not set
1810# CONFIG_SND_SERIAL_U16550 is not set
1811# CONFIG_SND_MPU401 is not set
1812CONFIG_SND_ARM=y
1813# CONFIG_SND_ARMAACI is not set
1814CONFIG_SND_SPI=y
1815CONFIG_SND_USB=y
1816CONFIG_SND_USB_AUDIO=y
1817# CONFIG_SND_USB_UA101 is not set
1818# CONFIG_SND_USB_CAIAQ is not set
1819# CONFIG_SND_USB_6FIRE is not set
1820CONFIG_SND_SOC=y
1821# CONFIG_SND_SOC_CACHE_LZO is not set
1822CONFIG_SND_SOC_AC97_BUS=y
1823CONFIG_SND_IMX_SOC=y
1824CONFIG_SND_MXC_SOC_MX2=y
1825CONFIG_SND_MXC_SOC_SPDIF_DAI=y
1826CONFIG_SND_SOC_IMX_SGTL5000=y
1827CONFIG_SND_SOC_IMX_WM8958=y
1828CONFIG_SND_SOC_IMX_WM8962=y
1829# CONFIG_SND_SOC_IMX_SI4763 is not set
1830CONFIG_SND_SOC_IMX_SPDIF=y
1831CONFIG_SND_SOC_IMX_HDMI=y
1832CONFIG_SND_SOC_I2C_AND_SPI=y
1833# CONFIG_SND_SOC_ALL_CODECS is not set
1834CONFIG_SND_SOC_WM_HUBS=y
1835CONFIG_SND_SOC_MXC_HDMI=y
1836CONFIG_SND_SOC_MXC_SPDIF=y
1837CONFIG_SND_SOC_SGTL5000=y
1838CONFIG_SND_SOC_WM8962=y
1839CONFIG_SND_SOC_WM8994=y
1840# CONFIG_SOUND_PRIME is not set
1841CONFIG_AC97_BUS=y
1842CONFIG_HID_SUPPORT=y
1843CONFIG_HID=y
1844CONFIG_HIDRAW=y
1845
1846#
1847# USB Input Devices
1848#
1849CONFIG_USB_HID=y
1850# CONFIG_HID_PID is not set
1851# CONFIG_USB_HIDDEV is not set
1852
1853#
1854# Special HID drivers
1855#
1856CONFIG_HID_A4TECH=m
1857# CONFIG_HID_ACRUX is not set
1858CONFIG_HID_APPLE=m
1859CONFIG_HID_BELKIN=m
1860CONFIG_HID_CHERRY=m
1861CONFIG_HID_CHICONY=m
1862# CONFIG_HID_PRODIKEYS is not set
1863CONFIG_HID_CYPRESS=m
1864# CONFIG_HID_DRAGONRISE is not set
1865# CONFIG_HID_EMS_FF is not set
1866# CONFIG_HID_ELECOM is not set
1867CONFIG_HID_EZKEY=m
1868# CONFIG_HID_KEYTOUCH is not set
1869# CONFIG_HID_KYE is not set
1870# CONFIG_HID_UCLOGIC is not set
1871# CONFIG_HID_WALTOP is not set
1872CONFIG_HID_GYRATION=m
1873# CONFIG_HID_TWINHAN is not set
1874# CONFIG_HID_KENSINGTON is not set
1875# CONFIG_HID_LCPOWER is not set
1876CONFIG_HID_LOGITECH=m
1877# CONFIG_LOGITECH_FF is not set
1878# CONFIG_LOGIRUMBLEPAD2_FF is not set
1879# CONFIG_LOGIG940_FF is not set
1880# CONFIG_LOGIWII_FF is not set
1881# CONFIG_HID_MAGICMOUSE is not set
1882CONFIG_HID_MICROSOFT=m
1883CONFIG_HID_MONTEREY=m
1884# CONFIG_HID_MULTITOUCH is not set
1885# CONFIG_HID_NTRIG is not set
1886# CONFIG_HID_ORTEK is not set
1887CONFIG_HID_PANTHERLORD=m
1888# CONFIG_PANTHERLORD_FF is not set
1889CONFIG_HID_PETALYNX=m
1890# CONFIG_HID_PICOLCD is not set
1891# CONFIG_HID_QUANTA is not set
1892# CONFIG_HID_ROCCAT is not set
1893# CONFIG_HID_ROCCAT_ARVO is not set
1894# CONFIG_HID_ROCCAT_KONE is not set
1895# CONFIG_HID_ROCCAT_KONEPLUS is not set
1896# CONFIG_HID_ROCCAT_KOVAPLUS is not set
1897# CONFIG_HID_ROCCAT_PYRA is not set
1898CONFIG_HID_SAMSUNG=m
1899CONFIG_HID_SONY=m
1900CONFIG_HID_SUNPLUS=m
1901# CONFIG_HID_GREENASIA is not set
1902# CONFIG_HID_SMARTJOYPLUS is not set
1903# CONFIG_HID_TOPSEED is not set
1904# CONFIG_HID_THRUSTMASTER is not set
1905# CONFIG_HID_WACOM is not set
1906# CONFIG_HID_ZEROPLUS is not set
1907# CONFIG_HID_ZYDACRON is not set
1908CONFIG_USB_SUPPORT=y
1909CONFIG_USB_ARCH_HAS_HCD=y
1910# CONFIG_USB_ARCH_HAS_OHCI is not set
1911CONFIG_USB_ARCH_HAS_EHCI=y
1912CONFIG_USB=y
1913# CONFIG_USB_DEBUG is not set
1914# CONFIG_USB_ANNOUNCE_NEW_DEVICES is not set
1915
1916#
1917# Miscellaneous USB options
1918#
1919# CONFIG_USB_DEVICEFS is not set
1920# CONFIG_USB_DEVICE_CLASS is not set
1921# CONFIG_USB_DYNAMIC_MINORS is not set
1922CONFIG_USB_SUSPEND=y
1923CONFIG_USB_OTG=y
1924# CONFIG_USB_OTG_WHITELIST is not set
1925# CONFIG_USB_OTG_BLACKLIST_HUB is not set
1926# CONFIG_USB_MON is not set
1927# CONFIG_USB_WUSB is not set
1928# CONFIG_USB_WUSB_CBAF is not set
1929
1930#
1931# USB Host Controller Drivers
1932#
1933# CONFIG_USB_C67X00_HCD is not set
1934CONFIG_USB_EHCI_HCD=y
1935# CONFIG_FSL_USB_TEST_MODE is not set
1936CONFIG_USB_EHCI_ARC=y
1937CONFIG_USB_EHCI_ARC_OTG=y
1938# CONFIG_USB_EHCI_ARC_HSIC is not set
1939# CONFIG_USB_STATIC_IRAM is not set
1940CONFIG_USB_EHCI_ROOT_HUB_TT=y
1941# CONFIG_USB_EHCI_TT_NEWSCHED is not set
1942# CONFIG_USB_EHCI_MXC is not set
1943# CONFIG_USB_OXU210HP_HCD is not set
1944# CONFIG_USB_ISP116X_HCD is not set
1945# CONFIG_USB_ISP1760_HCD is not set
1946# CONFIG_USB_ISP1362_HCD is not set
1947# CONFIG_USB_SL811_HCD is not set
1948# CONFIG_USB_R8A66597_HCD is not set
1949# CONFIG_USB_HWA_HCD is not set
1950# CONFIG_USB_MUSB_HDRC is not set
1951
1952#
1953# USB Device Class drivers
1954#
1955# CONFIG_USB_ACM is not set
1956# CONFIG_USB_PRINTER is not set
1957# CONFIG_USB_WDM is not set
1958# CONFIG_USB_TMC is not set
1959
1960#
1961# NOTE: USB_STORAGE depends on SCSI but BLK_DEV_SD may
1962#
1963
1964#
1965# also be needed; see USB_STORAGE Help for more info
1966#
1967CONFIG_USB_STORAGE=y
1968# CONFIG_USB_STORAGE_DEBUG is not set
1969# CONFIG_USB_STORAGE_REALTEK is not set
1970# CONFIG_USB_STORAGE_DATAFAB is not set
1971# CONFIG_USB_STORAGE_FREECOM is not set
1972# CONFIG_USB_STORAGE_ISD200 is not set
1973# CONFIG_USB_STORAGE_USBAT is not set
1974# CONFIG_USB_STORAGE_SDDR09 is not set
1975# CONFIG_USB_STORAGE_SDDR55 is not set
1976# CONFIG_USB_STORAGE_JUMPSHOT is not set
1977# CONFIG_USB_STORAGE_ALAUDA is not set
1978# CONFIG_USB_STORAGE_ONETOUCH is not set
1979# CONFIG_USB_STORAGE_KARMA is not set
1980# CONFIG_USB_STORAGE_CYPRESS_ATACB is not set
1981# CONFIG_USB_STORAGE_ENE_UB6250 is not set
1982# CONFIG_USB_UAS is not set
1983# CONFIG_USB_LIBUSUAL is not set
1984
1985#
1986# USB Imaging devices
1987#
1988# CONFIG_USB_MDC800 is not set
1989# CONFIG_USB_MICROTEK is not set
1990
1991#
1992# USB port drivers
1993#
1994# CONFIG_USB_SERIAL is not set
1995
1996#
1997# USB Miscellaneous drivers
1998#
1999# CONFIG_USB_EMI62 is not set
2000# CONFIG_USB_EMI26 is not set
2001# CONFIG_USB_ADUTUX is not set
2002# CONFIG_USB_SEVSEG is not set
2003# CONFIG_USB_RIO500 is not set
2004# CONFIG_USB_LEGOTOWER is not set
2005# CONFIG_USB_LCD is not set
2006# CONFIG_USB_LED is not set
2007# CONFIG_USB_CYPRESS_CY7C63 is not set
2008# CONFIG_USB_CYTHERM is not set
2009# CONFIG_USB_IDMOUSE is not set
2010# CONFIG_USB_FTDI_ELAN is not set
2011# CONFIG_USB_APPLEDISPLAY is not set
2012# CONFIG_USB_SISUSBVGA is not set
2013# CONFIG_USB_LD is not set
2014# CONFIG_USB_TRANCEVIBRATOR is not set
2015# CONFIG_USB_IOWARRIOR is not set
2016# CONFIG_USB_TEST is not set
2017# CONFIG_USB_ISIGHTFW is not set
2018# CONFIG_USB_YUREX is not set
2019CONFIG_USB_GADGET=y
2020# CONFIG_USB_GADGET_DEBUG_FILES is not set
2021# CONFIG_USB_GADGET_DEBUG_FS is not set
2022CONFIG_USB_GADGET_VBUS_DRAW=2
2023CONFIG_USB_GADGET_SELECTED=y
2024CONFIG_USB_GADGET_ARC=y
2025# CONFIG_IMX_USB_CHARGER is not set
2026CONFIG_USB_ARC=y
2027# CONFIG_USB_GADGET_FSL_USB2 is not set
2028# CONFIG_USB_GADGET_FUSB300 is not set
2029# CONFIG_USB_GADGET_R8A66597 is not set
2030# CONFIG_USB_GADGET_PXA_U2O is not set
2031# CONFIG_USB_GADGET_M66592 is not set
2032# CONFIG_USB_GADGET_DUMMY_HCD is not set
2033CONFIG_USB_GADGET_DUALSPEED=y
2034# CONFIG_USB_ZERO is not set
2035CONFIG_USB_AUDIO=m
2036CONFIG_USB_ETH=m
2037CONFIG_USB_ETH_RNDIS=y
2038# CONFIG_USB_ETH_EEM is not set
2039# CONFIG_USB_G_NCM is not set
2040# CONFIG_USB_GADGETFS is not set
2041# CONFIG_USB_FUNCTIONFS is not set
2042CONFIG_USB_FILE_STORAGE=m
2043# CONFIG_FSL_UTP is not set
2044# CONFIG_USB_FILE_STORAGE_TEST is not set
2045# CONFIG_USB_MASS_STORAGE is not set
2046CONFIG_USB_G_SERIAL=m
2047# CONFIG_USB_MIDI_GADGET is not set
2048# CONFIG_USB_G_PRINTER is not set
2049# CONFIG_USB_CDC_COMPOSITE is not set
2050# CONFIG_USB_G_MULTI is not set
2051# CONFIG_USB_G_HID is not set
2052# CONFIG_USB_G_DBGP is not set
2053# CONFIG_USB_G_WEBCAM is not set
2054
2055#
2056# OTG and related infrastructure
2057#
2058CONFIG_USB_OTG_UTILS=y
2059# CONFIG_USB_GPIO_VBUS is not set
2060# CONFIG_USB_ULPI is not set
2061# CONFIG_NOP_USB_XCEIV is not set
2062CONFIG_MXC_OTG=y
2063CONFIG_MMC=y
2064# CONFIG_MMC_DEBUG is not set
2065CONFIG_MMC_UNSAFE_RESUME=y
2066# CONFIG_MMC_CLKGATE is not set
2067
2068#
2069# MMC/SD/SDIO Card Drivers
2070#
2071CONFIG_MMC_BLOCK=y
2072CONFIG_MMC_BLOCK_MINORS=8
2073CONFIG_MMC_BLOCK_BOUNCE=y
2074# CONFIG_SDIO_UART is not set
2075# CONFIG_MMC_TEST is not set
2076
2077#
2078# MMC/SD/SDIO Host Controller Drivers
2079#
2080# CONFIG_MMC_ARMMMCI is not set
2081CONFIG_MMC_SDHCI=y
2082CONFIG_MMC_SDHCI_IO_ACCESSORS=y
2083CONFIG_MMC_SDHCI_PLTFM=y
2084CONFIG_MMC_SDHCI_ESDHC_IMX=y
2085# CONFIG_MMC_DW is not set
2086# CONFIG_MMC_VUB300 is not set
2087# CONFIG_MMC_USHC is not set
2088# CONFIG_MEMSTICK is not set
2089CONFIG_NEW_LEDS=y
2090CONFIG_LEDS_CLASS=y
2091
2092#
2093# LED drivers
2094#
2095# CONFIG_LEDS_LM3530 is not set
2096# CONFIG_LEDS_PCA9532 is not set
2097# CONFIG_LEDS_GPIO is not set
2098# CONFIG_LEDS_LP3944 is not set
2099# CONFIG_LEDS_LP5521 is not set
2100# CONFIG_LEDS_LP5523 is not set
2101# CONFIG_LEDS_PCA955X is not set
2102# CONFIG_LEDS_DAC124S085 is not set
2103# CONFIG_LEDS_PWM is not set
2104# CONFIG_LEDS_REGULATOR is not set
2105# CONFIG_LEDS_BD2802 is not set
2106# CONFIG_LEDS_LT3593 is not set
2107# CONFIG_LEDS_TRIGGERS is not set
2108
2109#
2110# LED Triggers
2111#
2112
2113#
2114# LED Triggers
2115#
2116# CONFIG_NFC_DEVICES is not set
2117# CONFIG_ACCESSIBILITY is not set
2118CONFIG_RTC_LIB=y
2119CONFIG_RTC_CLASS=y
2120CONFIG_RTC_HCTOSYS=y
2121CONFIG_RTC_HCTOSYS_DEVICE="rtc0"
2122# CONFIG_RTC_DEBUG is not set
2123
2124#
2125# RTC interfaces
2126#
2127CONFIG_RTC_INTF_SYSFS=y
2128CONFIG_RTC_INTF_PROC=y
2129CONFIG_RTC_INTF_DEV=y
2130CONFIG_RTC_INTF_DEV_UIE_EMUL=y
2131# CONFIG_RTC_DRV_TEST is not set
2132
2133#
2134# I2C RTC drivers
2135#
2136# CONFIG_RTC_DRV_DS1307 is not set
2137# CONFIG_RTC_DRV_DS1374 is not set
2138# CONFIG_RTC_DRV_DS1672 is not set
2139# CONFIG_RTC_DRV_DS3232 is not set
2140# CONFIG_RTC_DRV_MAX6900 is not set
2141# CONFIG_RTC_DRV_RS5C372 is not set
2142# CONFIG_RTC_DRV_ISL1208 is not set
2143# CONFIG_RTC_DRV_ISL12022 is not set
2144# CONFIG_RTC_DRV_X1205 is not set
2145# CONFIG_RTC_DRV_PCF8563 is not set
2146# CONFIG_RTC_DRV_PCF8583 is not set
2147# CONFIG_RTC_DRV_M41T80 is not set
2148# CONFIG_RTC_DRV_BQ32K is not set
2149# CONFIG_RTC_DRV_S35390A is not set
2150# CONFIG_RTC_DRV_FM3130 is not set
2151# CONFIG_RTC_DRV_RX8581 is not set
2152# CONFIG_RTC_DRV_RX8025 is not set
2153# CONFIG_RTC_DRV_EM3027 is not set
2154# CONFIG_RTC_DRV_RV3029C2 is not set
2155
2156#
2157# SPI RTC drivers
2158#
2159# CONFIG_RTC_DRV_M41T93 is not set
2160# CONFIG_RTC_DRV_M41T94 is not set
2161# CONFIG_RTC_DRV_DS1305 is not set
2162# CONFIG_RTC_DRV_DS1390 is not set
2163# CONFIG_RTC_DRV_MAX6902 is not set
2164# CONFIG_RTC_DRV_R9701 is not set
2165# CONFIG_RTC_DRV_RS5C348 is not set
2166# CONFIG_RTC_DRV_DS3234 is not set
2167# CONFIG_RTC_DRV_PCF2123 is not set
2168
2169#
2170# Platform RTC drivers
2171#
2172# CONFIG_RTC_DRV_CMOS is not set
2173# CONFIG_RTC_DRV_DS1286 is not set
2174# CONFIG_RTC_DRV_DS1511 is not set
2175# CONFIG_RTC_DRV_DS1553 is not set
2176# CONFIG_RTC_DRV_DS1742 is not set
2177# CONFIG_RTC_DRV_STK17TA8 is not set
2178# CONFIG_RTC_DRV_M48T86 is not set
2179# CONFIG_RTC_DRV_M48T35 is not set
2180# CONFIG_RTC_DRV_M48T59 is not set
2181# CONFIG_RTC_DRV_MSM6242 is not set
2182# CONFIG_RTC_MXC is not set
2183# CONFIG_RTC_DRV_MXC_V2 is not set
2184CONFIG_RTC_DRV_SNVS=y
2185# CONFIG_RTC_DRV_BQ4802 is not set
2186# CONFIG_RTC_DRV_RP5C01 is not set
2187# CONFIG_RTC_DRV_V3020 is not set
2188
2189#
2190# on-CPU RTC drivers
2191#
2192# CONFIG_RTC_DRV_PL030 is not set
2193# CONFIG_RTC_DRV_PL031 is not set
2194CONFIG_DMADEVICES=y
2195# CONFIG_DMADEVICES_DEBUG is not set
2196
2197#
2198# DMA Devices
2199#
2200# CONFIG_AMBA_PL08X is not set
2201# CONFIG_DW_DMAC is not set
2202CONFIG_MXC_PXP_V2=y
2203CONFIG_MXC_PXP_CLIENT_DEVICE=y
2204# CONFIG_TIMB_DMA is not set
2205CONFIG_IMX_SDMA=y
2206# CONFIG_MXS_DMA is not set
2207CONFIG_DMA_ENGINE=y
2208
2209#
2210# DMA Clients
2211#
2212# CONFIG_NET_DMA is not set
2213# CONFIG_ASYNC_TX_DMA is not set
2214# CONFIG_DMATEST is not set
2215# CONFIG_AUXDISPLAY is not set
2216# CONFIG_UIO is not set
2217# CONFIG_STAGING is not set
2218CONFIG_CLKDEV_LOOKUP=y
2219CONFIG_CLKSRC_MMIO=y
2220
2221#
2222# MXC support drivers
2223#
2224CONFIG_MXC_IPU=y
2225CONFIG_MXC_IPU_V3=y
2226CONFIG_MXC_IPU_V3H=y
2227
2228#
2229# MXC SSI support
2230#
2231# CONFIG_MXC_SSI is not set
2232
2233#
2234# MXC Digital Audio Multiplexer support
2235#
2236# CONFIG_MXC_DAM is not set
2237
2238#
2239# MXC PMIC support
2240#
2241# CONFIG_MXC_PMIC_MC13783 is not set
2242# CONFIG_MXC_PMIC_MC13892 is not set
2243# CONFIG_MXC_PMIC_MC34704 is not set
2244# CONFIG_MXC_PMIC_MC9SDZ60 is not set
2245# CONFIG_MXC_PMIC_MC9S08DZ60 is not set
2246
2247#
2248# MXC Security Drivers
2249#
2250# CONFIG_MXC_SECURITY_SCC is not set
2251# CONFIG_MXC_SECURITY_RNG is not set
2252
2253#
2254# MXC MPEG4 Encoder Kernel module support
2255#
2256# CONFIG_MXC_HMP4E is not set
2257
2258#
2259# MXC HARDWARE EVENT
2260#
2261# CONFIG_MXC_HWEVENT is not set
2262
2263#
2264# MXC VPU(Video Processing Unit) support
2265#
2266CONFIG_MXC_VPU=y
2267# CONFIG_MXC_VPU_DEBUG is not set
2268# CONFIG_MX6_VPU_352M is not set
2269
2270#
2271# MXC Asynchronous Sample Rate Converter support
2272#
2273CONFIG_MXC_ASRC=y
2274
2275#
2276# MXC Bluetooth support
2277#
2278
2279#
2280# Broadcom GPS ioctrl support
2281#
2282
2283#
2284# MXC Media Local Bus Driver
2285#
2286CONFIG_MXC_MLB=y
2287CONFIG_MXC_MLB150=m
2288
2289#
2290# i.MX ADC support
2291#
2292# CONFIG_IMX_ADC is not set
2293
2294#
2295# MXC Vivante GPU support
2296#
2297CONFIG_MXC_GPU_VIV=y
2298
2299#
2300# ANATOP_THERMAL
2301#
2302CONFIG_ANATOP_THERMAL=y
2303
2304#
2305# MXC MIPI Support
2306#
2307CONFIG_MXC_MIPI_CSI2=y
2308
2309#
2310# MXC HDMI CEC (Consumer Electronics Control) support
2311#
2312# CONFIG_MXC_HDMI_CEC is not set
2313
2314#
2315# File systems
2316#
2317CONFIG_EXT2_FS=y
2318# CONFIG_EXT2_FS_XATTR is not set
2319# CONFIG_EXT2_FS_XIP is not set
2320CONFIG_EXT3_FS=y
2321# CONFIG_EXT3_DEFAULTS_TO_ORDERED is not set
2322CONFIG_EXT3_FS_XATTR=y
2323# CONFIG_EXT3_FS_POSIX_ACL is not set
2324# CONFIG_EXT3_FS_SECURITY is not set
2325CONFIG_EXT4_FS=y
2326CONFIG_EXT4_FS_XATTR=y
2327# CONFIG_EXT4_FS_POSIX_ACL is not set
2328# CONFIG_EXT4_FS_SECURITY is not set
2329# CONFIG_EXT4_DEBUG is not set
2330CONFIG_JBD=y
2331# CONFIG_JBD_DEBUG is not set
2332CONFIG_JBD2=y
2333# CONFIG_JBD2_DEBUG is not set
2334CONFIG_FS_MBCACHE=y
2335# CONFIG_REISERFS_FS is not set
2336# CONFIG_JFS_FS is not set
2337# CONFIG_XFS_FS is not set
2338# CONFIG_GFS2_FS is not set
2339# CONFIG_BTRFS_FS is not set
2340# CONFIG_NILFS2_FS is not set
2341# CONFIG_FS_POSIX_ACL is not set
2342CONFIG_FILE_LOCKING=y
2343CONFIG_FSNOTIFY=y
2344CONFIG_DNOTIFY=y
2345CONFIG_INOTIFY_USER=y
2346# CONFIG_FANOTIFY is not set
2347# CONFIG_QUOTA is not set
2348# CONFIG_QUOTACTL is not set
2349CONFIG_AUTOFS4_FS=m
2350# CONFIG_FUSE_FS is not set
2351
2352#
2353# Caches
2354#
2355# CONFIG_FSCACHE is not set
2356
2357#
2358# CD-ROM/DVD Filesystems
2359#
2360# CONFIG_ISO9660_FS is not set
2361# CONFIG_UDF_FS is not set
2362
2363#
2364# DOS/FAT/NT Filesystems
2365#
2366CONFIG_FAT_FS=y
2367CONFIG_MSDOS_FS=y
2368CONFIG_VFAT_FS=y
2369CONFIG_FAT_DEFAULT_CODEPAGE=437
2370CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1"
2371# CONFIG_NTFS_FS is not set
2372
2373#
2374# Pseudo filesystems
2375#
2376CONFIG_PROC_FS=y
2377CONFIG_PROC_SYSCTL=y
2378CONFIG_PROC_PAGE_MONITOR=y
2379CONFIG_SYSFS=y
2380CONFIG_TMPFS=y
2381# CONFIG_TMPFS_POSIX_ACL is not set
2382# CONFIG_TMPFS_XATTR is not set
2383# CONFIG_HUGETLB_PAGE is not set
2384# CONFIG_CONFIGFS_FS is not set
2385CONFIG_MISC_FILESYSTEMS=y
2386# CONFIG_ADFS_FS is not set
2387# CONFIG_AFFS_FS is not set
2388# CONFIG_HFS_FS is not set
2389# CONFIG_HFSPLUS_FS is not set
2390# CONFIG_BEFS_FS is not set
2391# CONFIG_BFS_FS is not set
2392# CONFIG_EFS_FS is not set
2393CONFIG_JFFS2_FS=y
2394CONFIG_JFFS2_FS_DEBUG=0
2395CONFIG_JFFS2_FS_WRITEBUFFER=y
2396# CONFIG_JFFS2_FS_WBUF_VERIFY is not set
2397# CONFIG_JFFS2_SUMMARY is not set
2398# CONFIG_JFFS2_FS_XATTR is not set
2399# CONFIG_JFFS2_COMPRESSION_OPTIONS is not set
2400CONFIG_JFFS2_ZLIB=y
2401# CONFIG_JFFS2_LZO is not set
2402CONFIG_JFFS2_RTIME=y
2403# CONFIG_JFFS2_RUBIN is not set
2404CONFIG_UBIFS_FS=y
2405# CONFIG_UBIFS_FS_XATTR is not set
2406# CONFIG_UBIFS_FS_ADVANCED_COMPR is not set
2407CONFIG_UBIFS_FS_LZO=y
2408CONFIG_UBIFS_FS_ZLIB=y
2409# CONFIG_UBIFS_FS_DEBUG is not set
2410# CONFIG_LOGFS is not set
2411CONFIG_CRAMFS=y
2412# CONFIG_SQUASHFS is not set
2413# CONFIG_VXFS_FS is not set
2414# CONFIG_MINIX_FS is not set
2415# CONFIG_OMFS_FS is not set
2416# CONFIG_HPFS_FS is not set
2417# CONFIG_QNX4FS_FS is not set
2418# CONFIG_ROMFS_FS is not set
2419# CONFIG_PSTORE is not set
2420# CONFIG_SYSV_FS is not set
2421# CONFIG_UFS_FS is not set
2422CONFIG_NETWORK_FILESYSTEMS=y
2423CONFIG_NFS_FS=y
2424CONFIG_NFS_V3=y
2425# CONFIG_NFS_V3_ACL is not set
2426# CONFIG_NFS_V4 is not set
2427CONFIG_ROOT_NFS=y
2428# CONFIG_NFSD is not set
2429CONFIG_LOCKD=y
2430CONFIG_LOCKD_V4=y
2431CONFIG_NFS_COMMON=y
2432CONFIG_SUNRPC=y
2433# CONFIG_CEPH_FS is not set
2434# CONFIG_CIFS is not set
2435# CONFIG_NCP_FS is not set
2436# CONFIG_CODA_FS is not set
2437# CONFIG_AFS_FS is not set
2438
2439#
2440# Partition Types
2441#
2442CONFIG_PARTITION_ADVANCED=y
2443# CONFIG_ACORN_PARTITION is not set
2444# CONFIG_OSF_PARTITION is not set
2445# CONFIG_AMIGA_PARTITION is not set
2446# CONFIG_ATARI_PARTITION is not set
2447# CONFIG_MAC_PARTITION is not set
2448CONFIG_MSDOS_PARTITION=y
2449# CONFIG_BSD_DISKLABEL is not set
2450# CONFIG_MINIX_SUBPARTITION is not set
2451# CONFIG_SOLARIS_X86_PARTITION is not set
2452# CONFIG_UNIXWARE_DISKLABEL is not set
2453# CONFIG_LDM_PARTITION is not set
2454# CONFIG_SGI_PARTITION is not set
2455# CONFIG_ULTRIX_PARTITION is not set
2456# CONFIG_SUN_PARTITION is not set
2457# CONFIG_KARMA_PARTITION is not set
2458CONFIG_EFI_PARTITION=y
2459# CONFIG_SYSV68_PARTITION is not set
2460CONFIG_NLS=y
2461CONFIG_NLS_DEFAULT="iso8859-1"
2462CONFIG_NLS_CODEPAGE_437=y
2463# CONFIG_NLS_CODEPAGE_737 is not set
2464# CONFIG_NLS_CODEPAGE_775 is not set
2465# CONFIG_NLS_CODEPAGE_850 is not set
2466# CONFIG_NLS_CODEPAGE_852 is not set
2467# CONFIG_NLS_CODEPAGE_855 is not set
2468# CONFIG_NLS_CODEPAGE_857 is not set
2469# CONFIG_NLS_CODEPAGE_860 is not set
2470# CONFIG_NLS_CODEPAGE_861 is not set
2471# CONFIG_NLS_CODEPAGE_862 is not set
2472# CONFIG_NLS_CODEPAGE_863 is not set
2473# CONFIG_NLS_CODEPAGE_864 is not set
2474# CONFIG_NLS_CODEPAGE_865 is not set
2475# CONFIG_NLS_CODEPAGE_866 is not set
2476# CONFIG_NLS_CODEPAGE_869 is not set
2477# CONFIG_NLS_CODEPAGE_936 is not set
2478# CONFIG_NLS_CODEPAGE_950 is not set
2479# CONFIG_NLS_CODEPAGE_932 is not set
2480# CONFIG_NLS_CODEPAGE_949 is not set
2481# CONFIG_NLS_CODEPAGE_874 is not set
2482# CONFIG_NLS_ISO8859_8 is not set
2483# CONFIG_NLS_CODEPAGE_1250 is not set
2484# CONFIG_NLS_CODEPAGE_1251 is not set
2485CONFIG_NLS_ASCII=m
2486CONFIG_NLS_ISO8859_1=y
2487# CONFIG_NLS_ISO8859_2 is not set
2488# CONFIG_NLS_ISO8859_3 is not set
2489# CONFIG_NLS_ISO8859_4 is not set
2490# CONFIG_NLS_ISO8859_5 is not set
2491# CONFIG_NLS_ISO8859_6 is not set
2492# CONFIG_NLS_ISO8859_7 is not set
2493# CONFIG_NLS_ISO8859_9 is not set
2494# CONFIG_NLS_ISO8859_13 is not set
2495# CONFIG_NLS_ISO8859_14 is not set
2496# CONFIG_NLS_ISO8859_15 is not set
2497# CONFIG_NLS_KOI8_R is not set
2498# CONFIG_NLS_KOI8_U is not set
2499CONFIG_NLS_UTF8=m
2500
2501#
2502# Kernel hacking
2503#
2504# CONFIG_PRINTK_TIME is not set
2505CONFIG_DEFAULT_MESSAGE_LOGLEVEL=4
2506CONFIG_ENABLE_WARN_DEPRECATED=y
2507CONFIG_ENABLE_MUST_CHECK=y
2508CONFIG_FRAME_WARN=1024
2509# CONFIG_MAGIC_SYSRQ is not set
2510# CONFIG_STRIP_ASM_SYMS is not set
2511# CONFIG_UNUSED_SYMBOLS is not set
2512CONFIG_DEBUG_FS=y
2513# CONFIG_HEADERS_CHECK is not set
2514# CONFIG_DEBUG_SECTION_MISMATCH is not set
2515# CONFIG_DEBUG_KERNEL is not set
2516# CONFIG_HARDLOCKUP_DETECTOR is not set
2517# CONFIG_SLUB_DEBUG_ON is not set
2518# CONFIG_SLUB_STATS is not set
2519# CONFIG_SPARSE_RCU_POINTER is not set
2520CONFIG_DEBUG_BUGVERBOSE=y
2521# CONFIG_DEBUG_MEMORY_INIT is not set
2522CONFIG_RCU_CPU_STALL_TIMEOUT=60
2523CONFIG_RCU_CPU_STALL_VERBOSE=y
2524# CONFIG_LKDTM is not set
2525CONFIG_SYSCTL_SYSCALL_CHECK=y
2526CONFIG_HAVE_FUNCTION_TRACER=y
2527CONFIG_HAVE_FUNCTION_GRAPH_TRACER=y
2528CONFIG_HAVE_DYNAMIC_FTRACE=y
2529CONFIG_HAVE_FTRACE_MCOUNT_RECORD=y
2530CONFIG_HAVE_C_RECORDMCOUNT=y
2531CONFIG_TRACING_SUPPORT=y
2532# CONFIG_FTRACE is not set
2533# CONFIG_DYNAMIC_DEBUG is not set
2534# CONFIG_DMA_API_DEBUG is not set
2535# CONFIG_ATOMIC64_SELFTEST is not set
2536# CONFIG_SAMPLES is not set
2537CONFIG_HAVE_ARCH_KGDB=y
2538# CONFIG_TEST_KSTRTOX is not set
2539# CONFIG_STRICT_DEVMEM is not set
2540CONFIG_ARM_UNWIND=y
2541# CONFIG_DEBUG_USER is not set
2542CONFIG_OC_ETM=y
2543
2544#
2545# Security options
2546#
2547# CONFIG_KEYS is not set
2548# CONFIG_SECURITY_DMESG_RESTRICT is not set
2549# CONFIG_SECURITY is not set
2550# CONFIG_SECURITYFS is not set
2551CONFIG_DEFAULT_SECURITY_DAC=y
2552CONFIG_DEFAULT_SECURITY=""
2553CONFIG_CRYPTO=y
2554
2555#
2556# Crypto core or helper
2557#
2558CONFIG_CRYPTO_ALGAPI=y
2559CONFIG_CRYPTO_ALGAPI2=y
2560CONFIG_CRYPTO_AEAD2=y
2561CONFIG_CRYPTO_BLKCIPHER=y
2562CONFIG_CRYPTO_BLKCIPHER2=y
2563CONFIG_CRYPTO_HASH=y
2564CONFIG_CRYPTO_HASH2=y
2565CONFIG_CRYPTO_RNG2=y
2566CONFIG_CRYPTO_PCOMP2=y
2567CONFIG_CRYPTO_MANAGER=y
2568CONFIG_CRYPTO_MANAGER2=y
2569CONFIG_CRYPTO_MANAGER_DISABLE_TESTS=y
2570# CONFIG_CRYPTO_GF128MUL is not set
2571# CONFIG_CRYPTO_NULL is not set
2572# CONFIG_CRYPTO_PCRYPT is not set
2573CONFIG_CRYPTO_WORKQUEUE=y
2574# CONFIG_CRYPTO_CRYPTD is not set
2575# CONFIG_CRYPTO_AUTHENC is not set
2576CONFIG_CRYPTO_TEST=m
2577# CONFIG_CRYPTO_CRYPTODEV is not set
2578
2579#
2580# Authenticated Encryption with Associated Data
2581#
2582# CONFIG_CRYPTO_CCM is not set
2583# CONFIG_CRYPTO_GCM is not set
2584# CONFIG_CRYPTO_SEQIV is not set
2585
2586#
2587# Block modes
2588#
2589CONFIG_CRYPTO_CBC=y
2590# CONFIG_CRYPTO_CTR is not set
2591# CONFIG_CRYPTO_CTS is not set
2592CONFIG_CRYPTO_ECB=y
2593# CONFIG_CRYPTO_LRW is not set
2594# CONFIG_CRYPTO_PCBC is not set
2595# CONFIG_CRYPTO_XTS is not set
2596
2597#
2598# Hash modes
2599#
2600# CONFIG_CRYPTO_HMAC is not set
2601# CONFIG_CRYPTO_XCBC is not set
2602# CONFIG_CRYPTO_VMAC is not set
2603
2604#
2605# Digest
2606#
2607# CONFIG_CRYPTO_CRC32C is not set
2608# CONFIG_CRYPTO_GHASH is not set
2609# CONFIG_CRYPTO_MD4 is not set
2610# CONFIG_CRYPTO_MD5 is not set
2611CONFIG_CRYPTO_MICHAEL_MIC=y
2612# CONFIG_CRYPTO_RMD128 is not set
2613# CONFIG_CRYPTO_RMD160 is not set
2614# CONFIG_CRYPTO_RMD256 is not set
2615# CONFIG_CRYPTO_RMD320 is not set
2616# CONFIG_CRYPTO_SHA1 is not set
2617# CONFIG_CRYPTO_SHA256 is not set
2618# CONFIG_CRYPTO_SHA512 is not set
2619# CONFIG_CRYPTO_TGR192 is not set
2620# CONFIG_CRYPTO_WP512 is not set
2621
2622#
2623# Ciphers
2624#
2625CONFIG_CRYPTO_AES=y
2626# CONFIG_CRYPTO_ANUBIS is not set
2627CONFIG_CRYPTO_ARC4=y
2628# CONFIG_CRYPTO_BLOWFISH is not set
2629# CONFIG_CRYPTO_CAMELLIA is not set
2630# CONFIG_CRYPTO_CAST5 is not set
2631# CONFIG_CRYPTO_CAST6 is not set
2632# CONFIG_CRYPTO_DES is not set
2633# CONFIG_CRYPTO_FCRYPT is not set
2634# CONFIG_CRYPTO_KHAZAD is not set
2635# CONFIG_CRYPTO_SALSA20 is not set
2636# CONFIG_CRYPTO_SEED is not set
2637# CONFIG_CRYPTO_SERPENT is not set
2638# CONFIG_CRYPTO_TEA is not set
2639# CONFIG_CRYPTO_TWOFISH is not set
2640
2641#
2642# Compression
2643#
2644CONFIG_CRYPTO_DEFLATE=y
2645# CONFIG_CRYPTO_ZLIB is not set
2646CONFIG_CRYPTO_LZO=y
2647
2648#
2649# Random Number Generation
2650#
2651# CONFIG_CRYPTO_ANSI_CPRNG is not set
2652# CONFIG_CRYPTO_USER_API_HASH is not set
2653# CONFIG_CRYPTO_USER_API_SKCIPHER is not set
2654CONFIG_CRYPTO_HW=y
2655# CONFIG_CRYPTO_DEV_FSL_CAAM is not set
2656# CONFIG_CRYPTO_DEV_FSL_CAAM_SM is not set
2657# CONFIG_BINARY_PRINTF is not set
2658
2659#
2660# Library routines
2661#
2662CONFIG_BITREVERSE=y
2663CONFIG_RATIONAL=y
2664CONFIG_CRC_CCITT=m
2665CONFIG_CRC16=y
2666# CONFIG_CRC_T10DIF is not set
2667# CONFIG_CRC_ITU_T is not set
2668CONFIG_CRC32=y
2669# CONFIG_CRC7 is not set
2670# CONFIG_LIBCRC32C is not set
2671CONFIG_ZLIB_INFLATE=y
2672CONFIG_ZLIB_DEFLATE=y
2673CONFIG_LZO_COMPRESS=y
2674CONFIG_LZO_DECOMPRESS=y
2675# CONFIG_XZ_DEC is not set
2676# CONFIG_XZ_DEC_BCJ is not set
2677CONFIG_DECOMPRESS_GZIP=y
2678CONFIG_GENERIC_ALLOCATOR=y
2679CONFIG_HAS_IOMEM=y
2680CONFIG_HAS_IOPORT=y
2681CONFIG_HAS_DMA=y
2682CONFIG_CPU_RMAP=y
2683CONFIG_NLATTR=y
2684# CONFIG_AVERAGE is not set
diff --git a/recipes-kernel/linux/linux-congatec-3.0.35/drm-vivante-Add-00-sufix-in-returned-bus-Id.patch b/recipes-kernel/linux/linux-congatec-3.0.35/drm-vivante-Add-00-sufix-in-returned-bus-Id.patch
new file mode 100644
index 0000000..815d02c
--- /dev/null
+++ b/recipes-kernel/linux/linux-congatec-3.0.35/drm-vivante-Add-00-sufix-in-returned-bus-Id.patch
@@ -0,0 +1,31 @@
1From b37a944f55a5010bd08297a63db0275540922f32 Mon Sep 17 00:00:00 2001
2From: Otavio Salvador <otavio@ossystems.com.br>
3Date: Thu, 22 Aug 2013 16:31:29 -0300
4Subject: [PATCH] drm/vivante: Add ":00" sufix in returned bus Id
5
6This makes the 3.0.35 compatible with a Xorg driver build for 3.5.7 or
7newer kernels.
8
9Upstream-Status: Inapropriate [embedded specific]
10
11Signed-off-by: Otavio Salvador <otavio@ossystems.com.br>
12---
13 drivers/gpu/drm/vivante/vivante_drv.c | 2 +-
14 1 file changed, 1 insertion(+), 1 deletion(-)
15
16diff --git a/drivers/gpu/drm/vivante/vivante_drv.c b/drivers/gpu/drm/vivante/vivante_drv.c
17index 4224608..cea360d 100644
18--- a/drivers/gpu/drm/vivante/vivante_drv.c
19+++ b/drivers/gpu/drm/vivante/vivante_drv.c
20@@ -55,7 +55,7 @@
21
22 #include "drm_pciids.h"
23
24-static char platformdevicename[] = "Vivante GCCore";
25+static char platformdevicename[] = "Vivante GCCore:00";
26 static struct platform_device *pplatformdev;
27
28 static struct drm_driver driver = {
29--
301.8.4.rc1
31
diff --git a/recipes-kernel/linux/linux-congatec-3.0.35/epdc-Rename-mxcfb_epdc_kernel.h-to-mxc_epdc.h.patch b/recipes-kernel/linux/linux-congatec-3.0.35/epdc-Rename-mxcfb_epdc_kernel.h-to-mxc_epdc.h.patch
new file mode 100644
index 0000000..0a20b3f
--- /dev/null
+++ b/recipes-kernel/linux/linux-congatec-3.0.35/epdc-Rename-mxcfb_epdc_kernel.h-to-mxc_epdc.h.patch
@@ -0,0 +1,143 @@
1From 149545df26169d257b144ff78934ce9cb5b6818b Mon Sep 17 00:00:00 2001
2From: Otavio Salvador <otavio@ossystems.com.br>
3Date: Sat, 19 Oct 2013 10:55:11 -0300
4Subject: [PATCH] epdc: Rename mxcfb_epdc_kernel.h to mxc_epdc.h
5Organization: O.S. Systems Software LTDA.
6
7This allow for forward compatibility with imx-test >= 3.10.9-1.0.0.
8
9Signed-off-by: Otavio Salvador <otavio@ossystems.com.br>
10---
11 drivers/video/mxc/mxc_epdc_fb.c | 2 +-
12 include/linux/mxcfb_epdc.h | 49 +++++++++++++++++++++++++++++++++++++++
13 include/linux/mxcfb_epdc_kernel.h | 49 ---------------------------------------
14 3 files changed, 50 insertions(+), 50 deletions(-)
15 create mode 100644 include/linux/mxcfb_epdc.h
16 delete mode 100644 include/linux/mxcfb_epdc_kernel.h
17
18diff --git a/drivers/video/mxc/mxc_epdc_fb.c b/drivers/video/mxc/mxc_epdc_fb.c
19index 4103498..b3ef8ea 100644
20--- a/drivers/video/mxc/mxc_epdc_fb.c
21+++ b/drivers/video/mxc/mxc_epdc_fb.c
22@@ -43,7 +43,7 @@
23 #include <linux/dmaengine.h>
24 #include <linux/pxp_dma.h>
25 #include <linux/mxcfb.h>
26-#include <linux/mxcfb_epdc_kernel.h>
27+#include <linux/mxcfb_epdc.h>
28 #include <linux/gpio.h>
29 #include <linux/regulator/driver.h>
30 #include <linux/fsl_devices.h>
31diff --git a/include/linux/mxcfb_epdc.h b/include/linux/mxcfb_epdc.h
32new file mode 100644
33index 0000000..06fea6f
34--- /dev/null
35+++ b/include/linux/mxcfb_epdc.h
36@@ -0,0 +1,49 @@
37+/*
38+ * Copyright (C) 2010-2012 Freescale Semiconductor, Inc. All Rights Reserved.
39+ *
40+ * This program is free software; you can redistribute it and/or modify
41+ * it under the terms of the GNU General Public License as published by
42+ * the Free Software Foundation; either version 2 of the License, or
43+ * (at your option) any later version.
44+ *
45+ * This program is distributed in the hope that it will be useful,
46+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
47+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
48+ * GNU General Public License for more details.
49+ *
50+ * You should have received a copy of the GNU General Public License
51+ * along with this program; if not, write to the Free Software
52+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
53+ *
54+ */
55+#ifndef _MXCFB_EPDC_KERNEL
56+#define _MXCFB_EPDC_KERNEL
57+
58+void mxc_epdc_fb_set_waveform_modes(struct mxcfb_waveform_modes *modes,
59+ struct fb_info *info);
60+int mxc_epdc_fb_set_temperature(int temperature, struct fb_info *info);
61+int mxc_epdc_fb_set_auto_update(u32 auto_mode, struct fb_info *info);
62+int mxc_epdc_fb_send_update(struct mxcfb_update_data *upd_data,
63+ struct fb_info *info);
64+int mxc_epdc_fb_wait_update_complete(
65+ struct mxcfb_update_marker_data *marker_data,
66+ struct fb_info *info);
67+int mxc_epdc_fb_set_pwrdown_delay(u32 pwrdown_delay,
68+ struct fb_info *info);
69+int mxc_epdc_get_pwrdown_delay(struct fb_info *info);
70+int mxc_epdc_fb_set_upd_scheme(u32 upd_scheme, struct fb_info *info);
71+
72+void mxc_spdc_fb_set_waveform_modes(struct mxcfb_waveform_modes *modes,
73+ struct fb_info *info);
74+int mxc_spdc_fb_set_temperature(int temperature, struct fb_info *info);
75+int mxc_spdc_fb_set_auto_update(u32 auto_mode, struct fb_info *info);
76+int mxc_spdc_fb_send_update(struct mxcfb_update_data *upd_data,
77+ struct fb_info *info);
78+int mxc_spdc_fb_wait_update_complete(
79+ struct mxcfb_update_marker_data *marker_data,
80+ struct fb_info *info);
81+int mxc_spdc_fb_set_pwrdown_delay(u32 pwrdown_delay,
82+ struct fb_info *info);
83+int mxc_spdc_get_pwrdown_delay(struct fb_info *info);
84+int mxc_spdc_fb_set_upd_scheme(u32 upd_scheme, struct fb_info *info);
85+#endif
86diff --git a/include/linux/mxcfb_epdc_kernel.h b/include/linux/mxcfb_epdc_kernel.h
87deleted file mode 100644
88index 06fea6f..0000000
89--- a/include/linux/mxcfb_epdc_kernel.h
90+++ /dev/null
91@@ -1,49 +0,0 @@
92-/*
93- * Copyright (C) 2010-2012 Freescale Semiconductor, Inc. All Rights Reserved.
94- *
95- * This program is free software; you can redistribute it and/or modify
96- * it under the terms of the GNU General Public License as published by
97- * the Free Software Foundation; either version 2 of the License, or
98- * (at your option) any later version.
99- *
100- * This program is distributed in the hope that it will be useful,
101- * but WITHOUT ANY WARRANTY; without even the implied warranty of
102- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
103- * GNU General Public License for more details.
104- *
105- * You should have received a copy of the GNU General Public License
106- * along with this program; if not, write to the Free Software
107- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
108- *
109- */
110-#ifndef _MXCFB_EPDC_KERNEL
111-#define _MXCFB_EPDC_KERNEL
112-
113-void mxc_epdc_fb_set_waveform_modes(struct mxcfb_waveform_modes *modes,
114- struct fb_info *info);
115-int mxc_epdc_fb_set_temperature(int temperature, struct fb_info *info);
116-int mxc_epdc_fb_set_auto_update(u32 auto_mode, struct fb_info *info);
117-int mxc_epdc_fb_send_update(struct mxcfb_update_data *upd_data,
118- struct fb_info *info);
119-int mxc_epdc_fb_wait_update_complete(
120- struct mxcfb_update_marker_data *marker_data,
121- struct fb_info *info);
122-int mxc_epdc_fb_set_pwrdown_delay(u32 pwrdown_delay,
123- struct fb_info *info);
124-int mxc_epdc_get_pwrdown_delay(struct fb_info *info);
125-int mxc_epdc_fb_set_upd_scheme(u32 upd_scheme, struct fb_info *info);
126-
127-void mxc_spdc_fb_set_waveform_modes(struct mxcfb_waveform_modes *modes,
128- struct fb_info *info);
129-int mxc_spdc_fb_set_temperature(int temperature, struct fb_info *info);
130-int mxc_spdc_fb_set_auto_update(u32 auto_mode, struct fb_info *info);
131-int mxc_spdc_fb_send_update(struct mxcfb_update_data *upd_data,
132- struct fb_info *info);
133-int mxc_spdc_fb_wait_update_complete(
134- struct mxcfb_update_marker_data *marker_data,
135- struct fb_info *info);
136-int mxc_spdc_fb_set_pwrdown_delay(u32 pwrdown_delay,
137- struct fb_info *info);
138-int mxc_spdc_get_pwrdown_delay(struct fb_info *info);
139-int mxc_spdc_fb_set_upd_scheme(u32 upd_scheme, struct fb_info *info);
140-#endif
141--
1421.8.4.rc3
143
diff --git a/recipes-kernel/linux/linux-congatec_3.0.35.bb b/recipes-kernel/linux/linux-congatec_3.0.35.bb
new file mode 100644
index 0000000..428945f
--- /dev/null
+++ b/recipes-kernel/linux/linux-congatec_3.0.35.bb
@@ -0,0 +1,26 @@
1# Copyright (C) 2011-2013 Freescale Semiconductor
2# Copyright (C) 2012-2014 O.S. Systems Software LTDA.
3# Released under the MIT license (see COPYING.MIT for the terms)
4
5SUMMARY = "Linux Kernel based on Freescale Linux kernel to add support for Congatec boards"
6include recipes-kernel/linux/linux-imx.inc
7
8# Revision of 4.1.0 branch
9SRCREV = "bdde708ebfde4a8c1d3829578d3f6481a343533a"
10LOCALVERSION = "-4.1.0+yocto"
11SRCBRANCH = "imx_3.0.35_4.1.0"
12
13# Patches need for Yocto and not applied by Freescale when doing 4.1.0 branch
14SRC_URI += "file://drm-vivante-Add-00-sufix-in-returned-bus-Id.patch \
15 file://epdc-Rename-mxcfb_epdc_kernel.h-to-mxc_epdc.h.patch \
16 file://0001-perf-tools-Fix-getrusage-related-build-failure-on-gl.patch \
17 file://0002-ARM-7668-1-fix-memset-related-crashes-caused-by-rece.patch \
18 file://0003-ARM-7670-1-fix-the-memset-fix.patch \
19 file://0004-ENGR00271136-Fix-build-break-when-CONFIG_CLK_DEBUG-i.patch \
20 file://0005-ENGR00271359-Add-Multi-touch-support.patch \
21 file://0006-Add-support-for-DVI-monitors.patch \
22 file://0001-Add-linux-support-for-congatec-evaluation-board-qmx6q.patch \
23 file://ENGR00278350-gpu-viante-4.6.9p13-kernel-part-integra.patch \
24"
25
26COMPATIBLE_MACHINE = "(cgtqmx6)"
diff --git a/recipes-kernel/linux/linux-cubox-i-3.0.35/0004-ENGR00271136-Fix-build-break-when-CONFIG_CLK_DEBUG-i.patch b/recipes-kernel/linux/linux-cubox-i-3.0.35/0004-ENGR00271136-Fix-build-break-when-CONFIG_CLK_DEBUG-i.patch
new file mode 100644
index 0000000..7316351
--- /dev/null
+++ b/recipes-kernel/linux/linux-cubox-i-3.0.35/0004-ENGR00271136-Fix-build-break-when-CONFIG_CLK_DEBUG-i.patch
@@ -0,0 +1,43 @@
1From d8601292ae25e0af47aa4486055221ab44113f0e Mon Sep 17 00:00:00 2001
2From: Mahesh Mahadevan <Mahesh.Mahadevan@freescale.com>
3Date: Mon, 15 Jul 2013 15:34:54 -0500
4Subject: [PATCH] ENGR00271136 Fix build break when CONFIG_CLK_DEBUG is
5 disabled
6Organization: O.S. Systems Software LTDA.
7
8clk structure member name is defined only when CONFIG_CLK_DEBUG is enabled.
9Hence need to encapsulate the code with this config.
10
11Patch received from imx community:
12https://community.freescale.com/thread/308482
13
14Upstream-Status: Pending
15
16Signed-off-by: xiongweihuang
17Signed-off-by: Mahesh Mahadevan <Mahesh.Mahadevan@freescale.com>
18---
19 arch/arm/plat-mxc/clock.c | 4 ++--
20 1 file changed, 2 insertions(+), 2 deletions(-)
21
22diff --git a/arch/arm/plat-mxc/clock.c b/arch/arm/plat-mxc/clock.c
23index 93347eb..1aa2664 100755
24--- a/arch/arm/plat-mxc/clock.c
25+++ b/arch/arm/plat-mxc/clock.c
26@@ -58,12 +58,12 @@ static void __clk_disable(struct clk *clk)
27 {
28 if (clk == NULL || IS_ERR(clk))
29 return;
30-
31+#ifdef CONFIG_CLK_DEBUG
32 if (!clk->usecount) {
33 WARN(1, "clock enable/disable mismatch! clk %s\n", clk->name);
34 return;
35 }
36-
37+#endif
38 if (!(--clk->usecount)) {
39 if (clk->disable)
40 clk->disable(clk);
41--
421.8.4.rc3
43
diff --git a/recipes-kernel/linux/linux-cubox-i-3.0.35/0005-ENGR00271359-Add-Multi-touch-support.patch b/recipes-kernel/linux/linux-cubox-i-3.0.35/0005-ENGR00271359-Add-Multi-touch-support.patch
new file mode 100644
index 0000000..cb20198
--- /dev/null
+++ b/recipes-kernel/linux/linux-cubox-i-3.0.35/0005-ENGR00271359-Add-Multi-touch-support.patch
@@ -0,0 +1,98 @@
1From 538f4bb2f7a51f267395550a5be9f0ab2e426712 Mon Sep 17 00:00:00 2001
2From: Erik Boto <erik.boto@pelagicore.com>
3Date: Tue, 16 Jul 2013 12:06:05 -0500
4Subject: [PATCH] ENGR00271359 Add Multi-touch support
5Organization: O.S. Systems Software LTDA.
6
7The previous behavior of the driver did not work properly with Qt5
8QtQuick multi touch-point gestures, due to how touch-points are
9reported when removing a touch-point. My interpretation of the
10available documentation [1] was that the driver should report all
11touch-points between SYN_REPORTs, but it is not explicitly stated so.
12I've found another mail-thread [2] where the creator of the protocol
13states:
14
15"The protocol defines a generic way of sending a variable amount of
16contacts. The contact count is obtained by counting the number of
17non-empty finger packets between SYN_REPORT events."-Henrik Rydberg
18
19I think this verifies my assumption that all touch-points should be
20reported between SYN_REPORTs, otherwise it can not be used to obtain
21the count.
22
23[1] https://www.kernel.org/doc/Documentation/input/multi-touch-protocol.txt
24[2] http://lists.x.org/archives/xorg-devel/2010-March/006466.html
25
26Upstream-Status: Pending
27
28Signed-off-by: Erik Boto <erik.boto@pelagicore.com>
29Signed-off-by: Mahesh Mahadevan <Mahesh.Mahadevan@freescale.com>
30(cherry picked from commit 7cba001c5a502680f6dbf902821726779a9c9287)
31---
32 drivers/input/touchscreen/egalax_ts.c | 36 +++++++++++++++++------------------
33 1 file changed, 18 insertions(+), 18 deletions(-)
34
35diff --git a/drivers/input/touchscreen/egalax_ts.c b/drivers/input/touchscreen/egalax_ts.c
36index 0b6cde7..271f820 100644
37--- a/drivers/input/touchscreen/egalax_ts.c
38+++ b/drivers/input/touchscreen/egalax_ts.c
39@@ -133,7 +133,6 @@ retry:
40 }
41
42 if (down) {
43- /* should also report old pointers */
44 events[id].valid = valid;
45 events[id].status = down;
46 events[id].x = x;
47@@ -144,23 +143,6 @@ retry:
48 input_report_abs(input_dev, ABS_Y, y);
49 input_event(data->input_dev, EV_KEY, BTN_TOUCH, 1);
50 input_report_abs(input_dev, ABS_PRESSURE, 1);
51-#else
52- for (i = 0; i < MAX_SUPPORT_POINTS; i++) {
53- if (!events[i].valid)
54- continue;
55- dev_dbg(&client->dev, "report id:%d valid:%d x:%d y:%d",
56- i, valid, x, y);
57-
58- input_report_abs(input_dev,
59- ABS_MT_TRACKING_ID, i);
60- input_report_abs(input_dev,
61- ABS_MT_TOUCH_MAJOR, 1);
62- input_report_abs(input_dev,
63- ABS_MT_POSITION_X, events[i].x);
64- input_report_abs(input_dev,
65- ABS_MT_POSITION_Y, events[i].y);
66- input_mt_sync(input_dev);
67- }
68 #endif
69 } else {
70 dev_dbg(&client->dev, "release id:%d\n", id);
71@@ -176,6 +158,24 @@ retry:
72 #endif
73 }
74
75+#ifndef CONFIG_TOUCHSCREEN_EGALAX_SINGLE_TOUCH
76+ /* report all pointers */
77+ for (i = 0; i < MAX_SUPPORT_POINTS; i++) {
78+ if (!events[i].valid)
79+ continue;
80+ dev_dbg(&client->dev, "report id:%d valid:%d x:%d y:%d",
81+ i, valid, x, y);
82+ input_report_abs(input_dev,
83+ ABS_MT_TRACKING_ID, i);
84+ input_report_abs(input_dev,
85+ ABS_MT_TOUCH_MAJOR, 1);
86+ input_report_abs(input_dev,
87+ ABS_MT_POSITION_X, events[i].x);
88+ input_report_abs(input_dev,
89+ ABS_MT_POSITION_Y, events[i].y);
90+ input_mt_sync(input_dev);
91+ }
92+#endif
93 input_sync(input_dev);
94 return IRQ_HANDLED;
95 }
96--
971.8.4.rc3
98
diff --git a/recipes-kernel/linux/linux-cubox-i-3.0.35/0006-Add-support-for-DVI-monitors.patch b/recipes-kernel/linux/linux-cubox-i-3.0.35/0006-Add-support-for-DVI-monitors.patch
new file mode 100644
index 0000000..00a6b5c
--- /dev/null
+++ b/recipes-kernel/linux/linux-cubox-i-3.0.35/0006-Add-support-for-DVI-monitors.patch
@@ -0,0 +1,227 @@
1From 3e6441d113f72b412081a2c87f39011e4c253a35 Mon Sep 17 00:00:00 2001
2From: Robert Winkler <robert.winkler@boundarydevices.com>
3Date: Fri, 19 Jul 2013 19:00:41 -0700
4Subject: [PATCH] Add support for DVI monitors
5Organization: O.S. Systems Software LTDA.
6
7Upstream-Status: Pending
8
9Signed-off-by: Robert Winkler <robert.winkler@boundarydevices.com>
10---
11 arch/arm/plat-mxc/include/mach/mxc_hdmi.h | 7 +++
12 drivers/video/mxc_hdmi.c | 98 +++++++++++++------------------
13 2 files changed, 49 insertions(+), 56 deletions(-)
14
15diff --git a/arch/arm/plat-mxc/include/mach/mxc_hdmi.h b/arch/arm/plat-mxc/include/mach/mxc_hdmi.h
16index 94f7638..af59c62 100644
17--- a/arch/arm/plat-mxc/include/mach/mxc_hdmi.h
18+++ b/arch/arm/plat-mxc/include/mach/mxc_hdmi.h
19@@ -605,6 +605,10 @@ enum {
20 HDMI_IH_MUTE_PHY_STAT0_TX_PHY_LOCK = 0x2,
21 HDMI_IH_MUTE_PHY_STAT0_HPD = 0x1,
22
23+/* IH and IH_MUTE convenience macro RX_SENSE | HPD*/
24+ HDMI_DVI_IH_STAT = 0x3D,
25+
26+
27 /* IH_AHBDMAAUD_STAT0 field values */
28 HDMI_IH_AHBDMAAUD_STAT0_ERROR = 0x20,
29 HDMI_IH_AHBDMAAUD_STAT0_LOST = 0x10,
30@@ -903,6 +907,9 @@ enum {
31 HDMI_PHY_HPD = 0x02,
32 HDMI_PHY_TX_PHY_LOCK = 0x01,
33
34+/* HDMI STAT convenience RX_SENSE | HPD */
35+ HDMI_DVI_STAT = 0xF2,
36+
37 /* PHY_I2CM_SLAVE_ADDR field values */
38 HDMI_PHY_I2CM_SLAVE_ADDR_PHY_GEN2 = 0x69,
39 HDMI_PHY_I2CM_SLAVE_ADDR_HEAC_PHY = 0x49,
40diff --git a/drivers/video/mxc_hdmi.c b/drivers/video/mxc_hdmi.c
41index c5069aa..544f352 100644
42--- a/drivers/video/mxc_hdmi.c
43+++ b/drivers/video/mxc_hdmi.c
44@@ -180,7 +180,6 @@ struct mxc_hdmi {
45 bool dft_mode_set;
46 char *dft_mode_str;
47 int default_bpp;
48- u8 latest_intr_stat;
49 bool irq_enabled;
50 spinlock_t irq_lock;
51 bool phy_enabled;
52@@ -1996,58 +1995,48 @@ static void hotplug_worker(struct work_struct *work)
53 struct delayed_work *delay_work = to_delayed_work(work);
54 struct mxc_hdmi *hdmi =
55 container_of(delay_work, struct mxc_hdmi, hotplug_work);
56- u32 phy_int_stat, phy_int_pol, phy_int_mask;
57- u8 val;
58+ u32 hdmi_phy_stat0, hdmi_phy_pol0, hdmi_phy_mask0;
59 unsigned long flags;
60 char event_string[32];
61 char *envp[] = { event_string, NULL };
62
63- phy_int_stat = hdmi->latest_intr_stat;
64- phy_int_pol = hdmi_readb(HDMI_PHY_POL0);
65
66- dev_dbg(&hdmi->pdev->dev, "phy_int_stat=0x%x, phy_int_pol=0x%x\n",
67- phy_int_stat, phy_int_pol);
68+ hdmi_phy_stat0 = hdmi_readb(HDMI_PHY_STAT0);
69+ hdmi_phy_pol0 = hdmi_readb(HDMI_PHY_POL0);
70+
71+ dev_dbg(&hdmi->pdev->dev, "hdmi_phy_stat0=0x%x, hdmi_phy_pol0=0x%x\n",
72+ hdmi_phy_stat0, hdmi_phy_pol0);
73+
74+ /* Make HPD intr active low to capture unplug event or
75+ * active high to capture plugin event */
76+ hdmi_writeb((HDMI_DVI_STAT & ~hdmi_phy_stat0), HDMI_PHY_POL0);
77
78 /* check cable status */
79- if (phy_int_stat & HDMI_IH_PHY_STAT0_HPD) {
80- /* cable connection changes */
81- if (phy_int_pol & HDMI_PHY_HPD) {
82- /* Plugin event */
83- dev_dbg(&hdmi->pdev->dev, "EVENT=plugin\n");
84- mxc_hdmi_cable_connected(hdmi);
85-
86- /* Make HPD intr active low to capture unplug event */
87- val = hdmi_readb(HDMI_PHY_POL0);
88- val &= ~HDMI_PHY_HPD;
89- hdmi_writeb(val, HDMI_PHY_POL0);
90-
91- sprintf(event_string, "EVENT=plugin");
92- kobject_uevent_env(&hdmi->pdev->dev.kobj, KOBJ_CHANGE, envp);
93+ if (hdmi_phy_stat0 & HDMI_DVI_STAT) {
94+ /* Plugin event */
95+ dev_dbg(&hdmi->pdev->dev, "EVENT=plugin\n");
96+ mxc_hdmi_cable_connected(hdmi);
97+
98+ sprintf(event_string, "EVENT=plugin");
99+ kobject_uevent_env(&hdmi->pdev->dev.kobj, KOBJ_CHANGE, envp);
100 #ifdef CONFIG_MXC_HDMI_CEC
101- mxc_hdmi_cec_handle(0x80);
102+ mxc_hdmi_cec_handle(0x80);
103 #endif
104- hdmi_set_cable_state(1);
105-
106- } else if (!(phy_int_pol & HDMI_PHY_HPD)) {
107- /* Plugout event */
108- dev_dbg(&hdmi->pdev->dev, "EVENT=plugout\n");
109- hdmi_set_cable_state(0);
110- mxc_hdmi_abort_stream();
111- mxc_hdmi_cable_disconnected(hdmi);
112+ hdmi_set_cable_state(1);
113
114- /* Make HPD intr active high to capture plugin event */
115- val = hdmi_readb(HDMI_PHY_POL0);
116- val |= HDMI_PHY_HPD;
117- hdmi_writeb(val, HDMI_PHY_POL0);
118+ } else {
119+ /* Plugout event */
120+ dev_dbg(&hdmi->pdev->dev, "EVENT=plugout\n");
121+ hdmi_set_cable_state(0);
122+ mxc_hdmi_abort_stream();
123+ mxc_hdmi_cable_disconnected(hdmi);
124
125- sprintf(event_string, "EVENT=plugout");
126- kobject_uevent_env(&hdmi->pdev->dev.kobj, KOBJ_CHANGE, envp);
127+ sprintf(event_string, "EVENT=plugout");
128+ kobject_uevent_env(&hdmi->pdev->dev.kobj, KOBJ_CHANGE, envp);
129 #ifdef CONFIG_MXC_HDMI_CEC
130- mxc_hdmi_cec_handle(0x100);
131+ mxc_hdmi_cec_handle(0x100);
132 #endif
133
134- } else
135- dev_dbg(&hdmi->pdev->dev, "EVENT=none?\n");
136 }
137
138 /* Lock here to ensure full powerdown sequence
139@@ -2055,12 +2044,12 @@ static void hotplug_worker(struct work_struct *work)
140 spin_lock_irqsave(&hdmi->irq_lock, flags);
141
142 /* Re-enable HPD interrupts */
143- phy_int_mask = hdmi_readb(HDMI_PHY_MASK0);
144- phy_int_mask &= ~HDMI_PHY_HPD;
145- hdmi_writeb(phy_int_mask, HDMI_PHY_MASK0);
146+ hdmi_phy_mask0 = hdmi_readb(HDMI_PHY_MASK0);
147+ hdmi_phy_mask0 &= ~HDMI_DVI_STAT;
148+ hdmi_writeb(hdmi_phy_mask0, HDMI_PHY_MASK0);
149
150 /* Unmute interrupts */
151- hdmi_writeb(~HDMI_IH_MUTE_PHY_STAT0_HPD, HDMI_IH_MUTE_PHY_STAT0);
152+ hdmi_writeb(~HDMI_DVI_IH_STAT, HDMI_IH_MUTE_PHY_STAT0);
153
154 if (hdmi_readb(HDMI_IH_FC_STAT2) & HDMI_IH_FC_STAT2_OVERFLOW_MASK)
155 mxc_hdmi_clear_overflow();
156@@ -2086,7 +2075,7 @@ static void hdcp_hdp_worker(struct work_struct *work)
157 static irqreturn_t mxc_hdmi_hotplug(int irq, void *data)
158 {
159 struct mxc_hdmi *hdmi = data;
160- u8 val, intr_stat;
161+ u8 val;
162 unsigned long flags;
163
164 spin_lock_irqsave(&hdmi->irq_lock, flags);
165@@ -2108,25 +2097,22 @@ static irqreturn_t mxc_hdmi_hotplug(int irq, void *data)
166 * HDMI registers.
167 */
168 /* Capture status - used in hotplug_worker ISR */
169- intr_stat = hdmi_readb(HDMI_IH_PHY_STAT0);
170-
171- if (intr_stat & HDMI_IH_PHY_STAT0_HPD) {
172+ if (hdmi_readb(HDMI_IH_PHY_STAT0) & HDMI_DVI_IH_STAT) {
173
174 dev_dbg(&hdmi->pdev->dev, "Hotplug interrupt received\n");
175- hdmi->latest_intr_stat = intr_stat;
176
177 /* Mute interrupts until handled */
178
179 val = hdmi_readb(HDMI_IH_MUTE_PHY_STAT0);
180- val |= HDMI_IH_MUTE_PHY_STAT0_HPD;
181+ val |= HDMI_DVI_IH_STAT;
182 hdmi_writeb(val, HDMI_IH_MUTE_PHY_STAT0);
183
184 val = hdmi_readb(HDMI_PHY_MASK0);
185- val |= HDMI_PHY_HPD;
186+ val |= HDMI_DVI_STAT;
187 hdmi_writeb(val, HDMI_PHY_MASK0);
188
189 /* Clear Hotplug interrupts */
190- hdmi_writeb(HDMI_IH_PHY_STAT0_HPD, HDMI_IH_PHY_STAT0);
191+ hdmi_writeb(HDMI_DVI_IH_STAT, HDMI_IH_PHY_STAT0);
192
193 schedule_delayed_work(&(hdmi->hotplug_work), msecs_to_jiffies(20));
194 }
195@@ -2282,13 +2268,13 @@ static void mxc_hdmi_fb_registered(struct mxc_hdmi *hdmi)
196 HDMI_PHY_I2CM_CTLINT_ADDR);
197
198 /* enable cable hot plug irq */
199- hdmi_writeb((u8)~HDMI_PHY_HPD, HDMI_PHY_MASK0);
200+ hdmi_writeb((u8)~HDMI_DVI_STAT, HDMI_PHY_MASK0);
201
202 /* Clear Hotplug interrupts */
203- hdmi_writeb(HDMI_IH_PHY_STAT0_HPD, HDMI_IH_PHY_STAT0);
204+ hdmi_writeb(HDMI_DVI_IH_STAT, HDMI_IH_PHY_STAT0);
205
206 /* Unmute interrupts */
207- hdmi_writeb(~HDMI_IH_MUTE_PHY_STAT0_HPD, HDMI_IH_MUTE_PHY_STAT0);
208+ hdmi_writeb(~HDMI_DVI_IH_STAT, HDMI_IH_MUTE_PHY_STAT0);
209
210 hdmi->fb_reg = true;
211
212@@ -2522,10 +2508,10 @@ static int mxc_hdmi_disp_init(struct mxc_dispdrv_handle *disp,
213
214 /* Configure registers related to HDMI interrupt
215 * generation before registering IRQ. */
216- hdmi_writeb(HDMI_PHY_HPD, HDMI_PHY_POL0);
217+ hdmi_writeb(HDMI_DVI_STAT, HDMI_PHY_POL0);
218
219 /* Clear Hotplug interrupts */
220- hdmi_writeb(HDMI_IH_PHY_STAT0_HPD, HDMI_IH_PHY_STAT0);
221+ hdmi_writeb(HDMI_DVI_IH_STAT, HDMI_IH_PHY_STAT0);
222
223 hdmi->nb.notifier_call = mxc_hdmi_fb_event;
224 ret = fb_register_client(&hdmi->nb);
225--
2261.8.4.rc3
227
diff --git a/recipes-kernel/linux/linux-cubox-i-3.0.35/0007-ARM-mach-mx6-board-mx6q_sabresd-Register-SDHC3-first.patch b/recipes-kernel/linux/linux-cubox-i-3.0.35/0007-ARM-mach-mx6-board-mx6q_sabresd-Register-SDHC3-first.patch
new file mode 100644
index 0000000..d02aa40
--- /dev/null
+++ b/recipes-kernel/linux/linux-cubox-i-3.0.35/0007-ARM-mach-mx6-board-mx6q_sabresd-Register-SDHC3-first.patch
@@ -0,0 +1,38 @@
1From cd31abbe08372fa870fac78ae845edd4859f8835 Mon Sep 17 00:00:00 2001
2From: Fabio Estevam <fabio.estevam@freescale.com>
3Date: Sat, 28 Sep 2013 18:46:18 -0300
4Subject: [PATCH] ARM: mach-mx6: board-mx6q_sabresd: Register SDHC3 first
5Organization: O.S. Systems Software LTDA.
6
7On sabresd boards we boot from SDHC3, so let's register it as mmc0.
8
9Currently eMMC is mmc0 and mmc1 can be SDHC3 or SDHC2 (if present).
10
11Registering SDHC3 is safer as we can always find the rootfs.
12
13Signed-off-by: Fabio Estevam <fabio.estevam@freescale.com>
14---
15 arch/arm/mach-mx6/board-mx6q_sabresd.c | 5 +----
16 1 file changed, 1 insertion(+), 4 deletions(-)
17
18diff --git a/arch/arm/mach-mx6/board-mx6q_sabresd.c b/arch/arm/mach-mx6/board-mx6q_sabresd.c
19index 3f9a845..4e6b323 100644
20--- a/arch/arm/mach-mx6/board-mx6q_sabresd.c
21+++ b/arch/arm/mach-mx6/board-mx6q_sabresd.c
22@@ -1847,12 +1847,9 @@ static void __init mx6_sabresd_board_init(void)
23
24 imx6q_add_pm_imx(0, &mx6q_sabresd_pm_data);
25
26- /* Move sd4 to first because sd4 connect to emmc.
27- Mfgtools want emmc is mmcblk0 and other sd card is mmcblk1.
28- */
29+ imx6q_add_sdhci_usdhc_imx(2, &mx6q_sabresd_sd3_data);
30 imx6q_add_sdhci_usdhc_imx(3, &mx6q_sabresd_sd4_data);
31 imx6q_add_sdhci_usdhc_imx(1, &mx6q_sabresd_sd2_data);
32- imx6q_add_sdhci_usdhc_imx(2, &mx6q_sabresd_sd3_data);
33 imx_add_viv_gpu(&imx6_gpu_data, &imx6q_gpu_pdata);
34 imx6q_sabresd_init_usb();
35 /* SATA is not supported by MX6DL/Solo */
36--
371.8.4.rc3
38
diff --git a/recipes-kernel/linux/linux-cubox-i-3.0.35/ENGR00278350-gpu-viante-4.6.9p13-kernel-part-integra.patch b/recipes-kernel/linux/linux-cubox-i-3.0.35/ENGR00278350-gpu-viante-4.6.9p13-kernel-part-integra.patch
new file mode 100644
index 0000000..1e039fd
--- /dev/null
+++ b/recipes-kernel/linux/linux-cubox-i-3.0.35/ENGR00278350-gpu-viante-4.6.9p13-kernel-part-integra.patch
@@ -0,0 +1,6261 @@
1From 2e575255b8c53d3cfe2af068411696fe3c40debb Mon Sep 17 00:00:00 2001
2From: Loren Huang <b02279@freescale.com>
3Date: Mon, 2 Sep 2013 12:16:48 +0800
4Subject: [PATCH 01/16] ENGR00278350 gpu:viante 4.6.9p13 kernel part
5 integration
6
7Integrated 4.6.9p13 kernel part change.
8This integration is mainly for android test.
9Linux test will be focused on 3.10 kernel.
10
11Signed-off-by: Loren HUANG <b02279@freescale.com>
12Acked-by: Shawn Guo
13---
14 drivers/mxc/gpu-viv/Kbuild | 33 +-
15 .../GC350/hal/kernel/gc_hal_kernel_hardware_vg.c | 177 ++--
16 .../GC350/hal/kernel/gc_hal_kernel_hardware_vg.h | 9 +-
17 .../arch/XAQ2/hal/kernel/gc_hal_kernel_context.c | 8 +-
18 .../arch/XAQ2/hal/kernel/gc_hal_kernel_context.h | 13 +
19 .../arch/XAQ2/hal/kernel/gc_hal_kernel_hardware.c | 736 ++++++++++++-
20 .../arch/XAQ2/hal/kernel/gc_hal_kernel_hardware.h | 1 +
21 drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel.c | 125 ++-
22 drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel.h | 24 +-
23 .../mxc/gpu-viv/hal/kernel/gc_hal_kernel_command.c | 57 ++
24 .../gpu-viv/hal/kernel/gc_hal_kernel_command_vg.c | 45 +-
25 drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel_db.c | 12 +
26 .../mxc/gpu-viv/hal/kernel/gc_hal_kernel_event.c | 29 +
27 .../hal/kernel/gc_hal_kernel_interrupt_vg.c | 3 +
28 drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel_mmu.c | 8 +-
29 .../hal/kernel/gc_hal_kernel_video_memory.c | 20 +-
30 drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal.h | 84 +-
31 drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_base.h | 172 +++-
32 .../mxc/gpu-viv/hal/kernel/inc/gc_hal_compiler.h | 142 ++-
33 drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_driver.h | 37 +
34 drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_engine.h | 46 +-
35 drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_enum.h | 125 ++-
36 .../mxc/gpu-viv/hal/kernel/inc/gc_hal_options.h | 86 +-
37 .../mxc/gpu-viv/hal/kernel/inc/gc_hal_profiler.h | 1078 +++-----------------
38 drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_raster.h | 48 +
39 drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_types.h | 79 +-
40 .../mxc/gpu-viv/hal/kernel/inc/gc_hal_version.h | 2 +-
41 .../hal/os/linux/kernel/gc_hal_kernel_device.c | 17 +-
42 .../hal/os/linux/kernel/gc_hal_kernel_device.h | 16 +-
43 .../hal/os/linux/kernel/gc_hal_kernel_driver.c | 99 +-
44 .../gpu-viv/hal/os/linux/kernel/gc_hal_kernel_os.c | 655 ++++++++++--
45 .../hal/os/linux/kernel/gc_hal_kernel_sync.c | 174 ++++
46 .../hal/os/linux/kernel/gc_hal_kernel_sync.h | 71 ++
47 33 files changed, 2974 insertions(+), 1257 deletions(-)
48 create mode 100644 drivers/mxc/gpu-viv/hal/os/linux/kernel/gc_hal_kernel_sync.c
49 create mode 100644 drivers/mxc/gpu-viv/hal/os/linux/kernel/gc_hal_kernel_sync.h
50
51diff --git a/drivers/mxc/gpu-viv/Kbuild b/drivers/mxc/gpu-viv/Kbuild
52index 93b1259..2b277d6 100644
53--- a/drivers/mxc/gpu-viv/Kbuild
54+++ b/drivers/mxc/gpu-viv/Kbuild
55@@ -45,8 +45,6 @@ OBJS := $(OS_KERNEL_DIR)/gc_hal_kernel_device.o \
56 $(OS_KERNEL_DIR)/gc_hal_kernel_os.o \
57 $(OS_KERNEL_DIR)/gc_hal_kernel_debugfs.o
58
59-ifeq ($(USE_3D_VG), 1)
60-
61 OBJS += $(HAL_KERNEL_DIR)/gc_hal_kernel.o \
62 $(HAL_KERNEL_DIR)/gc_hal_kernel_command.o \
63 $(HAL_KERNEL_DIR)/gc_hal_kernel_db.o \
64@@ -69,19 +67,9 @@ OBJS +=\
65 $(ARCH_VG_KERNEL_DIR)/gc_hal_kernel_hardware_command_vg.o\
66 $(ARCH_VG_KERNEL_DIR)/gc_hal_kernel_hardware_vg.o
67 endif
68-else
69-
70-OBJS += $(HAL_KERNEL_DIR)/gc_hal_kernel.o \
71- $(HAL_KERNEL_DIR)/gc_hal_kernel_command.o \
72- $(HAL_KERNEL_DIR)/gc_hal_kernel_heap.o \
73- $(HAL_KERNEL_DIR)/gc_hal_kernel_interrupt.o \
74- $(HAL_KERNEL_DIR)/gc_hal_kernel_mmu.o \
75- $(HAL_KERNEL_DIR)/gc_hal_kernel_video_memory.o \
76- $(OS_KERNEL_DIR)/gc_hal_kernel_debug.o
77-
78-OBJS += $(ARCH_KERNEL_DIR)/gc_hal_kernel_hardware.o \
79- $(ARCH_KERNEL_DIR)/gc_hal_kernel_hardware_command.o
80
81+ifneq ($(CONFIG_SYNC),)
82+OBJS += $(OS_KERNEL_DIR)/gc_hal_kernel_sync.o
83 endif
84
85 ifeq ($(KERNELRELEASE), )
86@@ -129,23 +117,16 @@ ifeq ($(CONFIG_DOVE_GPU), 1)
87 EXTRA_CFLAGS += -DCONFIG_DOVE_GPU=1
88 endif
89
90-ifeq ($(USE_POWER_MANAGEMENT), 1)
91-EXTRA_CFLAGS += -DgcdPOWER_MANAGEMENT=1
92-else
93-EXTRA_CFLAGS += -DgcdPOWER_MANAGEMENT=0
94-endif
95-
96 ifneq ($(USE_PLATFORM_DRIVER), 0)
97 EXTRA_CFLAGS += -DUSE_PLATFORM_DRIVER=1
98 else
99 EXTRA_CFLAGS += -DUSE_PLATFORM_DRIVER=0
100 endif
101
102-ifeq ($(USE_PROFILER), 1)
103+
104 EXTRA_CFLAGS += -DVIVANTE_PROFILER=1
105-else
106-EXTRA_CFLAGS += -DVIVANTE_PROFILER=0
107-endif
108+EXTRA_CFLAGS += -DVIVANTE_PROFILER_CONTEXT=1
109+
110
111 ifeq ($(ANDROID), 1)
112 EXTRA_CFLAGS += -DANDROID=1
113@@ -235,6 +216,10 @@ ifeq ($(USE_BANK_ALIGNMENT), 1)
114 endif
115 endif
116
117+ifneq ($(CONFIG_SYNC),)
118+EXTRA_CFLAGS += -DgcdANDROID_NATIVE_FENCE_SYNC=1
119+endif
120+
121 EXTRA_CFLAGS += -I$(AQROOT)/hal/kernel/inc
122 EXTRA_CFLAGS += -I$(AQROOT)/hal/kernel
123 EXTRA_CFLAGS += -I$(AQARCH)/hal/kernel
124diff --git a/drivers/mxc/gpu-viv/arch/GC350/hal/kernel/gc_hal_kernel_hardware_vg.c b/drivers/mxc/gpu-viv/arch/GC350/hal/kernel/gc_hal_kernel_hardware_vg.c
125index 70c2cd6..a17d2fd 100644
126--- a/drivers/mxc/gpu-viv/arch/GC350/hal/kernel/gc_hal_kernel_hardware_vg.c
127+++ b/drivers/mxc/gpu-viv/arch/GC350/hal/kernel/gc_hal_kernel_hardware_vg.c
128@@ -217,50 +217,17 @@ _IdentifyHardware(
129 return status;
130 }
131
132-static gctTHREADFUNCRESULT gctTHREADFUNCTYPE
133-_TimeIdleThread(
134- gctTHREADFUNCPARAMETER ThreadParameter
135+#if gcdPOWEROFF_TIMEOUT
136+void
137+_VGPowerTimerFunction(
138+ gctPOINTER Data
139 )
140 {
141- gctUINT32 currentTime = 0;
142- gctBOOL isAfter = gcvFALSE;
143- gceCHIPPOWERSTATE state;
144-
145- /* Cast the object. */
146- gckVGHARDWARE hardware = (gckVGHARDWARE) ThreadParameter;
147-
148- while(gcvTRUE)
149- {
150- gcmkVERIFY_OK(gckOS_WaitSignal(hardware->os,
151- hardware->idleSignal, gcvINFINITE));
152-
153- if (hardware->killThread)
154- {
155- break;
156- }
157-
158- do
159- {
160- gcmkVERIFY_OK(gckOS_GetTicks(&currentTime));
161-
162- gcmkVERIFY_OK(
163- gckOS_TicksAfter(currentTime, hardware->powerOffTime, &isAfter));
164-
165- if (isAfter)
166- {
167- gcmkVERIFY_OK(gckVGHARDWARE_SetPowerManagementState(
168- hardware, gcvPOWER_OFF_BROADCAST));
169- }
170-
171- gcmkVERIFY_OK(gckOS_Delay(hardware->os, 200));
172-
173- gcmkVERIFY_OK(gckVGHARDWARE_QueryPowerManagementState(
174- hardware, &state));
175-
176- } while (state == gcvPOWER_IDLE);
177- }
178- return 0;
179+ gckVGHARDWARE hardware = (gckVGHARDWARE)Data;
180+ gcmkVERIFY_OK(
181+ gckVGHARDWARE_SetPowerManagementState(hardware, gcvPOWER_OFF_TIMEOUT));
182 }
183+#endif
184
185 /******************************************************************************\
186 ****************************** gckVGHARDWARE API code *****************************
187@@ -338,15 +305,21 @@ gckVGHARDWARE_Construct(
188 hardware->chipMinorFeatures2 = chipMinorFeatures2;
189
190 hardware->powerMutex = gcvNULL;
191- hardware->idleSignal = gcvNULL;
192 hardware->chipPowerState = gcvPOWER_ON;
193 hardware->chipPowerStateGlobal = gcvPOWER_ON;
194 hardware->clockState = gcvTRUE;
195 hardware->powerState = gcvTRUE;
196- hardware->powerOffTimeout = gcdPOWEROFF_TIMEOUT;
197+
198 hardware->powerOffTime = 0;
199- hardware->timeIdleThread = gcvNULL;
200- hardware->killThread = gcvFALSE;
201+#if gcdPOWEROFF_TIMEOUT
202+ hardware->powerOffTimeout = gcdPOWEROFF_TIMEOUT;
203+
204+ gcmkVERIFY_OK(gckOS_CreateTimer(Os,
205+ _VGPowerTimerFunction,
206+ (gctPOINTER)hardware,
207+ &hardware->powerOffTimer));
208+#endif
209+
210 /* Determine whether FE 2.0 is present. */
211 hardware->fe20 = ((((gctUINT32) (hardware->chipFeatures)) >> (0 ? 28:28) & ((gctUINT32) ((((1 ? 28:28) - (0 ? 28:28) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 28:28) - (0 ? 28:28) + 1)))))) == (0x1 & ((gctUINT32) ((((1 ? 28:28) - (0 ? 28:28) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 28:28) - (0 ? 28:28) + 1)))))));
212
213@@ -365,18 +338,10 @@ gckVGHARDWARE_Construct(
214 gcmkVERIFY_OK(gckVGHARDWARE_SetFastClear(hardware, -1));
215
216 gcmkERR_BREAK(gckOS_CreateMutex(Os, &hardware->powerMutex));
217- gcmkERR_BREAK(gckOS_CreateSignal(Os, gcvFALSE, &hardware->idleSignal));
218
219 /* Enable power management by default. */
220 hardware->powerManagement = gcvTRUE;
221
222- gcmkERR_BREAK(gckOS_StartThread(
223- hardware->os,
224- _TimeIdleThread,
225- hardware,
226- &hardware->timeIdleThread
227- ));
228-
229 /* Return pointer to the gckVGHARDWARE object. */
230 *Hardware = hardware;
231
232@@ -386,6 +351,14 @@ gckVGHARDWARE_Construct(
233 }
234 while (gcvFALSE);
235
236+#if gcdPOWEROFF_TIMEOUT
237+ if (hardware->powerOffTimer != gcvNULL)
238+ {
239+ gcmkVERIFY_OK(gckOS_StopTimer(Os, hardware->powerOffTimer));
240+ gcmkVERIFY_OK(gckOS_DestroyTimer(Os, hardware->powerOffTimer));
241+ }
242+#endif
243+
244 if (hardware->pageTableDirty != gcvNULL)
245 {
246 gcmkVERIFY_OK(gckOS_AtomDestroy(Os, hardware->pageTableDirty));
247@@ -428,10 +401,6 @@ gckVGHARDWARE_Destroy(
248 /* Verify the arguments. */
249 gcmkVERIFY_OBJECT(Hardware, gcvOBJ_HARDWARE);
250
251- Hardware->killThread = gcvTRUE;
252- gcmkVERIFY_OK(gckOS_Signal(Hardware->os, Hardware->idleSignal, gcvTRUE));
253- gcmkVERIFY_OK(gckOS_StopThread(Hardware->os, Hardware->timeIdleThread));
254-
255 /* Mark the object as unknown. */
256 Hardware->object.type = gcvOBJ_UNKNOWN;
257
258@@ -441,11 +410,10 @@ gckVGHARDWARE_Destroy(
259 Hardware->os, Hardware->powerMutex));
260 }
261
262- if (Hardware->idleSignal != gcvNULL)
263- {
264- gcmkVERIFY_OK(gckOS_DestroySignal(
265- Hardware->os, Hardware->idleSignal));
266- }
267+#if gcdPOWEROFF_TIMEOUT
268+ gcmkVERIFY_OK(gckOS_StopTimer(Hardware->os, Hardware->powerOffTimer));
269+ gcmkVERIFY_OK(gckOS_DestroyTimer(Hardware->os, Hardware->powerOffTimer));
270+#endif
271
272 if (Hardware->pageTableDirty != gcvNULL)
273 {
274@@ -1510,11 +1478,15 @@ gckVGHARDWARE_SetPowerManagementState(
275 gctBOOL commitMutex = gcvFALSE;
276 gctBOOL mutexAcquired = gcvFALSE;
277
278+#if gcdPOWEROFF_TIMEOUT
279+ gctBOOL timeout = gcvFALSE;
280+ gctBOOL isAfter = gcvFALSE;
281+ gctUINT32 currentTime;
282+#endif
283+
284 gctBOOL broadcast = gcvFALSE;
285 gctUINT32 process, thread;
286 gctBOOL global = gcvFALSE;
287- gctUINT32 currentTime;
288-
289
290 #if gcdENABLE_PROFILING
291 gctUINT64 time, freq, mutexTime, onTime, stallTime, stopTime, delayTime,
292@@ -1661,6 +1633,16 @@ gckVGHARDWARE_SetPowerManagementState(
293 global = gcvTRUE;
294 break;
295
296+#if gcdPOWEROFF_TIMEOUT
297+ case gcvPOWER_OFF_TIMEOUT:
298+ /* Convert to OFF and note we are inside broadcast. */
299+ State = gcvPOWER_OFF;
300+ broadcast = gcvTRUE;
301+ /* Check time out */
302+ timeout = gcvTRUE;
303+ break;
304+#endif
305+
306 default:
307 break;
308 }
309@@ -1719,6 +1701,31 @@ gckVGHARDWARE_SetPowerManagementState(
310 flag = flags[Hardware->chipPowerState][State];
311 /*clock = clocks[State];*/
312
313+#if gcdPOWEROFF_TIMEOUT
314+ if (timeout)
315+ {
316+ gcmkONERROR(gckOS_GetTicks(&currentTime));
317+
318+ gcmkONERROR(
319+ gckOS_TicksAfter(Hardware->powerOffTime, currentTime, &isAfter));
320+
321+ /* powerOffTime is pushed forward, give up.*/
322+ if (isAfter
323+ /* Expect a transition start from IDLE. */
324+ || (Hardware->chipPowerState == gcvPOWER_ON)
325+ || (Hardware->chipPowerState == gcvPOWER_OFF)
326+ )
327+ {
328+ /* Release the power mutex. */
329+ gcmkONERROR(gckOS_ReleaseMutex(os, Hardware->powerMutex));
330+
331+ /* No need to do anything. */
332+ gcmkFOOTER_NO();
333+ return gcvSTATUS_OK;
334+ }
335+ }
336+#endif
337+
338 if (flag == 0)
339 {
340 /* Release the power mutex. */
341@@ -1742,6 +1749,18 @@ gckVGHARDWARE_SetPowerManagementState(
342 return gcvSTATUS_OK;
343 }
344 }
345+ else
346+ {
347+ if (flag & gcvPOWER_FLAG_ACQUIRE)
348+ {
349+ /* Acquire the power management semaphore. */
350+ gcmkONERROR(gckOS_AcquireSemaphore(os, command->powerSemaphore));
351+ acquired = gcvTRUE;
352+
353+ /* avoid acquiring again. */
354+ flag &= ~gcvPOWER_FLAG_ACQUIRE;
355+ }
356+ }
357
358 if (flag & (gcvPOWER_FLAG_INITIALIZE | gcvPOWER_FLAG_CLOCK_ON))
359 {
360@@ -1858,14 +1877,6 @@ gckVGHARDWARE_SetPowerManagementState(
361 Hardware->chipPowerStateGlobal = State;
362 }
363
364- if (State == gcvPOWER_IDLE)
365- {
366- gcmkVERIFY_OK(gckOS_Signal(os, Hardware->idleSignal, gcvTRUE));
367- }
368- /* Reset power off time */
369- gcmkVERIFY_OK(gckOS_GetTicks(&currentTime));
370- Hardware->powerOffTime = currentTime + Hardware->powerOffTimeout;
371-
372 if (commitMutex)
373 {
374 /* Acquire the mutex. */
375@@ -1875,6 +1886,28 @@ gckVGHARDWARE_SetPowerManagementState(
376 ));
377 }
378
379+#if gcdPOWEROFF_TIMEOUT
380+ /* Reset power off time */
381+ gcmkONERROR(gckOS_GetTicks(&currentTime));
382+
383+ Hardware->powerOffTime = currentTime + Hardware->powerOffTimeout;
384+
385+ if (State == gcvPOWER_IDLE)
386+ {
387+ /* Start a timer to power off GPU when GPU enters IDLE or SUSPEND. */
388+ gcmkVERIFY_OK(gckOS_StartTimer(os,
389+ Hardware->powerOffTimer,
390+ Hardware->powerOffTimeout));
391+ }
392+ else
393+ {
394+ gcmkTRACE_ZONE(gcvLEVEL_INFO, gcvZONE_HARDWARE, "Cancel powerOfftimer");
395+
396+ /* Cancel running timer when GPU enters ON or OFF. */
397+ gcmkVERIFY_OK(gckOS_StopTimer(os, Hardware->powerOffTimer));
398+ }
399+#endif
400+
401 /* Release the power mutex. */
402 gcmkONERROR(gckOS_ReleaseMutex(os, Hardware->powerMutex));
403
404diff --git a/drivers/mxc/gpu-viv/arch/GC350/hal/kernel/gc_hal_kernel_hardware_vg.h b/drivers/mxc/gpu-viv/arch/GC350/hal/kernel/gc_hal_kernel_hardware_vg.h
405index 16b81ae..73d4594 100644
406--- a/drivers/mxc/gpu-viv/arch/GC350/hal/kernel/gc_hal_kernel_hardware_vg.h
407+++ b/drivers/mxc/gpu-viv/arch/GC350/hal/kernel/gc_hal_kernel_hardware_vg.h
408@@ -53,7 +53,6 @@ struct _gckVGHARDWARE
409 gctBOOL clockState;
410 gctBOOL powerState;
411 gctPOINTER powerMutex;
412- gctSIGNAL idleSignal;
413 gctUINT32 powerProcess;
414 gctUINT32 powerThread;
415 gceCHIPPOWERSTATE chipPowerState;
416@@ -61,11 +60,13 @@ struct _gckVGHARDWARE
417 gctISRMANAGERFUNC startIsr;
418 gctISRMANAGERFUNC stopIsr;
419 gctPOINTER isrContext;
420+ gctPOINTER pageTableDirty;
421+
422+#if gcdPOWEROFF_TIMEOUT
423 gctUINT32 powerOffTime;
424 gctUINT32 powerOffTimeout;
425- gctTHREAD timeIdleThread;
426- gctBOOL killThread;
427- gctPOINTER pageTableDirty;
428+ gctPOINTER powerOffTimer;
429+#endif
430
431 gctBOOL powerManagement;
432 };
433diff --git a/drivers/mxc/gpu-viv/arch/XAQ2/hal/kernel/gc_hal_kernel_context.c b/drivers/mxc/gpu-viv/arch/XAQ2/hal/kernel/gc_hal_kernel_context.c
434index 24003e7..42e6915 100644
435--- a/drivers/mxc/gpu-viv/arch/XAQ2/hal/kernel/gc_hal_kernel_context.c
436+++ b/drivers/mxc/gpu-viv/arch/XAQ2/hal/kernel/gc_hal_kernel_context.c
437@@ -181,7 +181,8 @@ _FlushPipe(
438 ? ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 3:3) - (0 ? 3:3) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 3:3) - (0 ? 3:3) + 1))))))) << (0 ? 3:3))) | (((gctUINT32) (0x1 & ((gctUINT32) ((((1 ? 3:3) - (0 ? 3:3) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 3:3) - (0 ? 3:3) + 1))))))) << (0 ? 3:3)))
439 : ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 0:0) - (0 ? 0:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 0:0) - (0 ? 0:0) + 1))))))) << (0 ? 0:0))) | (((gctUINT32) (0x1 & ((gctUINT32) ((((1 ? 0:0) - (0 ? 0:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 0:0) - (0 ? 0:0) + 1))))))) << (0 ? 0:0)))
440 | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 1:1) - (0 ? 1:1) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 1:1) - (0 ? 1:1) + 1))))))) << (0 ? 1:1))) | (((gctUINT32) (0x1 & ((gctUINT32) ((((1 ? 1:1) - (0 ? 1:1) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 1:1) - (0 ? 1:1) + 1))))))) << (0 ? 1:1)))
441- | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 2:2) - (0 ? 2:2) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 2:2) - (0 ? 2:2) + 1))))))) << (0 ? 2:2))) | (((gctUINT32) (0x1 & ((gctUINT32) ((((1 ? 2:2) - (0 ? 2:2) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 2:2) - (0 ? 2:2) + 1))))))) << (0 ? 2:2)));
442+ | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 2:2) - (0 ? 2:2) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 2:2) - (0 ? 2:2) + 1))))))) << (0 ? 2:2))) | (((gctUINT32) (0x1 & ((gctUINT32) ((((1 ? 2:2) - (0 ? 2:2) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 2:2) - (0 ? 2:2) + 1))))))) << (0 ? 2:2)))
443+ | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 4:4) - (0 ? 4:4) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 4:4) - (0 ? 4:4) + 1))))))) << (0 ? 4:4))) | (((gctUINT32) (0x1 & ((gctUINT32) ((((1 ? 4:4) - (0 ? 4:4) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 4:4) - (0 ? 4:4) + 1))))))) << (0 ? 4:4)));
444
445 /* Semaphore from FE to PE. */
446 *buffer++
447@@ -620,7 +621,10 @@ _InitializeContextBuffer(
448 index += _State(Context, index, 0x10180 >> 2, 0x00000000, 32, gcvFALSE, gcvFALSE);
449 index += _State(Context, index, 0x10200 >> 2, 0x00000000, 32, gcvFALSE, gcvFALSE);
450 index += _State(Context, index, 0x10280 >> 2, 0x00000000, 32, gcvFALSE, gcvFALSE);
451- index += _State(Context, index, 0x02C00 >> 2, 0x00000000, 256, gcvFALSE, gcvFALSE);
452+ for (i = 0; i < 256 / 16; i += 1)
453+ {
454+ index += _State(Context, index, (0x02C00 >> 2) + i * 16, 0x00000000, 14, gcvFALSE, gcvFALSE);
455+ }
456 index += _State(Context, index, 0x10300 >> 2, 0x00000000, 32, gcvFALSE, gcvFALSE);
457 index += _State(Context, index, 0x10380 >> 2, 0x00321000, 32, gcvFALSE, gcvFALSE);
458 index += _State(Context, index, 0x10400 >> 2, 0x00000000, 32, gcvFALSE, gcvFALSE);
459diff --git a/drivers/mxc/gpu-viv/arch/XAQ2/hal/kernel/gc_hal_kernel_context.h b/drivers/mxc/gpu-viv/arch/XAQ2/hal/kernel/gc_hal_kernel_context.h
460index 7554045..5d2c7c7 100644
461--- a/drivers/mxc/gpu-viv/arch/XAQ2/hal/kernel/gc_hal_kernel_context.h
462+++ b/drivers/mxc/gpu-viv/arch/XAQ2/hal/kernel/gc_hal_kernel_context.h
463@@ -134,6 +134,19 @@ struct _gckCONTEXT
464 #if gcdSECURE_USER
465 gctBOOL_PTR hint;
466 #endif
467+
468+#if VIVANTE_PROFILER_CONTEXT
469+ gcsPROFILER_COUNTERS latestProfiler;
470+ gcsPROFILER_COUNTERS histroyProfiler;
471+ gctUINT32 prevVSInstCount;
472+ gctUINT32 prevVSBranchInstCount;
473+ gctUINT32 prevVSTexInstCount;
474+ gctUINT32 prevVSVertexCount;
475+ gctUINT32 prevPSInstCount;
476+ gctUINT32 prevPSBranchInstCount;
477+ gctUINT32 prevPSTexInstCount;
478+ gctUINT32 prevPSPixelCount;
479+#endif
480 };
481
482 #ifdef __cplusplus
483diff --git a/drivers/mxc/gpu-viv/arch/XAQ2/hal/kernel/gc_hal_kernel_hardware.c b/drivers/mxc/gpu-viv/arch/XAQ2/hal/kernel/gc_hal_kernel_hardware.c
484index 00f3839..e02dc23 100644
485--- a/drivers/mxc/gpu-viv/arch/XAQ2/hal/kernel/gc_hal_kernel_hardware.c
486+++ b/drivers/mxc/gpu-viv/arch/XAQ2/hal/kernel/gc_hal_kernel_hardware.c
487@@ -21,6 +21,9 @@
488
489 #include "gc_hal.h"
490 #include "gc_hal_kernel.h"
491+#if VIVANTE_PROFILER_CONTEXT
492+#include "gc_hal_kernel_context.h"
493+#endif
494
495 #define _GC_OBJ_ZONE gcvZONE_HARDWARE
496
497@@ -69,6 +72,7 @@ _IdentifyHardware(
498 gctUINT32 numConstants = 0;
499 gctUINT32 bufferSize = 0;
500 gctUINT32 varyingsCount = 0;
501+ gctBOOL useHZ;
502
503 gcmkHEADER_ARG("Os=0x%x", Os);
504
505@@ -209,6 +213,15 @@ _IdentifyHardware(
506 0x00088,
507 &Identity->chipMinorFeatures3));
508
509+ /*The BG2 chip has no compression supertiled, and the bit of GCMinorFeature3BugFixes15 is n/a*/
510+ if(Identity->chipModel == gcv1000 && Identity->chipRevision == 0x5036)
511+ {
512+ Identity->chipMinorFeatures3
513+ = ((((gctUINT32) (Identity->chipMinorFeatures3)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 5:5) - (0 ? 5:5) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 5:5) - (0 ? 5:5) + 1))))))) << (0 ? 5:5))) | (((gctUINT32) (0x0 & ((gctUINT32) ((((1 ? 5:5) - (0 ? 5:5) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 5:5) - (0 ? 5:5) + 1))))))) << (0 ? 5:5)));
514+ Identity->chipMinorFeatures3
515+ = ((((gctUINT32) (Identity->chipMinorFeatures3)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 27:27) - (0 ? 27:27) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 27:27) - (0 ? 27:27) + 1))))))) << (0 ? 27:27))) | (((gctUINT32) (0x0 & ((gctUINT32) ((((1 ? 27:27) - (0 ? 27:27) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 27:27) - (0 ? 27:27) + 1))))))) << (0 ? 27:27)));
516+ }
517+
518 /* Read chip minor featuress register #4. */
519 gcmkONERROR(
520 gckOS_ReadRegisterEx(Os, Core,
521@@ -244,14 +257,31 @@ _IdentifyHardware(
522 if (((Identity->chipModel == gcv1000) && ((Identity->chipRevision == 0x5035)
523 || (Identity->chipRevision == 0x5036)
524 || (Identity->chipRevision == 0x5037)))
525- || ((Identity->chipModel == gcv800) && (Identity->chipRevision == 0x4612)))
526+ || ((Identity->chipModel == gcv800) && (Identity->chipRevision == 0x4612))
527+ || ((Identity->chipModel == gcv860) && (Identity->chipRevision == 0x4647)))
528 {
529 Identity->superTileMode = 1;
530 }
531
532+ if (Identity->chipModel == gcv4000 && Identity->chipRevision == 0x5245)
533+ {
534+ useHZ = ((((gctUINT32) (Identity->chipMinorFeatures3)) >> (0 ? 26:26) & ((gctUINT32) ((((1 ? 26:26) - (0 ? 26:26) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 26:26) - (0 ? 26:26) + 1)))))) == (0x1 & ((gctUINT32) ((((1 ? 26:26) - (0 ? 26:26) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 26:26) - (0 ? 26:26) + 1)))))))
535+ || ((((gctUINT32) (Identity->chipMinorFeatures3)) >> (0 ? 8:8) & ((gctUINT32) ((((1 ? 8:8) - (0 ? 8:8) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 8:8) - (0 ? 8:8) + 1)))))) == (0x1 & ((gctUINT32) ((((1 ? 8:8) - (0 ? 8:8) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 8:8) - (0 ? 8:8) + 1)))))));
536+ }
537+ else
538+ {
539+ useHZ = gcvFALSE;
540+ }
541
542- /* Disable HZ when EZ is present for older chips. */
543- if (!((((gctUINT32) (Identity->chipFeatures)) >> (0 ? 16:16) & ((gctUINT32) ((((1 ? 16:16) - (0 ? 16:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 16:16) - (0 ? 16:16) + 1)))))) == (0x1 & ((gctUINT32) ((((1 ? 16:16) - (0 ? 16:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 16:16) - (0 ? 16:16) + 1))))))))
544+ if (useHZ)
545+ {
546+ /* Disable EZ. */
547+ Identity->chipFeatures
548+ = ((((gctUINT32) (Identity->chipFeatures)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 16:16) - (0 ? 16:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 16:16) - (0 ? 16:16) + 1))))))) << (0 ? 16:16))) | (((gctUINT32) (0x1 & ((gctUINT32) ((((1 ? 16:16) - (0 ? 16:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 16:16) - (0 ? 16:16) + 1))))))) << (0 ? 16:16)));
549+ }
550+
551+ /* Disable HZ when EZ is present for older chips. */
552+ else if (!((((gctUINT32) (Identity->chipFeatures)) >> (0 ? 16:16) & ((gctUINT32) ((((1 ? 16:16) - (0 ? 16:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 16:16) - (0 ? 16:16) + 1)))))) == (0x1 & ((gctUINT32) ((((1 ? 16:16) - (0 ? 16:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 16:16) - (0 ? 16:16) + 1))))))))
553 {
554 /* Disable HIERARCHICAL_Z. */
555 Identity->chipMinorFeatures
556@@ -470,6 +500,15 @@ _IdentifyHardware(
557 Identity->varyingsCount = 8;
558 }
559
560+ /* For some cores, it consumes two varying for position, so the max varying vectors should minus one. */
561+ if ((Identity->chipModel == gcv4000 && Identity->chipRevision == 0x5222) ||
562+ (Identity->chipModel == gcv4000 && Identity->chipRevision == 0x5208) ||
563+ ((Identity->chipModel == gcv2100 || Identity->chipModel == gcv2000) && Identity->chipRevision == 0x5108) ||
564+ (Identity->chipModel == gcv880 && (Identity->chipRevision == 0x5107 || Identity->chipRevision == 0x5106)))
565+ {
566+ Identity->varyingsCount -= 1;
567+ }
568+
569 /* Success. */
570 gcmkFOOTER();
571 return gcvSTATUS_OK;
572@@ -535,9 +574,9 @@ _DumpDebugRegisters(
573 IN gcsiDEBUG_REGISTERS_PTR Descriptor
574 )
575 {
576- gceSTATUS status;
577+ gceSTATUS status = gcvSTATUS_OK;
578 gctUINT32 select;
579- gctUINT32 data;
580+ gctUINT32 data = 0;
581 gctUINT i;
582
583 gcmkHEADER_ARG("Os=0x%X Descriptor=0x%X", Os, Descriptor);
584@@ -643,6 +682,42 @@ OnError:
585 return status;
586 }
587
588+gceSTATUS
589+_FlushCache(
590+ gckHARDWARE Hardware,
591+ gckCOMMAND Command
592+ )
593+{
594+ gceSTATUS status;
595+ gctSIZE_T bytes, requested;
596+ gctPOINTER buffer;
597+
598+ /* Get the size of the flush command. */
599+ gcmkONERROR(gckHARDWARE_Flush(Hardware,
600+ gcvFLUSH_ALL,
601+ gcvNULL,
602+ &requested));
603+
604+ /* Reserve space in the command queue. */
605+ gcmkONERROR(gckCOMMAND_Reserve(Command,
606+ requested,
607+ &buffer,
608+ &bytes));
609+
610+ /* Append a flush. */
611+ gcmkONERROR(gckHARDWARE_Flush(
612+ Hardware, gcvFLUSH_ALL, buffer, &bytes
613+ ));
614+
615+ /* Execute the command queue. */
616+ gcmkONERROR(gckCOMMAND_Execute(Command, requested));
617+
618+ return gcvSTATUS_OK;
619+
620+OnError:
621+ return status;
622+}
623+
624 /******************************************************************************\
625 ****************************** gckHARDWARE API code *****************************
626 \******************************************************************************/
627@@ -809,6 +884,9 @@ gckHARDWARE_Construct(
628 /* Enable power management by default. */
629 hardware->powerManagement = gcvTRUE;
630
631+ /* Disable profiler by default */
632+ hardware->gpuProfiler = gcvFALSE;
633+
634 /* Return pointer to the gckHARDWARE object. */
635 *Hardware = hardware;
636
637@@ -1113,6 +1191,31 @@ gckHARDWARE_InitializeHardware(
638 ((((gctUINT32) (0x01590880)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 23:23) - (0 ? 23:23) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 23:23) - (0 ? 23:23) + 1))))))) << (0 ? 23:23))) | (((gctUINT32) ((gctUINT32) (1) & ((gctUINT32) ((((1 ? 23:23) - (0 ? 23:23) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 23:23) - (0 ? 23:23) + 1))))))) << (0 ? 23:23)))));
639 }
640
641+ if ((gckHARDWARE_IsFeatureAvailable(Hardware, gcvFEATURE_HALTI2) == gcvFALSE)
642+ || (gckHARDWARE_IsFeatureAvailable(Hardware, gcvFEATURE_HALTI2) && (Hardware->identity.chipRevision < 0x5422))
643+ )
644+ {
645+ gctUINT32 data;
646+
647+ gcmkONERROR(
648+ gckOS_ReadRegisterEx(Hardware->os,
649+ Hardware->core,
650+ Hardware->powerBaseAddress
651+ + 0x00104,
652+ &data));
653+
654+
655+ data = ((((gctUINT32) (data)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 15:15) - (0 ? 15:15) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:15) - (0 ? 15:15) + 1))))))) << (0 ? 15:15))) | (((gctUINT32) ((gctUINT32) (1) & ((gctUINT32) ((((1 ? 15:15) - (0 ? 15:15) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:15) - (0 ? 15:15) + 1))))))) << (0 ? 15:15)));
656+
657+
658+ gcmkONERROR(
659+ gckOS_WriteRegisterEx(Hardware->os,
660+ Hardware->core,
661+ Hardware->powerBaseAddress
662+ + 0x00104,
663+ data));
664+ }
665+
666 /* Special workaround for this core
667 ** Make sure FE and TX are on different buses */
668 if ((Hardware->identity.chipModel == gcv2000)
669@@ -1152,7 +1255,9 @@ gckHARDWARE_InitializeHardware(
670 }
671
672 if (Hardware->identity.chipModel >= gcv400
673- && Hardware->identity.chipModel != gcv420)
674+ && Hardware->identity.chipModel != gcv420
675+ && (((((gctUINT32) (Hardware->identity.chipMinorFeatures3)) >> (0 ? 15:15) & ((gctUINT32) ((((1 ? 15:15) - (0 ? 15:15) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:15) - (0 ? 15:15) + 1)))))) == (0x1 & ((gctUINT32) ((((1 ? 15:15) - (0 ? 15:15) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:15) - (0 ? 15:15) + 1))))))) != gcvTRUE)
676+ )
677 {
678 gctUINT32 data;
679
680@@ -2883,35 +2988,44 @@ gckHARDWARE_QueryShaderCaps(
681 OUT gctUINT * Varyings
682 )
683 {
684+ gctUINT32 vsConstMax;
685+ gctUINT32 psConstMax;
686+
687 gcmkHEADER_ARG("Hardware=0x%x VertexUniforms=0x%x "
688 "FragmentUniforms=0x%x Varyings=0x%x",
689 Hardware, VertexUniforms,
690 FragmentUniforms, Varyings);
691
692+ if ((Hardware->identity.chipModel == gcv2000)
693+ && (Hardware->identity.chipRevision == 0x5118))
694+ {
695+ vsConstMax = 256;
696+ psConstMax = 64;
697+ }
698+ else if (Hardware->identity.numConstants > 256)
699+ {
700+ vsConstMax = 256;
701+ psConstMax = 256;
702+ }
703+ else if (Hardware->identity.numConstants == 256)
704+ {
705+ vsConstMax = 256;
706+ psConstMax = 256;
707+ }
708+ else
709+ {
710+ vsConstMax = 168;
711+ psConstMax = 64;
712+ }
713+
714 if (VertexUniforms != gcvNULL)
715 {
716- /* Return the vs shader const count. */
717- if (Hardware->identity.chipModel < gcv4000)
718- {
719- *VertexUniforms = 168;
720- }
721- else
722- {
723- *VertexUniforms = 256;
724- }
725+ *VertexUniforms = vsConstMax;
726 }
727
728 if (FragmentUniforms != gcvNULL)
729 {
730- /* Return the ps shader const count. */
731- if (Hardware->identity.chipModel < gcv4000)
732- {
733- *FragmentUniforms = 64;
734- }
735- else
736- {
737- *FragmentUniforms = 256;
738- }
739+ *FragmentUniforms = psConstMax;
740 }
741
742 if (Varyings != gcvNULL)
743@@ -3229,12 +3343,28 @@ gckHARDWARE_SetMMUv2(
744 gctBOOL commitEntered = gcvFALSE;
745 gctPOINTER pointer = gcvNULL;
746 gctBOOL acquired = gcvFALSE;
747+ gctBOOL config2D;
748+ gctSIZE_T configSize;
749
750 gcmkHEADER_ARG("Hardware=0x%x Enable=%d", Hardware, Enable);
751
752 /* Verify the arguments. */
753 gcmkVERIFY_OBJECT(Hardware, gcvOBJ_HARDWARE);
754
755+ config2D = gckHARDWARE_IsFeatureAvailable(Hardware, gcvFEATURE_PIPE_3D)
756+ && gckHARDWARE_IsFeatureAvailable(Hardware, gcvFEATURE_PIPE_2D);
757+
758+ configSize = 4 * 4;
759+
760+ if (config2D)
761+ {
762+ configSize +=
763+ /* Pipe Select. */
764+ 4 * 4
765+ /* Configure MMU States. */
766+ + 4 * 4;
767+ }
768+
769 /* Convert logical address into physical address. */
770 gcmkONERROR(
771 gckOS_GetPhysicalAddress(Hardware->os, MtlbAddress, &config));
772@@ -3281,7 +3411,7 @@ gckHARDWARE_SetMMUv2(
773 commitEntered = gcvTRUE;
774
775 gcmkONERROR(gckCOMMAND_Reserve(
776- command, 16, &pointer, &bufferSize
777+ command, configSize, &pointer, &bufferSize
778 ));
779
780 buffer = pointer;
781@@ -3300,10 +3430,43 @@ gckHARDWARE_SetMMUv2(
782
783 buffer[3] = address;
784
785+ if (config2D)
786+ {
787+ /* LoadState(AQPipeSelect, 1), pipe. */
788+ buffer[4]
789+ = ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 31:27) - (0 ? 31:27) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27))) | (((gctUINT32) (0x01 & ((gctUINT32) ((((1 ? 31:27) - (0 ? 31:27) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27)))
790+ | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 15:0) - (0 ? 15:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ? 15:0))) | (((gctUINT32) ((gctUINT32) (0x0E00) & ((gctUINT32) ((((1 ? 15:0) - (0 ? 15:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ? 15:0)))
791+ | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 25:16) - (0 ? 25:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 25:16) - (0 ? 25:16) + 1))))))) << (0 ? 25:16))) | (((gctUINT32) ((gctUINT32) (1) & ((gctUINT32) ((((1 ? 25:16) - (0 ? 25:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 25:16) - (0 ? 25:16) + 1))))))) << (0 ? 25:16)));
792+
793+ buffer[5] = 0x1;
794+
795+ buffer[6]
796+ = ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 31:27) - (0 ? 31:27) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27))) | (((gctUINT32) (0x01 & ((gctUINT32) ((((1 ? 31:27) - (0 ? 31:27) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27)))
797+ | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 15:0) - (0 ? 15:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ? 15:0))) | (((gctUINT32) ((gctUINT32) (0x0061) & ((gctUINT32) ((((1 ? 15:0) - (0 ? 15:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ? 15:0)))
798+ | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 25:16) - (0 ? 25:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 25:16) - (0 ? 25:16) + 1))))))) << (0 ? 25:16))) | (((gctUINT32) ((gctUINT32) (1) & ((gctUINT32) ((((1 ? 25:16) - (0 ? 25:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 25:16) - (0 ? 25:16) + 1))))))) << (0 ? 25:16)));
799+
800+ buffer[7] = config;
801+
802+ buffer[8]
803+ = ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 31:27) - (0 ? 31:27) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27))) | (((gctUINT32) (0x01 & ((gctUINT32) ((((1 ? 31:27) - (0 ? 31:27) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27)))
804+ | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 15:0) - (0 ? 15:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ? 15:0))) | (((gctUINT32) ((gctUINT32) (0x0060) & ((gctUINT32) ((((1 ? 15:0) - (0 ? 15:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ? 15:0)))
805+ | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 25:16) - (0 ? 25:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 25:16) - (0 ? 25:16) + 1))))))) << (0 ? 25:16))) | (((gctUINT32) ((gctUINT32) (1) & ((gctUINT32) ((((1 ? 25:16) - (0 ? 25:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 25:16) - (0 ? 25:16) + 1))))))) << (0 ? 25:16)));
806+
807+ buffer[9] = address;
808+
809+ /* LoadState(AQPipeSelect, 1), pipe. */
810+ buffer[10]
811+ = ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 31:27) - (0 ? 31:27) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27))) | (((gctUINT32) (0x01 & ((gctUINT32) ((((1 ? 31:27) - (0 ? 31:27) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27)))
812+ | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 15:0) - (0 ? 15:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ? 15:0))) | (((gctUINT32) ((gctUINT32) (0x0E00) & ((gctUINT32) ((((1 ? 15:0) - (0 ? 15:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ? 15:0)))
813+ | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 25:16) - (0 ? 25:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 25:16) - (0 ? 25:16) + 1))))))) << (0 ? 25:16))) | (((gctUINT32) ((gctUINT32) (1) & ((gctUINT32) ((((1 ? 25:16) - (0 ? 25:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 25:16) - (0 ? 25:16) + 1))))))) << (0 ? 25:16)));
814+
815+ buffer[11] = 0x0;
816+ }
817+
818 gcmkTRACE_ZONE(gcvLEVEL_INFO, gcvZONE_HARDWARE,
819 "Setup MMU: config=%08x, Safe Address=%08x\n.", config, address);
820
821- gcmkONERROR(gckCOMMAND_Execute(command, 16));
822+ gcmkONERROR(gckCOMMAND_Execute(command, configSize));
823
824 if (FromPower == gcvFALSE)
825 {
826@@ -3501,6 +3664,8 @@ gckHARDWARE_Flush(
827 gctUINT32 flush = 0;
828 gctUINT32_PTR logical = (gctUINT32_PTR) Logical;
829 gceSTATUS status;
830+ gctBOOL fcFlushStall;
831+ gctUINT32 reserveBytes = 8;
832
833 gcmkHEADER_ARG("Hardware=0x%x Flush=0x%x Logical=0x%x *Bytes=%lu",
834 Hardware, Flush, Logical, gcmOPT_VALUE(Bytes));
835@@ -3511,6 +3676,16 @@ gckHARDWARE_Flush(
836 /* Get current pipe. */
837 pipe = Hardware->kernel->command->pipeSelect;
838
839+ fcFlushStall
840+ = ((((gctUINT32) (Hardware->identity.chipMinorFeatures1)) >> (0 ? 31:31) & ((gctUINT32) ((((1 ? 31:31) - (0 ? 31:31) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:31) - (0 ? 31:31) + 1)))))) == (0x1 & ((gctUINT32) ((((1 ? 31:31) - (0 ? 31:31) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:31) - (0 ? 31:31) + 1)))))))
841+ && (Flush == gcvFLUSH_ALL)
842+ ;
843+
844+ if (fcFlushStall)
845+ {
846+ reserveBytes += 8;
847+ }
848+
849 /* Flush 3D color cache. */
850 if ((Flush & gcvFLUSH_COLOR) && (pipe == 0x0))
851 {
852@@ -3527,6 +3702,7 @@ gckHARDWARE_Flush(
853 if ((Flush & gcvFLUSH_TEXTURE) && (pipe == 0x0))
854 {
855 flush |= ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 2:2) - (0 ? 2:2) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 2:2) - (0 ? 2:2) + 1))))))) << (0 ? 2:2))) | (((gctUINT32) (0x1 & ((gctUINT32) ((((1 ? 2:2) - (0 ? 2:2) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 2:2) - (0 ? 2:2) + 1))))))) << (0 ? 2:2)));
856+ flush |= ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 4:4) - (0 ? 4:4) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 4:4) - (0 ? 4:4) + 1))))))) << (0 ? 4:4))) | (((gctUINT32) (0x1 & ((gctUINT32) ((((1 ? 4:4) - (0 ? 4:4) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 4:4) - (0 ? 4:4) + 1))))))) << (0 ? 4:4)));
857 }
858
859 /* Flush 2D cache. */
860@@ -3550,7 +3726,7 @@ gckHARDWARE_Flush(
861 /* Copy to command queue. */
862 if (Logical != gcvNULL)
863 {
864- if (*Bytes < 8)
865+ if (*Bytes < reserveBytes)
866 {
867 /* Command queue too small. */
868 gcmkONERROR(gcvSTATUS_BUFFER_TOO_SMALL);
869@@ -3565,12 +3741,26 @@ gckHARDWARE_Flush(
870
871 gcmkTRACE_ZONE(gcvLEVEL_INFO, gcvZONE_HARDWARE,
872 "0x%x: FLUSH 0x%x", logical, flush);
873+
874+ if (fcFlushStall)
875+ {
876+ logical[2] = ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 31:27) - (0 ? 31:27) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27))) | (((gctUINT32) (0x01 & ((gctUINT32) ((((1 ? 31:27) - (0 ? 31:27) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27)))
877+ | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 15:0) - (0 ? 15:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ? 15:0))) | (((gctUINT32) ((gctUINT32) (0x0594) & ((gctUINT32) ((((1 ? 15:0) - (0 ? 15:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ? 15:0)))
878+ | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 25:16) - (0 ? 25:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 25:16) - (0 ? 25:16) + 1))))))) << (0 ? 25:16))) | (((gctUINT32) ((gctUINT32) (1) & ((gctUINT32) ((((1 ? 25:16) - (0 ? 25:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 25:16) - (0 ? 25:16) + 1))))))) << (0 ? 25:16)));
879+
880+ logical[3] = ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 0:0) - (0 ? 0:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 0:0) - (0 ? 0:0) + 1))))))) << (0 ? 0:0))) | (((gctUINT32) (0x1 & ((gctUINT32) ((((1 ? 0:0) - (0 ? 0:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 0:0) - (0 ? 0:0) + 1))))))) << (0 ? 0:0)));
881+
882+
883+ gcmkTRACE_ZONE(gcvLEVEL_INFO, gcvZONE_HARDWARE,
884+ "0x%x: FLUSH 0x%x", logical + 3, logical[3]);
885+ }
886+
887 }
888
889 if (Bytes != gcvNULL)
890 {
891- /* 8 bytes required. */
892- *Bytes = 8;
893+ /* bytes required. */
894+ *Bytes = reserveBytes;
895 }
896 }
897
898@@ -4285,6 +4475,48 @@ gckHARDWARE_SetPowerManagementState(
899 }
900 }
901
902+ /* Flush Cache before Power Off. */
903+ if (flag & gcvPOWER_FLAG_POWER_OFF)
904+ {
905+ if (Hardware->clockState == gcvFALSE)
906+ {
907+ /* Turn off the GPU power. */
908+ gcmkONERROR(
909+ gckOS_SetGPUPower(os,
910+ Hardware->core,
911+ gcvTRUE,
912+ gcvTRUE));
913+
914+ Hardware->clockState = gcvTRUE;
915+
916+ if (gckHARDWARE_IsFeatureAvailable(Hardware, gcvFEATURE_DYNAMIC_FREQUENCY_SCALING) != gcvTRUE)
917+ {
918+ /* Write the clock control register. */
919+ gcmkONERROR(gckOS_WriteRegisterEx(os,
920+ Hardware->core,
921+ 0x00000,
922+ clocks[0]));
923+
924+ /* Done loading the frequency scaler. */
925+ gcmkONERROR(gckOS_WriteRegisterEx(os,
926+ Hardware->core,
927+ 0x00000,
928+ ((((gctUINT32) (clocks[0])) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 9:9) - (0 ? 9:9) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 9:9) - (0 ? 9:9) + 1))))))) << (0 ? 9:9))) | (((gctUINT32) ((gctUINT32) (0) & ((gctUINT32) ((((1 ? 9:9) - (0 ? 9:9) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 9:9) - (0 ? 9:9) + 1))))))) << (0 ? 9:9)))));
929+ }
930+ }
931+
932+ gcmkONERROR(gckCOMMAND_Start(command));
933+
934+ gcmkONERROR(_FlushCache(Hardware, command));
935+
936+ gckOS_Delay(gcvNULL, 1);
937+
938+ /* Stop the command parser. */
939+ gcmkONERROR(gckCOMMAND_Stop(command, gcvFALSE));
940+
941+ flag |= gcvPOWER_FLAG_CLOCK_OFF;
942+ }
943+
944 /* Get time until stopped. */
945 gcmkPROFILE_QUERY(time, stopTime);
946
947@@ -4582,6 +4814,40 @@ gckHARDWARE_SetPowerManagement(
948 return gcvSTATUS_OK;
949 }
950
951+/*******************************************************************************
952+**
953+** gckHARDWARE_SetGpuProfiler
954+**
955+** Configure GPU profiler function.
956+** Only used in driver initialization stage.
957+**
958+** INPUT:
959+**
960+** gckHARDWARE Harwdare
961+** Pointer to an gckHARDWARE object.
962+**
963+** gctBOOL GpuProfiler
964+** GOU Profiler State.
965+**
966+*/
967+gceSTATUS
968+gckHARDWARE_SetGpuProfiler(
969+ IN gckHARDWARE Hardware,
970+ IN gctBOOL GpuProfiler
971+ )
972+{
973+ gcmkHEADER_ARG("Hardware=0x%x", Hardware);
974+
975+ /* Verify the arguments. */
976+ gcmkVERIFY_OBJECT(Hardware, gcvOBJ_HARDWARE);
977+
978+ Hardware->gpuProfiler = GpuProfiler;
979+
980+ /* Success. */
981+ gcmkFOOTER_NO();
982+ return gcvSTATUS_OK;
983+}
984+
985 #if gcdENABLE_FSCALE_VAL_ADJUST
986 gceSTATUS
987 gckHARDWARE_SetFscaleValue(
988@@ -5141,6 +5407,402 @@ OnError:
989 }
990 #endif
991
992+#if VIVANTE_PROFILER_CONTEXT
993+#define gcmkUPDATE_PROFILE_DATA(data) \
994+ profilerHistroy->data += profiler->data
995+
996+gceSTATUS
997+gckHARDWARE_QueryContextProfile(
998+ IN gckHARDWARE Hardware,
999+ IN gctBOOL Reset,
1000+ IN gckCONTEXT Context,
1001+ OUT gcsPROFILER_COUNTERS * Counters
1002+ )
1003+{
1004+ gceSTATUS status;
1005+ gckCOMMAND command = Hardware->kernel->command;
1006+ gcsPROFILER_COUNTERS * profiler = Counters;
1007+
1008+ gcmkHEADER_ARG("Hardware=0x%x Counters=0x%x", Hardware, Counters);
1009+
1010+ /* Verify the arguments. */
1011+ gcmkVERIFY_OBJECT(Hardware, gcvOBJ_HARDWARE);
1012+
1013+ /* Acquire the context sequnence mutex. */
1014+ gcmkONERROR(gckOS_AcquireMutex(
1015+ command->os, command->mutexContextSeq, gcvINFINITE
1016+ ));
1017+
1018+ /* Read the counters. */
1019+ gcmkVERIFY_OK(gckOS_MemCopy(
1020+ profiler, &Context->histroyProfiler, gcmSIZEOF(gcsPROFILER_COUNTERS)
1021+ ));
1022+
1023+ if (Reset)
1024+ {
1025+ /* Reset counters. */
1026+ gcmkVERIFY_OK(gckOS_ZeroMemory(
1027+ &Context->histroyProfiler, gcmSIZEOF(gcsPROFILER_COUNTERS)
1028+ ));
1029+ }
1030+
1031+ gcmkVERIFY_OK(gckOS_ReleaseMutex(
1032+ command->os, command->mutexContextSeq
1033+ ));
1034+
1035+ /* Success. */
1036+ gcmkFOOTER_NO();
1037+ return gcvSTATUS_OK;
1038+
1039+OnError:
1040+ /* Return the status. */
1041+ gcmkFOOTER();
1042+ return status;
1043+}
1044+
1045+
1046+gceSTATUS
1047+gckHARDWARE_UpdateContextProfile(
1048+ IN gckHARDWARE Hardware,
1049+ IN gckCONTEXT Context
1050+ )
1051+{
1052+ gceSTATUS status;
1053+ gcsPROFILER_COUNTERS * profiler = &Context->latestProfiler;
1054+ gcsPROFILER_COUNTERS * profilerHistroy = &Context->histroyProfiler;
1055+ gctUINT i, clock;
1056+ gctUINT32 colorKilled, colorDrawn, depthKilled, depthDrawn;
1057+ gctUINT32 totalRead, totalWrite;
1058+ gceCHIPMODEL chipModel;
1059+ gctUINT32 chipRevision;
1060+ gctUINT32 temp;
1061+ gctBOOL needResetShader = gcvFALSE;
1062+
1063+ gcmkHEADER_ARG("Hardware=0x%x Context=0x%x", Hardware, Context);
1064+
1065+ /* Verify the arguments. */
1066+ gcmkVERIFY_OBJECT(Hardware, gcvOBJ_HARDWARE);
1067+ gcmkVERIFY_OBJECT(Context, gcvOBJ_CONTEXT);
1068+
1069+ chipModel = Hardware->identity.chipModel;
1070+ chipRevision = Hardware->identity.chipRevision;
1071+ if (chipModel == gcv2000 || (chipModel == gcv2100 && chipRevision == 0x5118))
1072+ {
1073+ needResetShader = gcvTRUE;
1074+ }
1075+
1076+ /* Read the counters. */
1077+ gcmkONERROR(
1078+ gckOS_ReadRegisterEx(Hardware->os,
1079+ Hardware->core,
1080+ 0x00438,
1081+ &profiler->gpuCyclesCounter));
1082+ gcmkUPDATE_PROFILE_DATA(gpuCyclesCounter);
1083+
1084+ gcmkONERROR(
1085+ gckOS_ReadRegisterEx(Hardware->os,
1086+ Hardware->core,
1087+ 0x00078,
1088+ &profiler->gpuTotalCyclesCounter));
1089+ gcmkUPDATE_PROFILE_DATA(gpuTotalCyclesCounter);
1090+
1091+ gcmkONERROR(
1092+ gckOS_ReadRegisterEx(Hardware->os,
1093+ Hardware->core,
1094+ 0x0007C,
1095+ &profiler->gpuIdleCyclesCounter));
1096+ gcmkUPDATE_PROFILE_DATA(gpuIdleCyclesCounter);
1097+
1098+ /* Read clock control register. */
1099+ gcmkONERROR(gckOS_ReadRegisterEx(Hardware->os,
1100+ Hardware->core,
1101+ 0x00000,
1102+ &clock));
1103+
1104+ profiler->gpuTotalRead64BytesPerFrame = 0;
1105+ profiler->gpuTotalWrite64BytesPerFrame = 0;
1106+ profiler->pe_pixel_count_killed_by_color_pipe = 0;
1107+ profiler->pe_pixel_count_killed_by_depth_pipe = 0;
1108+ profiler->pe_pixel_count_drawn_by_color_pipe = 0;
1109+ profiler->pe_pixel_count_drawn_by_depth_pipe = 0;
1110+
1111+ /* Walk through all avaiable pixel pipes. */
1112+ for (i = 0; i < Hardware->identity.pixelPipes; ++i)
1113+ {
1114+ /* Select proper pipe. */
1115+ gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os,
1116+ Hardware->core,
1117+ 0x00000,
1118+ ((((gctUINT32) (clock)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 23:20) - (0 ? 23:20) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 23:20) - (0 ? 23:20) + 1))))))) << (0 ? 23:20))) | (((gctUINT32) ((gctUINT32) (i) & ((gctUINT32) ((((1 ? 23:20) - (0 ? 23:20) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 23:20) - (0 ? 23:20) + 1))))))) << (0 ? 23:20)))));
1119+
1120+ /* BW */
1121+ gcmkONERROR(
1122+ gckOS_ReadRegisterEx(Hardware->os,
1123+ Hardware->core,
1124+ 0x00040,
1125+ &totalRead));
1126+ gcmkONERROR(
1127+ gckOS_ReadRegisterEx(Hardware->os,
1128+ Hardware->core,
1129+ 0x00044,
1130+ &totalWrite));
1131+
1132+ profiler->gpuTotalRead64BytesPerFrame += totalRead;
1133+ profiler->gpuTotalWrite64BytesPerFrame += totalWrite;
1134+ gcmkUPDATE_PROFILE_DATA(gpuTotalRead64BytesPerFrame);
1135+ gcmkUPDATE_PROFILE_DATA(gpuTotalWrite64BytesPerFrame);
1136+
1137+ /* PE */
1138+ gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00470, ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 23:16) - (0 ? 23:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 23:16) - (0 ? 23:16) + 1))))))) << (0 ? 23:16))) | (((gctUINT32) ((gctUINT32) (0) & ((gctUINT32) ((((1 ? 23:16) - (0 ? 23:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 23:16) - (0 ? 23:16) + 1))))))) << (0 ? 23:16)))));gcmkONERROR(gckOS_ReadRegisterEx(Hardware->os, Hardware->core, 0x00454, &colorKilled));
1139+ gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00470, ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 23:16) - (0 ? 23:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 23:16) - (0 ? 23:16) + 1))))))) << (0 ? 23:16))) | (((gctUINT32) ((gctUINT32) (1) & ((gctUINT32) ((((1 ? 23:16) - (0 ? 23:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 23:16) - (0 ? 23:16) + 1))))))) << (0 ? 23:16)))));gcmkONERROR(gckOS_ReadRegisterEx(Hardware->os, Hardware->core, 0x00454, &depthKilled));
1140+ gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00470, ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 23:16) - (0 ? 23:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 23:16) - (0 ? 23:16) + 1))))))) << (0 ? 23:16))) | (((gctUINT32) ((gctUINT32) (2) & ((gctUINT32) ((((1 ? 23:16) - (0 ? 23:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 23:16) - (0 ? 23:16) + 1))))))) << (0 ? 23:16)))));gcmkONERROR(gckOS_ReadRegisterEx(Hardware->os, Hardware->core, 0x00454, &colorDrawn));
1141+ gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00470, ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 23:16) - (0 ? 23:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 23:16) - (0 ? 23:16) + 1))))))) << (0 ? 23:16))) | (((gctUINT32) ((gctUINT32) (3) & ((gctUINT32) ((((1 ? 23:16) - (0 ? 23:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 23:16) - (0 ? 23:16) + 1))))))) << (0 ? 23:16)))));gcmkONERROR(gckOS_ReadRegisterEx(Hardware->os, Hardware->core, 0x00454, &depthDrawn));
1142+
1143+ profiler->pe_pixel_count_killed_by_color_pipe += colorKilled;
1144+ profiler->pe_pixel_count_killed_by_depth_pipe += depthKilled;
1145+ profiler->pe_pixel_count_drawn_by_color_pipe += colorDrawn;
1146+ profiler->pe_pixel_count_drawn_by_depth_pipe += depthDrawn;
1147+ gcmkUPDATE_PROFILE_DATA(pe_pixel_count_killed_by_color_pipe);
1148+ gcmkUPDATE_PROFILE_DATA(pe_pixel_count_killed_by_depth_pipe);
1149+ gcmkUPDATE_PROFILE_DATA(pe_pixel_count_drawn_by_color_pipe);
1150+ gcmkUPDATE_PROFILE_DATA(pe_pixel_count_drawn_by_depth_pipe);
1151+ }
1152+
1153+ /* Reset clock control register. */
1154+ gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os,
1155+ Hardware->core,
1156+ 0x00000,
1157+ clock));
1158+
1159+
1160+
1161+
1162+ /* Reset counters. */
1163+ gcmkONERROR(
1164+ gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x0003C, 1));
1165+ gcmkONERROR(
1166+ gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x0003C, 0));
1167+ gcmkONERROR(
1168+ gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00438, 0));
1169+ gcmkONERROR(
1170+ gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00078, 0));
1171+ gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00470, ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 23:16) - (0 ? 23:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 23:16) - (0 ? 23:16) + 1))))))) << (0 ? 23:16))) | (((gctUINT32) ((gctUINT32) (15) & ((gctUINT32) ((((1 ? 23:16) - (0 ? 23:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 23:16) - (0 ? 23:16) + 1))))))) << (0 ? 23:16))) ));
1172+gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00470, ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 23:16) - (0 ? 23:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 23:16) - (0 ? 23:16) + 1))))))) << (0 ? 23:16))) | (((gctUINT32) ((gctUINT32) (0) & ((gctUINT32) ((((1 ? 23:16) - (0 ? 23:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 23:16) - (0 ? 23:16) + 1))))))) << (0 ? 23:16)))
1173+));
1174+
1175+ /* SH */
1176+ gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00470, ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 31:24) - (0 ? 31:24) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:24) - (0 ? 31:24) + 1))))))) << (0 ? 31:24))) | (((gctUINT32) ((gctUINT32) (7) & ((gctUINT32) ((((1 ? 31:24) - (0 ? 31:24) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:24) - (0 ? 31:24) + 1))))))) << (0 ? 31:24))) ));
1177+gcmkONERROR(gckOS_ReadRegisterEx(Hardware->os, Hardware->core, 0x0045C, &profiler->ps_inst_counter));
1178+ if (needResetShader)
1179+ {
1180+ temp = profiler->ps_inst_counter;
1181+ profiler->ps_inst_counter -= Context->prevPSInstCount;
1182+ Context->prevPSInstCount = temp;
1183+ }
1184+ gcmkUPDATE_PROFILE_DATA(ps_inst_counter);
1185+
1186+ gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00470, ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 31:24) - (0 ? 31:24) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:24) - (0 ? 31:24) + 1))))))) << (0 ? 31:24))) | (((gctUINT32) ((gctUINT32) (8) & ((gctUINT32) ((((1 ? 31:24) - (0 ? 31:24) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:24) - (0 ? 31:24) + 1))))))) << (0 ? 31:24))) ));
1187+gcmkONERROR(gckOS_ReadRegisterEx(Hardware->os, Hardware->core, 0x0045C, &profiler->rendered_pixel_counter));
1188+ if (needResetShader)
1189+ {
1190+ temp = profiler->rendered_pixel_counter;
1191+ profiler->rendered_pixel_counter -= Context->prevPSPixelCount;
1192+ Context->prevPSPixelCount = temp;
1193+ }
1194+ gcmkUPDATE_PROFILE_DATA(rendered_pixel_counter);
1195+
1196+ gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00470, ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 31:24) - (0 ? 31:24) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:24) - (0 ? 31:24) + 1))))))) << (0 ? 31:24))) | (((gctUINT32) ((gctUINT32) (9) & ((gctUINT32) ((((1 ? 31:24) - (0 ? 31:24) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:24) - (0 ? 31:24) + 1))))))) << (0 ? 31:24))) ));
1197+gcmkONERROR(gckOS_ReadRegisterEx(Hardware->os, Hardware->core, 0x0045C, &profiler->vs_inst_counter));
1198+ if (needResetShader)
1199+ {
1200+ temp = profiler->vs_inst_counter;
1201+ profiler->vs_inst_counter -= Context->prevVSInstCount;
1202+ Context->prevVSInstCount = temp;
1203+ }
1204+ gcmkUPDATE_PROFILE_DATA(vs_inst_counter);
1205+
1206+ gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00470, ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 31:24) - (0 ? 31:24) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:24) - (0 ? 31:24) + 1))))))) << (0 ? 31:24))) | (((gctUINT32) ((gctUINT32) (10) & ((gctUINT32) ((((1 ? 31:24) - (0 ? 31:24) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:24) - (0 ? 31:24) + 1))))))) << (0 ? 31:24))) ));
1207+gcmkONERROR(gckOS_ReadRegisterEx(Hardware->os, Hardware->core, 0x0045C, &profiler->rendered_vertice_counter));
1208+ if (needResetShader)
1209+ {
1210+ temp = profiler->rendered_vertice_counter;
1211+ profiler->rendered_vertice_counter -= Context->prevVSVertexCount;
1212+ Context->prevVSVertexCount = temp;
1213+ }
1214+ gcmkUPDATE_PROFILE_DATA(rendered_vertice_counter);
1215+
1216+ gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00470, ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 31:24) - (0 ? 31:24) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:24) - (0 ? 31:24) + 1))))))) << (0 ? 31:24))) | (((gctUINT32) ((gctUINT32) (11) & ((gctUINT32) ((((1 ? 31:24) - (0 ? 31:24) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:24) - (0 ? 31:24) + 1))))))) << (0 ? 31:24))) ));
1217+gcmkONERROR(gckOS_ReadRegisterEx(Hardware->os, Hardware->core, 0x0045C, &profiler->vtx_branch_inst_counter));
1218+ if (needResetShader)
1219+ {
1220+ temp = profiler->vtx_branch_inst_counter;
1221+ profiler->vtx_branch_inst_counter -= Context->prevVSBranchInstCount;
1222+ Context->prevVSBranchInstCount = temp;
1223+ }
1224+ gcmkUPDATE_PROFILE_DATA(vtx_branch_inst_counter);
1225+
1226+ gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00470, ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 31:24) - (0 ? 31:24) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:24) - (0 ? 31:24) + 1))))))) << (0 ? 31:24))) | (((gctUINT32) ((gctUINT32) (12) & ((gctUINT32) ((((1 ? 31:24) - (0 ? 31:24) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:24) - (0 ? 31:24) + 1))))))) << (0 ? 31:24))) ));
1227+gcmkONERROR(gckOS_ReadRegisterEx(Hardware->os, Hardware->core, 0x0045C, &profiler->vtx_texld_inst_counter));
1228+ if (needResetShader)
1229+ {
1230+ temp = profiler->vtx_texld_inst_counter;
1231+ profiler->vtx_texld_inst_counter -= Context->prevVSTexInstCount;
1232+ Context->prevVSTexInstCount = temp;
1233+ }
1234+ gcmkUPDATE_PROFILE_DATA(vtx_texld_inst_counter);
1235+
1236+ gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00470, ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 31:24) - (0 ? 31:24) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:24) - (0 ? 31:24) + 1))))))) << (0 ? 31:24))) | (((gctUINT32) ((gctUINT32) (13) & ((gctUINT32) ((((1 ? 31:24) - (0 ? 31:24) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:24) - (0 ? 31:24) + 1))))))) << (0 ? 31:24))) ));
1237+gcmkONERROR(gckOS_ReadRegisterEx(Hardware->os, Hardware->core, 0x0045C, &profiler->pxl_branch_inst_counter));
1238+ if (needResetShader)
1239+ {
1240+ temp = profiler->pxl_branch_inst_counter;
1241+ profiler->pxl_branch_inst_counter -= Context->prevPSBranchInstCount;
1242+ Context->prevPSBranchInstCount = temp;
1243+ }
1244+ gcmkUPDATE_PROFILE_DATA(pxl_branch_inst_counter);
1245+
1246+ gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00470, ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 31:24) - (0 ? 31:24) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:24) - (0 ? 31:24) + 1))))))) << (0 ? 31:24))) | (((gctUINT32) ((gctUINT32) (14) & ((gctUINT32) ((((1 ? 31:24) - (0 ? 31:24) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:24) - (0 ? 31:24) + 1))))))) << (0 ? 31:24))) ));
1247+gcmkONERROR(gckOS_ReadRegisterEx(Hardware->os, Hardware->core, 0x0045C, &profiler->pxl_texld_inst_counter));
1248+ if (needResetShader)
1249+ {
1250+ temp = profiler->pxl_texld_inst_counter;
1251+ profiler->pxl_texld_inst_counter -= Context->prevPSTexInstCount;
1252+ Context->prevPSTexInstCount = temp;
1253+ }
1254+ gcmkUPDATE_PROFILE_DATA(pxl_texld_inst_counter);
1255+
1256+ gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00470, ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 31:24) - (0 ? 31:24) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:24) - (0 ? 31:24) + 1))))))) << (0 ? 31:24))) | (((gctUINT32) ((gctUINT32) (15) & ((gctUINT32) ((((1 ? 31:24) - (0 ? 31:24) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:24) - (0 ? 31:24) + 1))))))) << (0 ? 31:24))) ));
1257+gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00470, ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 31:24) - (0 ? 31:24) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:24) - (0 ? 31:24) + 1))))))) << (0 ? 31:24))) | (((gctUINT32) ((gctUINT32) (0) & ((gctUINT32) ((((1 ? 31:24) - (0 ? 31:24) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:24) - (0 ? 31:24) + 1))))))) << (0 ? 31:24)))
1258+));
1259+
1260+ /* PA */
1261+ gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00474, ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 7:0) - (0 ? 7:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 7:0) - (0 ? 7:0) + 1))))))) << (0 ? 7:0))) | (((gctUINT32) ((gctUINT32) (3) & ((gctUINT32) ((((1 ? 7:0) - (0 ? 7:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 7:0) - (0 ? 7:0) + 1))))))) << (0 ? 7:0))) ));
1262+gcmkONERROR(gckOS_ReadRegisterEx(Hardware->os, Hardware->core, 0x00460, &profiler->pa_input_vtx_counter));
1263+ gcmkUPDATE_PROFILE_DATA(pa_input_vtx_counter);
1264+ gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00474, ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 7:0) - (0 ? 7:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 7:0) - (0 ? 7:0) + 1))))))) << (0 ? 7:0))) | (((gctUINT32) ((gctUINT32) (4) & ((gctUINT32) ((((1 ? 7:0) - (0 ? 7:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 7:0) - (0 ? 7:0) + 1))))))) << (0 ? 7:0))) ));
1265+gcmkONERROR(gckOS_ReadRegisterEx(Hardware->os, Hardware->core, 0x00460, &profiler->pa_input_prim_counter));
1266+ gcmkUPDATE_PROFILE_DATA(pa_input_prim_counter);
1267+ gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00474, ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 7:0) - (0 ? 7:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 7:0) - (0 ? 7:0) + 1))))))) << (0 ? 7:0))) | (((gctUINT32) ((gctUINT32) (5) & ((gctUINT32) ((((1 ? 7:0) - (0 ? 7:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 7:0) - (0 ? 7:0) + 1))))))) << (0 ? 7:0))) ));
1268+gcmkONERROR(gckOS_ReadRegisterEx(Hardware->os, Hardware->core, 0x00460, &profiler->pa_output_prim_counter));
1269+ gcmkUPDATE_PROFILE_DATA(pa_output_prim_counter);
1270+ gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00474, ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 7:0) - (0 ? 7:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 7:0) - (0 ? 7:0) + 1))))))) << (0 ? 7:0))) | (((gctUINT32) ((gctUINT32) (6) & ((gctUINT32) ((((1 ? 7:0) - (0 ? 7:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 7:0) - (0 ? 7:0) + 1))))))) << (0 ? 7:0))) ));
1271+gcmkONERROR(gckOS_ReadRegisterEx(Hardware->os, Hardware->core, 0x00460, &profiler->pa_depth_clipped_counter));
1272+ gcmkUPDATE_PROFILE_DATA(pa_depth_clipped_counter);
1273+ gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00474, ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 7:0) - (0 ? 7:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 7:0) - (0 ? 7:0) + 1))))))) << (0 ? 7:0))) | (((gctUINT32) ((gctUINT32) (7) & ((gctUINT32) ((((1 ? 7:0) - (0 ? 7:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 7:0) - (0 ? 7:0) + 1))))))) << (0 ? 7:0))) ));
1274+gcmkONERROR(gckOS_ReadRegisterEx(Hardware->os, Hardware->core, 0x00460, &profiler->pa_trivial_rejected_counter));
1275+ gcmkUPDATE_PROFILE_DATA(pa_trivial_rejected_counter);
1276+ gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00474, ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 7:0) - (0 ? 7:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 7:0) - (0 ? 7:0) + 1))))))) << (0 ? 7:0))) | (((gctUINT32) ((gctUINT32) (8) & ((gctUINT32) ((((1 ? 7:0) - (0 ? 7:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 7:0) - (0 ? 7:0) + 1))))))) << (0 ? 7:0))) ));
1277+gcmkONERROR(gckOS_ReadRegisterEx(Hardware->os, Hardware->core, 0x00460, &profiler->pa_culled_counter));
1278+ gcmkUPDATE_PROFILE_DATA(pa_culled_counter);
1279+ gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00474, ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 7:0) - (0 ? 7:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 7:0) - (0 ? 7:0) + 1))))))) << (0 ? 7:0))) | (((gctUINT32) ((gctUINT32) (15) & ((gctUINT32) ((((1 ? 7:0) - (0 ? 7:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 7:0) - (0 ? 7:0) + 1))))))) << (0 ? 7:0))) ));
1280+gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00474, ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 7:0) - (0 ? 7:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 7:0) - (0 ? 7:0) + 1))))))) << (0 ? 7:0))) | (((gctUINT32) ((gctUINT32) (0) & ((gctUINT32) ((((1 ? 7:0) - (0 ? 7:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 7:0) - (0 ? 7:0) + 1))))))) << (0 ? 7:0)))
1281+));
1282+
1283+ /* SE */
1284+ gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00474, ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 15:8) - (0 ? 15:8) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:8) - (0 ? 15:8) + 1))))))) << (0 ? 15:8))) | (((gctUINT32) ((gctUINT32) (0) & ((gctUINT32) ((((1 ? 15:8) - (0 ? 15:8) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:8) - (0 ? 15:8) + 1))))))) << (0 ? 15:8))) ));
1285+gcmkONERROR(gckOS_ReadRegisterEx(Hardware->os, Hardware->core, 0x00464, &profiler->se_culled_triangle_count));
1286+ gcmkUPDATE_PROFILE_DATA(se_culled_triangle_count);
1287+ gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00474, ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 15:8) - (0 ? 15:8) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:8) - (0 ? 15:8) + 1))))))) << (0 ? 15:8))) | (((gctUINT32) ((gctUINT32) (1) & ((gctUINT32) ((((1 ? 15:8) - (0 ? 15:8) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:8) - (0 ? 15:8) + 1))))))) << (0 ? 15:8))) ));
1288+gcmkONERROR(gckOS_ReadRegisterEx(Hardware->os, Hardware->core, 0x00464, &profiler->se_culled_lines_count));
1289+ gcmkUPDATE_PROFILE_DATA(se_culled_lines_count);
1290+ gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00474, ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 15:8) - (0 ? 15:8) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:8) - (0 ? 15:8) + 1))))))) << (0 ? 15:8))) | (((gctUINT32) ((gctUINT32) (15) & ((gctUINT32) ((((1 ? 15:8) - (0 ? 15:8) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:8) - (0 ? 15:8) + 1))))))) << (0 ? 15:8))) ));
1291+gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00474, ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 15:8) - (0 ? 15:8) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:8) - (0 ? 15:8) + 1))))))) << (0 ? 15:8))) | (((gctUINT32) ((gctUINT32) (0) & ((gctUINT32) ((((1 ? 15:8) - (0 ? 15:8) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:8) - (0 ? 15:8) + 1))))))) << (0 ? 15:8)))
1292+));
1293+
1294+ /* RA */
1295+ gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00474, ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 23:16) - (0 ? 23:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 23:16) - (0 ? 23:16) + 1))))))) << (0 ? 23:16))) | (((gctUINT32) ((gctUINT32) (0) & ((gctUINT32) ((((1 ? 23:16) - (0 ? 23:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 23:16) - (0 ? 23:16) + 1))))))) << (0 ? 23:16))) ));
1296+gcmkONERROR(gckOS_ReadRegisterEx(Hardware->os, Hardware->core, 0x00448, &profiler->ra_valid_pixel_count));
1297+ gcmkUPDATE_PROFILE_DATA(ra_valid_pixel_count);
1298+ gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00474, ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 23:16) - (0 ? 23:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 23:16) - (0 ? 23:16) + 1))))))) << (0 ? 23:16))) | (((gctUINT32) ((gctUINT32) (1) & ((gctUINT32) ((((1 ? 23:16) - (0 ? 23:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 23:16) - (0 ? 23:16) + 1))))))) << (0 ? 23:16))) ));
1299+gcmkONERROR(gckOS_ReadRegisterEx(Hardware->os, Hardware->core, 0x00448, &profiler->ra_total_quad_count));
1300+ gcmkUPDATE_PROFILE_DATA(ra_total_quad_count);
1301+ gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00474, ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 23:16) - (0 ? 23:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 23:16) - (0 ? 23:16) + 1))))))) << (0 ? 23:16))) | (((gctUINT32) ((gctUINT32) (2) & ((gctUINT32) ((((1 ? 23:16) - (0 ? 23:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 23:16) - (0 ? 23:16) + 1))))))) << (0 ? 23:16))) ));
1302+gcmkONERROR(gckOS_ReadRegisterEx(Hardware->os, Hardware->core, 0x00448, &profiler->ra_valid_quad_count_after_early_z));
1303+ gcmkUPDATE_PROFILE_DATA(ra_valid_quad_count_after_early_z);
1304+ gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00474, ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 23:16) - (0 ? 23:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 23:16) - (0 ? 23:16) + 1))))))) << (0 ? 23:16))) | (((gctUINT32) ((gctUINT32) (3) & ((gctUINT32) ((((1 ? 23:16) - (0 ? 23:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 23:16) - (0 ? 23:16) + 1))))))) << (0 ? 23:16))) ));
1305+gcmkONERROR(gckOS_ReadRegisterEx(Hardware->os, Hardware->core, 0x00448, &profiler->ra_total_primitive_count));
1306+ gcmkUPDATE_PROFILE_DATA(ra_total_primitive_count);
1307+ gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00474, ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 23:16) - (0 ? 23:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 23:16) - (0 ? 23:16) + 1))))))) << (0 ? 23:16))) | (((gctUINT32) ((gctUINT32) (9) & ((gctUINT32) ((((1 ? 23:16) - (0 ? 23:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 23:16) - (0 ? 23:16) + 1))))))) << (0 ? 23:16))) ));
1308+gcmkONERROR(gckOS_ReadRegisterEx(Hardware->os, Hardware->core, 0x00448, &profiler->ra_pipe_cache_miss_counter));
1309+ gcmkUPDATE_PROFILE_DATA(ra_pipe_cache_miss_counter);
1310+ gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00474, ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 23:16) - (0 ? 23:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 23:16) - (0 ? 23:16) + 1))))))) << (0 ? 23:16))) | (((gctUINT32) ((gctUINT32) (10) & ((gctUINT32) ((((1 ? 23:16) - (0 ? 23:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 23:16) - (0 ? 23:16) + 1))))))) << (0 ? 23:16))) ));
1311+gcmkONERROR(gckOS_ReadRegisterEx(Hardware->os, Hardware->core, 0x00448, &profiler->ra_prefetch_cache_miss_counter));
1312+ gcmkUPDATE_PROFILE_DATA(ra_prefetch_cache_miss_counter);
1313+ gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00474, ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 23:16) - (0 ? 23:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 23:16) - (0 ? 23:16) + 1))))))) << (0 ? 23:16))) | (((gctUINT32) ((gctUINT32) (15) & ((gctUINT32) ((((1 ? 23:16) - (0 ? 23:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 23:16) - (0 ? 23:16) + 1))))))) << (0 ? 23:16))) ));
1314+gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00474, ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 23:16) - (0 ? 23:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 23:16) - (0 ? 23:16) + 1))))))) << (0 ? 23:16))) | (((gctUINT32) ((gctUINT32) (0) & ((gctUINT32) ((((1 ? 23:16) - (0 ? 23:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 23:16) - (0 ? 23:16) + 1))))))) << (0 ? 23:16)))
1315+));
1316+
1317+ /* TX */
1318+ gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00474, ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 31:24) - (0 ? 31:24) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:24) - (0 ? 31:24) + 1))))))) << (0 ? 31:24))) | (((gctUINT32) ((gctUINT32) (0) & ((gctUINT32) ((((1 ? 31:24) - (0 ? 31:24) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:24) - (0 ? 31:24) + 1))))))) << (0 ? 31:24))) ));
1319+gcmkONERROR(gckOS_ReadRegisterEx(Hardware->os, Hardware->core, 0x0044C, &profiler->tx_total_bilinear_requests));
1320+ gcmkUPDATE_PROFILE_DATA(tx_total_bilinear_requests);
1321+ gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00474, ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 31:24) - (0 ? 31:24) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:24) - (0 ? 31:24) + 1))))))) << (0 ? 31:24))) | (((gctUINT32) ((gctUINT32) (1) & ((gctUINT32) ((((1 ? 31:24) - (0 ? 31:24) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:24) - (0 ? 31:24) + 1))))))) << (0 ? 31:24))) ));
1322+gcmkONERROR(gckOS_ReadRegisterEx(Hardware->os, Hardware->core, 0x0044C, &profiler->tx_total_trilinear_requests));
1323+ gcmkUPDATE_PROFILE_DATA(tx_total_trilinear_requests);
1324+ gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00474, ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 31:24) - (0 ? 31:24) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:24) - (0 ? 31:24) + 1))))))) << (0 ? 31:24))) | (((gctUINT32) ((gctUINT32) (2) & ((gctUINT32) ((((1 ? 31:24) - (0 ? 31:24) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:24) - (0 ? 31:24) + 1))))))) << (0 ? 31:24))) ));
1325+gcmkONERROR(gckOS_ReadRegisterEx(Hardware->os, Hardware->core, 0x0044C, &profiler->tx_total_discarded_texture_requests));
1326+ gcmkUPDATE_PROFILE_DATA(tx_total_discarded_texture_requests);
1327+ gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00474, ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 31:24) - (0 ? 31:24) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:24) - (0 ? 31:24) + 1))))))) << (0 ? 31:24))) | (((gctUINT32) ((gctUINT32) (3) & ((gctUINT32) ((((1 ? 31:24) - (0 ? 31:24) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:24) - (0 ? 31:24) + 1))))))) << (0 ? 31:24))) ));
1328+gcmkONERROR(gckOS_ReadRegisterEx(Hardware->os, Hardware->core, 0x0044C, &profiler->tx_total_texture_requests));
1329+ gcmkUPDATE_PROFILE_DATA(tx_total_texture_requests);
1330+ gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00474, ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 31:24) - (0 ? 31:24) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:24) - (0 ? 31:24) + 1))))))) << (0 ? 31:24))) | (((gctUINT32) ((gctUINT32) (5) & ((gctUINT32) ((((1 ? 31:24) - (0 ? 31:24) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:24) - (0 ? 31:24) + 1))))))) << (0 ? 31:24))) ));
1331+gcmkONERROR(gckOS_ReadRegisterEx(Hardware->os, Hardware->core, 0x0044C, &profiler->tx_mem_read_count));
1332+ gcmkUPDATE_PROFILE_DATA(tx_mem_read_count);
1333+ gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00474, ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 31:24) - (0 ? 31:24) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:24) - (0 ? 31:24) + 1))))))) << (0 ? 31:24))) | (((gctUINT32) ((gctUINT32) (6) & ((gctUINT32) ((((1 ? 31:24) - (0 ? 31:24) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:24) - (0 ? 31:24) + 1))))))) << (0 ? 31:24))) ));
1334+gcmkONERROR(gckOS_ReadRegisterEx(Hardware->os, Hardware->core, 0x0044C, &profiler->tx_mem_read_in_8B_count));
1335+ gcmkUPDATE_PROFILE_DATA(tx_mem_read_in_8B_count);
1336+ gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00474, ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 31:24) - (0 ? 31:24) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:24) - (0 ? 31:24) + 1))))))) << (0 ? 31:24))) | (((gctUINT32) ((gctUINT32) (7) & ((gctUINT32) ((((1 ? 31:24) - (0 ? 31:24) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:24) - (0 ? 31:24) + 1))))))) << (0 ? 31:24))) ));
1337+gcmkONERROR(gckOS_ReadRegisterEx(Hardware->os, Hardware->core, 0x0044C, &profiler->tx_cache_miss_count));
1338+ gcmkUPDATE_PROFILE_DATA(tx_cache_miss_count);
1339+ gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00474, ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 31:24) - (0 ? 31:24) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:24) - (0 ? 31:24) + 1))))))) << (0 ? 31:24))) | (((gctUINT32) ((gctUINT32) (8) & ((gctUINT32) ((((1 ? 31:24) - (0 ? 31:24) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:24) - (0 ? 31:24) + 1))))))) << (0 ? 31:24))) ));
1340+gcmkONERROR(gckOS_ReadRegisterEx(Hardware->os, Hardware->core, 0x0044C, &profiler->tx_cache_hit_texel_count));
1341+ gcmkUPDATE_PROFILE_DATA(tx_cache_hit_texel_count);
1342+ gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00474, ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 31:24) - (0 ? 31:24) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:24) - (0 ? 31:24) + 1))))))) << (0 ? 31:24))) | (((gctUINT32) ((gctUINT32) (9) & ((gctUINT32) ((((1 ? 31:24) - (0 ? 31:24) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:24) - (0 ? 31:24) + 1))))))) << (0 ? 31:24))) ));
1343+gcmkONERROR(gckOS_ReadRegisterEx(Hardware->os, Hardware->core, 0x0044C, &profiler->tx_cache_miss_texel_count));
1344+ gcmkUPDATE_PROFILE_DATA(tx_cache_miss_texel_count);
1345+ gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00474, ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 31:24) - (0 ? 31:24) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:24) - (0 ? 31:24) + 1))))))) << (0 ? 31:24))) | (((gctUINT32) ((gctUINT32) (15) & ((gctUINT32) ((((1 ? 31:24) - (0 ? 31:24) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:24) - (0 ? 31:24) + 1))))))) << (0 ? 31:24))) ));
1346+gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00474, ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 31:24) - (0 ? 31:24) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:24) - (0 ? 31:24) + 1))))))) << (0 ? 31:24))) | (((gctUINT32) ((gctUINT32) (0) & ((gctUINT32) ((((1 ? 31:24) - (0 ? 31:24) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:24) - (0 ? 31:24) + 1))))))) << (0 ? 31:24)))
1347+));
1348+
1349+ /* MC */
1350+ gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00478, ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 7:0) - (0 ? 7:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 7:0) - (0 ? 7:0) + 1))))))) << (0 ? 7:0))) | (((gctUINT32) ((gctUINT32) (1) & ((gctUINT32) ((((1 ? 7:0) - (0 ? 7:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 7:0) - (0 ? 7:0) + 1))))))) << (0 ? 7:0))) ));
1351+gcmkONERROR(gckOS_ReadRegisterEx(Hardware->os, Hardware->core, 0x00468, &profiler->mc_total_read_req_8B_from_pipeline));
1352+ gcmkUPDATE_PROFILE_DATA(mc_total_read_req_8B_from_pipeline);
1353+ gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00478, ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 7:0) - (0 ? 7:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 7:0) - (0 ? 7:0) + 1))))))) << (0 ? 7:0))) | (((gctUINT32) ((gctUINT32) (2) & ((gctUINT32) ((((1 ? 7:0) - (0 ? 7:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 7:0) - (0 ? 7:0) + 1))))))) << (0 ? 7:0))) ));
1354+gcmkONERROR(gckOS_ReadRegisterEx(Hardware->os, Hardware->core, 0x00468, &profiler->mc_total_read_req_8B_from_IP));
1355+ gcmkUPDATE_PROFILE_DATA(mc_total_read_req_8B_from_IP);
1356+ gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00478, ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 7:0) - (0 ? 7:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 7:0) - (0 ? 7:0) + 1))))))) << (0 ? 7:0))) | (((gctUINT32) ((gctUINT32) (3) & ((gctUINT32) ((((1 ? 7:0) - (0 ? 7:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 7:0) - (0 ? 7:0) + 1))))))) << (0 ? 7:0))) ));
1357+gcmkONERROR(gckOS_ReadRegisterEx(Hardware->os, Hardware->core, 0x00468, &profiler->mc_total_write_req_8B_from_pipeline));
1358+ gcmkUPDATE_PROFILE_DATA(mc_total_write_req_8B_from_pipeline);
1359+ gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00478, ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 7:0) - (0 ? 7:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 7:0) - (0 ? 7:0) + 1))))))) << (0 ? 7:0))) | (((gctUINT32) ((gctUINT32) (15) & ((gctUINT32) ((((1 ? 7:0) - (0 ? 7:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 7:0) - (0 ? 7:0) + 1))))))) << (0 ? 7:0))) ));
1360+gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00478, ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 7:0) - (0 ? 7:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 7:0) - (0 ? 7:0) + 1))))))) << (0 ? 7:0))) | (((gctUINT32) ((gctUINT32) (0) & ((gctUINT32) ((((1 ? 7:0) - (0 ? 7:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 7:0) - (0 ? 7:0) + 1))))))) << (0 ? 7:0)))
1361+));
1362+
1363+ /* HI */
1364+ gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00478, ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 15:8) - (0 ? 15:8) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:8) - (0 ? 15:8) + 1))))))) << (0 ? 15:8))) | (((gctUINT32) ((gctUINT32) (0) & ((gctUINT32) ((((1 ? 15:8) - (0 ? 15:8) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:8) - (0 ? 15:8) + 1))))))) << (0 ? 15:8))) ));
1365+gcmkONERROR(gckOS_ReadRegisterEx(Hardware->os, Hardware->core, 0x0046C, &profiler->hi_axi_cycles_read_request_stalled));
1366+ gcmkUPDATE_PROFILE_DATA(hi_axi_cycles_read_request_stalled);
1367+ gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00478, ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 15:8) - (0 ? 15:8) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:8) - (0 ? 15:8) + 1))))))) << (0 ? 15:8))) | (((gctUINT32) ((gctUINT32) (1) & ((gctUINT32) ((((1 ? 15:8) - (0 ? 15:8) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:8) - (0 ? 15:8) + 1))))))) << (0 ? 15:8))) ));
1368+gcmkONERROR(gckOS_ReadRegisterEx(Hardware->os, Hardware->core, 0x0046C, &profiler->hi_axi_cycles_write_request_stalled));
1369+ gcmkUPDATE_PROFILE_DATA(hi_axi_cycles_write_request_stalled);
1370+ gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00478, ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 15:8) - (0 ? 15:8) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:8) - (0 ? 15:8) + 1))))))) << (0 ? 15:8))) | (((gctUINT32) ((gctUINT32) (2) & ((gctUINT32) ((((1 ? 15:8) - (0 ? 15:8) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:8) - (0 ? 15:8) + 1))))))) << (0 ? 15:8))) ));
1371+gcmkONERROR(gckOS_ReadRegisterEx(Hardware->os, Hardware->core, 0x0046C, &profiler->hi_axi_cycles_write_data_stalled));
1372+ gcmkUPDATE_PROFILE_DATA(hi_axi_cycles_write_data_stalled);
1373+ gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00478, ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 15:8) - (0 ? 15:8) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:8) - (0 ? 15:8) + 1))))))) << (0 ? 15:8))) | (((gctUINT32) ((gctUINT32) (15) & ((gctUINT32) ((((1 ? 15:8) - (0 ? 15:8) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:8) - (0 ? 15:8) + 1))))))) << (0 ? 15:8))) ));
1374+gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00478, ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 15:8) - (0 ? 15:8) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:8) - (0 ? 15:8) + 1))))))) << (0 ? 15:8))) | (((gctUINT32) ((gctUINT32) (0) & ((gctUINT32) ((((1 ? 15:8) - (0 ? 15:8) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:8) - (0 ? 15:8) + 1))))))) << (0 ? 15:8)))
1375+));
1376+
1377+ /* Success. */
1378+ gcmkFOOTER_NO();
1379+ return gcvSTATUS_OK;
1380+
1381+OnError:
1382+ /* Return the status. */
1383+ gcmkFOOTER();
1384+ return status;
1385+}
1386+#endif
1387+
1388 static gceSTATUS
1389 _ResetGPU(
1390 IN gckHARDWARE Hardware,
1391@@ -5602,6 +6264,22 @@ gckHARDWARE_IsFeatureAvailable(
1392 && ((((gctUINT32) (Hardware->identity.chipFeatures)) >> (0 ? 2:2) & ((gctUINT32) ((((1 ? 2:2) - (0 ? 2:2) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 2:2) - (0 ? 2:2) + 1)))))) == (0x1 & ((gctUINT32) ((((1 ? 2:2) - (0 ? 2:2) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 2:2) - (0 ? 2:2) + 1)))))));
1393 break;
1394
1395+ case gcvFEATURE_PIPE_2D:
1396+ available = ((((gctUINT32) (Hardware->identity.chipFeatures)) >> (0 ? 9:9) & ((gctUINT32) ((((1 ? 9:9) - (0 ? 9:9) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 9:9) - (0 ? 9:9) + 1)))))) == (0x1 & ((gctUINT32) ((((1 ? 9:9) - (0 ? 9:9) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 9:9) - (0 ? 9:9) + 1)))))));
1397+ break;
1398+
1399+ case gcvFEATURE_PIPE_3D:
1400+#ifndef VIVANTE_NO_3D
1401+ available = ((((gctUINT32) (Hardware->identity.chipFeatures)) >> (0 ? 2:2) & ((gctUINT32) ((((1 ? 2:2) - (0 ? 2:2) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 2:2) - (0 ? 2:2) + 1)))))) == (0x1 & ((gctUINT32) ((((1 ? 2:2) - (0 ? 2:2) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 2:2) - (0 ? 2:2) + 1)))))));
1402+#else
1403+ available = gcvFALSE;
1404+#endif
1405+ break;
1406+
1407+ case gcvFEATURE_HALTI2:
1408+ available = ((((gctUINT32) (Hardware->identity.chipMinorFeatures4)) >> (0 ? 16:16) & ((gctUINT32) ((((1 ? 16:16) - (0 ? 16:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 16:16) - (0 ? 16:16) + 1)))))) == (0x1 & ((gctUINT32) ((((1 ? 16:16) - (0 ? 16:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 16:16) - (0 ? 16:16) + 1)))))));
1409+ break;
1410+
1411 default:
1412 gcmkFATAL("Invalid feature has been requested.");
1413 available = gcvFALSE;
1414diff --git a/drivers/mxc/gpu-viv/arch/XAQ2/hal/kernel/gc_hal_kernel_hardware.h b/drivers/mxc/gpu-viv/arch/XAQ2/hal/kernel/gc_hal_kernel_hardware.h
1415index 37226b7..287ea60 100644
1416--- a/drivers/mxc/gpu-viv/arch/XAQ2/hal/kernel/gc_hal_kernel_hardware.h
1417+++ b/drivers/mxc/gpu-viv/arch/XAQ2/hal/kernel/gc_hal_kernel_hardware.h
1418@@ -92,6 +92,7 @@ struct _gckHARDWARE
1419 #endif
1420
1421 gctBOOL powerManagement;
1422+ gctBOOL gpuProfiler;
1423 };
1424
1425 gceSTATUS
1426diff --git a/drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel.c b/drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel.c
1427index b7b0d28..12a5340 100644
1428--- a/drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel.c
1429+++ b/drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel.c
1430@@ -128,19 +128,6 @@ _ResetFinishFunction(
1431 ** Pointer to a variable that will hold the pointer to the gckKERNEL
1432 ** object.
1433 */
1434-#ifdef ANDROID
1435-#if gcdNEW_PROFILER_FILE
1436-#define DEFAULT_PROFILE_FILE_NAME "/sdcard/vprofiler.vpd"
1437-#else
1438-#define DEFAULT_PROFILE_FILE_NAME "/sdcard/vprofiler.xml"
1439-#endif
1440-#else
1441-#if gcdNEW_PROFILER_FILE
1442-#define DEFAULT_PROFILE_FILE_NAME "vprofiler.vpd"
1443-#else
1444-#define DEFAULT_PROFILE_FILE_NAME "vprofiler.xml"
1445-#endif
1446-#endif
1447
1448 gceSTATUS
1449 gckKERNEL_Construct(
1450@@ -302,17 +289,12 @@ gckKERNEL_Construct(
1451
1452 #if VIVANTE_PROFILER
1453 /* Initialize profile setting */
1454-#if defined ANDROID
1455 kernel->profileEnable = gcvFALSE;
1456-#else
1457- kernel->profileEnable = gcvTRUE;
1458-#endif
1459 kernel->profileCleanRegister = gcvTRUE;
1460+#endif
1461
1462- gcmkVERIFY_OK(
1463- gckOS_MemCopy(kernel->profileFileName,
1464- DEFAULT_PROFILE_FILE_NAME,
1465- gcmSIZEOF(DEFAULT_PROFILE_FILE_NAME) + 1));
1466+#if gcdANDROID_NATIVE_FENCE_SYNC
1467+ gcmkONERROR(gckOS_CreateSyncTimeline(Os, &kernel->timeline));
1468 #endif
1469
1470 /* Return pointer to the gckKERNEL object. */
1471@@ -395,6 +377,13 @@ OnError:
1472 }
1473 #endif
1474
1475+#if gcdANDROID_NATIVE_FENCE_SYNC
1476+ if (kernel->timeline)
1477+ {
1478+ gcmkVERIFY_OK(gckOS_DestroySyncTimeline(Os, kernel->timeline));
1479+ }
1480+#endif
1481+
1482 gcmkVERIFY_OK(gcmkOS_SAFE_FREE(Os, kernel));
1483 }
1484
1485@@ -525,6 +514,10 @@ gckKERNEL_Destroy(
1486 }
1487 #endif
1488
1489+#if gcdANDROID_NATIVE_FENCE_SYNC
1490+ gcmkVERIFY_OK(gckOS_DestroySyncTimeline(Kernel->os, Kernel->timeline));
1491+#endif
1492+
1493 /* Mark the gckKERNEL object as unknown. */
1494 Kernel->object.type = gcvOBJ_UNKNOWN;
1495
1496@@ -1310,7 +1303,8 @@ gckKERNEL_Dispatch(
1497 /* Commit a command and context buffer. */
1498 gcmkONERROR(
1499 gckCOMMAND_Commit(Kernel->command,
1500- gcmNAME_TO_PTR(Interface->u.Commit.context),
1501+ Interface->u.Commit.context ?
1502+ gcmNAME_TO_PTR(Interface->u.Commit.context) : gcvNULL,
1503 gcmUINT64_TO_PTR(Interface->u.Commit.commandBuffer),
1504 gcmUINT64_TO_PTR(Interface->u.Commit.delta),
1505 gcmUINT64_TO_PTR(Interface->u.Commit.queue),
1506@@ -1600,7 +1594,15 @@ gckKERNEL_Dispatch(
1507 break;
1508
1509 case gcvHAL_READ_ALL_PROFILE_REGISTERS:
1510-#if VIVANTE_PROFILER
1511+#if VIVANTE_PROFILER && VIVANTE_PROFILER_CONTEXT
1512+ /* Read profile data according to the context. */
1513+ gcmkONERROR(
1514+ gckHARDWARE_QueryContextProfile(
1515+ Kernel->hardware,
1516+ Kernel->profileCleanRegister,
1517+ gcmNAME_TO_PTR(Interface->u.RegisterProfileData.context),
1518+ &Interface->u.RegisterProfileData.counters));
1519+#elif VIVANTE_PROFILER
1520 /* Read all 3D profile registers. */
1521 gcmkONERROR(
1522 gckHARDWARE_QueryProfileRegisters(
1523@@ -1628,11 +1630,6 @@ gckKERNEL_Dispatch(
1524 #if VIVANTE_PROFILER
1525 /* Get profile setting */
1526 Interface->u.GetProfileSetting.enable = Kernel->profileEnable;
1527-
1528- gcmkVERIFY_OK(
1529- gckOS_MemCopy(Interface->u.GetProfileSetting.fileName,
1530- Kernel->profileFileName,
1531- gcdMAX_PROFILE_FILE_NAME));
1532 #endif
1533
1534 status = gcvSTATUS_OK;
1535@@ -1640,12 +1637,13 @@ gckKERNEL_Dispatch(
1536 case gcvHAL_SET_PROFILE_SETTING:
1537 #if VIVANTE_PROFILER
1538 /* Set profile setting */
1539- Kernel->profileEnable = Interface->u.SetProfileSetting.enable;
1540-
1541- gcmkVERIFY_OK(
1542- gckOS_MemCopy(Kernel->profileFileName,
1543- Interface->u.SetProfileSetting.fileName,
1544- gcdMAX_PROFILE_FILE_NAME));
1545+ if(Kernel->hardware->gpuProfiler)
1546+ Kernel->profileEnable = Interface->u.SetProfileSetting.enable;
1547+ else
1548+ {
1549+ status = gcvSTATUS_NOT_SUPPORTED;
1550+ break;
1551+ }
1552 #endif
1553
1554 status = gcvSTATUS_OK;
1555@@ -2093,6 +2091,61 @@ gckKERNEL_Dispatch(
1556 #endif
1557 break;
1558
1559+#if gcdANDROID_NATIVE_FENCE_SYNC
1560+ case gcvHAL_SYNC_POINT:
1561+ {
1562+ gctSYNC_POINT syncPoint;
1563+
1564+ switch (Interface->u.SyncPoint.command)
1565+ {
1566+ case gcvSYNC_POINT_CREATE:
1567+ gcmkONERROR(gckOS_CreateSyncPoint(Kernel->os, &syncPoint));
1568+
1569+ Interface->u.SyncPoint.syncPoint = gcmPTR_TO_UINT64(syncPoint);
1570+
1571+ gcmkVERIFY_OK(
1572+ gckKERNEL_AddProcessDB(Kernel,
1573+ processID, gcvDB_SYNC_POINT,
1574+ syncPoint,
1575+ gcvNULL,
1576+ 0));
1577+ break;
1578+
1579+ case gcvSYNC_POINT_DESTROY:
1580+ syncPoint = gcmUINT64_TO_PTR(Interface->u.SyncPoint.syncPoint);
1581+
1582+ gcmkONERROR(gckOS_DestroySyncPoint(Kernel->os, syncPoint));
1583+
1584+ gcmkVERIFY_OK(
1585+ gckKERNEL_RemoveProcessDB(Kernel,
1586+ processID, gcvDB_SYNC_POINT,
1587+ syncPoint));
1588+ break;
1589+
1590+ default:
1591+ gcmkONERROR(gcvSTATUS_INVALID_ARGUMENT);
1592+ break;
1593+ }
1594+ }
1595+ break;
1596+
1597+ case gcvHAL_CREATE_NATIVE_FENCE:
1598+ {
1599+ gctINT fenceFD;
1600+ gctSYNC_POINT syncPoint =
1601+ gcmUINT64_TO_PTR(Interface->u.CreateNativeFence.syncPoint);
1602+
1603+ gcmkONERROR(
1604+ gckOS_CreateNativeFence(Kernel->os,
1605+ Kernel->timeline,
1606+ syncPoint,
1607+ &fenceFD));
1608+
1609+ Interface->u.CreateNativeFence.fenceFD = fenceFD;
1610+ }
1611+ break;
1612+#endif
1613+
1614 default:
1615 /* Invalid command. */
1616 gcmkONERROR(gcvSTATUS_INVALID_ARGUMENT);
1617@@ -2856,6 +2909,8 @@ gckKERNEL_Recovery(
1618 return gcvSTATUS_OK;
1619 }
1620
1621+ gcmkPRINT("[galcore]: GPU[%d] hang, automatic recovery.", Kernel->core);
1622+
1623 /* Start a timer to clear reset flag, before timer is expired,
1624 ** other recovery request is ignored. */
1625 gcmkVERIFY_OK(
1626@@ -3382,7 +3437,7 @@ gckLINKQUEUE_Dequeue(
1627 IN gckLINKQUEUE LinkQueue
1628 )
1629 {
1630- gcmASSERT(LinkQueue->count == gcdLINK_QUEUE_SIZE);
1631+ gcmkASSERT(LinkQueue->count == gcdLINK_QUEUE_SIZE);
1632
1633 LinkQueue->count--;
1634 LinkQueue->front = (LinkQueue->front + 1) % gcdLINK_QUEUE_SIZE;
1635diff --git a/drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel.h b/drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel.h
1636index 5896e93..1c40df2 100644
1637--- a/drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel.h
1638+++ b/drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel.h
1639@@ -140,8 +140,9 @@ typedef enum _gceDATABASE_TYPE
1640 gcvDB_CONTEXT, /* Context */
1641 gcvDB_IDLE, /* GPU idle. */
1642 gcvDB_MAP_MEMORY, /* Map memory */
1643- gcvDB_SHARED_INFO, /* Private data */
1644- gcvDB_MAP_USER_MEMORY /* Map user memory */
1645+ gcvDB_SHARED_INFO, /* Private data */
1646+ gcvDB_MAP_USER_MEMORY, /* Map user memory */
1647+ gcvDB_SYNC_POINT, /* Sync point. */
1648 }
1649 gceDATABASE_TYPE;
1650
1651@@ -406,9 +407,6 @@ struct _gckKERNEL
1652 /* Enable profiling */
1653 gctBOOL profileEnable;
1654
1655- /* The profile file name */
1656- gctCHAR profileFileName[gcdMAX_PROFILE_FILE_NAME];
1657-
1658 /* Clear profile register or not*/
1659 gctBOOL profileCleanRegister;
1660
1661@@ -445,6 +443,10 @@ struct _gckKERNEL
1662 #if gcdDVFS
1663 gckDVFS dvfs;
1664 #endif
1665+
1666+#if gcdANDROID_NATIVE_FENCE_SYNC
1667+ gctHANDLE timeline;
1668+#endif
1669 };
1670
1671 struct _FrequencyHistory
1672@@ -496,6 +498,11 @@ struct _gckCOMMAND
1673 /* Context switching mutex. */
1674 gctPOINTER mutexContext;
1675
1676+#if VIVANTE_PROFILER_CONTEXT
1677+ /* Context sequence mutex. */
1678+ gctPOINTER mutexContextSeq;
1679+#endif
1680+
1681 /* Command queue power semaphore. */
1682 gctPOINTER powerSemaphore;
1683
1684@@ -649,6 +656,8 @@ struct _gckEVENT
1685 gctPOINTER eventListMutex;
1686
1687 gctPOINTER submitTimer;
1688+
1689+ volatile gctBOOL inNotify;
1690 };
1691
1692 /* Free all events belonging to a process. */
1693@@ -668,6 +677,11 @@ gckEVENT_Stop(
1694 IN OUT gctSIZE_T * waitSize
1695 );
1696
1697+gceSTATUS
1698+gckEVENT_WaitEmpty(
1699+ IN gckEVENT Event
1700+ );
1701+
1702 /* gcuVIDMEM_NODE structure. */
1703 typedef union _gcuVIDMEM_NODE
1704 {
1705diff --git a/drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel_command.c b/drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel_command.c
1706index 9ee9ea1..73dab81 100644
1707--- a/drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel_command.c
1708+++ b/drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel_command.c
1709@@ -494,6 +494,11 @@ gckCOMMAND_Construct(
1710 /* Create the context switching mutex. */
1711 gcmkONERROR(gckOS_CreateMutex(os, &command->mutexContext));
1712
1713+#if VIVANTE_PROFILER_CONTEXT
1714+ /* Create the context switching mutex. */
1715+ gcmkONERROR(gckOS_CreateMutex(os, &command->mutexContextSeq));
1716+#endif
1717+
1718 /* Create the power management semaphore. */
1719 gcmkONERROR(gckOS_CreateSemaphore(os, &command->powerSemaphore));
1720
1721@@ -572,6 +577,13 @@ OnError:
1722 gcmkVERIFY_OK(gckOS_DeleteMutex(os, command->mutexContext));
1723 }
1724
1725+#if VIVANTE_PROFILER_CONTEXT
1726+ if (command->mutexContextSeq != gcvNULL)
1727+ {
1728+ gcmkVERIFY_OK(gckOS_DeleteMutex(os, command->mutexContextSeq));
1729+ }
1730+#endif
1731+
1732 if (command->mutexQueue != gcvNULL)
1733 {
1734 gcmkVERIFY_OK(gckOS_DeleteMutex(os, command->mutexQueue));
1735@@ -662,6 +674,11 @@ gckCOMMAND_Destroy(
1736 /* Delete the context switching mutex. */
1737 gcmkVERIFY_OK(gckOS_DeleteMutex(Command->os, Command->mutexContext));
1738
1739+#if VIVANTE_PROFILER_CONTEXT
1740+ if (Command->mutexContextSeq != gcvNULL)
1741+ gcmkVERIFY_OK(gckOS_DeleteMutex(Command->os, Command->mutexContextSeq));
1742+#endif
1743+
1744 /* Delete the command queue mutex. */
1745 gcmkVERIFY_OK(gckOS_DeleteMutex(Command->os, Command->mutexQueue));
1746
1747@@ -1127,6 +1144,10 @@ gckCOMMAND_Commit(
1748 # endif
1749 #endif
1750
1751+#if VIVANTE_PROFILER_CONTEXT
1752+ gctBOOL sequenceAcquired = gcvFALSE;
1753+#endif
1754+
1755 gctPOINTER pointer = gcvNULL;
1756
1757 gcmkHEADER_ARG(
1758@@ -1145,6 +1166,17 @@ gckCOMMAND_Commit(
1759
1760 gcmkONERROR(_FlushMMU(Command));
1761
1762+#if VIVANTE_PROFILER_CONTEXT
1763+ if((Command->kernel->hardware->gpuProfiler) && (Command->kernel->profileEnable))
1764+ {
1765+ /* Acquire the context sequnence mutex. */
1766+ gcmkONERROR(gckOS_AcquireMutex(
1767+ Command->os, Command->mutexContextSeq, gcvINFINITE
1768+ ));
1769+ sequenceAcquired = gcvTRUE;
1770+ }
1771+#endif
1772+
1773 /* Acquire the command queue. */
1774 gcmkONERROR(gckCOMMAND_EnterCommit(Command, gcvFALSE));
1775 commitEntered = gcvTRUE;
1776@@ -2002,6 +2034,23 @@ gckCOMMAND_Commit(
1777 gcmkONERROR(gckCOMMAND_ExitCommit(Command, gcvFALSE));
1778 commitEntered = gcvFALSE;
1779
1780+#if VIVANTE_PROFILER_CONTEXT
1781+ if(sequenceAcquired)
1782+ {
1783+ gcmkONERROR(gckCOMMAND_Stall(Command, gcvTRUE));
1784+ if (Command->currContext)
1785+ {
1786+ gcmkONERROR(gckHARDWARE_UpdateContextProfile(
1787+ hardware,
1788+ Command->currContext));
1789+ }
1790+
1791+ /* Release the context switching mutex. */
1792+ gcmkONERROR(gckOS_ReleaseMutex(Command->os, Command->mutexContextSeq));
1793+ sequenceAcquired = gcvFALSE;
1794+ }
1795+#endif
1796+
1797 /* Loop while there are records in the queue. */
1798 while (EventQueue != gcvNULL)
1799 {
1800@@ -2114,6 +2163,14 @@ OnError:
1801 gcmkVERIFY_OK(gckCOMMAND_ExitCommit(Command, gcvFALSE));
1802 }
1803
1804+#if VIVANTE_PROFILER_CONTEXT
1805+ if (sequenceAcquired)
1806+ {
1807+ /* Release the context sequence mutex. */
1808+ gcmkVERIFY_OK(gckOS_ReleaseMutex(Command->os, Command->mutexContextSeq));
1809+ }
1810+#endif
1811+
1812 /* Unmap the command buffer pointer. */
1813 if (commandBufferMapped)
1814 {
1815diff --git a/drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel_command_vg.c b/drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel_command_vg.c
1816index 76c1c10..1a7c340 100644
1817--- a/drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel_command_vg.c
1818+++ b/drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel_command_vg.c
1819@@ -2819,6 +2819,7 @@ gckVGCOMMAND_Construct(
1820 ** Enable TS overflow interrupt.
1821 */
1822
1823+ command->info.tsOverflowInt = 0;
1824 gcmkERR_BREAK(gckVGINTERRUPT_Enable(
1825 Kernel->interrupt,
1826 &command->info.tsOverflowInt,
1827@@ -3406,38 +3407,26 @@ gckVGCOMMAND_Commit(
1828 gctBOOL previousExecuted;
1829 gctUINT controlIndex;
1830
1831+ gcmkERR_BREAK(gckVGHARDWARE_SetPowerManagementState(
1832+ Command->hardware, gcvPOWER_ON_AUTO
1833+ ));
1834+
1835+ /* Acquire the power semaphore. */
1836+ gcmkERR_BREAK(gckOS_AcquireSemaphore(
1837+ Command->os, Command->powerSemaphore
1838+ ));
1839+
1840 /* Acquire the mutex. */
1841- gcmkERR_BREAK(gckOS_AcquireMutex(
1842+ status = gckOS_AcquireMutex(
1843 Command->os,
1844 Command->commitMutex,
1845 gcvINFINITE
1846- ));
1847-
1848- status = gckVGHARDWARE_SetPowerManagementState(
1849- Command->hardware, gcvPOWER_ON_AUTO);
1850-
1851- if (gcmIS_ERROR(status))
1852- {
1853- /* Acquire the mutex. */
1854- gcmkVERIFY_OK(gckOS_ReleaseMutex(
1855- Command->os,
1856- Command->commitMutex
1857- ));
1858-
1859- break;
1860- }
1861- /* Acquire the power semaphore. */
1862- status = gckOS_AcquireSemaphore(
1863- Command->os, Command->powerSemaphore);
1864+ );
1865
1866 if (gcmIS_ERROR(status))
1867 {
1868- /* Acquire the mutex. */
1869- gcmkVERIFY_OK(gckOS_ReleaseMutex(
1870- Command->os,
1871- Command->commitMutex
1872- ));
1873-
1874+ gcmkVERIFY_OK(gckOS_ReleaseSemaphore(
1875+ Command->os, Command->powerSemaphore));
1876 break;
1877 }
1878
1879@@ -3669,14 +3658,14 @@ gckVGCOMMAND_Commit(
1880 }
1881 while (gcvFALSE);
1882
1883- gcmkVERIFY_OK(gckOS_ReleaseSemaphore(
1884- Command->os, Command->powerSemaphore));
1885-
1886 /* Release the mutex. */
1887 gcmkCHECK_STATUS(gckOS_ReleaseMutex(
1888 Command->os,
1889 Command->commitMutex
1890 ));
1891+
1892+ gcmkVERIFY_OK(gckOS_ReleaseSemaphore(
1893+ Command->os, Command->powerSemaphore));
1894 }
1895 while (gcvFALSE);
1896
1897diff --git a/drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel_db.c b/drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel_db.c
1898index 673d4f7..134351a 100644
1899--- a/drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel_db.c
1900+++ b/drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel_db.c
1901@@ -1307,6 +1307,18 @@ gckKERNEL_DestroyProcessDB(
1902 status = gckOS_FreeMemory(Kernel->os, record->physical);
1903 break;
1904
1905+#if gcdANDROID_NATIVE_FENCE_SYNC
1906+ case gcvDB_SYNC_POINT:
1907+ /* Free the user signal. */
1908+ status = gckOS_DestroySyncPoint(Kernel->os,
1909+ (gctSYNC_POINT) record->data);
1910+
1911+ gcmkTRACE_ZONE(gcvLEVEL_WARNING, gcvZONE_DATABASE,
1912+ "DB: SYNC POINT %d (status=%d)",
1913+ (gctINT)(gctUINTPTR_T)record->data, status);
1914+ break;
1915+#endif
1916+
1917 default:
1918 gcmkTRACE_ZONE(gcvLEVEL_ERROR, gcvZONE_DATABASE,
1919 "DB: Correcupted record=0x%08x type=%d",
1920diff --git a/drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel_event.c b/drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel_event.c
1921index 217f7f1..2d81a56 100644
1922--- a/drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel_event.c
1923+++ b/drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel_event.c
1924@@ -931,6 +931,7 @@ gckEVENT_AddList(
1925 || (Interface->command == gcvHAL_TIMESTAMP)
1926 || (Interface->command == gcvHAL_COMMIT_DONE)
1927 || (Interface->command == gcvHAL_FREE_VIRTUAL_COMMAND_BUFFER)
1928+ || (Interface->command == gcvHAL_SYNC_POINT)
1929 );
1930
1931 /* Validate the source. */
1932@@ -2131,6 +2132,9 @@ gckEVENT_Notify(
1933 gcvINFINITE));
1934 acquired = gcvTRUE;
1935
1936+ /* We are in the notify loop. */
1937+ Event->inNotify = gcvTRUE;
1938+
1939 /* Grab the event head. */
1940 record = queue->head;
1941
1942@@ -2463,6 +2467,17 @@ gckEVENT_Notify(
1943 break;
1944 #endif
1945
1946+#if gcdANDROID_NATIVE_FENCE_SYNC
1947+ case gcvHAL_SYNC_POINT:
1948+ {
1949+ gctSYNC_POINT syncPoint;
1950+
1951+ syncPoint = gcmUINT64_TO_PTR(record->info.u.SyncPoint.syncPoint);
1952+ status = gckOS_SignalSyncPoint(Event->os, syncPoint);
1953+ }
1954+ break;
1955+#endif
1956+
1957 case gcvHAL_COMMIT_DONE:
1958 break;
1959
1960@@ -2505,6 +2520,9 @@ gckEVENT_Notify(
1961 gcmkONERROR(_TryToIdleGPU(Event));
1962 }
1963
1964+ /* We are out the notify loop. */
1965+ Event->inNotify = gcvFALSE;
1966+
1967 /* Success. */
1968 gcmkFOOTER_NO();
1969 return gcvSTATUS_OK;
1970@@ -2524,6 +2542,9 @@ OnError:
1971 }
1972 #endif
1973
1974+ /* We are out the notify loop. */
1975+ Event->inNotify = gcvFALSE;
1976+
1977 /* Return the status. */
1978 gcmkFOOTER();
1979 return status;
1980@@ -2871,3 +2892,11 @@ gckEVENT_Dump(
1981 return gcvSTATUS_OK;
1982 }
1983
1984+gceSTATUS gckEVENT_WaitEmpty(gckEVENT Event)
1985+{
1986+ gctBOOL isEmpty;
1987+
1988+ while (Event->inNotify || (gcmIS_SUCCESS(gckEVENT_IsEmpty(Event, &isEmpty)) && !isEmpty)) ;
1989+
1990+ return gcvSTATUS_OK;
1991+}
1992diff --git a/drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel_interrupt_vg.c b/drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel_interrupt_vg.c
1993index 8ac187b..50bc63e 100644
1994--- a/drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel_interrupt_vg.c
1995+++ b/drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel_interrupt_vg.c
1996@@ -794,6 +794,9 @@ gckVGINTERRUPT_Enque(
1997 Interrupt->kernel->hardware, &triggered
1998 ));
1999
2000+ /* Mask out TS overflow interrupt */
2001+ triggered &= 0xfffffffe;
2002+
2003 /* No interrupts to process? */
2004 if (triggered == 0)
2005 {
2006diff --git a/drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel_mmu.c b/drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel_mmu.c
2007index c7f67c7..e4ca497 100644
2008--- a/drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel_mmu.c
2009+++ b/drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel_mmu.c
2010@@ -1436,7 +1436,7 @@ gckMMU_AllocatePages(
2011 acquired = gcvTRUE;
2012
2013 /* Allocate page table for current MMU. */
2014- for (i = 0; i < mirrorPageTable->reference; i++)
2015+ for (i = 0; i < (gctINT)mirrorPageTable->reference; i++)
2016 {
2017 if (Mmu == mirrorPageTable->mmus[i])
2018 {
2019@@ -1446,7 +1446,7 @@ gckMMU_AllocatePages(
2020 }
2021
2022 /* Allocate page table for other MMUs. */
2023- for (i = 0; i < mirrorPageTable->reference; i++)
2024+ for (i = 0; i < (gctINT)mirrorPageTable->reference; i++)
2025 {
2026 mmu = mirrorPageTable->mmus[i];
2027
2028@@ -1500,7 +1500,7 @@ gckMMU_FreePages(
2029
2030 offset = (gctUINT32)PageTable - (gctUINT32)Mmu->pageTableLogical;
2031
2032- for (i = 0; i < mirrorPageTable->reference; i++)
2033+ for (i = 0; i < (gctINT)mirrorPageTable->reference; i++)
2034 {
2035 mmu = mirrorPageTable->mmus[i];
2036
2037@@ -1639,7 +1639,7 @@ gckMMU_SetPage(
2038 _WritePageEntry(PageEntry, data);
2039
2040 #if gcdMIRROR_PAGETABLE
2041- for (i = 0; i < mirrorPageTable->reference; i++)
2042+ for (i = 0; i < (gctINT)mirrorPageTable->reference; i++)
2043 {
2044 mmu = mirrorPageTable->mmus[i];
2045
2046diff --git a/drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel_video_memory.c b/drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel_video_memory.c
2047index 8b8bbdc..3b5dd82 100644
2048--- a/drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel_video_memory.c
2049+++ b/drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel_video_memory.c
2050@@ -1582,6 +1582,7 @@ _NeedVirtualMapping(
2051 gctUINT32 end;
2052 gcePOOL pool;
2053 gctUINT32 offset;
2054+ gctUINT32 baseAddress;
2055
2056 gcmkHEADER_ARG("Node=0x%X", Node);
2057
2058@@ -1601,10 +1602,16 @@ _NeedVirtualMapping(
2059 else
2060 #endif
2061 {
2062- /* For cores which can't access all physical address. */
2063- gcmkONERROR(gckHARDWARE_ConvertLogical(Kernel->hardware,
2064- Node->Virtual.logical,
2065- &phys));
2066+ /* Convert logical address into a physical address. */
2067+ gcmkONERROR(
2068+ gckOS_GetPhysicalAddress(Kernel->os, Node->Virtual.logical, &phys));
2069+
2070+ gcmkONERROR(gckOS_GetBaseAddress(Kernel->os, &baseAddress));
2071+
2072+ gcmkASSERT(phys >= baseAddress);
2073+
2074+ /* Subtract baseAddress to get a GPU address used for programming. */
2075+ phys -= baseAddress;
2076
2077 /* If part of region is belong to gcvPOOL_VIRTUAL,
2078 ** whole region has to be mapped. */
2079@@ -1734,6 +1741,11 @@ gckVIDMEM_Lock(
2080 gcmkONERROR(gckOS_AcquireMutex(os, Node->Virtual.mutex, gcvINFINITE));
2081 acquired = gcvTRUE;
2082
2083+#if gcdPAGED_MEMORY_CACHEABLE
2084+ /* Force video memory cacheable. */
2085+ Cacheable = gcvTRUE;
2086+#endif
2087+
2088 gcmkONERROR(
2089 gckOS_LockPages(os,
2090 Node->Virtual.physical,
2091diff --git a/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal.h b/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal.h
2092index 4406d7e..7312cc2 100644
2093--- a/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal.h
2094+++ b/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal.h
2095@@ -123,6 +123,12 @@ extern "C" {
2096
2097 #define gcvINVALID_ADDRESS ~0U
2098
2099+#define gcmGET_PRE_ROTATION(rotate) \
2100+ ((rotate) & (~(gcvSURF_POST_FLIP_X | gcvSURF_POST_FLIP_Y)))
2101+
2102+#define gcmGET_POST_ROTATION(rotate) \
2103+ ((rotate) & (gcvSURF_POST_FLIP_X | gcvSURF_POST_FLIP_Y))
2104+
2105 /******************************************************************************\
2106 ******************************** gcsOBJECT Object *******************************
2107 \******************************************************************************/
2108@@ -1124,6 +1130,60 @@ gckOS_UnmapUserMemory(
2109 IN gctUINT32 Address
2110 );
2111
2112+/******************************************************************************\
2113+************************** Android Native Fence Sync ***************************
2114+\******************************************************************************/
2115+gceSTATUS
2116+gckOS_CreateSyncTimeline(
2117+ IN gckOS Os,
2118+ OUT gctHANDLE * Timeline
2119+ );
2120+
2121+gceSTATUS
2122+gckOS_DestroySyncTimeline(
2123+ IN gckOS Os,
2124+ IN gctHANDLE Timeline
2125+ );
2126+
2127+gceSTATUS
2128+gckOS_CreateSyncPoint(
2129+ IN gckOS Os,
2130+ OUT gctSYNC_POINT * SyncPoint
2131+ );
2132+
2133+gceSTATUS
2134+gckOS_ReferenceSyncPoint(
2135+ IN gckOS Os,
2136+ IN gctSYNC_POINT SyncPoint
2137+ );
2138+
2139+gceSTATUS
2140+gckOS_DestroySyncPoint(
2141+ IN gckOS Os,
2142+ IN gctSYNC_POINT SyncPoint
2143+ );
2144+
2145+gceSTATUS
2146+gckOS_SignalSyncPoint(
2147+ IN gckOS Os,
2148+ IN gctSYNC_POINT SyncPoint
2149+ );
2150+
2151+gceSTATUS
2152+gckOS_QuerySyncPoint(
2153+ IN gckOS Os,
2154+ IN gctSYNC_POINT SyncPoint,
2155+ OUT gctBOOL_PTR State
2156+ );
2157+
2158+gceSTATUS
2159+gckOS_CreateNativeFence(
2160+ IN gckOS Os,
2161+ IN gctHANDLE Timeline,
2162+ IN gctSYNC_POINT SyncPoint,
2163+ OUT gctINT * FenceFD
2164+ );
2165+
2166 #if !USE_NEW_LINUX_SIGNAL
2167 /* Create signal to be used in the user space. */
2168 gceSTATUS
2169@@ -1758,7 +1818,7 @@ gckKERNEL_Recovery(
2170 void
2171 gckKERNEL_SetTimeOut(
2172 IN gckKERNEL Kernel,
2173- IN gctUINT32 timeOut
2174+ IN gctUINT32 timeOut
2175 );
2176
2177 /* Get access to the user data. */
2178@@ -2078,6 +2138,12 @@ gckHARDWARE_SetPowerManagement(
2179 IN gctBOOL PowerManagement
2180 );
2181
2182+gceSTATUS
2183+gckHARDWARE_SetGpuProfiler(
2184+ IN gckHARDWARE Hardware,
2185+ IN gctBOOL GpuProfiler
2186+ );
2187+
2188 #if gcdENABLE_FSCALE_VAL_ADJUST
2189 gceSTATUS
2190 gckHARDWARE_SetFscaleValue(
2191@@ -2554,6 +2620,22 @@ gckHARDWARE_QueryProfileRegisters(
2192 );
2193 #endif
2194
2195+#if VIVANTE_PROFILER_CONTEXT
2196+gceSTATUS
2197+gckHARDWARE_QueryContextProfile(
2198+ IN gckHARDWARE Hardware,
2199+ IN gctBOOL Clear,
2200+ IN gckCONTEXT Context,
2201+ OUT gcsPROFILER_COUNTERS * Counters
2202+ );
2203+
2204+gceSTATUS
2205+gckHARDWARE_UpdateContextProfile(
2206+ IN gckHARDWARE Hardware,
2207+ IN gckCONTEXT Context
2208+ );
2209+#endif
2210+
2211 gceSTATUS
2212 gckOS_SignalQueryHardware(
2213 IN gckOS Os,
2214diff --git a/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_base.h b/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_base.h
2215index 44689b0..9c17114 100644
2216--- a/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_base.h
2217+++ b/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_base.h
2218@@ -71,10 +71,17 @@ typedef struct _gcoFENCE * gcoFENCE;
2219 typedef struct _gcsSYNC_CONTEXT * gcsSYNC_CONTEXT_PTR;
2220 #endif
2221
2222+typedef struct _gcoOS_SymbolsList gcoOS_SymbolsList;
2223+
2224 /******************************************************************************\
2225 ******************************* Process local storage *************************
2226 \******************************************************************************/
2227 typedef struct _gcsPLS * gcsPLS_PTR;
2228+
2229+typedef void (* gctPLS_DESTRUCTOR) (
2230+ gcsPLS_PTR
2231+ );
2232+
2233 typedef struct _gcsPLS
2234 {
2235 /* Global objects. */
2236@@ -103,6 +110,12 @@ typedef struct _gcsPLS
2237
2238 /* PorcessID of the constrcutor process */
2239 gctUINT32 processID;
2240+#if gcdFORCE_GAL_LOAD_TWICE
2241+ /* ThreadID of the constrcutor process. */
2242+ gctSIZE_T threadID;
2243+ /* Flag for calling module destructor. */
2244+ gctBOOL exiting;
2245+#endif
2246
2247 /* Reference count for destructor. */
2248 gcsATOM_PTR reference;
2249@@ -111,6 +124,8 @@ typedef struct _gcsPLS
2250 gctBOOL bNeedSupportNP2Texture;
2251 #endif
2252
2253+ /* Destructor for eglDisplayInfo. */
2254+ gctPLS_DESTRUCTOR destructor;
2255 }
2256 gcsPLS;
2257
2258@@ -148,6 +163,11 @@ typedef struct _gcsTLS
2259 #endif
2260 gco2D engine2D;
2261 gctBOOL copied;
2262+
2263+#if gcdFORCE_GAL_LOAD_TWICE
2264+ /* libGAL.so handle */
2265+ gctHANDLE handle;
2266+#endif
2267 }
2268 gcsTLS;
2269
2270@@ -160,6 +180,7 @@ typedef enum _gcePLS_VALUE
2271 gcePLS_VALUE_EGL_DISPLAY_INFO,
2272 gcePLS_VALUE_EGL_SURFACE_INFO,
2273 gcePLS_VALUE_EGL_CONFIG_FORMAT_INFO,
2274+ gcePLS_VALUE_EGL_DESTRUCTOR_INFO,
2275 }
2276 gcePLS_VALUE;
2277
2278@@ -577,6 +598,12 @@ gcoHAL_Call(
2279 IN OUT gcsHAL_INTERFACE_PTR Interface
2280 );
2281
2282+gceSTATUS
2283+gcoHAL_GetPatchID(
2284+ IN gcoHAL Hal,
2285+ OUT gcePATCH_ID * PatchID
2286+ );
2287+
2288 /* Schedule an event. */
2289 gceSTATUS
2290 gcoHAL_ScheduleEvent(
2291@@ -637,6 +664,16 @@ gcoHAL_QuerySeparated3D2D(
2292 IN gcoHAL Hal
2293 );
2294
2295+gceSTATUS
2296+gcoHAL_QuerySpecialHint(
2297+ IN gceSPECIAL_HINT Hint
2298+ );
2299+
2300+gceSTATUS
2301+gcoHAL_SetSpecialHintData(
2302+ IN gcoHARDWARE Hardware
2303+ );
2304+
2305 /* Get pointer to gcoVG object. */
2306 gceSTATUS
2307 gcoHAL_GetVGEngine(
2308@@ -786,7 +823,6 @@ gcoOS_FreeVideoMemory(
2309 IN gctPOINTER Handle
2310 );
2311
2312-#if gcdENABLE_BANK_ALIGNMENT
2313 gceSTATUS
2314 gcoSURF_GetBankOffsetBytes(
2315 IN gcoSURF Surfce,
2316@@ -794,7 +830,6 @@ gcoSURF_GetBankOffsetBytes(
2317 IN gctUINT32 Stride,
2318 IN gctUINT32_PTR Bytes
2319 );
2320-#endif
2321
2322 /* Map user memory. */
2323 gceSTATUS
2324@@ -918,6 +953,21 @@ gcoOS_Flush(
2325 IN gctFILE File
2326 );
2327
2328+/* Close a file descriptor. */
2329+gceSTATUS
2330+gcoOS_CloseFD(
2331+ IN gcoOS Os,
2332+ IN gctINT FD
2333+ );
2334+
2335+/* Dup file descriptor to another. */
2336+gceSTATUS
2337+gcoOS_DupFD(
2338+ IN gcoOS Os,
2339+ IN gctINT FD,
2340+ OUT gctINT * FD2
2341+ );
2342+
2343 /* Create an endpoint for communication. */
2344 gceSTATUS
2345 gcoOS_Socket(
2346@@ -977,6 +1027,14 @@ gcoOS_GetEnv(
2347 OUT gctSTRING * Value
2348 );
2349
2350+/* Set environment variable value. */
2351+gceSTATUS
2352+gcoOS_SetEnv(
2353+ IN gcoOS Os,
2354+ IN gctCONST_STRING VarName,
2355+ IN gctSTRING Value
2356+ );
2357+
2358 /* Get current working directory. */
2359 gceSTATUS
2360 gcoOS_GetCwd(
2361@@ -1210,6 +1268,13 @@ gcoOS_DetectProcessByEncryptedName(
2362 IN gctCONST_STRING Name
2363 );
2364
2365+#if defined(ANDROID)
2366+gceSTATUS
2367+gcoOS_DetectProgrameByEncryptedSymbols(
2368+ IN gcoOS_SymbolsList Symbols
2369+ );
2370+#endif
2371+
2372 /*----------------------------------------------------------------------------*/
2373 /*----- Atoms ----------------------------------------------------------------*/
2374
2375@@ -1403,6 +1468,42 @@ gcoOS_UnmapSignal(
2376 IN gctSIGNAL Signal
2377 );
2378
2379+/*----------------------------------------------------------------------------*/
2380+/*----- Android Native Fence -------------------------------------------------*/
2381+
2382+/* Create sync point. */
2383+gceSTATUS
2384+gcoOS_CreateSyncPoint(
2385+ IN gcoOS Os,
2386+ OUT gctSYNC_POINT * SyncPoint
2387+ );
2388+
2389+/* Destroy sync point. */
2390+gceSTATUS
2391+gcoOS_DestroySyncPoint(
2392+ IN gcoOS Os,
2393+ IN gctSYNC_POINT SyncPoint
2394+ );
2395+
2396+/* Create native fence. */
2397+gceSTATUS
2398+gcoOS_CreateNativeFence(
2399+ IN gcoOS Os,
2400+ IN gctSYNC_POINT SyncPoint,
2401+ OUT gctINT * FenceFD
2402+ );
2403+
2404+/* Wait on native fence. */
2405+gceSTATUS
2406+gcoOS_WaitNativeFence(
2407+ IN gcoOS Os,
2408+ IN gctINT FenceFD,
2409+ IN gctUINT32 Timeout
2410+ );
2411+
2412+/*----------------------------------------------------------------------------*/
2413+/*----- Memory Access and Cache ----------------------------------------------*/
2414+
2415 /* Write a register. */
2416 gceSTATUS
2417 gcoOS_WriteRegister(
2418@@ -1507,7 +1608,7 @@ gcoOS_QueryProfileTickRate(
2419 # define gcmPROFILE_QUERY(start, ticks) do { } while (gcvFALSE)
2420 # define gcmPROFILE_ONLY(x) do { } while (gcvFALSE)
2421 # define gcmPROFILE_ELSE(x) x
2422-# define gcmPROFILE_DECLARE_ONLY(x) typedef x
2423+# define gcmPROFILE_DECLARE_ONLY(x) do { } while (gcvFALSE)
2424 # define gcmPROFILE_DECLARE_ELSE(x) x
2425 #endif
2426
2427@@ -1579,6 +1680,28 @@ typedef struct _gcsRECT
2428 }
2429 gcsRECT;
2430
2431+typedef union _gcsPIXEL
2432+{
2433+ struct
2434+ {
2435+ gctFLOAT r, g, b, a;
2436+ gctFLOAT d, s;
2437+ } pf;
2438+
2439+ struct
2440+ {
2441+ gctINT32 r, g, b, a;
2442+ gctINT32 d, s;
2443+ } pi;
2444+
2445+ struct
2446+ {
2447+ gctUINT32 r, g, b, a;
2448+ gctUINT32 d, s;
2449+ } pui;
2450+
2451+} gcsPIXEL;
2452+
2453
2454 /******************************************************************************\
2455 ********************************* gcoSURF Object ********************************
2456@@ -1795,6 +1918,18 @@ gcoSURF_SetRotation(
2457 );
2458
2459 gceSTATUS
2460+gcoSURF_SetPreRotation(
2461+ IN gcoSURF Surface,
2462+ IN gceSURF_ROTATION Rotation
2463+ );
2464+
2465+gceSTATUS
2466+gcoSURF_GetPreRotation(
2467+ IN gcoSURF Surface,
2468+ IN gceSURF_ROTATION *Rotation
2469+ );
2470+
2471+gceSTATUS
2472 gcoSURF_IsValid(
2473 IN gcoSURF Surface
2474 );
2475@@ -1824,6 +1959,15 @@ gcoSURF_DisableTileStatus(
2476 IN gcoSURF Surface,
2477 IN gctBOOL Decompress
2478 );
2479+
2480+gceSTATUS
2481+gcoSURF_AlignResolveRect(
2482+ IN gcoSURF Surf,
2483+ IN gcsPOINT_PTR RectOrigin,
2484+ IN gcsPOINT_PTR RectSize,
2485+ OUT gcsPOINT_PTR AlignedOrigin,
2486+ OUT gcsPOINT_PTR AlignedSize
2487+ );
2488 #endif /* VIVANTE_NO_3D */
2489
2490 /* Get surface size. */
2491@@ -1910,6 +2054,9 @@ gcoSURF_FillFromTile(
2492 IN gcoSURF Surface
2493 );
2494
2495+/* Check if surface needs a filler. */
2496+gceSTATUS gcoSURF_NeedFiller(IN gcoSURF Surface);
2497+
2498 /* Fill surface with a value. */
2499 gceSTATUS
2500 gcoSURF_Fill(
2501@@ -1949,6 +2096,19 @@ gcoSURF_SetBuffer(
2502 IN gctUINT32 Physical
2503 );
2504
2505+/* Set the underlying video buffer for the surface wrapper. */
2506+gceSTATUS
2507+gcoSURF_SetVideoBuffer(
2508+ IN gcoSURF Surface,
2509+ IN gceSURF_TYPE Type,
2510+ IN gceSURF_FORMAT Format,
2511+ IN gctUINT Width,
2512+ IN gctUINT Height,
2513+ IN gctUINT Stride,
2514+ IN gctPOINTER *LogicalPlane1,
2515+ IN gctUINT32 *PhysicalPlane1
2516+ );
2517+
2518 /* Set the size of the surface in pixels and map the underlying buffer. */
2519 gceSTATUS
2520 gcoSURF_SetWindow(
2521@@ -3705,6 +3865,12 @@ gcGetUserDebugOption(
2522 void
2523 );
2524
2525+struct _gcoOS_SymbolsList
2526+{
2527+ gcePATCH_ID patchId;
2528+ const char * symList[10];
2529+};
2530+
2531 #if gcdHAS_ELLIPSES
2532 #define gcmUSER_DEBUG_MSG(level, ...) \
2533 do \
2534diff --git a/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_compiler.h b/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_compiler.h
2535index 8693c37..062224c 100644
2536--- a/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_compiler.h
2537+++ b/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_compiler.h
2538@@ -39,12 +39,10 @@ extern "C" {
2539 #define GC_ENABLE_LOADTIME_OPT 1
2540 #endif
2541
2542-#define TEMP_OPT_CONSTANT_TEXLD_COORD 1
2543+#define TEMP_OPT_CONSTANT_TEXLD_COORD 0
2544
2545 #define TEMP_SHADER_PATCH 1
2546
2547-#define ADD_PRE_ROTATION_TO_VS 0
2548-
2549 #define TEMP_INLINE_ALL_EXPANSION 1
2550 /******************************* IR VERSION ******************/
2551 #define gcdSL_IR_VERSION gcmCC('\0','\0','\0','\1')
2552@@ -271,6 +269,7 @@ typedef enum _gcSL_OPCODE
2553 gcSL_ADDSAT, /* 0x5C */ /* Integer only. */
2554 gcSL_SUBSAT, /* 0x5D */ /* Integer only. */
2555 gcSL_MULSAT, /* 0x5E */ /* Integer only. */
2556+ gcSL_DP2, /* 0x5F */
2557 gcSL_MAXOPCODE
2558 }
2559 gcSL_OPCODE;
2560@@ -474,6 +473,9 @@ struct _gcsHINT
2561
2562 gctBOOL clipW;
2563
2564+ /* Flag whether or not the shader has a KILL instruction. */
2565+ gctBOOL hasKill;
2566+
2567 /* Element count. */
2568 gctUINT32 elementCount;
2569
2570@@ -495,12 +497,18 @@ struct _gcsHINT
2571 /* Balance maximum. */
2572 gctUINT32 balanceMax;
2573
2574+ /* Auto-shift balancing. */
2575+ gctBOOL autoShift;
2576+
2577 /* Flag whether the PS outputs the depth value or not. */
2578 gctBOOL psHasFragDepthOut;
2579
2580 /* Flag whether the ThreadWalker is in PS. */
2581 gctBOOL threadWalkerInPS;
2582
2583+ /* HW reg number for position of VS */
2584+ gctUINT32 hwRegNoOfSIVPos;
2585+
2586 #if gcdALPHA_KILL_IN_SHADER
2587 /* States to set when alpha kill is enabled. */
2588 gctUINT32 killStateAddress;
2589@@ -687,12 +695,12 @@ typedef enum _gceSHADER_FLAGS
2590 gcvSHADER_USE_ALPHA_KILL = 0x100,
2591 #endif
2592
2593-#if ADD_PRE_ROTATION_TO_VS
2594+#if gcdPRE_ROTATION && (ANDROID_SDK_VERSION >= 14)
2595 gcvSHADER_VS_PRE_ROTATION = 0x200,
2596 #endif
2597
2598 #if TEMP_INLINE_ALL_EXPANSION
2599- gcvSHADER_INLINE_ALL_EXPANSION = 0x200,
2600+ gcvSHADER_INLINE_ALL_EXPANSION = 0x400,
2601 #endif
2602 }
2603 gceSHADER_FLAGS;
2604@@ -827,6 +835,7 @@ typedef struct _gcOPTIMIZER_OPTION
2605 gctBOOL dumpOptimizerVerbose; /* dump result IR in each optimization phase */
2606 gctBOOL dumpBEGenertedCode; /* dump generated machine code */
2607 gctBOOL dumpBEVerbose; /* dump BE tree and optimization detail */
2608+ gctBOOL dumpBEFinalIR; /* dump BE final IR */
2609
2610 /* Code generation */
2611
2612@@ -945,6 +954,8 @@ extern gcOPTIMIZER_OPTION theOptimizerOption;
2613 gcmOPT_DUMP_CODEGEN_VERBOSE() )
2614 #define gcmOPT_DUMP_CODEGEN_VERBOSE() \
2615 (gcmGetOptimizerOption()->dumpBEVerbose != 0)
2616+#define gcmOPT_DUMP_FINAL_IR() \
2617+ (gcmGetOptimizerOption()->dumpBEFinalIR != 0)
2618
2619 #define gcmOPT_SET_DUMP_SHADER_SRC(v) \
2620 gcmGetOptimizerOption()->dumpShaderSource = (v)
2621@@ -1064,6 +1075,13 @@ typedef struct _gcNPOT_PATCH_PARAM
2622 gctINT texDimension; /* 2 or 3 */
2623 }gcNPOT_PATCH_PARAM, *gcNPOT_PATCH_PARAM_PTR;
2624
2625+typedef struct _gcZBIAS_PATCH_PARAM
2626+{
2627+ /* Driver uses this to program uniform that designating zbias */
2628+ gctINT uniformAddr;
2629+ gctINT channel;
2630+}gcZBIAS_PATCH_PARAM, *gcZBIAS_PATCH_PARAM_PTR;
2631+
2632 void
2633 gcGetOptionFromEnv(
2634 IN OUT gcOPTIMIZER_OPTION * Option
2635@@ -1556,6 +1574,43 @@ gcSHADER_AddUniform(
2636 OUT gcUNIFORM * Uniform
2637 );
2638
2639+/*******************************************************************************
2640+** gcSHADER_AddPreRotationUniform
2641+********************************************************************************
2642+**
2643+** Add an uniform to a gcSHADER object.
2644+**
2645+** INPUT:
2646+**
2647+** gcSHADER Shader
2648+** Pointer to a gcSHADER object.
2649+**
2650+** gctCONST_STRING Name
2651+** Name of the uniform to add.
2652+**
2653+** gcSHADER_TYPE Type
2654+** Type of the uniform to add.
2655+**
2656+** gctSIZE_T Length
2657+** Array length of the uniform to add. 'Length' must be at least 1.
2658+**
2659+** gctINT col
2660+** Which uniform.
2661+**
2662+** OUTPUT:
2663+**
2664+** gcUNIFORM * Uniform
2665+** Pointer to a variable receiving the gcUNIFORM object pointer.
2666+*/
2667+gceSTATUS
2668+gcSHADER_AddPreRotationUniform(
2669+ IN gcSHADER Shader,
2670+ IN gctCONST_STRING Name,
2671+ IN gcSHADER_TYPE Type,
2672+ IN gctSIZE_T Length,
2673+ IN gctINT col,
2674+ OUT gcUNIFORM * Uniform
2675+ );
2676
2677 /*******************************************************************************
2678 ** gcSHADER_AddUniformEx
2679@@ -1677,6 +1732,28 @@ gcSHADER_GetUniformCount(
2680 );
2681
2682 /*******************************************************************************
2683+** gcSHADER_GetPreRotationUniform
2684+********************************************************************************
2685+**
2686+** Get the preRotate Uniform.
2687+**
2688+** INPUT:
2689+**
2690+** gcSHADER Shader
2691+** Pointer to a gcSHADER object.
2692+**
2693+** OUTPUT:
2694+**
2695+** gcUNIFORM ** pUniform
2696+** Pointer to a preRotation uniforms array.
2697+*/
2698+gceSTATUS
2699+gcSHADER_GetPreRotationUniform(
2700+ IN gcSHADER Shader,
2701+ OUT gcUNIFORM ** pUniform
2702+ );
2703+
2704+/*******************************************************************************
2705 ** gcSHADER_GetUniform
2706 ********************************************************************************
2707 **
2708@@ -3438,6 +3515,34 @@ gcUNIFORM_SetValueF(
2709 );
2710
2711 /*******************************************************************************
2712+** gcUNIFORM_ProgramF
2713+**
2714+** Set the value of a uniform in floating point.
2715+**
2716+** INPUT:
2717+**
2718+** gctUINT32 Address
2719+** Address of Uniform.
2720+**
2721+** gctSIZE_T Row/Col
2722+**
2723+** const gctFLOAT * Value
2724+** Pointer to a buffer holding the floating point values for the
2725+** uniform.
2726+**
2727+** OUTPUT:
2728+**
2729+** Nothing.
2730+*/
2731+gceSTATUS
2732+gcUNIFORM_ProgramF(
2733+ IN gctUINT32 Address,
2734+ IN gctSIZE_T Row,
2735+ IN gctSIZE_T Col,
2736+ IN const gctFLOAT * Value
2737+ );
2738+
2739+/*******************************************************************************
2740 ** gcUNIFORM_GetModelViewProjMatrix
2741 ********************************************************************************
2742 **
2743@@ -3912,6 +4017,23 @@ gcRecompileShaders(
2744 IN gctUINT32 *SamplerWrapS,
2745 IN gctUINT32 *SamplerWrapT
2746 );
2747+
2748+gceSTATUS
2749+gcRecompileDepthBias(
2750+ IN gcoHAL Hal,
2751+ IN gcMACHINECODE_PTR pVsMachineCode,
2752+ /*Recompile variables*/
2753+ IN OUT gctPOINTER *ppRecompileStateBuffer,
2754+ IN OUT gctSIZE_T *pRecompileStateBufferSize,
2755+ IN OUT gcsHINT_PTR *ppRecompileHints,
2756+ /* natvie state*/
2757+ IN gctPOINTER pNativeStateBuffer,
2758+ IN gctSIZE_T nativeStateBufferSize,
2759+ IN gcsHINT_PTR pNativeHints,
2760+ OUT gctINT * uniformAddr,
2761+ OUT gctINT * uniformChannel
2762+ );
2763+
2764 /*******************************************************************************
2765 ** gcSaveProgram
2766 ********************************************************************************
2767@@ -4138,6 +4260,16 @@ gcSHADER_PatchNPOTForMachineCode(
2768 IN OUT gcsHINT_PTR pHints /* User needs copy original hints to this one, then passed this one in */
2769 );
2770
2771+gceSTATUS
2772+gcSHADER_PatchZBiasForMachineCodeVS(
2773+ IN gcMACHINECODE_PTR pMachineCode,
2774+ IN OUT gcZBIAS_PATCH_PARAM_PTR pPatchParam,
2775+ IN gctUINT hwSupportedInstCount,
2776+ OUT gctPOINTER* ppCmdBuffer,
2777+ OUT gctUINT32* pByteSizeOfCmdBuffer,
2778+ IN OUT gcsHINT_PTR pHints /* User needs copy original hints to this one, then passed this one in */
2779+ );
2780+
2781 #ifdef __cplusplus
2782 }
2783 #endif
2784diff --git a/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_driver.h b/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_driver.h
2785index b056c52..fc8c395 100644
2786--- a/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_driver.h
2787+++ b/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_driver.h
2788@@ -166,6 +166,12 @@ typedef enum _gceHAL_COMMAND_CODES
2789
2790 /* Reset time stamp. */
2791 gcvHAL_QUERY_RESET_TIME_STAMP,
2792+
2793+ /* Sync point operations. */
2794+ gcvHAL_SYNC_POINT,
2795+
2796+ /* Create native fence and return its fd. */
2797+ gcvHAL_CREATE_NATIVE_FENCE,
2798 }
2799 gceHAL_COMMAND_CODES;
2800
2801@@ -723,6 +729,10 @@ typedef struct _gcsHAL_INTERFACE
2802 /* gcvHAL_READ_ALL_PROFILE_REGISTERS */
2803 struct _gcsHAL_READ_ALL_PROFILE_REGISTERS
2804 {
2805+#if VIVANTE_PROFILER_CONTEXT
2806+ /* Context buffer object gckCONTEXT. Just a name. */
2807+ IN gctUINT32 context;
2808+#endif
2809 /* Data read. */
2810 OUT gcsPROFILER_COUNTERS counters;
2811 }
2812@@ -978,6 +988,33 @@ typedef struct _gcsHAL_INTERFACE
2813 OUT gctUINT64 timeStamp;
2814 }
2815 QueryResetTimeStamp;
2816+
2817+ struct _gcsHAL_SYNC_POINT
2818+ {
2819+ /* Command. */
2820+ gceSYNC_POINT_COMMAND_CODES command;
2821+
2822+ /* Sync point. */
2823+ IN OUT gctUINT64 syncPoint;
2824+
2825+ /* From where. */
2826+ IN gceKERNEL_WHERE fromWhere;
2827+
2828+ /* Signaled state. */
2829+ OUT gctBOOL state;
2830+ }
2831+ SyncPoint;
2832+
2833+ struct _gcsHAL_CREATE_NATIVE_FENCE
2834+ {
2835+ /* Signal id to dup. */
2836+ IN gctUINT64 syncPoint;
2837+
2838+ /* Native fence file descriptor. */
2839+ OUT gctINT fenceFD;
2840+
2841+ }
2842+ CreateNativeFence;
2843 }
2844 u;
2845 }
2846diff --git a/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_engine.h b/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_engine.h
2847index 8481375..3fb2fe4 100644
2848--- a/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_engine.h
2849+++ b/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_engine.h
2850@@ -323,6 +323,15 @@ gcoSURF_Resolve(
2851 IN gcoSURF DestSurface
2852 );
2853
2854+gceSTATUS
2855+gcoSURF_IsHWResolveable(
2856+ IN gcoSURF SrcSurface,
2857+ IN gcoSURF DestSurface,
2858+ IN gcsPOINT_PTR SrcOrigin,
2859+ IN gcsPOINT_PTR DestOrigin,
2860+ IN gcsPOINT_PTR RectSize
2861+ );
2862+
2863 /* Resolve rectangular area of a surface. */
2864 gceSTATUS
2865 gcoSURF_ResolveRect(
2866@@ -345,6 +354,11 @@ gcoSURF_IsRenderable(
2867 IN gcoSURF Surface
2868 );
2869
2870+gceSTATUS
2871+gcoSURF_IsFormatRenderableAsRT(
2872+ IN gcoSURF Surface
2873+ );
2874+
2875 #if gcdSYNC
2876 gceSTATUS
2877 gcoSURF_GetFence(
2878@@ -1006,6 +1020,7 @@ typedef struct _gcsALPHA_INFO
2879 gctBOOL test;
2880 gceCOMPARE compare;
2881 gctUINT8 reference;
2882+ gctFLOAT floatReference;
2883
2884 /* Alpha blending states. */
2885 gctBOOL blend;
2886@@ -1040,7 +1055,8 @@ gco3D_SetAlphaCompare(
2887 gceSTATUS
2888 gco3D_SetAlphaReference(
2889 IN gco3D Engine,
2890- IN gctUINT8 Reference
2891+ IN gctUINT8 Reference,
2892+ IN gctFLOAT FloatReference
2893 );
2894
2895 /* Set alpha test reference in fixed point. */
2896@@ -1504,6 +1520,19 @@ gcoTEXTURE_UploadSub(
2897 IN gceSURF_FORMAT Format
2898 );
2899
2900+/* Upload YUV data to an gcoTEXTURE object. */
2901+gceSTATUS
2902+gcoTEXTURE_UploadYUV(
2903+ IN gcoTEXTURE Texture,
2904+ IN gceTEXTURE_FACE Face,
2905+ IN gctUINT Width,
2906+ IN gctUINT Height,
2907+ IN gctUINT Slice,
2908+ IN gctPOINTER Memory[3],
2909+ IN gctINT Stride[3],
2910+ IN gceSURF_FORMAT Format
2911+ );
2912+
2913 /* Upload compressed data to an gcoTEXTURE object. */
2914 gceSTATUS
2915 gcoTEXTURE_UploadCompressed(
2916@@ -1621,6 +1650,13 @@ gcoTEXTURE_QueryCaps(
2917 );
2918
2919 gceSTATUS
2920+gcoTEXTURE_GetTiling(
2921+ IN gcoTEXTURE Texture,
2922+ IN gctINT preferLevel,
2923+ OUT gceTILING * Tiling
2924+ );
2925+
2926+gceSTATUS
2927 gcoTEXTURE_GetClosestFormat(
2928 IN gcoHAL Hal,
2929 IN gceSURF_FORMAT InFormat,
2930@@ -2001,6 +2037,14 @@ gcoHAL_SetSharedInfo(
2931 IN gctSIZE_T Bytes
2932 );
2933
2934+#if VIVANTE_PROFILER_CONTEXT
2935+gceSTATUS
2936+gcoHARDWARE_GetContext(
2937+ IN gcoHARDWARE Hardware,
2938+ OUT gctUINT32 * Context
2939+ );
2940+#endif
2941+
2942 #ifdef __cplusplus
2943 }
2944 #endif
2945diff --git a/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_enum.h b/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_enum.h
2946index a1d9ae5..8e3c2f8 100644
2947--- a/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_enum.h
2948+++ b/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_enum.h
2949@@ -146,10 +146,26 @@ typedef enum _gceFEATURE
2950 gcvFEATURE_FRUSTUM_CLIP_FIX,
2951 gcvFEATURE_TEXTURE_LINEAR,
2952 gcvFEATURE_TEXTURE_YUV_ASSEMBLER,
2953+ gcvFEATURE_SHADER_HAS_INSTRUCTION_CACHE,
2954 gcvFEATURE_DYNAMIC_FREQUENCY_SCALING,
2955 gcvFEATURE_BUGFIX15,
2956+ gcvFEATURE_2D_GAMMA,
2957+ gcvFEATURE_2D_COLOR_SPACE_CONVERSION,
2958+ gcvFEATURE_2D_SUPER_TILE_VERSION,
2959 gcvFEATURE_2D_MIRROR_EXTENSION,
2960+ gcvFEATURE_2D_SUPER_TILE_V1,
2961+ gcvFEATURE_2D_SUPER_TILE_V2,
2962+ gcvFEATURE_2D_SUPER_TILE_V3,
2963+ gcvFEATURE_2D_MULTI_SOURCE_BLT_EX2,
2964 gcvFEATURE_ELEMENT_INDEX_UINT,
2965+ gcvFEATURE_2D_COMPRESSION,
2966+ gcvFEATURE_2D_OPF_YUV_OUTPUT,
2967+ gcvFEATURE_2D_MULTI_SRC_BLT_TO_UNIFIED_DST_RECT,
2968+ gcvFEATURE_2D_YUV_MODE,
2969+ gcvFEATURE_DECOMPRESS_Z16,
2970+ gcvFEATURE_LINEAR_RENDER_TARGET,
2971+ gcvFEATURE_BUG_FIXES8,
2972+ gcvFEATURE_HALTI2,
2973 }
2974 gceFEATURE;
2975
2976@@ -203,11 +219,14 @@ typedef enum _gceSURF_TYPE
2977 gcvSURF_NO_VIDMEM = 0x200, /* Used to allocate surfaces with no underlying vidmem node.
2978 In Android, vidmem node is allocated by another process. */
2979 gcvSURF_CACHEABLE = 0x400, /* Used to allocate a cacheable surface */
2980-#if gcdANDROID_UNALIGNED_LINEAR_COMPOSITION_ADJUST
2981 gcvSURF_FLIP = 0x800, /* The Resolve Target the will been flip resolve from RT */
2982-#endif
2983 gcvSURF_TILE_STATUS_DIRTY = 0x1000, /* Init tile status to all dirty */
2984
2985+ gcvSURF_LINEAR = 0x2000,
2986+
2987+ gcvSURF_TEXTURE_LINEAR = gcvSURF_TEXTURE
2988+ | gcvSURF_LINEAR,
2989+
2990 gcvSURF_RENDER_TARGET_NO_TILE_STATUS = gcvSURF_RENDER_TARGET
2991 | gcvSURF_NO_TILE_STATUS,
2992
2993@@ -217,6 +236,9 @@ typedef enum _gceSURF_TYPE
2994 gcvSURF_DEPTH_NO_TILE_STATUS = gcvSURF_DEPTH
2995 | gcvSURF_NO_TILE_STATUS,
2996
2997+ gcvSURF_DEPTH_TS_DIRTY = gcvSURF_DEPTH
2998+ | gcvSURF_TILE_STATUS_DIRTY,
2999+
3000 /* Supported surface types with no vidmem node. */
3001 gcvSURF_BITMAP_NO_VIDMEM = gcvSURF_BITMAP
3002 | gcvSURF_NO_VIDMEM,
3003@@ -231,10 +253,8 @@ typedef enum _gceSURF_TYPE
3004 gcvSURF_CACHEABLE_BITMAP = gcvSURF_BITMAP
3005 | gcvSURF_CACHEABLE,
3006
3007-#if gcdANDROID_UNALIGNED_LINEAR_COMPOSITION_ADJUST
3008 gcvSURF_FLIP_BITMAP = gcvSURF_BITMAP
3009 | gcvSURF_FLIP,
3010-#endif
3011 }
3012 gceSURF_TYPE;
3013
3014@@ -263,6 +283,9 @@ typedef enum _gceSURF_ROTATION
3015 gcvSURF_270_DEGREE,
3016 gcvSURF_FLIP_X,
3017 gcvSURF_FLIP_Y,
3018+
3019+ gcvSURF_POST_FLIP_X = 0x40000000,
3020+ gcvSURF_POST_FLIP_Y = 0x80000000,
3021 }
3022 gceSURF_ROTATION;
3023
3024@@ -622,21 +645,16 @@ gce2D_PORTER_DUFF_RULE;
3025 typedef enum _gce2D_YUV_COLOR_MODE
3026 {
3027 gcv2D_YUV_601= 0,
3028- gcv2D_YUV_709
3029-}
3030-gce2D_YUV_COLOR_MODE;
3031+ gcv2D_YUV_709,
3032+ gcv2D_YUV_USER_DEFINED,
3033+ gcv2D_YUV_USER_DEFINED_CLAMP,
3034
3035-/* 2D Rotation and flipping. */
3036-typedef enum _gce2D_ORIENTATION
3037-{
3038- gcv2D_0_DEGREE = 0,
3039- gcv2D_90_DEGREE,
3040- gcv2D_180_DEGREE,
3041- gcv2D_270_DEGREE,
3042- gcv2D_X_FLIP,
3043- gcv2D_Y_FLIP
3044+ /* Default setting is for src. gcv2D_YUV_DST
3045+ can be ORed to set dst.
3046+ */
3047+ gcv2D_YUV_DST = 0x80000000,
3048 }
3049-gce2D_ORIENTATION;
3050+gce2D_YUV_COLOR_MODE;
3051
3052 typedef enum _gce2D_COMMAND
3053 {
3054@@ -656,21 +674,39 @@ typedef enum _gce2D_TILE_STATUS_CONFIG
3055 gcv2D_TSC_ENABLE = 0x00000001,
3056 gcv2D_TSC_COMPRESSED = 0x00000002,
3057 gcv2D_TSC_DOWN_SAMPLER = 0x00000004,
3058+ gcv2D_TSC_2D_COMPRESSED = 0x00000008,
3059 }
3060 gce2D_TILE_STATUS_CONFIG;
3061
3062 typedef enum _gce2D_QUERY
3063 {
3064- gcv2D_QUERY_RGB_ADDRESS_MAX_ALIGN = 0,
3065- gcv2D_QUERY_RGB_STRIDE_MAX_ALIGN,
3066- gcv2D_QUERY_YUV_ADDRESS_MAX_ALIGN,
3067- gcv2D_QUERY_YUV_STRIDE_MAX_ALIGN,
3068+ gcv2D_QUERY_RGB_ADDRESS_MIN_ALIGN = 0,
3069+ gcv2D_QUERY_RGB_STRIDE_MIN_ALIGN,
3070+ gcv2D_QUERY_YUV_ADDRESS_MIN_ALIGN,
3071+ gcv2D_QUERY_YUV_STRIDE_MIN_ALIGN,
3072 }
3073 gce2D_QUERY;
3074
3075+typedef enum _gce2D_SUPER_TILE_VERSION
3076+{
3077+ gcv2D_SUPER_TILE_VERSION_V1 = 1,
3078+ gcv2D_SUPER_TILE_VERSION_V2 = 2,
3079+ gcv2D_SUPER_TILE_VERSION_V3 = 3,
3080+}
3081+gce2D_SUPER_TILE_VERSION;
3082+
3083 typedef enum _gce2D_STATE
3084 {
3085 gcv2D_STATE_SPECIAL_FILTER_MIRROR_MODE = 1,
3086+ gcv2D_STATE_SUPER_TILE_VERSION,
3087+ gcv2D_STATE_EN_GAMMA,
3088+ gcv2D_STATE_DE_GAMMA,
3089+ gcv2D_STATE_MULTI_SRC_BLIT_UNIFIED_DST_RECT,
3090+
3091+ gcv2D_STATE_ARRAY_EN_GAMMA = 0x10001,
3092+ gcv2D_STATE_ARRAY_DE_GAMMA,
3093+ gcv2D_STATE_ARRAY_CSC_YUV_TO_RGB,
3094+ gcv2D_STATE_ARRAY_CSC_RGB_TO_YUV,
3095 }
3096 gce2D_STATE;
3097
3098@@ -809,6 +845,15 @@ typedef enum _gceUSER_SIGNAL_COMMAND_CODES
3099 }
3100 gceUSER_SIGNAL_COMMAND_CODES;
3101
3102+/* Sync point command codes. */
3103+typedef enum _gceSYNC_POINT_COMMAND_CODES
3104+{
3105+ gcvSYNC_POINT_CREATE,
3106+ gcvSYNC_POINT_DESTROY,
3107+ gcvSYNC_POINT_SIGNAL,
3108+}
3109+gceSYNC_POINT_COMMAND_CODES;
3110+
3111 /* Event locations. */
3112 typedef enum _gceKERNEL_WHERE
3113 {
3114@@ -848,6 +893,44 @@ typedef enum _gceDEBUG_MESSAGE_TYPE
3115 }
3116 gceDEBUG_MESSAGE_TYPE;
3117
3118+typedef enum _gceSPECIAL_HINT
3119+{
3120+ gceSPECIAL_HINT0,
3121+ gceSPECIAL_HINT1,
3122+ gceSPECIAL_HINT2,
3123+ gceSPECIAL_HINT3,
3124+ /* For disable dynamic stream/index */
3125+ gceSPECIAL_HINT4
3126+}
3127+gceSPECIAL_HINT;
3128+
3129+typedef enum _gceMACHINECODE
3130+{
3131+ gcvMACHINECODE_HOVERJET0 = 0x0,
3132+ gcvMACHINECODE_HOVERJET1 ,
3133+
3134+ gcvMACHINECODE_TAIJI0 ,
3135+ gcvMACHINECODE_TAIJI1 ,
3136+ gcvMACHINECODE_TAIJI2 ,
3137+
3138+ gcvMACHINECODE_ANTUTU0 ,
3139+
3140+ gcvMACHINECODE_GLB27_RELEASE_0,
3141+ gcvMACHINECODE_GLB27_RELEASE_1,
3142+
3143+ gcvMACHINECODE_WAVESCAPE0 ,
3144+ gcvMACHINECODE_WAVESCAPE1 ,
3145+
3146+ gcvMACHINECODE_NENAMARKV2_4_0 ,
3147+ gcvMACHINECODE_NENAMARKV2_4_1 ,
3148+
3149+ gcvMACHINECODE_GLB25_RELEASE_0,
3150+ gcvMACHINECODE_GLB25_RELEASE_1,
3151+ gcvMACHINECODE_GLB25_RELEASE_2,
3152+}
3153+gceMACHINECODE;
3154+
3155+
3156 /******************************************************************************\
3157 ****************************** Object Declarations *****************************
3158 \******************************************************************************/
3159diff --git a/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_options.h b/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_options.h
3160index 9e2a8db..b53b618 100644
3161--- a/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_options.h
3162+++ b/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_options.h
3163@@ -46,7 +46,7 @@
3164 This define enables the profiler.
3165 */
3166 #ifndef VIVANTE_PROFILER
3167-# define VIVANTE_PROFILER 0
3168+# define VIVANTE_PROFILER 1
3169 #endif
3170
3171 #ifndef VIVANTE_PROFILER_PERDRAW
3172@@ -54,6 +54,15 @@
3173 #endif
3174
3175 /*
3176+ VIVANTE_PROFILER_CONTEXT
3177+
3178+ This define enables the profiler according to each hw context.
3179+*/
3180+#ifndef VIVANTE_PROFILER_CONTEXT
3181+# define VIVANTE_PROFILER_CONTEXT 1
3182+#endif
3183+
3184+/*
3185 gcdUSE_VG
3186
3187 Enable VG HAL layer (only for GC350).
3188@@ -729,7 +738,24 @@
3189 Use linear buffer for GPU apps so HWC can do 2D composition.
3190 */
3191 #ifndef gcdGPU_LINEAR_BUFFER_ENABLED
3192-# define gcdGPU_LINEAR_BUFFER_ENABLED 0
3193+# define gcdGPU_LINEAR_BUFFER_ENABLED 1
3194+#endif
3195+
3196+/*
3197+ gcdENABLE_RENDER_INTO_WINDOW
3198+
3199+ Enable Render-Into-Window (ie, No-Resolve) feature on android.
3200+ NOTE that even if enabled, it still depends on hardware feature and
3201+ android application behavior. When hardware feature or application
3202+ behavior can not support render into window mode, it will fail back
3203+ to normal mode.
3204+ When Render-Into-Window is finally used, window back buffer of android
3205+ applications will be allocated matching render target tiling format.
3206+ Otherwise buffer tiling is decided by the above option
3207+ 'gcdGPU_LINEAR_BUFFER_ENABLED'.
3208+*/
3209+#ifndef gcdENABLE_RENDER_INTO_WINDOW
3210+# define gcdENABLE_RENDER_INTO_WINDOW 1
3211 #endif
3212
3213 /*
3214@@ -758,7 +784,11 @@
3215 #endif
3216
3217 #ifndef gcdANDROID_UNALIGNED_LINEAR_COMPOSITION_ADJUST
3218-# define gcdANDROID_UNALIGNED_LINEAR_COMPOSITION_ADJUST 0
3219+# ifdef ANDROID
3220+# define gcdANDROID_UNALIGNED_LINEAR_COMPOSITION_ADJUST 1
3221+# else
3222+# define gcdANDROID_UNALIGNED_LINEAR_COMPOSITION_ADJUST 0
3223+# endif
3224 #endif
3225
3226 #ifndef gcdENABLE_PE_DITHER_FIX
3227@@ -800,6 +830,10 @@
3228 # define gcdDISALBE_EARLY_EARLY_Z 1
3229 #endif
3230
3231+#ifndef gcdSHADER_SRC_BY_MACHINECODE
3232+# define gcdSHADER_SRC_BY_MACHINECODE 1
3233+#endif
3234+
3235 /*
3236 gcdLINK_QUEUE_SIZE
3237
3238@@ -849,11 +883,20 @@
3239 #define gcdUSE_NPOT_PATCH 1
3240 #endif
3241
3242-
3243 #ifndef gcdSYNC
3244 # define gcdSYNC 1
3245 #endif
3246
3247+#ifndef gcdENABLE_SPECIAL_HINT3
3248+# define gcdENABLE_SPECIAL_HINT3 1
3249+#endif
3250+
3251+#if defined(ANDROID)
3252+#ifndef gcdPRE_ROTATION
3253+# define gcdPRE_ROTATION 1
3254+#endif
3255+#endif
3256+
3257 /*
3258 gcdDVFS
3259
3260@@ -866,4 +909,39 @@
3261 # define gcdDVFS_POLLING_TIME (gcdDVFS_ANAYLSE_WINDOW * 4)
3262 #endif
3263
3264+/*
3265+ gcdANDROID_NATIVE_FENCE_SYNC
3266+
3267+ Enable android native fence sync. It is introduced since jellybean-4.2.
3268+ Depends on linux kernel option: CONFIG_SYNC.
3269+
3270+ 0: Disabled
3271+ 1: Build framework for native fence sync feature, and EGL extension
3272+ 2: Enable async swap buffers for client
3273+ * Native fence sync for client 'queueBuffer' in EGL, which is
3274+ 'acquireFenceFd' for layer in compositor side.
3275+ 3. Enable async hwcomposer composition.
3276+ * 'releaseFenceFd' for layer in compositor side, which is native
3277+ fence sync when client 'dequeueBuffer'
3278+ * Native fence sync for compositor 'queueBuffer' in EGL, which is
3279+ 'acquireFenceFd' for framebuffer target for DC
3280+ */
3281+#ifndef gcdANDROID_NATIVE_FENCE_SYNC
3282+# define gcdANDROID_NATIVE_FENCE_SYNC 0
3283+#endif
3284+
3285+#ifndef gcdFORCE_MIPMAP
3286+# define gcdFORCE_MIPMAP 0
3287+#endif
3288+
3289+/*
3290+ gcdFORCE_GAL_LOAD_TWICE
3291+
3292+ When non-zero, each thread except the main one will load libGAL.so twice to avoid potential segmetantion fault when app using dlopen/dlclose.
3293+ If threads exit arbitrarily, libGAL.so may not unload until the process quit.
3294+ */
3295+#ifndef gcdFORCE_GAL_LOAD_TWICE
3296+# define gcdFORCE_GAL_LOAD_TWICE 0
3297+#endif
3298+
3299 #endif /* __gc_hal_options_h_ */
3300diff --git a/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_profiler.h b/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_profiler.h
3301index 3e450ba..aed73aa 100644
3302--- a/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_profiler.h
3303+++ b/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_profiler.h
3304@@ -45,509 +45,115 @@ extern "C" {
3305 #define gcdNEW_PROFILER_FILE 1
3306 #endif
3307
3308-/* OpenGL ES11 API IDs. */
3309-#define ES11_ACTIVETEXTURE 1
3310-#define ES11_ALPHAFUNC (ES11_ACTIVETEXTURE + 1)
3311-#define ES11_ALPHAFUNCX (ES11_ALPHAFUNC + 1)
3312-#define ES11_BINDBUFFER (ES11_ALPHAFUNCX + 1)
3313-#define ES11_BINDTEXTURE (ES11_BINDBUFFER + 1)
3314-#define ES11_BLENDFUNC (ES11_BINDTEXTURE + 1)
3315-#define ES11_BUFFERDATA (ES11_BLENDFUNC + 1)
3316-#define ES11_BUFFERSUBDATA (ES11_BUFFERDATA + 1)
3317-#define ES11_CLEAR (ES11_BUFFERSUBDATA + 1)
3318-#define ES11_CLEARCOLOR (ES11_CLEAR + 1)
3319-#define ES11_CLEARCOLORX (ES11_CLEARCOLOR + 1)
3320-#define ES11_CLEARDEPTHF (ES11_CLEARCOLORX + 1)
3321-#define ES11_CLEARDEPTHX (ES11_CLEARDEPTHF + 1)
3322-#define ES11_CLEARSTENCIL (ES11_CLEARDEPTHX + 1)
3323-#define ES11_CLIENTACTIVETEXTURE (ES11_CLEARSTENCIL + 1)
3324-#define ES11_CLIPPLANEF (ES11_CLIENTACTIVETEXTURE + 1)
3325-#define ES11_CLIPPLANEX (ES11_CLIPPLANEF + 1)
3326-#define ES11_COLOR4F (ES11_CLIPPLANEX + 1)
3327-#define ES11_COLOR4UB (ES11_COLOR4F + 1)
3328-#define ES11_COLOR4X (ES11_COLOR4UB + 1)
3329-#define ES11_COLORMASK (ES11_COLOR4X + 1)
3330-#define ES11_COLORPOINTER (ES11_COLORMASK + 1)
3331-#define ES11_COMPRESSEDTEXIMAGE2D (ES11_COLORPOINTER + 1)
3332-#define ES11_COMPRESSEDTEXSUBIMAGE2D (ES11_COMPRESSEDTEXIMAGE2D + 1)
3333-#define ES11_COPYTEXIMAGE2D (ES11_COMPRESSEDTEXSUBIMAGE2D + 1)
3334-#define ES11_COPYTEXSUBIMAGE2D (ES11_COPYTEXIMAGE2D + 1)
3335-#define ES11_CULLFACE (ES11_COPYTEXSUBIMAGE2D + 1)
3336-#define ES11_DELETEBUFFERS (ES11_CULLFACE + 1)
3337-#define ES11_DELETETEXTURES (ES11_DELETEBUFFERS + 1)
3338-#define ES11_DEPTHFUNC (ES11_DELETETEXTURES + 1)
3339-#define ES11_DEPTHMASK (ES11_DEPTHFUNC + 1)
3340-#define ES11_DEPTHRANGEF (ES11_DEPTHMASK + 1)
3341-#define ES11_DEPTHRANGEX (ES11_DEPTHRANGEF + 1)
3342-#define ES11_DISABLE (ES11_DEPTHRANGEX + 1)
3343-#define ES11_DISABLECLIENTSTATE (ES11_DISABLE + 1)
3344-#define ES11_DRAWARRAYS (ES11_DISABLECLIENTSTATE + 1)
3345-#define ES11_DRAWELEMENTS (ES11_DRAWARRAYS + 1)
3346-#define ES11_ENABLE (ES11_DRAWELEMENTS + 1)
3347-#define ES11_ENABLECLIENTSTATE (ES11_ENABLE + 1)
3348-#define ES11_FINISH (ES11_ENABLECLIENTSTATE + 1)
3349-#define ES11_FLUSH (ES11_FINISH + 1)
3350-#define ES11_FOGF (ES11_FLUSH + 1)
3351-#define ES11_FOGFV (ES11_FOGF + 1)
3352-#define ES11_FOGX (ES11_FOGFV + 1)
3353-#define ES11_FOGXV (ES11_FOGX + 1)
3354-#define ES11_FRONTFACE (ES11_FOGXV + 1)
3355-#define ES11_FRUSTUMF (ES11_FRONTFACE + 1)
3356-#define ES11_FRUSTUMX (ES11_FRUSTUMF + 1)
3357-#define ES11_GENBUFFERS (ES11_FRUSTUMX + 1)
3358-#define ES11_GENTEXTURES (ES11_GENBUFFERS + 1)
3359-#define ES11_GETBOOLEANV (ES11_GENTEXTURES + 1)
3360-#define ES11_GETBUFFERPARAMETERIV (ES11_GETBOOLEANV + 1)
3361-#define ES11_GETCLIPPLANEF (ES11_GETBUFFERPARAMETERIV + 1)
3362-#define ES11_GETCLIPPLANEX (ES11_GETCLIPPLANEF + 1)
3363-#define ES11_GETERROR (ES11_GETCLIPPLANEX + 1)
3364-#define ES11_GETFIXEDV (ES11_GETERROR + 1)
3365-#define ES11_GETFLOATV (ES11_GETFIXEDV + 1)
3366-#define ES11_GETINTEGERV (ES11_GETFLOATV + 1)
3367-#define ES11_GETLIGHTFV (ES11_GETINTEGERV + 1)
3368-#define ES11_GETLIGHTXV (ES11_GETLIGHTFV + 1)
3369-#define ES11_GETMATERIALFV (ES11_GETLIGHTXV + 1)
3370-#define ES11_GETMATERIALXV (ES11_GETMATERIALFV + 1)
3371-#define ES11_GETPOINTERV (ES11_GETMATERIALXV + 1)
3372-#define ES11_GETSTRING (ES11_GETPOINTERV + 1)
3373-#define ES11_GETTEXENVFV (ES11_GETSTRING + 1)
3374-#define ES11_GETTEXENVIV (ES11_GETTEXENVFV + 1)
3375-#define ES11_GETTEXENVXV (ES11_GETTEXENVIV + 1)
3376-#define ES11_GETTEXPARAMETERFV (ES11_GETTEXENVXV + 1)
3377-#define ES11_GETTEXPARAMETERIV (ES11_GETTEXPARAMETERFV + 1)
3378-#define ES11_GETTEXPARAMETERXV (ES11_GETTEXPARAMETERIV + 1)
3379-#define ES11_HINT (ES11_GETTEXPARAMETERXV + 1)
3380-#define ES11_ISBUFFER (ES11_HINT + 1)
3381-#define ES11_ISENABLED (ES11_ISBUFFER + 1)
3382-#define ES11_ISTEXTURE (ES11_ISENABLED + 1)
3383-#define ES11_LIGHTF (ES11_ISTEXTURE + 1)
3384-#define ES11_LIGHTFV (ES11_LIGHTF + 1)
3385-#define ES11_LIGHTMODELF (ES11_LIGHTFV + 1)
3386-#define ES11_LIGHTMODELFV (ES11_LIGHTMODELF + 1)
3387-#define ES11_LIGHTMODELX (ES11_LIGHTMODELFV + 1)
3388-#define ES11_LIGHTMODELXV (ES11_LIGHTMODELX + 1)
3389-#define ES11_LIGHTX (ES11_LIGHTMODELXV + 1)
3390-#define ES11_LIGHTXV (ES11_LIGHTX + 1)
3391-#define ES11_LINEWIDTH (ES11_LIGHTXV + 1)
3392-#define ES11_LINEWIDTHX (ES11_LINEWIDTH + 1)
3393-#define ES11_LOADIDENTITY (ES11_LINEWIDTHX + 1)
3394-#define ES11_LOADMATRIXF (ES11_LOADIDENTITY + 1)
3395-#define ES11_LOADMATRIXX (ES11_LOADMATRIXF + 1)
3396-#define ES11_LOGICOP (ES11_LOADMATRIXX + 1)
3397-#define ES11_MATERIALF (ES11_LOGICOP + 1)
3398-#define ES11_MATERIALFV (ES11_MATERIALF + 1)
3399-#define ES11_MATERIALX (ES11_MATERIALFV + 1)
3400-#define ES11_MATERIALXV (ES11_MATERIALX + 1)
3401-#define ES11_MATRIXMODE (ES11_MATERIALXV + 1)
3402-#define ES11_MULTITEXCOORD4F (ES11_MATRIXMODE + 1)
3403-#define ES11_MULTITEXCOORD4X (ES11_MULTITEXCOORD4F + 1)
3404-#define ES11_MULTMATRIXF (ES11_MULTITEXCOORD4X + 1)
3405-#define ES11_MULTMATRIXX (ES11_MULTMATRIXF + 1)
3406-#define ES11_NORMAL3F (ES11_MULTMATRIXX + 1)
3407-#define ES11_NORMAL3X (ES11_NORMAL3F + 1)
3408-#define ES11_NORMALPOINTER (ES11_NORMAL3X + 1)
3409-#define ES11_ORTHOF (ES11_NORMALPOINTER + 1)
3410-#define ES11_ORTHOX (ES11_ORTHOF + 1)
3411-#define ES11_PIXELSTOREI (ES11_ORTHOX + 1)
3412-#define ES11_POINTPARAMETERF (ES11_PIXELSTOREI + 1)
3413-#define ES11_POINTPARAMETERFV (ES11_POINTPARAMETERF + 1)
3414-#define ES11_POINTPARAMETERX (ES11_POINTPARAMETERFV + 1)
3415-#define ES11_POINTPARAMETERXV (ES11_POINTPARAMETERX + 1)
3416-#define ES11_POINTSIZE (ES11_POINTPARAMETERXV + 1)
3417-#define ES11_POINTSIZEX (ES11_POINTSIZE + 1)
3418-#define ES11_POLYGONOFFSET (ES11_POINTSIZEX + 1)
3419-#define ES11_POLYGONOFFSETX (ES11_POLYGONOFFSET + 1)
3420-#define ES11_POPMATRIX (ES11_POLYGONOFFSETX + 1)
3421-#define ES11_PUSHMATRIX (ES11_POPMATRIX + 1)
3422-#define ES11_READPIXELS (ES11_PUSHMATRIX + 1)
3423-#define ES11_ROTATEF (ES11_READPIXELS + 1)
3424-#define ES11_ROTATEX (ES11_ROTATEF + 1)
3425-#define ES11_SAMPLECOVERAGE (ES11_ROTATEX + 1)
3426-#define ES11_SAMPLECOVERAGEX (ES11_SAMPLECOVERAGE + 1)
3427-#define ES11_SCALEF (ES11_SAMPLECOVERAGEX + 1)
3428-#define ES11_SCALEX (ES11_SCALEF + 1)
3429-#define ES11_SCISSOR (ES11_SCALEX + 1)
3430-#define ES11_SHADEMODEL (ES11_SCISSOR + 1)
3431-#define ES11_STENCILFUNC (ES11_SHADEMODEL + 1)
3432-#define ES11_STENCILMASK (ES11_STENCILFUNC + 1)
3433-#define ES11_STENCILOP (ES11_STENCILMASK + 1)
3434-#define ES11_TEXCOORDPOINTER (ES11_STENCILOP + 1)
3435-#define ES11_TEXENVF (ES11_TEXCOORDPOINTER + 1)
3436-#define ES11_TEXENVFV (ES11_TEXENVF + 1)
3437-#define ES11_TEXENVI (ES11_TEXENVFV + 1)
3438-#define ES11_TEXENVIV (ES11_TEXENVI + 1)
3439-#define ES11_TEXENVX (ES11_TEXENVIV + 1)
3440-#define ES11_TEXENVXV (ES11_TEXENVX + 1)
3441-#define ES11_TEXIMAGE2D (ES11_TEXENVXV + 1)
3442-#define ES11_TEXPARAMETERF (ES11_TEXIMAGE2D + 1)
3443-#define ES11_TEXPARAMETERFV (ES11_TEXPARAMETERF + 1)
3444-#define ES11_TEXPARAMETERI (ES11_TEXPARAMETERFV + 1)
3445-#define ES11_TEXPARAMETERIV (ES11_TEXPARAMETERI + 1)
3446-#define ES11_TEXPARAMETERX (ES11_TEXPARAMETERIV + 1)
3447-#define ES11_TEXPARAMETERXV (ES11_TEXPARAMETERX + 1)
3448-#define ES11_TEXSUBIMAGE2D (ES11_TEXPARAMETERXV + 1)
3449-#define ES11_TRANSLATEF (ES11_TEXSUBIMAGE2D + 1)
3450-#define ES11_TRANSLATEX (ES11_TRANSLATEF + 1)
3451-#define ES11_VERTEXPOINTER (ES11_TRANSLATEX + 1)
3452-#define ES11_VIEWPORT (ES11_VERTEXPOINTER + 1)
3453-#define ES11_BLENDEQUATIONOES (ES11_VIEWPORT + 1)
3454-#define ES11_BLENDFUNCSEPERATEOES (ES11_BLENDEQUATIONOES + 1)
3455-#define ES11_BLENDEQUATIONSEPARATEOES (ES11_BLENDFUNCSEPERATEOES + 1)
3456-#define ES11_GLMAPBUFFEROES (ES11_BLENDEQUATIONSEPARATEOES + 1)
3457-#define ES11_GLUNMAPBUFFEROES (ES11_GLMAPBUFFEROES + 1)
3458-#define ES11_GLGETBUFFERPOINTERVOES (ES11_GLUNMAPBUFFEROES + 1)
3459-#define ES11_CALLS (ES11_GLGETBUFFERPOINTERVOES + 1)
3460-#define ES11_DRAWCALLS (ES11_CALLS + 1)
3461-#define ES11_STATECHANGECALLS (ES11_DRAWCALLS + 1)
3462-#define ES11_POINTCOUNT (ES11_STATECHANGECALLS + 1)
3463-#define ES11_LINECOUNT (ES11_POINTCOUNT + 1)
3464-#define ES11_TRIANGLECOUNT (ES11_LINECOUNT + 1)
3465-
3466-/* OpenGL ES2X API IDs. */
3467-#define ES20_ACTIVETEXTURE 1
3468-#define ES20_ATTACHSHADER (ES20_ACTIVETEXTURE + 1)
3469-#define ES20_BINDATTRIBLOCATION (ES20_ATTACHSHADER + 1)
3470-#define ES20_BINDBUFFER (ES20_BINDATTRIBLOCATION + 1)
3471-#define ES20_BINDFRAMEBUFFER (ES20_BINDBUFFER + 1)
3472-#define ES20_BINDRENDERBUFFER (ES20_BINDFRAMEBUFFER + 1)
3473-#define ES20_BINDTEXTURE (ES20_BINDRENDERBUFFER + 1)
3474-#define ES20_BLENDCOLOR (ES20_BINDTEXTURE + 1)
3475-#define ES20_BLENDEQUATION (ES20_BLENDCOLOR + 1)
3476-#define ES20_BLENDEQUATIONSEPARATE (ES20_BLENDEQUATION + 1)
3477-#define ES20_BLENDFUNC (ES20_BLENDEQUATIONSEPARATE + 1)
3478-#define ES20_BLENDFUNCSEPARATE (ES20_BLENDFUNC + 1)
3479-#define ES20_BUFFERDATA (ES20_BLENDFUNCSEPARATE + 1)
3480-#define ES20_BUFFERSUBDATA (ES20_BUFFERDATA + 1)
3481-#define ES20_CHECKFRAMEBUFFERSTATUS (ES20_BUFFERSUBDATA + 1)
3482-#define ES20_CLEAR (ES20_CHECKFRAMEBUFFERSTATUS + 1)
3483-#define ES20_CLEARCOLOR (ES20_CLEAR + 1)
3484-#define ES20_CLEARDEPTHF (ES20_CLEARCOLOR + 1)
3485-#define ES20_CLEARSTENCIL (ES20_CLEARDEPTHF + 1)
3486-#define ES20_COLORMASK (ES20_CLEARSTENCIL + 1)
3487-#define ES20_COMPILESHADER (ES20_COLORMASK + 1)
3488-#define ES20_COMPRESSEDTEXIMAGE2D (ES20_COMPILESHADER + 1)
3489-#define ES20_COMPRESSEDTEXSUBIMAGE2D (ES20_COMPRESSEDTEXIMAGE2D + 1)
3490-#define ES20_COPYTEXIMAGE2D (ES20_COMPRESSEDTEXSUBIMAGE2D + 1)
3491-#define ES20_COPYTEXSUBIMAGE2D (ES20_COPYTEXIMAGE2D + 1)
3492-#define ES20_CREATEPROGRAM (ES20_COPYTEXSUBIMAGE2D + 1)
3493-#define ES20_CREATESHADER (ES20_CREATEPROGRAM + 1)
3494-#define ES20_CULLFACE (ES20_CREATESHADER + 1)
3495-#define ES20_DELETEBUFFERS (ES20_CULLFACE + 1)
3496-#define ES20_DELETEFRAMEBUFFERS (ES20_DELETEBUFFERS + 1)
3497-#define ES20_DELETEPROGRAM (ES20_DELETEFRAMEBUFFERS + 1)
3498-#define ES20_DELETERENDERBUFFERS (ES20_DELETEPROGRAM + 1)
3499-#define ES20_DELETESHADER (ES20_DELETERENDERBUFFERS + 1)
3500-#define ES20_DELETETEXTURES (ES20_DELETESHADER + 1)
3501-#define ES20_DEPTHFUNC (ES20_DELETETEXTURES + 1)
3502-#define ES20_DEPTHMASK (ES20_DEPTHFUNC + 1)
3503-#define ES20_DEPTHRANGEF (ES20_DEPTHMASK + 1)
3504-#define ES20_DETACHSHADER (ES20_DEPTHRANGEF + 1)
3505-#define ES20_DISABLE (ES20_DETACHSHADER + 1)
3506-#define ES20_DISABLEVERTEXATTRIBARRAY (ES20_DISABLE + 1)
3507-#define ES20_DRAWARRAYS (ES20_DISABLEVERTEXATTRIBARRAY + 1)
3508-#define ES20_DRAWELEMENTS (ES20_DRAWARRAYS + 1)
3509-#define ES20_ENABLE (ES20_DRAWELEMENTS + 1)
3510-#define ES20_ENABLEVERTEXATTRIBARRAY (ES20_ENABLE + 1)
3511-#define ES20_FINISH (ES20_ENABLEVERTEXATTRIBARRAY + 1)
3512-#define ES20_FLUSH (ES20_FINISH + 1)
3513-#define ES20_FRAMEBUFFERRENDERBUFFER (ES20_FLUSH + 1)
3514-#define ES20_FRAMEBUFFERTEXTURE2D (ES20_FRAMEBUFFERRENDERBUFFER + 1)
3515-#define ES20_FRONTFACE (ES20_FRAMEBUFFERTEXTURE2D + 1)
3516-#define ES20_GENBUFFERS (ES20_FRONTFACE + 1)
3517-#define ES20_GENERATEMIPMAP (ES20_GENBUFFERS + 1)
3518-#define ES20_GENFRAMEBUFFERS (ES20_GENERATEMIPMAP + 1)
3519-#define ES20_GENRENDERBUFFERS (ES20_GENFRAMEBUFFERS + 1)
3520-#define ES20_GENTEXTURES (ES20_GENRENDERBUFFERS + 1)
3521-#define ES20_GETACTIVEATTRIB (ES20_GENTEXTURES + 1)
3522-#define ES20_GETACTIVEUNIFORM (ES20_GETACTIVEATTRIB + 1)
3523-#define ES20_GETATTACHEDSHADERS (ES20_GETACTIVEUNIFORM + 1)
3524-#define ES20_GETATTRIBLOCATION (ES20_GETATTACHEDSHADERS + 1)
3525-#define ES20_GETBOOLEANV (ES20_GETATTRIBLOCATION + 1)
3526-#define ES20_GETBUFFERPARAMETERIV (ES20_GETBOOLEANV + 1)
3527-#define ES20_GETERROR (ES20_GETBUFFERPARAMETERIV + 1)
3528-#define ES20_GETFLOATV (ES20_GETERROR + 1)
3529-#define ES20_GETFRAMEBUFFERATTACHMENTPARAMETERIV (ES20_GETFLOATV + 1)
3530-#define ES20_GETINTEGERV (ES20_GETFRAMEBUFFERATTACHMENTPARAMETERIV + 1)
3531-#define ES20_GETPROGRAMIV (ES20_GETINTEGERV + 1)
3532-#define ES20_GETPROGRAMINFOLOG (ES20_GETPROGRAMIV + 1)
3533-#define ES20_GETRENDERBUFFERPARAMETERIV (ES20_GETPROGRAMINFOLOG + 1)
3534-#define ES20_GETSHADERIV (ES20_GETRENDERBUFFERPARAMETERIV + 1)
3535-#define ES20_GETSHADERINFOLOG (ES20_GETSHADERIV + 1)
3536-#define ES20_GETSHADERPRECISIONFORMAT (ES20_GETSHADERINFOLOG + 1)
3537-#define ES20_GETSHADERSOURCE (ES20_GETSHADERPRECISIONFORMAT + 1)
3538-#define ES20_GETSTRING (ES20_GETSHADERSOURCE + 1)
3539-#define ES20_GETTEXPARAMETERFV (ES20_GETSTRING + 1)
3540-#define ES20_GETTEXPARAMETERIV (ES20_GETTEXPARAMETERFV + 1)
3541-#define ES20_GETUNIFORMFV (ES20_GETTEXPARAMETERIV + 1)
3542-#define ES20_GETUNIFORMIV (ES20_GETUNIFORMFV + 1)
3543-#define ES20_GETUNIFORMLOCATION (ES20_GETUNIFORMIV + 1)
3544-#define ES20_GETVERTEXATTRIBFV (ES20_GETUNIFORMLOCATION + 1)
3545-#define ES20_GETVERTEXATTRIBIV (ES20_GETVERTEXATTRIBFV + 1)
3546-#define ES20_GETVERTEXATTRIBPOINTERV (ES20_GETVERTEXATTRIBIV + 1)
3547-#define ES20_HINT (ES20_GETVERTEXATTRIBPOINTERV + 1)
3548-#define ES20_ISBUFFER (ES20_HINT + 1)
3549-#define ES20_ISENABLED (ES20_ISBUFFER + 1)
3550-#define ES20_ISFRAMEBUFFER (ES20_ISENABLED + 1)
3551-#define ES20_ISPROGRAM (ES20_ISFRAMEBUFFER + 1)
3552-#define ES20_ISRENDERBUFFER (ES20_ISPROGRAM + 1)
3553-#define ES20_ISSHADER (ES20_ISRENDERBUFFER + 1)
3554-#define ES20_ISTEXTURE (ES20_ISSHADER + 1)
3555-#define ES20_LINEWIDTH (ES20_ISTEXTURE + 1)
3556-#define ES20_LINKPROGRAM (ES20_LINEWIDTH + 1)
3557-#define ES20_PIXELSTOREI (ES20_LINKPROGRAM + 1)
3558-#define ES20_POLYGONOFFSET (ES20_PIXELSTOREI + 1)
3559-#define ES20_READPIXELS (ES20_POLYGONOFFSET + 1)
3560-#define ES20_RELEASESHADERCOMPILER (ES20_READPIXELS + 1)
3561-#define ES20_RENDERBUFFERSTORAGE (ES20_RELEASESHADERCOMPILER + 1)
3562-#define ES20_SAMPLECOVERAGE (ES20_RENDERBUFFERSTORAGE + 1)
3563-#define ES20_SCISSOR (ES20_SAMPLECOVERAGE + 1)
3564-#define ES20_SHADERBINARY (ES20_SCISSOR + 1)
3565-#define ES20_SHADERSOURCE (ES20_SHADERBINARY + 1)
3566-#define ES20_STENCILFUNC (ES20_SHADERSOURCE + 1)
3567-#define ES20_STENCILFUNCSEPARATE (ES20_STENCILFUNC + 1)
3568-#define ES20_STENCILMASK (ES20_STENCILFUNCSEPARATE + 1)
3569-#define ES20_STENCILMASKSEPARATE (ES20_STENCILMASK + 1)
3570-#define ES20_STENCILOP (ES20_STENCILMASKSEPARATE + 1)
3571-#define ES20_STENCILOPSEPARATE (ES20_STENCILOP + 1)
3572-#define ES20_TEXIMAGE2D (ES20_STENCILOPSEPARATE + 1)
3573-#define ES20_TEXPARAMETERF (ES20_TEXIMAGE2D + 1)
3574-#define ES20_TEXPARAMETERFV (ES20_TEXPARAMETERF + 1)
3575-#define ES20_TEXPARAMETERI (ES20_TEXPARAMETERFV + 1)
3576-#define ES20_TEXPARAMETERIV (ES20_TEXPARAMETERI + 1)
3577-#define ES20_TEXSUBIMAGE2D (ES20_TEXPARAMETERIV + 1)
3578-#define ES20_UNIFORM1F (ES20_TEXSUBIMAGE2D + 1)
3579-#define ES20_UNIFORM1FV (ES20_UNIFORM1F + 1)
3580-#define ES20_UNIFORM1I (ES20_UNIFORM1FV + 1)
3581-#define ES20_UNIFORM1IV (ES20_UNIFORM1I + 1)
3582-#define ES20_UNIFORM2F (ES20_UNIFORM1IV + 1)
3583-#define ES20_UNIFORM2FV (ES20_UNIFORM2F + 1)
3584-#define ES20_UNIFORM2I (ES20_UNIFORM2FV + 1)
3585-#define ES20_UNIFORM2IV (ES20_UNIFORM2I + 1)
3586-#define ES20_UNIFORM3F (ES20_UNIFORM2IV + 1)
3587-#define ES20_UNIFORM3FV (ES20_UNIFORM3F + 1)
3588-#define ES20_UNIFORM3I (ES20_UNIFORM3FV + 1)
3589-#define ES20_UNIFORM3IV (ES20_UNIFORM3I + 1)
3590-#define ES20_UNIFORM4F (ES20_UNIFORM3IV + 1)
3591-#define ES20_UNIFORM4FV (ES20_UNIFORM4F + 1)
3592-#define ES20_UNIFORM4I (ES20_UNIFORM4FV + 1)
3593-#define ES20_UNIFORM4IV (ES20_UNIFORM4I + 1)
3594-#define ES20_UNIFORMMATRIX2FV (ES20_UNIFORM4IV + 1)
3595-#define ES20_UNIFORMMATRIX3FV (ES20_UNIFORMMATRIX2FV + 1)
3596-#define ES20_UNIFORMMATRIX4FV (ES20_UNIFORMMATRIX3FV + 1)
3597-#define ES20_USEPROGRAM (ES20_UNIFORMMATRIX4FV + 1)
3598-#define ES20_VALIDATEPROGRAM (ES20_USEPROGRAM + 1)
3599-#define ES20_VERTEXATTRIB1F (ES20_VALIDATEPROGRAM + 1)
3600-#define ES20_VERTEXATTRIB1FV (ES20_VERTEXATTRIB1F + 1)
3601-#define ES20_VERTEXATTRIB2F (ES20_VERTEXATTRIB1FV + 1)
3602-#define ES20_VERTEXATTRIB2FV (ES20_VERTEXATTRIB2F + 1)
3603-#define ES20_VERTEXATTRIB3F (ES20_VERTEXATTRIB2FV + 1)
3604-#define ES20_VERTEXATTRIB3FV (ES20_VERTEXATTRIB3F + 1)
3605-#define ES20_VERTEXATTRIB4F (ES20_VERTEXATTRIB3FV + 1)
3606-#define ES20_VERTEXATTRIB4FV (ES20_VERTEXATTRIB4F + 1)
3607-#define ES20_VERTEXATTRIBPOINTER (ES20_VERTEXATTRIB4FV + 1)
3608-#define ES20_VIEWPORT (ES20_VERTEXATTRIBPOINTER + 1)
3609-#define ES20_GETPROGRAMBINARYOES (ES20_VIEWPORT + 1)
3610-#define ES20_PROGRAMBINARYOES (ES20_GETPROGRAMBINARYOES + 1)
3611-#define ES20_TEXIMAGE3DOES (ES20_PROGRAMBINARYOES + 1)
3612-#define ES20_TEXSUBIMAGE3DOES (ES20_TEXIMAGE3DOES + 1)
3613-#define ES20_COPYSUBIMAGE3DOES (ES20_TEXSUBIMAGE3DOES + 1)
3614-#define ES20_COMPRESSEDTEXIMAGE3DOES (ES20_COPYSUBIMAGE3DOES + 1)
3615-#define ES20_COMPRESSEDTEXSUBIMAGE3DOES (ES20_COMPRESSEDTEXIMAGE3DOES + 1)
3616-#define ES20_FRAMEBUFFERTEXTURE3DOES (ES20_COMPRESSEDTEXSUBIMAGE3DOES + 1)
3617-#define ES20_BINDVERTEXARRAYOES (ES20_FRAMEBUFFERTEXTURE3DOES + 1)
3618-#define ES20_GENVERTEXARRAYOES (ES20_BINDVERTEXARRAYOES + 1)
3619-#define ES20_ISVERTEXARRAYOES (ES20_GENVERTEXARRAYOES + 1)
3620-#define ES20_DELETEVERTEXARRAYOES (ES20_ISVERTEXARRAYOES + 1)
3621-#define ES20_GLMAPBUFFEROES (ES20_DELETEVERTEXARRAYOES + 1)
3622-#define ES20_GLUNMAPBUFFEROES (ES20_GLMAPBUFFEROES + 1)
3623-#define ES20_GLGETBUFFERPOINTERVOES (ES20_GLUNMAPBUFFEROES + 1)
3624-#define ES20_DISCARDFRAMEBUFFEREXT (ES20_GLGETBUFFERPOINTERVOES + 1)
3625-#define ES20_CALLS (ES20_DISCARDFRAMEBUFFEREXT + 1)
3626-#define ES20_DRAWCALLS (ES20_CALLS + 1)
3627-#define ES20_STATECHANGECALLS (ES20_DRAWCALLS + 1)
3628-#define ES20_POINTCOUNT (ES20_STATECHANGECALLS + 1)
3629-#define ES20_LINECOUNT (ES20_POINTCOUNT + 1)
3630-#define ES20_TRIANGLECOUNT (ES20_LINECOUNT + 1)
3631-
3632-/* OpenVG API IDs. */
3633-#define VG11_APPENDPATH 1
3634-#define VG11_APPENDPATHDATA (VG11_APPENDPATH + 1)
3635-#define VG11_CHILDIMAGE (VG11_APPENDPATHDATA + 1)
3636-#define VG11_CLEAR (VG11_CHILDIMAGE + 1)
3637-#define VG11_CLEARGLYPH (VG11_CLEAR + 1)
3638-#define VG11_CLEARIMAGE (VG11_CLEARGLYPH + 1)
3639-#define VG11_CLEARPATH (VG11_CLEARIMAGE + 1)
3640-#define VG11_COLORMATRIX (VG11_CLEARPATH + 1)
3641-#define VG11_CONVOLVE (VG11_COLORMATRIX + 1)
3642-#define VG11_COPYIMAGE (VG11_CONVOLVE + 1)
3643-#define VG11_COPYMASK (VG11_COPYIMAGE + 1)
3644-#define VG11_COPYPIXELS (VG11_COPYMASK + 1)
3645-#define VG11_CREATEFONT (VG11_COPYPIXELS + 1)
3646-#define VG11_CREATEIMAGE (VG11_CREATEFONT + 1)
3647-#define VG11_CREATEMASKLAYER (VG11_CREATEIMAGE + 1)
3648-#define VG11_CREATEPAINT (VG11_CREATEMASKLAYER + 1)
3649-#define VG11_CREATEPATH (VG11_CREATEPAINT + 1)
3650-#define VG11_DESTROYFONT (VG11_CREATEPATH + 1)
3651-#define VG11_DESTROYIMAGE (VG11_DESTROYFONT + 1)
3652-#define VG11_DESTROYMASKLAYER (VG11_DESTROYIMAGE + 1)
3653-#define VG11_DESTROYPAINT (VG11_DESTROYMASKLAYER + 1)
3654-#define VG11_DESTROYPATH (VG11_DESTROYPAINT + 1)
3655-#define VG11_DRAWGLYPH (VG11_DESTROYPATH + 1)
3656-#define VG11_DRAWGLYPHS (VG11_DRAWGLYPH + 1)
3657-#define VG11_DRAWIMAGE (VG11_DRAWGLYPHS + 1)
3658-#define VG11_DRAWPATH (VG11_DRAWIMAGE + 1)
3659-#define VG11_FILLMASKLAYER (VG11_DRAWPATH + 1)
3660-#define VG11_FINISH (VG11_FILLMASKLAYER + 1)
3661-#define VG11_FLUSH (VG11_FINISH + 1)
3662-#define VG11_GAUSSIANBLUR (VG11_FLUSH + 1)
3663-#define VG11_GETCOLOR (VG11_GAUSSIANBLUR + 1)
3664-#define VG11_GETERROR (VG11_GETCOLOR + 1)
3665-#define VG11_GETF (VG11_GETERROR + 1)
3666-#define VG11_GETFV (VG11_GETF + 1)
3667-#define VG11_GETI (VG11_GETFV + 1)
3668-#define VG11_GETIMAGESUBDATA (VG11_GETI + 1)
3669-#define VG11_GETIV (VG11_GETIMAGESUBDATA + 1)
3670-#define VG11_GETMATRIX (VG11_GETIV + 1)
3671-#define VG11_GETPAINT (VG11_GETMATRIX + 1)
3672-#define VG11_GETPARAMETERF (VG11_GETPAINT + 1)
3673-#define VG11_GETPARAMETERFV (VG11_GETPARAMETERF + 1)
3674-#define VG11_GETPARAMETERI (VG11_GETPARAMETERFV + 1)
3675-#define VG11_GETPARAMETERIV (VG11_GETPARAMETERI + 1)
3676-#define VG11_GETPARAMETERVECTORSIZE (VG11_GETPARAMETERIV + 1)
3677-#define VG11_GETPARENT (VG11_GETPARAMETERVECTORSIZE + 1)
3678-#define VG11_GETPATHCAPABILITIES (VG11_GETPARENT + 1)
3679-#define VG11_GETPIXELS (VG11_GETPATHCAPABILITIES + 1)
3680-#define VG11_GETSTRING (VG11_GETPIXELS + 1)
3681-#define VG11_GETVECTORSIZE (VG11_GETSTRING + 1)
3682-#define VG11_HARDWAREQUERY (VG11_GETVECTORSIZE + 1)
3683-#define VG11_IMAGESUBDATA (VG11_HARDWAREQUERY + 1)
3684-#define VG11_INTERPOLATEPATH (VG11_IMAGESUBDATA + 1)
3685-#define VG11_LOADIDENTITY (VG11_INTERPOLATEPATH + 1)
3686-#define VG11_LOADMATRIX (VG11_LOADIDENTITY + 1)
3687-#define VG11_LOOKUP (VG11_LOADMATRIX + 1)
3688-#define VG11_LOOKUPSINGLE (VG11_LOOKUP + 1)
3689-#define VG11_MASK (VG11_LOOKUPSINGLE + 1)
3690-#define VG11_MODIFYPATHCOORDS (VG11_MASK + 1)
3691-#define VG11_MULTMATRIX (VG11_MODIFYPATHCOORDS + 1)
3692-#define VG11_PAINTPATTERN (VG11_MULTMATRIX + 1)
3693-#define VG11_PATHBOUNDS (VG11_PAINTPATTERN + 1)
3694-#define VG11_PATHLENGTH (VG11_PATHBOUNDS + 1)
3695-#define VG11_PATHTRANSFORMEDBOUNDS (VG11_PATHLENGTH + 1)
3696-#define VG11_POINTALONGPATH (VG11_PATHTRANSFORMEDBOUNDS + 1)
3697-#define VG11_READPIXELS (VG11_POINTALONGPATH + 1)
3698-#define VG11_REMOVEPATHCAPABILITIES (VG11_READPIXELS + 1)
3699-#define VG11_RENDERTOMASK (VG11_REMOVEPATHCAPABILITIES + 1)
3700-#define VG11_ROTATE (VG11_RENDERTOMASK + 1)
3701-#define VG11_SCALE (VG11_ROTATE + 1)
3702-#define VG11_SEPARABLECONVOLVE (VG11_SCALE + 1)
3703-#define VG11_SETCOLOR (VG11_SEPARABLECONVOLVE + 1)
3704-#define VG11_SETF (VG11_SETCOLOR + 1)
3705-#define VG11_SETFV (VG11_SETF + 1)
3706-#define VG11_SETGLYPHTOIMAGE (VG11_SETFV + 1)
3707-#define VG11_SETGLYPHTOPATH (VG11_SETGLYPHTOIMAGE + 1)
3708-#define VG11_SETI (VG11_SETGLYPHTOPATH + 1)
3709-#define VG11_SETIV (VG11_SETI + 1)
3710-#define VG11_SETPAINT (VG11_SETIV + 1)
3711-#define VG11_SETPARAMETERF (VG11_SETPAINT + 1)
3712-#define VG11_SETPARAMETERFV (VG11_SETPARAMETERF + 1)
3713-#define VG11_SETPARAMETERI (VG11_SETPARAMETERFV + 1)
3714-#define VG11_SETPARAMETERIV (VG11_SETPARAMETERI + 1)
3715-#define VG11_SETPIXELS (VG11_SETPARAMETERIV + 1)
3716-#define VG11_SHEAR (VG11_SETPIXELS + 1)
3717-#define VG11_TRANSFORMPATH (VG11_SHEAR + 1)
3718-#define VG11_TRANSLATE (VG11_TRANSFORMPATH + 1)
3719-#define VG11_WRITEPIXELS (VG11_TRANSLATE + 1)
3720-#define VG11_CALLS (VG11_WRITEPIXELS + 1)
3721-#define VG11_DRAWCALLS (VG11_CALLS + 1)
3722-#define VG11_STATECHANGECALLS (VG11_DRAWCALLS + 1)
3723-#define VG11_FILLCOUNT (VG11_STATECHANGECALLS + 1)
3724-#define VG11_STROKECOUNT (VG11_FILLCOUNT + 1)
3725+#define ES11_CALLS 151
3726+#define ES11_DRAWCALLS (ES11_CALLS + 1)
3727+#define ES11_STATECHANGECALLS (ES11_DRAWCALLS + 1)
3728+#define ES11_POINTCOUNT (ES11_STATECHANGECALLS + 1)
3729+#define ES11_LINECOUNT (ES11_POINTCOUNT + 1)
3730+#define ES11_TRIANGLECOUNT (ES11_LINECOUNT + 1)
3731+
3732+#define ES20_CALLS 159
3733+#define ES20_DRAWCALLS (ES20_CALLS + 1)
3734+#define ES20_STATECHANGECALLS (ES20_DRAWCALLS + 1)
3735+#define ES20_POINTCOUNT (ES20_STATECHANGECALLS + 1)
3736+#define ES20_LINECOUNT (ES20_POINTCOUNT + 1)
3737+#define ES20_TRIANGLECOUNT (ES20_LINECOUNT + 1)
3738+
3739+#define VG11_CALLS 88
3740+#define VG11_DRAWCALLS (VG11_CALLS + 1)
3741+#define VG11_STATECHANGECALLS (VG11_DRAWCALLS + 1)
3742+#define VG11_FILLCOUNT (VG11_STATECHANGECALLS + 1)
3743+#define VG11_STROKECOUNT (VG11_FILLCOUNT + 1)
3744 /* End of Driver API ID Definitions. */
3745
3746 /* HAL & MISC IDs. */
3747-#define HAL_VERTBUFNEWBYTEALLOC 1
3748-#define HAL_VERTBUFTOTALBYTEALLOC (HAL_VERTBUFNEWBYTEALLOC + 1)
3749-#define HAL_VERTBUFNEWOBJALLOC (HAL_VERTBUFTOTALBYTEALLOC + 1)
3750-#define HAL_VERTBUFTOTALOBJALLOC (HAL_VERTBUFNEWOBJALLOC + 1)
3751-#define HAL_INDBUFNEWBYTEALLOC (HAL_VERTBUFTOTALOBJALLOC + 1)
3752-#define HAL_INDBUFTOTALBYTEALLOC (HAL_INDBUFNEWBYTEALLOC + 1)
3753-#define HAL_INDBUFNEWOBJALLOC (HAL_INDBUFTOTALBYTEALLOC + 1)
3754-#define HAL_INDBUFTOTALOBJALLOC (HAL_INDBUFNEWOBJALLOC + 1)
3755-#define HAL_TEXBUFNEWBYTEALLOC (HAL_INDBUFTOTALOBJALLOC + 1)
3756-#define HAL_TEXBUFTOTALBYTEALLOC (HAL_TEXBUFNEWBYTEALLOC + 1)
3757-#define HAL_TEXBUFNEWOBJALLOC (HAL_TEXBUFTOTALBYTEALLOC + 1)
3758-#define HAL_TEXBUFTOTALOBJALLOC (HAL_TEXBUFNEWOBJALLOC + 1)
3759-
3760-#define GPU_CYCLES 1
3761-#define GPU_READ64BYTE (GPU_CYCLES + 1)
3762-#define GPU_WRITE64BYTE (GPU_READ64BYTE + 1)
3763-#define GPU_TOTALCYCLES (GPU_WRITE64BYTE + 1)
3764-#define GPU_IDLECYCLES (GPU_TOTALCYCLES + 1)
3765-
3766-#define VS_INSTCOUNT 1
3767-#define VS_BRANCHINSTCOUNT (VS_INSTCOUNT + 1)
3768-#define VS_TEXLDINSTCOUNT (VS_BRANCHINSTCOUNT + 1)
3769-#define VS_RENDEREDVERTCOUNT (VS_TEXLDINSTCOUNT + 1)
3770-
3771-#define PS_INSTCOUNT 1
3772-#define PS_BRANCHINSTCOUNT (PS_INSTCOUNT + 1)
3773-#define PS_TEXLDINSTCOUNT (PS_BRANCHINSTCOUNT + 1)
3774-#define PS_RENDEREDPIXCOUNT (PS_TEXLDINSTCOUNT + 1)
3775-
3776-#define PA_INVERTCOUNT 1
3777-#define PA_INPRIMCOUNT (PA_INVERTCOUNT + 1)
3778-#define PA_OUTPRIMCOUNT (PA_INPRIMCOUNT + 1)
3779-#define PA_DEPTHCLIPCOUNT (PA_OUTPRIMCOUNT + 1)
3780-#define PA_TRIVIALREJCOUNT (PA_DEPTHCLIPCOUNT + 1)
3781-#define PA_CULLCOUNT (PA_TRIVIALREJCOUNT + 1)
3782-
3783-#define SE_TRIANGLECOUNT 1
3784-#define SE_LINECOUNT (SE_TRIANGLECOUNT + 1)
3785-
3786-#define RA_VALIDPIXCOUNT 1
3787-#define RA_TOTALQUADCOUNT (RA_VALIDPIXCOUNT + 1)
3788-#define RA_VALIDQUADCOUNTEZ (RA_TOTALQUADCOUNT + 1)
3789-#define RA_TOTALPRIMCOUNT (RA_VALIDQUADCOUNTEZ + 1)
3790-#define RA_PIPECACHEMISSCOUNT (RA_TOTALPRIMCOUNT + 1)
3791-#define RA_PREFCACHEMISSCOUNT (RA_PIPECACHEMISSCOUNT + 1)
3792-#define RA_EEZCULLCOUNT (RA_PREFCACHEMISSCOUNT + 1)
3793-
3794-#define TX_TOTBILINEARREQ 1
3795-#define TX_TOTTRILINEARREQ (TX_TOTBILINEARREQ + 1)
3796-#define TX_TOTDISCARDTEXREQ (TX_TOTTRILINEARREQ + 1)
3797-#define TX_TOTTEXREQ (TX_TOTDISCARDTEXREQ + 1)
3798-#define TX_MEMREADCOUNT (TX_TOTTEXREQ + 1)
3799-#define TX_MEMREADIN8BCOUNT (TX_MEMREADCOUNT + 1)
3800-#define TX_CACHEMISSCOUNT (TX_MEMREADIN8BCOUNT + 1)
3801-#define TX_CACHEHITTEXELCOUNT (TX_CACHEMISSCOUNT + 1)
3802-#define TX_CACHEMISSTEXELCOUNT (TX_CACHEHITTEXELCOUNT + 1)
3803-
3804-#define PE_KILLEDBYCOLOR 1
3805-#define PE_KILLEDBYDEPTH (PE_KILLEDBYCOLOR + 1)
3806-#define PE_DRAWNBYCOLOR (PE_KILLEDBYDEPTH + 1)
3807-#define PE_DRAWNBYDEPTH (PE_DRAWNBYCOLOR + 1)
3808-
3809-#define MC_READREQ8BPIPE 1
3810-#define MC_READREQ8BIP (MC_READREQ8BPIPE + 1)
3811-#define MC_WRITEREQ8BPIPE (MC_READREQ8BIP + 1)
3812-
3813-#define AXI_READREQSTALLED 1
3814-#define AXI_WRITEREQSTALLED (AXI_READREQSTALLED + 1)
3815-#define AXI_WRITEDATASTALLED (AXI_WRITEREQSTALLED + 1)
3816-
3817-#define PVS_INSTRCOUNT 1
3818-#define PVS_ALUINSTRCOUNT (PVS_INSTRCOUNT + 1)
3819-#define PVS_TEXINSTRCOUNT (PVS_ALUINSTRCOUNT + 1)
3820-#define PVS_ATTRIBCOUNT (PVS_TEXINSTRCOUNT + 1)
3821-#define PVS_UNIFORMCOUNT (PVS_ATTRIBCOUNT + 1)
3822-#define PVS_FUNCTIONCOUNT (PVS_UNIFORMCOUNT + 1)
3823-
3824-#define PPS_INSTRCOUNT 1
3825-#define PPS_ALUINSTRCOUNT (PPS_INSTRCOUNT + 1)
3826-#define PPS_TEXINSTRCOUNT (PPS_ALUINSTRCOUNT + 1)
3827-#define PPS_ATTRIBCOUNT (PPS_TEXINSTRCOUNT + 1)
3828-#define PPS_UNIFORMCOUNT (PPS_ATTRIBCOUNT + 1)
3829-#define PPS_FUNCTIONCOUNT (PPS_UNIFORMCOUNT + 1)
3830+#define HAL_VERTBUFNEWBYTEALLOC 1
3831+#define HAL_VERTBUFTOTALBYTEALLOC (HAL_VERTBUFNEWBYTEALLOC + 1)
3832+#define HAL_VERTBUFNEWOBJALLOC (HAL_VERTBUFTOTALBYTEALLOC + 1)
3833+#define HAL_VERTBUFTOTALOBJALLOC (HAL_VERTBUFNEWOBJALLOC + 1)
3834+#define HAL_INDBUFNEWBYTEALLOC (HAL_VERTBUFTOTALOBJALLOC + 1)
3835+#define HAL_INDBUFTOTALBYTEALLOC (HAL_INDBUFNEWBYTEALLOC + 1)
3836+#define HAL_INDBUFNEWOBJALLOC (HAL_INDBUFTOTALBYTEALLOC + 1)
3837+#define HAL_INDBUFTOTALOBJALLOC (HAL_INDBUFNEWOBJALLOC + 1)
3838+#define HAL_TEXBUFNEWBYTEALLOC (HAL_INDBUFTOTALOBJALLOC + 1)
3839+#define HAL_TEXBUFTOTALBYTEALLOC (HAL_TEXBUFNEWBYTEALLOC + 1)
3840+#define HAL_TEXBUFNEWOBJALLOC (HAL_TEXBUFTOTALBYTEALLOC + 1)
3841+#define HAL_TEXBUFTOTALOBJALLOC (HAL_TEXBUFNEWOBJALLOC + 1)
3842+
3843+#define GPU_CYCLES 1
3844+#define GPU_READ64BYTE (GPU_CYCLES + 1)
3845+#define GPU_WRITE64BYTE (GPU_READ64BYTE + 1)
3846+#define GPU_TOTALCYCLES (GPU_WRITE64BYTE + 1)
3847+#define GPU_IDLECYCLES (GPU_TOTALCYCLES + 1)
3848+
3849+#define VS_INSTCOUNT 1
3850+#define VS_BRANCHINSTCOUNT (VS_INSTCOUNT + 1)
3851+#define VS_TEXLDINSTCOUNT (VS_BRANCHINSTCOUNT + 1)
3852+#define VS_RENDEREDVERTCOUNT (VS_TEXLDINSTCOUNT + 1)
3853+#define VS_SOURCE (VS_RENDEREDVERTCOUNT + 1)
3854+
3855+#define PS_INSTCOUNT 1
3856+#define PS_BRANCHINSTCOUNT (PS_INSTCOUNT + 1)
3857+#define PS_TEXLDINSTCOUNT (PS_BRANCHINSTCOUNT + 1)
3858+#define PS_RENDEREDPIXCOUNT (PS_TEXLDINSTCOUNT + 1)
3859+#define PS_SOURCE (PS_RENDEREDPIXCOUNT + 1)
3860+
3861+#define PA_INVERTCOUNT 1
3862+#define PA_INPRIMCOUNT (PA_INVERTCOUNT + 1)
3863+#define PA_OUTPRIMCOUNT (PA_INPRIMCOUNT + 1)
3864+#define PA_DEPTHCLIPCOUNT (PA_OUTPRIMCOUNT + 1)
3865+#define PA_TRIVIALREJCOUNT (PA_DEPTHCLIPCOUNT + 1)
3866+#define PA_CULLCOUNT (PA_TRIVIALREJCOUNT + 1)
3867+
3868+#define SE_TRIANGLECOUNT 1
3869+#define SE_LINECOUNT (SE_TRIANGLECOUNT + 1)
3870+
3871+#define RA_VALIDPIXCOUNT 1
3872+#define RA_TOTALQUADCOUNT (RA_VALIDPIXCOUNT + 1)
3873+#define RA_VALIDQUADCOUNTEZ (RA_TOTALQUADCOUNT + 1)
3874+#define RA_TOTALPRIMCOUNT (RA_VALIDQUADCOUNTEZ + 1)
3875+#define RA_PIPECACHEMISSCOUNT (RA_TOTALPRIMCOUNT + 1)
3876+#define RA_PREFCACHEMISSCOUNT (RA_PIPECACHEMISSCOUNT + 1)
3877+#define RA_EEZCULLCOUNT (RA_PREFCACHEMISSCOUNT + 1)
3878+
3879+#define TX_TOTBILINEARREQ 1
3880+#define TX_TOTTRILINEARREQ (TX_TOTBILINEARREQ + 1)
3881+#define TX_TOTDISCARDTEXREQ (TX_TOTTRILINEARREQ + 1)
3882+#define TX_TOTTEXREQ (TX_TOTDISCARDTEXREQ + 1)
3883+#define TX_MEMREADCOUNT (TX_TOTTEXREQ + 1)
3884+#define TX_MEMREADIN8BCOUNT (TX_MEMREADCOUNT + 1)
3885+#define TX_CACHEMISSCOUNT (TX_MEMREADIN8BCOUNT + 1)
3886+#define TX_CACHEHITTEXELCOUNT (TX_CACHEMISSCOUNT + 1)
3887+#define TX_CACHEMISSTEXELCOUNT (TX_CACHEHITTEXELCOUNT + 1)
3888+
3889+#define PE_KILLEDBYCOLOR 1
3890+#define PE_KILLEDBYDEPTH (PE_KILLEDBYCOLOR + 1)
3891+#define PE_DRAWNBYCOLOR (PE_KILLEDBYDEPTH + 1)
3892+#define PE_DRAWNBYDEPTH (PE_DRAWNBYCOLOR + 1)
3893+
3894+#define MC_READREQ8BPIPE 1
3895+#define MC_READREQ8BIP (MC_READREQ8BPIPE + 1)
3896+#define MC_WRITEREQ8BPIPE (MC_READREQ8BIP + 1)
3897+
3898+#define AXI_READREQSTALLED 1
3899+#define AXI_WRITEREQSTALLED (AXI_READREQSTALLED + 1)
3900+#define AXI_WRITEDATASTALLED (AXI_WRITEREQSTALLED + 1)
3901+
3902+#define PVS_INSTRCOUNT 1
3903+#define PVS_ALUINSTRCOUNT (PVS_INSTRCOUNT + 1)
3904+#define PVS_TEXINSTRCOUNT (PVS_ALUINSTRCOUNT + 1)
3905+#define PVS_ATTRIBCOUNT (PVS_TEXINSTRCOUNT + 1)
3906+#define PVS_UNIFORMCOUNT (PVS_ATTRIBCOUNT + 1)
3907+#define PVS_FUNCTIONCOUNT (PVS_UNIFORMCOUNT + 1)
3908+#define PVS_SOURCE (PVS_FUNCTIONCOUNT + 1)
3909+
3910+#define PPS_INSTRCOUNT 1
3911+#define PPS_ALUINSTRCOUNT (PPS_INSTRCOUNT + 1)
3912+#define PPS_TEXINSTRCOUNT (PPS_ALUINSTRCOUNT + 1)
3913+#define PPS_ATTRIBCOUNT (PPS_TEXINSTRCOUNT + 1)
3914+#define PPS_UNIFORMCOUNT (PPS_ATTRIBCOUNT + 1)
3915+#define PPS_FUNCTIONCOUNT (PPS_UNIFORMCOUNT + 1)
3916+#define PPS_SOURCE (PPS_FUNCTIONCOUNT + 1)
3917 /* End of MISC Counter IDs. */
3918
3919 #ifdef gcdNEW_PROFILER_FILE
3920@@ -578,8 +184,8 @@ extern "C" {
3921 #define VPG_ES11_TIME 0x170000
3922 #define VPG_ES20_TIME 0x180000
3923 #define VPG_FRAME 0x190000
3924-#define VPG_ES11_DRAW 0x200000
3925-#define VPG_ES20_DRAW 0x210000
3926+#define VPG_ES11_DRAW 0x200000
3927+#define VPG_ES20_DRAW 0x210000
3928 #define VPG_END 0xff0000
3929
3930 /* Info. */
3931@@ -592,7 +198,7 @@ extern "C" {
3932 #define VPC_INFOSCREENSIZE (VPC_INFODRIVERMODE + 1)
3933
3934 /* Counter Constants. */
3935-#define VPC_ELAPSETIME (VPG_TIME + 1)
3936+#define VPC_ELAPSETIME (VPG_TIME + 1)
3937 #define VPC_CPUTIME (VPC_ELAPSETIME + 1)
3938
3939 #define VPC_MEMMAXRES (VPG_MEM + 1)
3940@@ -600,404 +206,28 @@ extern "C" {
3941 #define VPC_MEMUNSHAREDDATA (VPC_MEMSHARED + 1)
3942 #define VPC_MEMUNSHAREDSTACK (VPC_MEMUNSHAREDDATA + 1)
3943
3944-/* OpenGL ES11 Counters. */
3945-#define VPC_ES11ACTIVETEXTURE (VPG_ES11 + ES11_ACTIVETEXTURE)
3946-#define VPC_ES11ALPHAFUNC (VPG_ES11 + ES11_ALPHAFUNC)
3947-#define VPC_ES11ALPHAFUNCX (VPG_ES11 + ES11_ALPHAFUNCX)
3948-#define VPC_ES11BINDBUFFER (VPG_ES11 + ES11_BINDBUFFER)
3949-#define VPC_ES11BINDTEXTURE (VPG_ES11 + ES11_BINDTEXTURE)
3950-#define VPC_ES11BLENDFUNC (VPG_ES11 + ES11_BLENDFUNC)
3951-#define VPC_ES11BUFFERDATA (VPG_ES11 + ES11_BUFFERDATA)
3952-#define VPC_ES11BUFFERSUBDATA (VPG_ES11 + ES11_BUFFERSUBDATA)
3953-#define VPC_ES11CLEAR (VPG_ES11 + ES11_CLEAR)
3954-#define VPC_ES11CLEARCOLOR (VPG_ES11 + ES11_CLEARCOLOR)
3955-#define VPC_ES11CLEARCOLORX (VPG_ES11 + ES11_CLEARCOLORX)
3956-#define VPC_ES11CLEARDEPTHF (VPG_ES11 + ES11_CLEARDEPTHF)
3957-#define VPC_ES11CLEARDEPTHX (VPG_ES11 + ES11_CLEARDEPTHX)
3958-#define VPC_ES11CLEARSTENCIL (VPG_ES11 + ES11_CLEARSTENCIL)
3959-#define VPC_ES11CLIENTACTIVETEXTURE (VPG_ES11 + ES11_CLIENTACTIVETEXTURE)
3960-#define VPC_ES11CLIPPLANEF (VPG_ES11 + ES11_CLIPPLANEF)
3961-#define VPC_ES11CLIPPLANEX (VPG_ES11 + ES11_CLIPPLANEX)
3962-#define VPC_ES11COLOR4F (VPG_ES11 + ES11_COLOR4F)
3963-#define VPC_ES11COLOR4UB (VPG_ES11 + ES11_COLOR4UB)
3964-#define VPC_ES11COLOR4X (VPG_ES11 + ES11_COLOR4X)
3965-#define VPC_ES11COLORMASK (VPG_ES11 + ES11_COLORMASK)
3966-#define VPC_ES11COLORPOINTER (VPG_ES11 + ES11_COLORPOINTER)
3967-#define VPC_ES11COMPRESSEDTEXIMAGE2D (VPG_ES11 + ES11_COMPRESSEDTEXIMAGE2D)
3968-#define VPC_ES11COMPRESSEDTEXSUBIMAGE2D (VPG_ES11 + ES11_COMPRESSEDTEXSUBIMAGE2D)
3969-#define VPC_ES11COPYTEXIMAGE2D (VPG_ES11 + ES11_COPYTEXIMAGE2D)
3970-#define VPC_ES11COPYTEXSUBIMAGE2D (VPG_ES11 + ES11_COPYTEXSUBIMAGE2D)
3971-#define VPC_ES11CULLFACE (VPG_ES11 + ES11_CULLFACE)
3972-#define VPC_ES11DELETEBUFFERS (VPG_ES11 + ES11_DELETEBUFFERS)
3973-#define VPC_ES11DELETETEXTURES (VPG_ES11 + ES11_DELETETEXTURES)
3974-#define VPC_ES11DEPTHFUNC (VPG_ES11 + ES11_DEPTHFUNC)
3975-#define VPC_ES11DEPTHMASK (VPG_ES11 + ES11_DEPTHMASK)
3976-#define VPC_ES11DEPTHRANGEF (VPG_ES11 + ES11_DEPTHRANGEF)
3977-#define VPC_ES11DEPTHRANGEX (VPG_ES11 + ES11_DEPTHRANGEX)
3978-#define VPC_ES11DISABLE (VPG_ES11 + ES11_DISABLE)
3979-#define VPC_ES11DISABLECLIENTSTATE (VPG_ES11 + ES11_DISABLECLIENTSTATE)
3980-#define VPC_ES11DRAWARRAYS (VPG_ES11 + ES11_DRAWARRAYS)
3981-#define VPC_ES11DRAWELEMENTS (VPG_ES11 + ES11_DRAWELEMENTS)
3982-#define VPC_ES11ENABLE (VPG_ES11 + ES11_ENABLE)
3983-#define VPC_ES11ENABLECLIENTSTATE (VPG_ES11 + ES11_ENABLECLIENTSTATE)
3984-#define VPC_ES11FINISH (VPG_ES11 + ES11_FINISH)
3985-#define VPC_ES11FLUSH (VPG_ES11 + ES11_FLUSH)
3986-#define VPC_ES11FOGF (VPG_ES11 + ES11_FOGF)
3987-#define VPC_ES11FOGFV (VPG_ES11 + ES11_FOGFV)
3988-#define VPC_ES11FOGX (VPG_ES11 + ES11_FOGX)
3989-#define VPC_ES11FOGXV (VPG_ES11 + ES11_FOGXV)
3990-#define VPC_ES11FRONTFACE (VPG_ES11 + ES11_FRONTFACE)
3991-#define VPC_ES11FRUSTUMF (VPG_ES11 + ES11_FRUSTUMF)
3992-#define VPC_ES11FRUSTUMX (VPG_ES11 + ES11_FRUSTUMX)
3993-#define VPC_ES11GENBUFFERS (VPG_ES11 + ES11_GENBUFFERS)
3994-#define VPC_ES11GENTEXTURES (VPG_ES11 + ES11_GENTEXTURES)
3995-#define VPC_ES11GETBOOLEANV (VPG_ES11 + ES11_GETBOOLEANV)
3996-#define VPC_ES11GETBUFFERPARAMETERIV (VPG_ES11 + ES11_GETBUFFERPARAMETERIV)
3997-#define VPC_ES11GETCLIPPLANEF (VPG_ES11 + ES11_GETCLIPPLANEF)
3998-#define VPC_ES11GETCLIPPLANEX (VPG_ES11 + ES11_GETCLIPPLANEX)
3999-#define VPC_ES11GETERROR (VPG_ES11 + ES11_GETERROR)
4000-#define VPC_ES11GETFIXEDV (VPG_ES11 + ES11_GETFIXEDV)
4001-#define VPC_ES11GETFLOATV (VPG_ES11 + ES11_GETFLOATV)
4002-#define VPC_ES11GETINTEGERV (VPG_ES11 + ES11_GETINTEGERV)
4003-#define VPC_ES11GETLIGHTFV (VPG_ES11 + ES11_GETLIGHTFV)
4004-#define VPC_ES11GETLIGHTXV (VPG_ES11 + ES11_GETLIGHTXV)
4005-#define VPC_ES11GETMATERIALFV (VPG_ES11 + ES11_GETMATERIALFV)
4006-#define VPC_ES11GETMATERIALXV (VPG_ES11 + ES11_GETMATERIALXV)
4007-#define VPC_ES11GETPOINTERV (VPG_ES11 + ES11_GETPOINTERV)
4008-#define VPC_ES11GETSTRING (VPG_ES11 + ES11_GETSTRING)
4009-#define VPC_ES11GETTEXENVFV (VPG_ES11 + ES11_GETTEXENVFV)
4010-#define VPC_ES11GETTEXENVIV (VPG_ES11 + ES11_GETTEXENVIV)
4011-#define VPC_ES11GETTEXENVXV (VPG_ES11 + ES11_GETTEXENVXV)
4012-#define VPC_ES11GETTEXPARAMETERFV (VPG_ES11 + ES11_GETTEXPARAMETERFV)
4013-#define VPC_ES11GETTEXPARAMETERIV (VPG_ES11 + ES11_GETTEXPARAMETERIV)
4014-#define VPC_ES11GETTEXPARAMETERXV (VPG_ES11 + ES11_GETTEXPARAMETERXV)
4015-#define VPC_ES11HINT (VPG_ES11 + ES11_HINT)
4016-#define VPC_ES11ISBUFFER (VPG_ES11 + ES11_ISBUFFER)
4017-#define VPC_ES11ISENABLED (VPG_ES11 + ES11_ISENABLED)
4018-#define VPC_ES11ISTEXTURE (VPG_ES11 + ES11_ISTEXTURE)
4019-#define VPC_ES11LIGHTF (VPG_ES11 + ES11_LIGHTF)
4020-#define VPC_ES11LIGHTFV (VPG_ES11 + ES11_LIGHTFV)
4021-#define VPC_ES11LIGHTMODELF (VPG_ES11 + ES11_LIGHTMODELF)
4022-#define VPC_ES11LIGHTMODELFV (VPG_ES11 + ES11_LIGHTMODELFV)
4023-#define VPC_ES11LIGHTMODELX (VPG_ES11 + ES11_LIGHTMODELX)
4024-#define VPC_ES11LIGHTMODELXV (VPG_ES11 + ES11_LIGHTMODELXV)
4025-#define VPC_ES11LIGHTX (VPG_ES11 + ES11_LIGHTX)
4026-#define VPC_ES11LIGHTXV (VPG_ES11 + ES11_LIGHTXV)
4027-#define VPC_ES11LINEWIDTH (VPG_ES11 + ES11_LINEWIDTH)
4028-#define VPC_ES11LINEWIDTHX (VPG_ES11 + ES11_LINEWIDTHX)
4029-#define VPC_ES11LOADIDENTITY (VPG_ES11 + ES11_LOADIDENTITY)
4030-#define VPC_ES11LOADMATRIXF (VPG_ES11 + ES11_LOADMATRIXF)
4031-#define VPC_ES11LOADMATRIXX (VPG_ES11 + ES11_LOADMATRIXX)
4032-#define VPC_ES11LOGICOP (VPG_ES11 + ES11_LOGICOP)
4033-#define VPC_ES11MATERIALF (VPG_ES11 + ES11_MATERIALF)
4034-#define VPC_ES11MATERIALFV (VPG_ES11 + ES11_MATERIALFV)
4035-#define VPC_ES11MATERIALX (VPG_ES11 + ES11_MATERIALX)
4036-#define VPC_ES11MATERIALXV (VPG_ES11 + ES11_MATERIALXV)
4037-#define VPC_ES11MATRIXMODE (VPG_ES11 + ES11_MATRIXMODE)
4038-#define VPC_ES11MULTITEXCOORD4F (VPG_ES11 + ES11_MULTITEXCOORD4F)
4039-#define VPC_ES11MULTITEXCOORD4X (VPG_ES11 + ES11_MULTITEXCOORD4X)
4040-#define VPC_ES11MULTMATRIXF (VPG_ES11 + ES11_MULTMATRIXF)
4041-#define VPC_ES11MULTMATRIXX (VPG_ES11 + ES11_MULTMATRIXX)
4042-#define VPC_ES11NORMAL3F (VPG_ES11 + ES11_NORMAL3F)
4043-#define VPC_ES11NORMAL3X (VPG_ES11 + ES11_NORMAL3X)
4044-#define VPC_ES11NORMALPOINTER (VPG_ES11 + ES11_NORMALPOINTER)
4045-#define VPC_ES11ORTHOF (VPG_ES11 + ES11_ORTHOF)
4046-#define VPC_ES11ORTHOX (VPG_ES11 + ES11_ORTHOX)
4047-#define VPC_ES11PIXELSTOREI (VPG_ES11 + ES11_PIXELSTOREI)
4048-#define VPC_ES11POINTPARAMETERF (VPG_ES11 + ES11_POINTPARAMETERF)
4049-#define VPC_ES11POINTPARAMETERFV (VPG_ES11 + ES11_POINTPARAMETERFV)
4050-#define VPC_ES11POINTPARAMETERX (VPG_ES11 + ES11_POINTPARAMETERX)
4051-#define VPC_ES11POINTPARAMETERXV (VPG_ES11 + ES11_POINTPARAMETERXV)
4052-#define VPC_ES11POINTSIZE (VPG_ES11 + ES11_POINTSIZE)
4053-#define VPC_ES11POINTSIZEX (VPG_ES11 + ES11_POINTSIZEX)
4054-#define VPC_ES11POLYGONOFFSET (VPG_ES11 + ES11_POLYGONOFFSET)
4055-#define VPC_ES11POLYGONOFFSETX (VPG_ES11 + ES11_POLYGONOFFSETX)
4056-#define VPC_ES11POPMATRIX (VPG_ES11 + ES11_POPMATRIX)
4057-#define VPC_ES11PUSHMATRIX (VPG_ES11 + ES11_PUSHMATRIX)
4058-#define VPC_ES11READPIXELS (VPG_ES11 + ES11_READPIXELS)
4059-#define VPC_ES11ROTATEF (VPG_ES11 + ES11_ROTATEF)
4060-#define VPC_ES11ROTATEX (VPG_ES11 + ES11_ROTATEX)
4061-#define VPC_ES11SAMPLECOVERAGE (VPG_ES11 + ES11_SAMPLECOVERAGE)
4062-#define VPC_ES11SAMPLECOVERAGEX (VPG_ES11 + ES11_SAMPLECOVERAGEX)
4063-#define VPC_ES11SCALEF (VPG_ES11 + ES11_SCALEF)
4064-#define VPC_ES11SCALEX (VPG_ES11 + ES11_SCALEX)
4065-#define VPC_ES11SCISSOR (VPG_ES11 + ES11_SCISSOR)
4066-#define VPC_ES11SHADEMODEL (VPG_ES11 + ES11_SHADEMODEL)
4067-#define VPC_ES11STENCILFUNC (VPG_ES11 + ES11_STENCILFUNC)
4068-#define VPC_ES11STENCILMASK (VPG_ES11 + ES11_STENCILMASK)
4069-#define VPC_ES11STENCILOP (VPG_ES11 + ES11_STENCILOP)
4070-#define VPC_ES11TEXCOORDPOINTER (VPG_ES11 + ES11_TEXCOORDPOINTER)
4071-#define VPC_ES11TEXENVF (VPG_ES11 + ES11_TEXENVF)
4072-#define VPC_ES11TEXENVFV (VPG_ES11 + ES11_TEXENVFV)
4073-#define VPC_ES11TEXENVI (VPG_ES11 + ES11_TEXENVI)
4074-#define VPC_ES11TEXENVIV (VPG_ES11 + ES11_TEXENVIV)
4075-#define VPC_ES11TEXENVX (VPG_ES11 + ES11_TEXENVX)
4076-#define VPC_ES11TEXENVXV (VPG_ES11 + ES11_TEXENVXV)
4077-#define VPC_ES11TEXIMAGE2D (VPG_ES11 + ES11_TEXIMAGE2D)
4078-#define VPC_ES11TEXPARAMETERF (VPG_ES11 + ES11_TEXPARAMETERF)
4079-#define VPC_ES11TEXPARAMETERFV (VPG_ES11 + ES11_TEXPARAMETERFV)
4080-#define VPC_ES11TEXPARAMETERI (VPG_ES11 + ES11_TEXPARAMETERI)
4081-#define VPC_ES11TEXPARAMETERIV (VPG_ES11 + ES11_TEXPARAMETERIV)
4082-#define VPC_ES11TEXPARAMETERX (VPG_ES11 + ES11_TEXPARAMETERX)
4083-#define VPC_ES11TEXPARAMETERXV (VPG_ES11 + ES11_TEXPARAMETERXV)
4084-#define VPC_ES11TEXSUBIMAGE2D (VPG_ES11 + ES11_TEXSUBIMAGE2D)
4085-#define VPC_ES11TRANSLATEF (VPG_ES11 + ES11_TRANSLATEF)
4086-#define VPC_ES11TRANSLATEX (VPG_ES11 + ES11_TRANSLATEX)
4087-#define VPC_ES11VERTEXPOINTER (VPG_ES11 + ES11_VERTEXPOINTER)
4088-#define VPC_ES11VIEWPORT (VPG_ES11 + ES11_VIEWPORT)
4089 /* OpenGL ES11 Statics Counter IDs. */
4090-#define VPC_ES11CALLS (VPG_ES11 + ES11_CALLS)
4091-#define VPC_ES11DRAWCALLS (VPG_ES11 + ES11_DRAWCALLS)
4092-#define VPC_ES11STATECHANGECALLS (VPG_ES11 + ES11_STATECHANGECALLS)
4093-#define VPC_ES11POINTCOUNT (VPG_ES11 + ES11_POINTCOUNT)
4094-#define VPC_ES11LINECOUNT (VPG_ES11 + ES11_LINECOUNT)
4095-#define VPC_ES11TRIANGLECOUNT (VPG_ES11 + ES11_TRIANGLECOUNT)
4096-
4097-/* OpenGLES 2.x */
4098-#define VPC_ES20ACTIVETEXTURE (VPG_ES20 + ES20_ACTIVETEXTURE)
4099-#define VPC_ES20ATTACHSHADER (VPG_ES20 + ES20_ATTACHSHADER)
4100-#define VPC_ES20BINDATTRIBLOCATION (VPG_ES20 + ES20_BINDATTRIBLOCATION)
4101-#define VPC_ES20BINDBUFFER (VPG_ES20 + ES20_BINDBUFFER)
4102-#define VPC_ES20BINDFRAMEBUFFER (VPG_ES20 + ES20_BINDFRAMEBUFFER)
4103-#define VPC_ES20BINDRENDERBUFFER (VPG_ES20 + ES20_BINDRENDERBUFFER)
4104-#define VPC_ES20BINDTEXTURE (VPG_ES20 + ES20_BINDTEXTURE)
4105-#define VPC_ES20BLENDCOLOR (VPG_ES20 + ES20_BLENDCOLOR)
4106-#define VPC_ES20BLENDEQUATION (VPG_ES20 + ES20_BLENDEQUATION)
4107-#define VPC_ES20BLENDEQUATIONSEPARATE (VPG_ES20 + ES20_BLENDEQUATIONSEPARATE)
4108-#define VPC_ES20BLENDFUNC (VPG_ES20 + ES20_BLENDFUNC)
4109-#define VPC_ES20BLENDFUNCSEPARATE (VPG_ES20 + ES20_BLENDFUNCSEPARATE)
4110-#define VPC_ES20BUFFERDATA (VPG_ES20 + ES20_BUFFERDATA)
4111-#define VPC_ES20BUFFERSUBDATA (VPG_ES20 + ES20_BUFFERSUBDATA)
4112-#define VPC_ES20CHECKFRAMEBUFFERSTATUS (VPG_ES20 + ES20_CHECKFRAMEBUFFERSTATUS)
4113-#define VPC_ES20CLEAR (VPG_ES20 + ES20_CLEAR)
4114-#define VPC_ES20CLEARCOLOR (VPG_ES20 + ES20_CLEARCOLOR)
4115-#define VPC_ES20CLEARDEPTHF (VPG_ES20 + ES20_CLEARDEPTHF)
4116-#define VPC_ES20CLEARSTENCIL (VPG_ES20 + ES20_CLEARSTENCIL)
4117-#define VPC_ES20COLORMASK (VPG_ES20 + ES20_COLORMASK)
4118-#define VPC_ES20COMPILESHADER (VPG_ES20 + ES20_COMPILESHADER)
4119-#define VPC_ES20COMPRESSEDTEXIMAGE2D (VPG_ES20 + ES20_COMPRESSEDTEXIMAGE2D)
4120-#define VPC_ES20COMPRESSEDTEXSUBIMAGE2D (VPG_ES20 + ES20_COMPRESSEDTEXSUBIMAGE2D)
4121-#define VPC_ES20COPYTEXIMAGE2D (VPG_ES20 + ES20_COPYTEXIMAGE2D)
4122-#define VPC_ES20COPYTEXSUBIMAGE2D (VPG_ES20 + ES20_COPYTEXSUBIMAGE2D)
4123-#define VPC_ES20CREATEPROGRAM (VPG_ES20 + ES20_CREATEPROGRAM)
4124-#define VPC_ES20CREATESHADER (VPG_ES20 + ES20_CREATESHADER)
4125-#define VPC_ES20CULLFACE (VPG_ES20 + ES20_CULLFACE)
4126-#define VPC_ES20DELETEBUFFERS (VPG_ES20 + ES20_DELETEBUFFERS)
4127-#define VPC_ES20DELETEFRAMEBUFFERS (VPG_ES20 + ES20_DELETEFRAMEBUFFERS)
4128-#define VPC_ES20DELETEPROGRAM (VPG_ES20 + ES20_DELETEPROGRAM)
4129-#define VPC_ES20DELETERENDERBUFFERS (VPG_ES20 + ES20_DELETERENDERBUFFERS)
4130-#define VPC_ES20DELETESHADER (VPG_ES20 + ES20_DELETESHADER)
4131-#define VPC_ES20DELETETEXTURES (VPG_ES20 + ES20_DELETETEXTURES)
4132-#define VPC_ES20DEPTHFUNC (VPG_ES20 + ES20_DEPTHFUNC)
4133-#define VPC_ES20DEPTHMASK (VPG_ES20 + ES20_DEPTHMASK)
4134-#define VPC_ES20DEPTHRANGEF (VPG_ES20 + ES20_DEPTHRANGEF)
4135-#define VPC_ES20DETACHSHADER (VPG_ES20 + ES20_DETACHSHADER)
4136-#define VPC_ES20DISABLE (VPG_ES20 + ES20_DISABLE)
4137-#define VPC_ES20DISABLEVERTEXATTRIBARRAY (VPG_ES20 + ES20_DISABLEVERTEXATTRIBARRAY)
4138-#define VPC_ES20DRAWARRAYS (VPG_ES20 + ES20_DRAWARRAYS)
4139-#define VPC_ES20DRAWELEMENTS (VPG_ES20 + ES20_DRAWELEMENTS)
4140-#define VPC_ES20ENABLE (VPG_ES20 + ES20_ENABLE)
4141-#define VPC_ES20ENABLEVERTEXATTRIBARRAY (VPG_ES20 + ES20_ENABLEVERTEXATTRIBARRAY)
4142-#define VPC_ES20FINISH (VPG_ES20 + ES20_FINISH)
4143-#define VPC_ES20FLUSH (VPG_ES20 + ES20_FLUSH)
4144-#define VPC_ES20FRAMEBUFFERRENDERBUFFER (VPG_ES20 + ES20_FRAMEBUFFERRENDERBUFFER)
4145-#define VPC_ES20FRAMEBUFFERTEXTURE2D (VPG_ES20 + ES20_FRAMEBUFFERTEXTURE2D)
4146-#define VPC_ES20FRONTFACE (VPG_ES20 + ES20_FRONTFACE)
4147-#define VPC_ES20GENBUFFERS (VPG_ES20 + ES20_GENBUFFERS)
4148-#define VPC_ES20GENERATEMIPMAP (VPG_ES20 + ES20_GENERATEMIPMAP)
4149-#define VPC_ES20GENFRAMEBUFFERS (VPG_ES20 + ES20_GENFRAMEBUFFERS)
4150-#define VPC_ES20GENRENDERBUFFERS (VPG_ES20 + ES20_GENRENDERBUFFERS)
4151-#define VPC_ES20GENTEXTURES (VPG_ES20 + ES20_GENTEXTURES)
4152-#define VPC_ES20GETACTIVEATTRIB (VPG_ES20 + ES20_GETACTIVEATTRIB)
4153-#define VPC_ES20GETACTIVEUNIFORM (VPG_ES20 + ES20_GETACTIVEUNIFORM)
4154-#define VPC_ES20GETATTACHEDSHADERS (VPG_ES20 + ES20_GETATTACHEDSHADERS)
4155-#define VPC_ES20GETATTRIBLOCATION (VPG_ES20 + ES20_GETATTRIBLOCATION)
4156-#define VPC_ES20GETBOOLEANV (VPG_ES20 + ES20_GETBOOLEANV)
4157-#define VPC_ES20GETBUFFERPARAMETERIV (VPG_ES20 + ES20_GETBUFFERPARAMETERIV)
4158-#define VPC_ES20GETERROR (VPG_ES20 + ES20_GETERROR)
4159-#define VPC_ES20GETFLOATV (VPG_ES20 + ES20_GETFLOATV)
4160-#define VPC_ES20GETFRAMEBUFFERATTACHMENTPARAMETERIV (VPG_ES20 + ES20_GETFRAMEBUFFERATTACHMENTPARAMETERIV)
4161-#define VPC_ES20GETINTEGERV (VPG_ES20 + ES20_GETINTEGERV)
4162-#define VPC_ES20GETPROGRAMIV (VPG_ES20 + ES20_GETPROGRAMIV)
4163-#define VPC_ES20GETPROGRAMINFOLOG (VPG_ES20 + ES20_GETPROGRAMINFOLOG)
4164-#define VPC_ES20GETRENDERBUFFERPARAMETERIV (VPG_ES20 + ES20_GETRENDERBUFFERPARAMETERIV)
4165-#define VPC_ES20GETSHADERIV (VPG_ES20 + ES20_GETSHADERIV)
4166-#define VPC_ES20GETSHADERINFOLOG (VPG_ES20 + ES20_GETSHADERINFOLOG)
4167-#define VPC_ES20GETSHADERPRECISIONFORMAT (VPG_ES20 + ES20_GETSHADERPRECISIONFORMAT)
4168-#define VPC_ES20GETSHADERSOURCE (VPG_ES20 + ES20_GETSHADERSOURCE)
4169-#define VPC_ES20GETSTRING (VPG_ES20 + ES20_GETSTRING)
4170-#define VPC_ES20GETTEXPARAMETERFV (VPG_ES20 + ES20_GETTEXPARAMETERFV)
4171-#define VPC_ES20GETTEXPARAMETERIV (VPG_ES20 + ES20_GETTEXPARAMETERIV)
4172-#define VPC_ES20GETUNIFORMFV (VPG_ES20 + ES20_GETUNIFORMFV)
4173-#define VPC_ES20GETUNIFORMIV (VPG_ES20 + ES20_GETUNIFORMIV)
4174-#define VPC_ES20GETUNIFORMLOCATION (VPG_ES20 + ES20_GETUNIFORMLOCATION)
4175-#define VPC_ES20GETVERTEXATTRIBFV (VPG_ES20 + ES20_GETVERTEXATTRIBFV)
4176-#define VPC_ES20GETVERTEXATTRIBIV (VPG_ES20 + ES20_GETVERTEXATTRIBIV)
4177-#define VPC_ES20GETVERTEXATTRIBPOINTERV (VPG_ES20 + ES20_GETVERTEXATTRIBPOINTERV)
4178-#define VPC_ES20HINT (VPG_ES20 + ES20_HINT)
4179-#define VPC_ES20ISBUFFER (VPG_ES20 + ES20_ISBUFFER)
4180-#define VPC_ES20ISENABLED (VPG_ES20 + ES20_ISENABLED)
4181-#define VPC_ES20ISFRAMEBUFFER (VPG_ES20 + ES20_ISFRAMEBUFFER)
4182-#define VPC_ES20ISPROGRAM (VPG_ES20 + ES20_ISPROGRAM)
4183-#define VPC_ES20ISRENDERBUFFER (VPG_ES20 + ES20_ISRENDERBUFFER)
4184-#define VPC_ES20ISSHADER (VPG_ES20 + ES20_ISSHADER)
4185-#define VPC_ES20ISTEXTURE (VPG_ES20 + ES20_ISTEXTURE)
4186-#define VPC_ES20LINEWIDTH (VPG_ES20 + ES20_LINEWIDTH)
4187-#define VPC_ES20LINKPROGRAM (VPG_ES20 + ES20_LINKPROGRAM)
4188-#define VPC_ES20PIXELSTOREI (VPG_ES20 + ES20_PIXELSTOREI)
4189-#define VPC_ES20POLYGONOFFSET (VPG_ES20 + ES20_POLYGONOFFSET)
4190-#define VPC_ES20READPIXELS (VPG_ES20 + ES20_READPIXELS)
4191-#define VPC_ES20RELEASESHADERCOMPILER (VPG_ES20 + ES20_RELEASESHADERCOMPILER)
4192-#define VPC_ES20RENDERBUFFERSTORAGE (VPG_ES20 + ES20_RENDERBUFFERSTORAGE)
4193-#define VPC_ES20SAMPLECOVERAGE (VPG_ES20 + ES20_SAMPLECOVERAGE)
4194-#define VPC_ES20SCISSOR (VPG_ES20 + ES20_SCISSOR)
4195-#define VPC_ES20SHADERBINARY (VPG_ES20 + ES20_SHADERBINARY)
4196-#define VPC_ES20SHADERSOURCE (VPG_ES20 + ES20_SHADERSOURCE)
4197-#define VPC_ES20STENCILFUNC (VPG_ES20 + ES20_STENCILFUNC)
4198-#define VPC_ES20STENCILFUNCSEPARATE (VPG_ES20 + ES20_STENCILFUNCSEPARATE)
4199-#define VPC_ES20STENCILMASK (VPG_ES20 + ES20_STENCILMASK)
4200-#define VPC_ES20STENCILMASKSEPARATE (VPG_ES20 + ES20_STENCILMASKSEPARATE)
4201-#define VPC_ES20STENCILOP (VPG_ES20 + ES20_STENCILOP)
4202-#define VPC_ES20STENCILOPSEPARATE (VPG_ES20 + ES20_STENCILOPSEPARATE)
4203-#define VPC_ES20TEXIMAGE2D (VPG_ES20 + ES20_TEXIMAGE2D)
4204-#define VPC_ES20TEXPARAMETERF (VPG_ES20 + ES20_TEXPARAMETERF)
4205-#define VPC_ES20TEXPARAMETERFV (VPG_ES20 + ES20_TEXPARAMETERFV)
4206-#define VPC_ES20TEXPARAMETERI (VPG_ES20 + ES20_TEXPARAMETERI)
4207-#define VPC_ES20TEXPARAMETERIV (VPG_ES20 + ES20_TEXPARAMETERIV)
4208-#define VPC_ES20TEXSUBIMAGE2D (VPG_ES20 + ES20_TEXSUBIMAGE2D)
4209-#define VPC_ES20UNIFORM1F (VPG_ES20 + ES20_UNIFORM1F)
4210-#define VPC_ES20UNIFORM1FV (VPG_ES20 + ES20_UNIFORM1FV)
4211-#define VPC_ES20UNIFORM1I (VPG_ES20 + ES20_UNIFORM1I)
4212-#define VPC_ES20UNIFORM1IV (VPG_ES20 + ES20_UNIFORM1IV)
4213-#define VPC_ES20UNIFORM2F (VPG_ES20 + ES20_UNIFORM2F)
4214-#define VPC_ES20UNIFORM2FV (VPG_ES20 + ES20_UNIFORM2FV)
4215-#define VPC_ES20UNIFORM2I (VPG_ES20 + ES20_UNIFORM2I)
4216-#define VPC_ES20UNIFORM2IV (VPG_ES20 + ES20_UNIFORM2IV)
4217-#define VPC_ES20UNIFORM3F (VPG_ES20 + ES20_UNIFORM3F)
4218-#define VPC_ES20UNIFORM3FV (VPG_ES20 + ES20_UNIFORM3FV)
4219-#define VPC_ES20UNIFORM3I (VPG_ES20 + ES20_UNIFORM3I)
4220-#define VPC_ES20UNIFORM3IV (VPG_ES20 + ES20_UNIFORM3IV)
4221-#define VPC_ES20UNIFORM4F (VPG_ES20 + ES20_UNIFORM4F)
4222-#define VPC_ES20UNIFORM4FV (VPG_ES20 + ES20_UNIFORM4FV)
4223-#define VPC_ES20UNIFORM4I (VPG_ES20 + ES20_UNIFORM4I)
4224-#define VPC_ES20UNIFORM4IV (VPG_ES20 + ES20_UNIFORM4IV)
4225-#define VPC_ES20UNIFORMMATRIX2FV (VPG_ES20 + ES20_UNIFORMMATRIX2FV)
4226-#define VPC_ES20UNIFORMMATRIX3FV (VPG_ES20 + ES20_UNIFORMMATRIX3FV)
4227-#define VPC_ES20UNIFORMMATRIX4FV (VPG_ES20 + ES20_UNIFORMMATRIX4FV)
4228-#define VPC_ES20USEPROGRAM (VPG_ES20 + ES20_USEPROGRAM)
4229-#define VPC_ES20VALIDATEPROGRAM (VPG_ES20 + ES20_VALIDATEPROGRAM)
4230-#define VPC_ES20VERTEXATTRIB1F (VPG_ES20 + ES20_VERTEXATTRIB1F)
4231-#define VPC_ES20VERTEXATTRIB1FV (VPG_ES20 + ES20_VERTEXATTRIB1FV)
4232-#define VPC_ES20VERTEXATTRIB2F (VPG_ES20 + ES20_VERTEXATTRIB2F)
4233-#define VPC_ES20VERTEXATTRIB2FV (VPG_ES20 + ES20_VERTEXATTRIB2FV)
4234-#define VPC_ES20VERTEXATTRIB3F (VPG_ES20 + ES20_VERTEXATTRIB3F)
4235-#define VPC_ES20VERTEXATTRIB3FV (VPG_ES20 + ES20_VERTEXATTRIB3FV)
4236-#define VPC_ES20VERTEXATTRIB4F (VPG_ES20 + ES20_VERTEXATTRIB4F)
4237-#define VPC_ES20VERTEXATTRIB4FV (VPG_ES20 + ES20_VERTEXATTRIB4FV)
4238-#define VPC_ES20VERTEXATTRIBPOINTER (VPG_ES20 + ES20_VERTEXATTRIBPOINTER)
4239-#define VPC_ES20VIEWPORT (VPG_ES20 + ES20_VIEWPORT)
4240+#define VPC_ES11CALLS (VPG_ES11 + ES11_CALLS)
4241+#define VPC_ES11DRAWCALLS (VPG_ES11 + ES11_DRAWCALLS)
4242+#define VPC_ES11STATECHANGECALLS (VPG_ES11 + ES11_STATECHANGECALLS)
4243+#define VPC_ES11POINTCOUNT (VPG_ES11 + ES11_POINTCOUNT)
4244+#define VPC_ES11LINECOUNT (VPG_ES11 + ES11_LINECOUNT)
4245+#define VPC_ES11TRIANGLECOUNT (VPG_ES11 + ES11_TRIANGLECOUNT)
4246+
4247 /* OpenGL ES20 Statistics Counter IDs. */
4248-#define VPC_ES20CALLS (VPG_ES20 + ES20_CALLS)
4249-#define VPC_ES20DRAWCALLS (VPG_ES20 + ES20_DRAWCALLS)
4250-#define VPC_ES20STATECHANGECALLS (VPG_ES20 + ES20_STATECHANGECALLS)
4251-#define VPC_ES20POINTCOUNT (VPG_ES20 + ES20_POINTCOUNT)
4252-#define VPC_ES20LINECOUNT (VPG_ES20 + ES20_LINECOUNT)
4253-#define VPC_ES20TRIANGLECOUNT (VPG_ES20 + ES20_TRIANGLECOUNT)
4254-
4255-/* VG11 Counters. */
4256-#define VPC_VG11APPENDPATH (VPG_VG11 + VG11_APPENDPATH)
4257-#define VPC_VG11APPENDPATHDATA (VPG_VG11 + VG11_APPENDPATHDATA)
4258-#define VPC_VG11CHILDIMAGE (VPG_VG11 + VG11_CHILDIMAGE)
4259-#define VPC_VG11CLEAR (VPG_VG11 + VG11_CLEAR)
4260-#define VPC_VG11CLEARGLYPH (VPG_VG11 + VG11_CLEARGLYPH)
4261-#define VPC_VG11CLEARIMAGE (VPG_VG11 + VG11_CLEARIMAGE)
4262-#define VPC_VG11CLEARPATH (VPG_VG11 + VG11_CLEARPATH)
4263-#define VPC_VG11COLORMATRIX (VPG_VG11 + VG11_COLORMATRIX)
4264-#define VPC_VG11CONVOLVE (VPG_VG11 + VG11_CONVOLVE)
4265-#define VPC_VG11COPYIMAGE (VPG_VG11 + VG11_COPYIMAGE)
4266-#define VPC_VG11COPYMASK (VPG_VG11 + VG11_COPYMASK)
4267-#define VPC_VG11COPYPIXELS (VPG_VG11 + VG11_COPYPIXELS)
4268-#define VPC_VG11CREATEFONT (VPG_VG11 + VG11_CREATEFONT)
4269-#define VPC_VG11CREATEIMAGE (VPG_VG11 + VG11_CREATEIMAGE)
4270-#define VPC_VG11CREATEMASKLAYER (VPG_VG11 + VG11_CREATEMASKLAYER)
4271-#define VPC_VG11CREATEPAINT (VPG_VG11 + VG11_CREATEPAINT)
4272-#define VPC_VG11CREATEPATH (VPG_VG11 + VG11_CREATEPATH)
4273-#define VPC_VG11DESTROYFONT (VPG_VG11 + VG11_DESTROYFONT)
4274-#define VPC_VG11DESTROYIMAGE (VPG_VG11 + VG11_DESTROYIMAGE)
4275-#define VPC_VG11DESTROYMASKLAYER (VPG_VG11 + VG11_DESTROYMASKLAYER)
4276-#define VPC_VG11DESTROYPAINT (VPG_VG11 + VG11_DESTROYPAINT)
4277-#define VPC_VG11DESTROYPATH (VPG_VG11 + VG11_DESTROYPATH)
4278-#define VPC_VG11DRAWGLYPH (VPG_VG11 + VG11_DRAWGLYPH)
4279-#define VPC_VG11DRAWGLYPHS (VPG_VG11 + VG11_DRAWGLYPHS)
4280-#define VPC_VG11DRAWIMAGE (VPG_VG11 + VG11_DRAWIMAGE)
4281-#define VPC_VG11DRAWPATH (VPG_VG11 + VG11_DRAWPATH)
4282-#define VPC_VG11FILLMASKLAYER (VPG_VG11 + VG11_FILLMASKLAYER)
4283-#define VPC_VG11FINISH (VPG_VG11 + VG11_FINISH)
4284-#define VPC_VG11FLUSH (VPG_VG11 + VG11_FLUSH)
4285-#define VPC_VG11GAUSSIANBLUR (VPG_VG11 + VG11_GAUSSIANBLUR)
4286-#define VPC_VG11GETCOLOR (VPG_VG11 + VG11_GETCOLOR)
4287-#define VPC_VG11GETERROR (VPG_VG11 + VG11_GETERROR)
4288-#define VPC_VG11GETF (VPG_VG11 + VG11_GETF)
4289-#define VPC_VG11GETFV (VPG_VG11 + VG11_GETFV)
4290-#define VPC_VG11GETI (VPG_VG11 + VG11_GETI)
4291-#define VPC_VG11GETIMAGESUBDATA (VPG_VG11 + VG11_GETIMAGESUBDATA)
4292-#define VPC_VG11GETIV (VPG_VG11 + VG11_GETIV)
4293-#define VPC_VG11GETMATRIX (VPG_VG11 + VG11_GETMATRIX)
4294-#define VPC_VG11GETPAINT (VPG_VG11 + VG11_GETPAINT)
4295-#define VPC_VG11GETPARAMETERF (VPG_VG11 + VG11_GETPARAMETERF)
4296-#define VPC_VG11GETPARAMETERFV (VPG_VG11 + VG11_GETPARAMETERFV)
4297-#define VPC_VG11GETPARAMETERI (VPG_VG11 + VG11_GETPARAMETERI)
4298-#define VPC_VG11GETPARAMETERIV (VPG_VG11 + VG11_GETPARAMETERIV)
4299-#define VPC_VG11GETPARAMETERVECTORSIZE (VPG_VG11 + VG11_GETPARAMETERVECTORSIZE)
4300-#define VPC_VG11GETPARENT (VPG_VG11 + VG11_GETPARENT)
4301-#define VPC_VG11GETPATHCAPABILITIES (VPG_VG11 + VG11_GETPATHCAPABILITIES)
4302-#define VPC_VG11GETPIXELS (VPG_VG11 + VG11_GETPIXELS)
4303-#define VPC_VG11GETSTRING (VPG_VG11 + VG11_GETSTRING)
4304-#define VPC_VG11GETVECTORSIZE (VPG_VG11 + VG11_GETVECTORSIZE)
4305-#define VPC_VG11HARDWAREQUERY (VPG_VG11 + VG11_HARDWAREQUERY)
4306-#define VPC_VG11IMAGESUBDATA (VPG_VG11 + VG11_IMAGESUBDATA)
4307-#define VPC_VG11INTERPOLATEPATH (VPG_VG11 + VG11_INTERPOLATEPATH)
4308-#define VPC_VG11LOADIDENTITY (VPG_VG11 + VG11_LOADIDENTITY)
4309-#define VPC_VG11LOADMATRIX (VPG_VG11 + VG11_LOADMATRIX)
4310-#define VPC_VG11LOOKUP (VPG_VG11 + VG11_LOOKUP)
4311-#define VPC_VG11LOOKUPSINGLE (VPG_VG11 + VG11_LOOKUPSINGLE)
4312-#define VPC_VG11MASK (VPG_VG11 + VG11_MASK)
4313-#define VPC_VG11MODIFYPATHCOORDS (VPG_VG11 + VG11_MODIFYPATHCOORDS)
4314-#define VPC_VG11MULTMATRIX (VPG_VG11 + VG11_MULTMATRIX)
4315-#define VPC_VG11PAINTPATTERN (VPG_VG11 + VG11_PAINTPATTERN)
4316-#define VPC_VG11PATHBOUNDS (VPG_VG11 + VG11_PATHBOUNDS)
4317-#define VPC_VG11PATHLENGTH (VPG_VG11 + VG11_PATHLENGTH)
4318-#define VPC_VG11PATHTRANSFORMEDBOUNDS (VPG_VG11 + VG11_PATHTRANSFORMEDBOUNDS)
4319-#define VPC_VG11POINTALONGPATH (VPG_VG11 + VG11_POINTALONGPATH)
4320-#define VPC_VG11READPIXELS (VPG_VG11 + VG11_READPIXELS)
4321-#define VPC_VG11REMOVEPATHCAPABILITIES (VPG_VG11 + VG11_REMOVEPATHCAPABILITIES)
4322-#define VPC_VG11RENDERTOMASK (VPG_VG11 + VG11_RENDERTOMASK)
4323-#define VPC_VG11ROTATE (VPG_VG11 + VG11_ROTATE)
4324-#define VPC_VG11SCALE (VPG_VG11 + VG11_SCALE)
4325-#define VPC_VG11SEPARABLECONVOLVE (VPG_VG11 + VG11_SEPARABLECONVOLVE)
4326-#define VPC_VG11SETCOLOR (VPG_VG11 + VG11_SETCOLOR)
4327-#define VPC_VG11SETF (VPG_VG11 + VG11_SETF)
4328-#define VPC_VG11SETFV (VPG_VG11 + VG11_SETFV)
4329-#define VPC_VG11SETGLYPHTOIMAGE (VPG_VG11 + VG11_SETGLYPHTOIMAGE)
4330-#define VPC_VG11SETGLYPHTOPATH (VPG_VG11 + VG11_SETGLYPHTOPATH)
4331-#define VPC_VG11SETI (VPG_VG11 + VG11_SETI)
4332-#define VPC_VG11SETIV (VPG_VG11 + VG11_SETIV)
4333-#define VPC_VG11SETPAINT (VPG_VG11 + VG11_SETPAINT)
4334-#define VPC_VG11SETPARAMETERF (VPG_VG11 + VG11_SETPARAMETERF)
4335-#define VPC_VG11SETPARAMETERFV (VPG_VG11 + VG11_SETPARAMETERFV)
4336-#define VPC_VG11SETPARAMETERI (VPG_VG11 + VG11_SETPARAMETERI)
4337-#define VPC_VG11SETPARAMETERIV (VPG_VG11 + VG11_SETPARAMETERIV)
4338-#define VPC_VG11SETPIXELS (VPG_VG11 + VG11_SETPIXELS)
4339-#define VPC_VG11SHEAR (VPG_VG11 + VG11_SHEAR)
4340-#define VPC_VG11TRANSFORMPATH (VPG_VG11 + VG11_TRANSFORMPATH)
4341-#define VPC_VG11TRANSLATE (VPG_VG11 + VG11_TRANSLATE)
4342-#define VPC_VG11WRITEPIXELS (VPG_VG11 + VG11_WRITEPIXELS)
4343+#define VPC_ES20CALLS (VPG_ES20 + ES20_CALLS)
4344+#define VPC_ES20DRAWCALLS (VPG_ES20 + ES20_DRAWCALLS)
4345+#define VPC_ES20STATECHANGECALLS (VPG_ES20 + ES20_STATECHANGECALLS)
4346+#define VPC_ES20POINTCOUNT (VPG_ES20 + ES20_POINTCOUNT)
4347+#define VPC_ES20LINECOUNT (VPG_ES20 + ES20_LINECOUNT)
4348+#define VPC_ES20TRIANGLECOUNT (VPG_ES20 + ES20_TRIANGLECOUNT)
4349+
4350 /* OpenVG Statistics Counter IDs. */
4351-#define VPC_VG11CALLS (VPG_VG11 + VG11_CALLS)
4352-#define VPC_VG11DRAWCALLS (VPG_VG11 + VG11_DRAWCALLS)
4353-#define VPC_VG11STATECHANGECALLS (VPG_VG11 + VG11_STATECHANGECALLS)
4354-#define VPC_VG11FILLCOUNT (VPG_VG11 + VG11_FILLCOUNT)
4355-#define VPC_VG11STROKECOUNT (VPG_VG11 + VG11_STROKECOUNT)
4356+#define VPC_VG11CALLS (VPG_VG11 + VG11_CALLS)
4357+#define VPC_VG11DRAWCALLS (VPG_VG11 + VG11_DRAWCALLS)
4358+#define VPC_VG11STATECHANGECALLS (VPG_VG11 + VG11_STATECHANGECALLS)
4359+#define VPC_VG11FILLCOUNT (VPG_VG11 + VG11_FILLCOUNT)
4360+#define VPC_VG11STROKECOUNT (VPG_VG11 + VG11_STROKECOUNT)
4361
4362 /* HAL Counters. */
4363 #define VPC_HALVERTBUFNEWBYTEALLOC (VPG_HAL + HAL_VERTBUFNEWBYTEALLOC)
4364@@ -1018,7 +248,7 @@ extern "C" {
4365 #define VPC_GPUREAD64BYTE (VPG_GPU + GPU_READ64BYTE)
4366 #define VPC_GPUWRITE64BYTE (VPG_GPU + GPU_WRITE64BYTE)
4367 #define VPC_GPUTOTALCYCLES (VPG_GPU + GPU_TOTALCYCLES)
4368-#define VPC_GPUIDLECYCLES (VPG_GPU + GPU_IDLECYCLES)
4369+#define VPC_GPUIDLECYCLES (VPG_GPU + GPU_IDLECYCLES)
4370
4371 /* HW: Shader Counters. */
4372 #define VPC_VSINSTCOUNT (VPG_VS + VS_INSTCOUNT)
4373@@ -1026,9 +256,9 @@ extern "C" {
4374 #define VPC_VSTEXLDINSTCOUNT (VPG_VS + VS_TEXLDINSTCOUNT)
4375 #define VPC_VSRENDEREDVERTCOUNT (VPG_VS + VS_RENDEREDVERTCOUNT)
4376 /* HW: PS Count. */
4377-#define VPC_PSINSTCOUNT (VPG_PS + PS_INSTCOUNT)
4378-#define VPC_PSBRANCHINSTCOUNT (VPG_PS + PS_BRANCHINSTCOUNT)
4379-#define VPC_PSTEXLDINSTCOUNT (VPG_PS + PS_TEXLDINSTCOUNT)
4380+#define VPC_PSINSTCOUNT (VPG_PS + PS_INSTCOUNT)
4381+#define VPC_PSBRANCHINSTCOUNT (VPG_PS + PS_BRANCHINSTCOUNT)
4382+#define VPC_PSTEXLDINSTCOUNT (VPG_PS + PS_TEXLDINSTCOUNT)
4383 #define VPC_PSRENDEREDPIXCOUNT (VPG_PS + PS_RENDEREDPIXCOUNT)
4384
4385
4386@@ -1071,7 +301,7 @@ extern "C" {
4387 #define VPC_PEDRAWNBYDEPTH (VPG_PE + PE_DRAWNBYDEPTH)
4388
4389 /* HW: MC Counters. */
4390-#define VPC_MCREADREQ8BPIPE (VPG_MC + MC_READREQ8BPIPE)
4391+#define VPC_MCREADREQ8BPIPE (VPG_MC + MC_READREQ8BPIPE)
4392 #define VPC_MCREADREQ8BIP (VPG_MC + MC_READREQ8BIP)
4393 #define VPC_MCWRITEREQ8BPIPE (VPG_MC + MC_WRITEREQ8BPIPE)
4394
4395@@ -1087,6 +317,7 @@ extern "C" {
4396 #define VPC_PVSATTRIBCOUNT (VPG_PVS + PVS_ATTRIBCOUNT)
4397 #define VPC_PVSUNIFORMCOUNT (VPG_PVS + PVS_UNIFORMCOUNT)
4398 #define VPC_PVSFUNCTIONCOUNT (VPG_PVS + PVS_FUNCTIONCOUNT)
4399+#define VPC_PVSSOURCE (VPG_PVS + PVS_SOURCE)
4400
4401 #define VPC_PPSINSTRCOUNT (VPG_PPS + PPS_INSTRCOUNT)
4402 #define VPC_PPSALUINSTRCOUNT (VPG_PPS + PPS_ALUINSTRCOUNT)
4403@@ -1094,7 +325,9 @@ extern "C" {
4404 #define VPC_PPSATTRIBCOUNT (VPG_PPS + PPS_ATTRIBCOUNT)
4405 #define VPC_PPSUNIFORMCOUNT (VPG_PPS + PPS_UNIFORMCOUNT)
4406 #define VPC_PPSFUNCTIONCOUNT (VPG_PPS + PPS_FUNCTIONCOUNT)
4407+#define VPC_PPSSOURCE (VPG_PPS + PPS_SOURCE)
4408
4409+#define VPC_PROGRAMHANDLE (VPG_PROG + 1)
4410
4411 #define VPG_ES20_DRAW_NO (VPG_ES20_DRAW + 1)
4412 #define VPG_ES11_DRAW_NO (VPG_ES11_DRAW + 1)
4413@@ -1118,8 +351,8 @@ typedef struct _gcsPROFILER_COUNTERS
4414
4415 /* HW vairable counters. */
4416 gctUINT32 gpuCyclesCounter;
4417- gctUINT32 gpuTotalCyclesCounter;
4418- gctUINT32 gpuIdleCyclesCounter;
4419+ gctUINT32 gpuTotalCyclesCounter;
4420+ gctUINT32 gpuIdleCyclesCounter;
4421 gctUINT32 gpuTotalRead64BytesPerFrame;
4422 gctUINT32 gpuTotalWrite64BytesPerFrame;
4423
4424@@ -1158,7 +391,7 @@ typedef struct _gcsPROFILER_COUNTERS
4425 gctUINT32 ra_total_primitive_count;
4426 gctUINT32 ra_pipe_cache_miss_counter;
4427 gctUINT32 ra_prefetch_cache_miss_counter;
4428- gctUINT32 ra_eez_culled_counter;
4429+ gctUINT32 ra_eez_culled_counter;
4430
4431 /* TX */
4432 gctUINT32 tx_total_bilinear_requests;
4433@@ -1190,7 +423,7 @@ typedef struct _gcsPROFILER
4434 gctBOOL enableHal;
4435 gctBOOL enableHW;
4436 gctBOOL enableSH;
4437- gctBOOL isSyncMode;
4438+ gctBOOL isSyncMode;
4439
4440 gctBOOL useSocket;
4441 gctINT sockFd;
4442@@ -1234,14 +467,17 @@ typedef struct _gcsPROFILER
4443 gctUINT32 redundantStateChangeCalls;
4444 #endif
4445
4446- gctUINT32 prevVSInstCount;
4447- gctUINT32 prevVSBranchInstCount;
4448- gctUINT32 prevVSTexInstCount;
4449- gctUINT32 prevVSVertexCount;
4450- gctUINT32 prevPSInstCount;
4451- gctUINT32 prevPSBranchInstCount;
4452- gctUINT32 prevPSTexInstCount;
4453- gctUINT32 prevPSPixelCount;
4454+ gctUINT32 prevVSInstCount;
4455+ gctUINT32 prevVSBranchInstCount;
4456+ gctUINT32 prevVSTexInstCount;
4457+ gctUINT32 prevVSVertexCount;
4458+ gctUINT32 prevPSInstCount;
4459+ gctUINT32 prevPSBranchInstCount;
4460+ gctUINT32 prevPSTexInstCount;
4461+ gctUINT32 prevPSPixelCount;
4462+
4463+ char* psSource;
4464+ char* vsSource;
4465
4466 }
4467 gcsPROFILER;
4468@@ -1315,6 +551,18 @@ gcoPROFILER_Count(
4469 IN gctINT Value
4470 );
4471
4472+gceSTATUS
4473+gcoPROFILER_ShaderSourceFS(
4474+ IN gcoHAL Hal,
4475+ IN char* source
4476+ );
4477+
4478+gceSTATUS
4479+gcoPROFILER_ShaderSourceVS(
4480+ IN gcoHAL Hal,
4481+ IN char* source
4482+ );
4483+
4484 /* Profile input vertex shader. */
4485 gceSTATUS
4486 gcoPROFILER_ShaderVS(
4487diff --git a/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_raster.h b/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_raster.h
4488index bc4171e..6e4d830 100644
4489--- a/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_raster.h
4490+++ b/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_raster.h
4491@@ -568,6 +568,23 @@ gco2D_MonoBlit(
4492 IN gceSURF_FORMAT DestFormat
4493 );
4494
4495+gceSTATUS
4496+gco2D_MonoBlitEx(
4497+ IN gco2D Engine,
4498+ IN gctPOINTER StreamBits,
4499+ IN gctINT32 StreamStride,
4500+ IN gctINT32 StreamWidth,
4501+ IN gctINT32 StreamHeight,
4502+ IN gctINT32 StreamX,
4503+ IN gctINT32 StreamY,
4504+ IN gctUINT32 FgColor,
4505+ IN gctUINT32 BgColor,
4506+ IN gcsRECT_PTR SrcRect,
4507+ IN gcsRECT_PTR DstRect,
4508+ IN gctUINT8 FgRop,
4509+ IN gctUINT8 BgRop
4510+ );
4511+
4512 /* Set kernel size. */
4513 gceSTATUS
4514 gco2D_SetKernelSize(
4515@@ -942,6 +959,15 @@ gco2D_SetSourceTileStatus(
4516 );
4517
4518 gceSTATUS
4519+gco2D_SetTargetTileStatus(
4520+ IN gco2D Engine,
4521+ IN gce2D_TILE_STATUS_CONFIG TileStatusConfig,
4522+ IN gceSURF_FORMAT CompressedFormat,
4523+ IN gctUINT32 ClearValue,
4524+ IN gctUINT32 GpuAddress
4525+ );
4526+
4527+gceSTATUS
4528 gco2D_QueryU32(
4529 IN gco2D Engine,
4530 IN gce2D_QUERY Item,
4531@@ -955,6 +981,28 @@ gco2D_SetStateU32(
4532 IN gctUINT32 Value
4533 );
4534
4535+gceSTATUS
4536+gco2D_SetStateArrayI32(
4537+ IN gco2D Engine,
4538+ IN gce2D_STATE State,
4539+ IN gctINT32_PTR Array,
4540+ IN gctINT32 ArraySize
4541+ );
4542+
4543+gceSTATUS
4544+gco2D_SetStateArrayU32(
4545+ IN gco2D Engine,
4546+ IN gce2D_STATE State,
4547+ IN gctUINT32_PTR Array,
4548+ IN gctINT32 ArraySize
4549+ );
4550+
4551+gceSTATUS
4552+gco2D_SetTargetRect(
4553+ IN gco2D Engine,
4554+ IN gcsRECT_PTR Rect
4555+ );
4556+
4557 #ifdef __cplusplus
4558 }
4559 #endif
4560diff --git a/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_types.h b/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_types.h
4561index 5c0877d..14801aa 100644
4562--- a/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_types.h
4563+++ b/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_types.h
4564@@ -128,6 +128,7 @@ typedef int gctBOOL;
4565 typedef gctBOOL * gctBOOL_PTR;
4566
4567 typedef int gctINT;
4568+typedef long gctLONG;
4569 typedef signed char gctINT8;
4570 typedef signed short gctINT16;
4571 typedef signed int gctINT32;
4572@@ -171,6 +172,7 @@ typedef void * gctFILE;
4573 typedef void * gctSIGNAL;
4574 typedef void * gctWINDOW;
4575 typedef void * gctIMAGE;
4576+typedef void * gctSYNC_POINT;
4577
4578 typedef void * gctSEMAPHORE;
4579
4580@@ -941,12 +943,19 @@ typedef struct _gcsHAL_FRAME_INFO
4581 OUT gctUINT readRequests[8];
4582 OUT gctUINT writeRequests[8];
4583
4584+ /* FE counters. */
4585+ OUT gctUINT drawCount;
4586+ OUT gctUINT vertexOutCount;
4587+ OUT gctUINT vertexMissCount;
4588+
4589 /* 3D counters. */
4590 OUT gctUINT vertexCount;
4591 OUT gctUINT primitiveCount;
4592 OUT gctUINT rejectedPrimitives;
4593 OUT gctUINT culledPrimitives;
4594 OUT gctUINT clippedPrimitives;
4595+ OUT gctUINT droppedPrimitives;
4596+ OUT gctUINT frustumClippedPrimitives;
4597 OUT gctUINT outPrimitives;
4598 OUT gctUINT inPrimitives;
4599 OUT gctUINT culledQuadCount;
4600@@ -964,18 +973,86 @@ typedef struct _gcsHAL_FRAME_INFO
4601 OUT gctUINT shaderCycles;
4602 OUT gctUINT vsInstructionCount;
4603 OUT gctUINT vsTextureCount;
4604+ OUT gctUINT vsBranchCount;
4605+ OUT gctUINT vsVertices;
4606 OUT gctUINT psInstructionCount;
4607 OUT gctUINT psTextureCount;
4608+ OUT gctUINT psBranchCount;
4609+ OUT gctUINT psPixels;
4610
4611 /* Texture counters. */
4612 OUT gctUINT bilinearRequests;
4613 OUT gctUINT trilinearRequests;
4614- OUT gctUINT txBytes8;
4615+ OUT gctUINT txBytes8[2];
4616 OUT gctUINT txHitCount;
4617 OUT gctUINT txMissCount;
4618 }
4619 gcsHAL_FRAME_INFO;
4620
4621+typedef enum _gcePATCH_ID
4622+{
4623+ gcePATCH_UNKNOWN = 0xFFFFFFFF,
4624+
4625+ /* Benchmark list*/
4626+ gcePATCH_GLB11 = 0x0,
4627+ gcePATCH_GLB21,
4628+ gcePATCH_GLB25,
4629+ gcePATCH_GLB27,
4630+
4631+ gcePATCH_BM21,
4632+ gcePATCH_MM,
4633+ gcePATCH_MM06,
4634+ gcePATCH_MM07,
4635+ gcePATCH_QUADRANT,
4636+ gcePATCH_ANTUTU,
4637+ gcePATCH_SMARTBENCH,
4638+ gcePATCH_JPCT,
4639+ gcePATCH_NENAMARK,
4640+ gcePATCH_NENAMARK2,
4641+ gcePATCH_NEOCORE,
4642+ gcePATCH_GLB,
4643+ gcePATCH_GB,
4644+ gcePATCH_RTESTVA,
4645+ gcePATCH_BMX,
4646+ gcePATCH_BMGUI,
4647+
4648+ /* Game list */
4649+ gcePATCH_NBA2013,
4650+ gcePATCH_BARDTALE,
4651+ gcePATCH_BUSPARKING3D,
4652+ gcePATCH_FISHBOODLE,
4653+ gcePATCH_SUBWAYSURFER,
4654+ gcePATCH_HIGHWAYDRIVER,
4655+ gcePATCH_PREMIUM,
4656+ gcePATCH_RACEILLEGAL,
4657+ gcePATCH_BLABLA,
4658+ gcePATCH_MEGARUN,
4659+ gcePATCH_GALAXYONFIRE2,
4660+ gcePATCH_GLOFTR3HM,
4661+ gcePATCH_GLOFTSXHM,
4662+ gcePATCH_GLOFTF3HM,
4663+ gcePATCH_GLOFTGANG,
4664+ gcePATCH_XRUNNER,
4665+ gcePATCH_WP,
4666+ gcePATCH_DEVIL,
4667+ gcePATCH_HOLYARCH,
4668+ gcePATCH_MUSE,
4669+ gcePATCH_SG,
4670+ gcePATCH_SIEGECRAFT,
4671+ gcePATCH_CARCHALLENGE,
4672+ gcePATCH_HEROESCALL,
4673+ gcePATCH_MONOPOLY,
4674+ gcePATCH_CTGL20,
4675+ gcePATCH_FIREFOX,
4676+ gcePATCH_CHORME,
4677+ gcePATCH_DUOKANTV,
4678+ gcePATCH_TESTAPP,
4679+
4680+ /* Count enum*/
4681+ gcePATCH_COUNT,
4682+}
4683+gcePATCH_ID;
4684+
4685 #if gcdLINK_QUEUE_SIZE
4686 typedef struct _gckLINKDATA * gckLINKDATA;
4687 struct _gckLINKDATA
4688diff --git a/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_version.h b/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_version.h
4689index 03cb4d6..2eab666 100644
4690--- a/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_version.h
4691+++ b/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_version.h
4692@@ -28,7 +28,7 @@
4693
4694 #define gcvVERSION_PATCH 9
4695
4696-#define gcvVERSION_BUILD 6622
4697+#define gcvVERSION_BUILD 9754
4698
4699 #define gcvVERSION_DATE __DATE__
4700
4701diff --git a/drivers/mxc/gpu-viv/hal/os/linux/kernel/gc_hal_kernel_device.c b/drivers/mxc/gpu-viv/hal/os/linux/kernel/gc_hal_kernel_device.c
4702index 4d48bd5..b029428 100644
4703--- a/drivers/mxc/gpu-viv/hal/os/linux/kernel/gc_hal_kernel_device.c
4704+++ b/drivers/mxc/gpu-viv/hal/os/linux/kernel/gc_hal_kernel_device.c
4705@@ -25,7 +25,9 @@
4706 #include <linux/mm.h>
4707 #include <linux/mman.h>
4708 #include <linux/slab.h>
4709+#if LINUX_VERSION_CODE < KERNEL_VERSION(3,10,0)
4710 #include <mach/hardware.h>
4711+#endif
4712 #include <linux/pm_runtime.h>
4713
4714 #define _GC_OBJ_ZONE gcvZONE_DEVICE
4715@@ -305,6 +307,7 @@ gckGALDEVICE_Construct(
4716 IN gctUINT LogFileSize,
4717 IN struct device *pdev,
4718 IN gctINT PowerManagement,
4719+ IN gctINT GpuProfiler,
4720 OUT gckGALDEVICE *Device
4721 )
4722 {
4723@@ -369,6 +372,10 @@ gckGALDEVICE_Construct(
4724 #if LINUX_VERSION_CODE < KERNEL_VERSION(3,5,0)
4725 /*get gpu regulator*/
4726 device->gpu_regulator = regulator_get(pdev, "cpu_vddgpu");
4727+#elif LINUX_VERSION_CODE >= KERNEL_VERSION(3,10,0)
4728+ device->gpu_regulator = regulator_get(pdev, "vddpu");
4729+#endif
4730+#if LINUX_VERSION_CODE < KERNEL_VERSION(3,5,0) || LINUX_VERSION_CODE >= KERNEL_VERSION(3,10,0)
4731 if (IS_ERR(device->gpu_regulator)) {
4732 gcmkTRACE_ZONE(gcvLEVEL_ERROR, gcvZONE_DRIVER,
4733 "%s(%d): Failed to get gpu regulator %s/%s \n",
4734@@ -541,6 +548,10 @@ gckGALDEVICE_Construct(
4735 device->kernels[gcvCORE_MAJOR]->hardware, PowerManagement
4736 ));
4737
4738+ gcmkONERROR(gckHARDWARE_SetGpuProfiler(
4739+ device->kernels[gcvCORE_MAJOR]->hardware, GpuProfiler
4740+ ));
4741+
4742 #if COMMAND_PROCESSOR_VERSION == 1
4743 /* Start the command queue. */
4744 gcmkONERROR(gckCOMMAND_Start(device->kernels[gcvCORE_MAJOR]->command));
4745@@ -599,6 +610,7 @@ gckGALDEVICE_Construct(
4746 device->kernels[gcvCORE_2D]->hardware, PowerManagement
4747 ));
4748
4749+
4750 #if COMMAND_PROCESSOR_VERSION == 1
4751 /* Start the command queue. */
4752 gcmkONERROR(gckCOMMAND_Start(device->kernels[gcvCORE_2D]->command));
4753@@ -635,6 +647,7 @@ gckGALDEVICE_Construct(
4754 device->kernels[gcvCORE_VG]->vg->hardware,
4755 PowerManagement
4756 ));
4757+
4758 #endif
4759 }
4760 else
4761@@ -849,6 +862,7 @@ gckGALDEVICE_Construct(
4762 }
4763 else
4764 {
4765+#if LINUX_VERSION_CODE < KERNEL_VERSION(3,10,0)
4766 mem_region = request_mem_region(
4767 ContiguousBase, ContiguousSize, "galcore managed memory"
4768 );
4769@@ -864,6 +878,7 @@ gckGALDEVICE_Construct(
4770
4771 gcmkONERROR(gcvSTATUS_OUT_OF_RESOURCES);
4772 }
4773+#endif
4774
4775 device->requestedContiguousBase = ContiguousBase;
4776 device->requestedContiguousSize = ContiguousSize;
4777@@ -1107,7 +1122,7 @@ gckGALDEVICE_Destroy(
4778 pm_runtime_disable(Device->pmdev);
4779 #endif
4780
4781-#if LINUX_VERSION_CODE < KERNEL_VERSION(3,5,0)
4782+#if LINUX_VERSION_CODE < KERNEL_VERSION(3,5,0) || LINUX_VERSION_CODE >= KERNEL_VERSION(3,10,0)
4783 if (Device->gpu_regulator) {
4784 regulator_put(Device->gpu_regulator);
4785 Device->gpu_regulator = NULL;
4786diff --git a/drivers/mxc/gpu-viv/hal/os/linux/kernel/gc_hal_kernel_device.h b/drivers/mxc/gpu-viv/hal/os/linux/kernel/gc_hal_kernel_device.h
4787index dde4f03..c51432f 100644
4788--- a/drivers/mxc/gpu-viv/hal/os/linux/kernel/gc_hal_kernel_device.h
4789+++ b/drivers/mxc/gpu-viv/hal/os/linux/kernel/gc_hal_kernel_device.h
4790@@ -26,6 +26,15 @@
4791 ******************************* gckGALDEVICE Structure *******************************
4792 \******************************************************************************/
4793
4794+#if LINUX_VERSION_CODE >= KERNEL_VERSION(3,10,0)
4795+struct contiguous_mem_pool {
4796+ struct dma_attrs attrs;
4797+ dma_addr_t phys;
4798+ void *virt;
4799+ size_t size;
4800+};
4801+#endif
4802+
4803 typedef struct _gckGALDEVICE
4804 {
4805 /* Objects. */
4806@@ -91,12 +100,16 @@ typedef struct _gckGALDEVICE
4807 struct clk *clk_2d_axi;
4808 struct clk *clk_vg_axi;
4809
4810-#if LINUX_VERSION_CODE < KERNEL_VERSION(3,5,0)
4811+#if LINUX_VERSION_CODE < KERNEL_VERSION(3,5,0) || LINUX_VERSION_CODE >= KERNEL_VERSION(3,10,0)
4812 /*Power management.*/
4813 struct regulator *gpu_regulator;
4814 #endif
4815 /*Run time pm*/
4816 struct device *pmdev;
4817+#if LINUX_VERSION_CODE >= KERNEL_VERSION(3,10,0)
4818+ struct contiguous_mem_pool *pool;
4819+ struct reset_control *rstc[gcdMAX_GPU_COUNT];
4820+#endif
4821 }
4822 * gckGALDEVICE;
4823
4824@@ -171,6 +184,7 @@ gceSTATUS gckGALDEVICE_Construct(
4825 IN gctUINT LogFileSize,
4826 IN struct device *pdev,
4827 IN gctINT PowerManagement,
4828+ IN gctINT GpuProfiler,
4829 OUT gckGALDEVICE *Device
4830 );
4831
4832diff --git a/drivers/mxc/gpu-viv/hal/os/linux/kernel/gc_hal_kernel_driver.c b/drivers/mxc/gpu-viv/hal/os/linux/kernel/gc_hal_kernel_driver.c
4833index bacd531..88a7e4e6 100644
4834--- a/drivers/mxc/gpu-viv/hal/os/linux/kernel/gc_hal_kernel_driver.c
4835+++ b/drivers/mxc/gpu-viv/hal/os/linux/kernel/gc_hal_kernel_driver.c
4836@@ -1,7 +1,7 @@
4837 /****************************************************************************
4838 *
4839 * Copyright (C) 2005 - 2013 by Vivante Corp.
4840-* Copyright (C) 2011-2012 Freescale Semiconductor, Inc.
4841+* Copyright (C) 2011-2013 Freescale Semiconductor, Inc.
4842 *
4843 * This program is free software; you can redistribute it and/or modify
4844 * it under the terms of the GNU General Public License as published by
4845@@ -69,14 +69,26 @@ task_notify_func(struct notifier_block *self, unsigned long val, void *data)
4846 #include <mach/viv_gpu.h>
4847 #else
4848 #include <linux/pm_runtime.h>
4849+#if LINUX_VERSION_CODE < KERNEL_VERSION(3,10,0)
4850 #include <mach/busfreq.h>
4851+#else
4852+#include <linux/reset.h>
4853+#endif
4854 #endif
4855 /* Zone used for header/footer. */
4856 #define _GC_OBJ_ZONE gcvZONE_DRIVER
4857
4858 #if gcdENABLE_FSCALE_VAL_ADJUST
4859+#if LINUX_VERSION_CODE >= KERNEL_VERSION(3,10,0)
4860+#include <linux/device_cooling.h>
4861+#define REG_THERMAL_NOTIFIER(a) register_devfreq_cooling_notifier(a);
4862+#define UNREG_THERMAL_NOTIFIER(a) unregister_devfreq_cooling_notifier(a);
4863+#else
4864 extern int register_thermal_notifier(struct notifier_block *nb);
4865 extern int unregister_thermal_notifier(struct notifier_block *nb);
4866+#define REG_THERMAL_NOTIFIER(a) register_thermal_notifier(a);
4867+#define UNREG_THERMAL_NOTIFIER(a) unregister_thermal_notifier(a);
4868+#endif
4869 #endif
4870
4871 MODULE_DESCRIPTION("Vivante Graphics Driver");
4872@@ -116,7 +128,11 @@ module_param(registerMemBaseVG, ulong, 0644);
4873 static ulong registerMemSizeVG = 2 << 10;
4874 module_param(registerMemSizeVG, ulong, 0644);
4875
4876+#if gcdENABLE_FSCALE_VAL_ADJUST
4877+static ulong contiguousSize = 128 << 20;
4878+#else
4879 static ulong contiguousSize = 4 << 20;
4880+#endif
4881 module_param(contiguousSize, ulong, 0644);
4882
4883 static ulong contiguousBase = 0;
4884@@ -134,6 +150,9 @@ module_param(compression, int, 0644);
4885 static int powerManagement = 1;
4886 module_param(powerManagement, int, 0644);
4887
4888+static int gpuProfiler = 0;
4889+module_param(gpuProfiler, int, 0644);
4890+
4891 static int signal = 48;
4892 module_param(signal, int, 0644);
4893
4894@@ -786,7 +805,9 @@ static int drv_init(struct device *pdev)
4895
4896 printk(KERN_INFO "Galcore version %d.%d.%d.%d\n",
4897 gcvVERSION_MAJOR, gcvVERSION_MINOR, gcvVERSION_PATCH, gcvVERSION_BUILD);
4898-
4899+ /* when enable gpu profiler, we need to turn off gpu powerMangement */
4900+ if(gpuProfiler)
4901+ powerManagement = 0;
4902 if (showArgs)
4903 {
4904 printk("galcore options:\n");
4905@@ -818,6 +839,7 @@ static int drv_init(struct device *pdev)
4906 printk(" physSize = 0x%08lX\n", physSize);
4907 printk(" logFileSize = %d KB \n", logFileSize);
4908 printk(" powerManagement = %d\n", powerManagement);
4909+ printk(" gpuProfiler = %d\n", gpuProfiler);
4910 #if ENABLE_GPU_CLOCK_BY_DRIVER
4911 printk(" coreClock = %lu\n", coreClock);
4912 #endif
4913@@ -841,9 +863,14 @@ static int drv_init(struct device *pdev)
4914 logFileSize,
4915 pdev,
4916 powerManagement,
4917+ gpuProfiler,
4918 &device
4919 ));
4920
4921+#if LINUX_VERSION_CODE >= KERNEL_VERSION(3,10,0)
4922+ device->pool = dev_get_drvdata(pdev);
4923+#endif
4924+
4925 /* Start the GAL device. */
4926 gcmkONERROR(gckGALDEVICE_Start(device));
4927
4928@@ -1028,11 +1055,18 @@ static struct notifier_block thermal_hot_pm_notifier = {
4929
4930
4931
4932+#if LINUX_VERSION_CODE >= KERNEL_VERSION(3, 8, 0)
4933+static int gpu_probe(struct platform_device *pdev)
4934+#else
4935 static int __devinit gpu_probe(struct platform_device *pdev)
4936+#endif
4937 {
4938 int ret = -ENODEV;
4939 struct resource* res;
4940-#if LINUX_VERSION_CODE >= KERNEL_VERSION(3,5,0)
4941+#if LINUX_VERSION_CODE >= KERNEL_VERSION(3,10,0)
4942+ struct contiguous_mem_pool *pool;
4943+ struct reset_control *rstc;
4944+#elif LINUX_VERSION_CODE >= KERNEL_VERSION(3,5,0)
4945 struct device_node *dn =pdev->dev.of_node;
4946 const u32 *prop;
4947 #else
4948@@ -1077,7 +1111,22 @@ static int __devinit gpu_probe(struct platform_device *pdev)
4949 registerMemSizeVG = res->end - res->start + 1;
4950 }
4951
4952-#if LINUX_VERSION_CODE >= KERNEL_VERSION(3,5,0)
4953+#if LINUX_VERSION_CODE >= KERNEL_VERSION(3,10,0)
4954+ pool = devm_kzalloc(&pdev->dev, sizeof(*pool), GFP_KERNEL);
4955+ if (!pool)
4956+ return -ENOMEM;
4957+ pool->size = contiguousSize;
4958+ init_dma_attrs(&pool->attrs);
4959+ dma_set_attr(DMA_ATTR_WRITE_COMBINE, &pool->attrs);
4960+ pool->virt = dma_alloc_attrs(&pdev->dev, pool->size, &pool->phys,
4961+ GFP_KERNEL, &pool->attrs);
4962+ if (!pool->virt) {
4963+ dev_err(&pdev->dev, "Failed to allocate contiguous memory\n");
4964+ return -ENOMEM;
4965+ }
4966+ contiguousBase = pool->phys;
4967+ dev_set_drvdata(&pdev->dev, pool);
4968+#elif LINUX_VERSION_CODE >= KERNEL_VERSION(3,5,0)
4969 prop = of_get_property(dn, "contiguousbase", NULL);
4970 if(prop)
4971 contiguousBase = *prop;
4972@@ -1095,30 +1144,56 @@ static int __devinit gpu_probe(struct platform_device *pdev)
4973
4974 if (!ret)
4975 {
4976+#if LINUX_VERSION_CODE >= KERNEL_VERSION(3,10,0)
4977+ rstc = devm_reset_control_get(&pdev->dev, "gpu3d");
4978+ galDevice->rstc[gcvCORE_MAJOR] = IS_ERR(rstc) ? NULL : rstc;
4979+
4980+ rstc = devm_reset_control_get(&pdev->dev, "gpu2d");
4981+ galDevice->rstc[gcvCORE_2D] = IS_ERR(rstc) ? NULL : rstc;
4982+
4983+ rstc = devm_reset_control_get(&pdev->dev, "gpuvg");
4984+ galDevice->rstc[gcvCORE_VG] = IS_ERR(rstc) ? NULL : rstc;
4985+#endif
4986 platform_set_drvdata(pdev, galDevice);
4987
4988 #if gcdENABLE_FSCALE_VAL_ADJUST
4989- if(galDevice->kernels[gcvCORE_MAJOR])
4990- register_thermal_notifier(&thermal_hot_pm_notifier);
4991+ if (galDevice->kernels[gcvCORE_MAJOR])
4992+ REG_THERMAL_NOTIFIER(&thermal_hot_pm_notifier);
4993 #endif
4994 gcmkFOOTER_NO();
4995 return ret;
4996 }
4997 #if gcdENABLE_FSCALE_VAL_ADJUST
4998- unregister_thermal_notifier(&thermal_hot_pm_notifier);
4999+ UNREG_THERMAL_NOTIFIER(&thermal_hot_pm_notifier);
5000+#endif
5001+#if LINUX_VERSION_CODE >= KERNEL_VERSION(3,10,0)
5002+ dma_free_attrs(&pdev->dev, pool->size, pool->virt, pool->phys,
5003+ &pool->attrs);
5004 #endif
5005 gcmkFOOTER_ARG(KERN_INFO "Failed to register gpu driver: %d\n", ret);
5006 return ret;
5007 }
5008
5009+#if LINUX_VERSION_CODE >= KERNEL_VERSION(3, 8, 0)
5010+static int gpu_remove(struct platform_device *pdev)
5011+#else
5012 static int __devexit gpu_remove(struct platform_device *pdev)
5013+#endif
5014 {
5015+#if LINUX_VERSION_CODE >= KERNEL_VERSION(3,10,0)
5016+ gckGALDEVICE device = platform_get_drvdata(pdev);
5017+ struct contiguous_mem_pool *pool = device->pool;
5018+#endif
5019 gcmkHEADER();
5020 #if gcdENABLE_FSCALE_VAL_ADJUST
5021 if(galDevice->kernels[gcvCORE_MAJOR])
5022- unregister_thermal_notifier(&thermal_hot_pm_notifier);
5023+ UNREG_THERMAL_NOTIFIER(&thermal_hot_pm_notifier);
5024 #endif
5025 drv_exit();
5026+#if LINUX_VERSION_CODE >= KERNEL_VERSION(3,10,0)
5027+ dma_free_attrs(&pdev->dev, pool->size, pool->virt, pool->phys,
5028+ &pool->attrs);
5029+#endif
5030 gcmkFOOTER_NO();
5031 return 0;
5032 }
5033@@ -1254,13 +1329,17 @@ MODULE_DEVICE_TABLE(of, mxs_gpu_dt_ids);
5034 #ifdef CONFIG_PM
5035 static int gpu_runtime_suspend(struct device *dev)
5036 {
5037+#if LINUX_VERSION_CODE < KERNEL_VERSION(3,10,0)
5038 release_bus_freq(BUS_FREQ_HIGH);
5039+#endif
5040 return 0;
5041 }
5042
5043 static int gpu_runtime_resume(struct device *dev)
5044 {
5045+#if LINUX_VERSION_CODE < KERNEL_VERSION(3,10,0)
5046 request_bus_freq(BUS_FREQ_HIGH);
5047+#endif
5048 return 0;
5049 }
5050
5051@@ -1284,7 +1363,11 @@ static const struct dev_pm_ops gpu_pm_ops = {
5052
5053 static struct platform_driver gpu_driver = {
5054 .probe = gpu_probe,
5055+#if LINUX_VERSION_CODE >= KERNEL_VERSION(3, 8, 0)
5056+ .remove = gpu_remove,
5057+#else
5058 .remove = __devexit_p(gpu_remove),
5059+#endif
5060
5061 .suspend = gpu_suspend,
5062 .resume = gpu_resume,
5063diff --git a/drivers/mxc/gpu-viv/hal/os/linux/kernel/gc_hal_kernel_os.c b/drivers/mxc/gpu-viv/hal/os/linux/kernel/gc_hal_kernel_os.c
5064index e7edc39..331c73f 100644
5065--- a/drivers/mxc/gpu-viv/hal/os/linux/kernel/gc_hal_kernel_os.c
5066+++ b/drivers/mxc/gpu-viv/hal/os/linux/kernel/gc_hal_kernel_os.c
5067@@ -30,19 +30,30 @@
5068 #include <linux/dma-mapping.h>
5069 #include <linux/slab.h>
5070 #include <linux/idr.h>
5071+#if LINUX_VERSION_CODE < KERNEL_VERSION(3,10,0)
5072 #include <mach/hardware.h>
5073+#endif
5074 #include <linux/workqueue.h>
5075 #include <linux/idr.h>
5076 #if LINUX_VERSION_CODE > KERNEL_VERSION(2,6,23)
5077 #include <linux/math64.h>
5078 #endif
5079-#if LINUX_VERSION_CODE >= KERNEL_VERSION(3,5,0)
5080+#if LINUX_VERSION_CODE >= KERNEL_VERSION(3,10,0)
5081+#include <linux/reset.h>
5082+static inline void imx_gpc_power_up_pu(bool flag) {}
5083+#elif LINUX_VERSION_CODE >= KERNEL_VERSION(3,5,0)
5084 #include <mach/common.h>
5085 #endif
5086 #include <linux/delay.h>
5087 #include <linux/pm_runtime.h>
5088
5089
5090+#if gcdANDROID_NATIVE_FENCE_SYNC
5091+#include <linux/file.h>
5092+#include "gc_hal_kernel_sync.h"
5093+#endif
5094+
5095+
5096 #define _GC_OBJ_ZONE gcvZONE_OS
5097
5098 /*******************************************************************************
5099@@ -148,6 +159,7 @@ typedef struct _gcsINTEGER_DB
5100 {
5101 struct idr idr;
5102 spinlock_t lock;
5103+ gctINT curr;
5104 }
5105 gcsINTEGER_DB;
5106
5107@@ -180,6 +192,14 @@ struct _gckOS
5108 /* signal id database. */
5109 gcsINTEGER_DB signalDB;
5110
5111+#if gcdANDROID_NATIVE_FENCE_SYNC
5112+ /* Lock. */
5113+ gctPOINTER syncPointMutex;
5114+
5115+ /* sync point id database. */
5116+ gcsINTEGER_DB syncPointDB;
5117+#endif
5118+
5119 gcsUSER_MAPPING_PTR userMap;
5120 gctPOINTER debugLock;
5121
5122@@ -215,6 +235,25 @@ typedef struct _gcsSIGNAL
5123 }
5124 gcsSIGNAL;
5125
5126+#if gcdANDROID_NATIVE_FENCE_SYNC
5127+typedef struct _gcsSYNC_POINT * gcsSYNC_POINT_PTR;
5128+typedef struct _gcsSYNC_POINT
5129+{
5130+ /* The reference counter. */
5131+ atomic_t ref;
5132+
5133+ /* State. */
5134+ atomic_t state;
5135+
5136+ /* timeline. */
5137+ struct sync_timeline * timeline;
5138+
5139+ /* ID. */
5140+ gctUINT32 id;
5141+}
5142+gcsSYNC_POINT;
5143+#endif
5144+
5145 typedef struct _gcsPageInfo * gcsPageInfo_PTR;
5146 typedef struct _gcsPageInfo
5147 {
5148@@ -767,7 +806,32 @@ _AllocateIntegerId(
5149 )
5150 {
5151 int result;
5152+ gctINT next;
5153+
5154+#if LINUX_VERSION_CODE >= KERNEL_VERSION(3, 9, 0)
5155+ idr_preload(GFP_KERNEL | gcdNOWARN);
5156
5157+ spin_lock(&Database->lock);
5158+
5159+ next = (Database->curr + 1 <= 0) ? 1 : Database->curr + 1;
5160+ result = idr_alloc(&Database->idr, KernelPointer, next, 0, GFP_ATOMIC);
5161+
5162+ if (!result)
5163+ {
5164+ Database->curr = *Id;
5165+ }
5166+
5167+ spin_unlock(&Database->lock);
5168+
5169+ idr_preload_end();
5170+
5171+ if (result < 0)
5172+ {
5173+ return gcvSTATUS_OUT_OF_RESOURCES;
5174+ }
5175+
5176+ *Id = result;
5177+#else
5178 again:
5179 if (idr_pre_get(&Database->idr, GFP_KERNEL | gcdNOWARN) == 0)
5180 {
5181@@ -776,8 +840,15 @@ again:
5182
5183 spin_lock(&Database->lock);
5184
5185- /* Try to get a id greater than 0. */
5186- result = idr_get_new_above(&Database->idr, KernelPointer, 1, Id);
5187+ next = (Database->curr + 1 <= 0) ? 1 : Database->curr + 1;
5188+
5189+ /* Try to get a id greater than current id. */
5190+ result = idr_get_new_above(&Database->idr, KernelPointer, next, Id);
5191+
5192+ if (!result)
5193+ {
5194+ Database->curr = *Id;
5195+ }
5196
5197 spin_unlock(&Database->lock);
5198
5199@@ -790,6 +861,7 @@ again:
5200 {
5201 return gcvSTATUS_OUT_OF_RESOURCES;
5202 }
5203+#endif
5204
5205 return gcvSTATUS_OK;
5206 }
5207@@ -1008,6 +1080,21 @@ gckOS_Construct(
5208 /* Initialize signal id database. */
5209 idr_init(&os->signalDB.idr);
5210
5211+#if gcdANDROID_NATIVE_FENCE_SYNC
5212+ /*
5213+ * Initialize the sync point manager.
5214+ */
5215+
5216+ /* Initialize mutex. */
5217+ gcmkONERROR(gckOS_CreateMutex(os, &os->syncPointMutex));
5218+
5219+ /* Initialize sync point id database lock. */
5220+ spin_lock_init(&os->syncPointDB.lock);
5221+
5222+ /* Initialize sync point id database. */
5223+ idr_init(&os->syncPointDB.idr);
5224+#endif
5225+
5226 #if gcdUSE_NON_PAGED_MEMORY_CACHE
5227 os->cacheSize = 0;
5228 os->cacheHead = gcvNULL;
5229@@ -1031,6 +1118,15 @@ gckOS_Construct(
5230 return gcvSTATUS_OK;
5231
5232 OnError:
5233+
5234+#if gcdANDROID_NATIVE_FENCE_SYNC
5235+ if (os->syncPointMutex != gcvNULL)
5236+ {
5237+ gcmkVERIFY_OK(
5238+ gckOS_DeleteMutex(os, os->syncPointMutex));
5239+ }
5240+#endif
5241+
5242 if (os->signalMutex != gcvNULL)
5243 {
5244 gcmkVERIFY_OK(
5245@@ -1104,6 +1200,15 @@ gckOS_Destroy(
5246 _FreeAllNonPagedMemoryCache(Os);
5247 #endif
5248
5249+#if gcdANDROID_NATIVE_FENCE_SYNC
5250+ /*
5251+ * Destroy the sync point manager.
5252+ */
5253+
5254+ /* Destroy the mutex. */
5255+ gcmkVERIFY_OK(gckOS_DeleteMutex(Os, Os->syncPointMutex));
5256+#endif
5257+
5258 /*
5259 * Destroy the signal manager.
5260 */
5261@@ -1961,12 +2066,6 @@ gckOS_AllocateNonPagedMemory(
5262 gcmkONERROR(gcvSTATUS_OUT_OF_MEMORY);
5263 }
5264
5265- if ((Os->device->baseAddress & 0x80000000) != (mdl->dmaHandle & 0x80000000))
5266- {
5267- mdl->dmaHandle = (mdl->dmaHandle & ~0x80000000)
5268- | (Os->device->baseAddress & 0x80000000);
5269- }
5270-
5271 mdl->addr = addr;
5272
5273 /* Return allocated memory. */
5274@@ -2307,6 +2406,7 @@ gckOS_ReadRegisterEx(
5275
5276 /* Verify the arguments. */
5277 gcmkVERIFY_OBJECT(Os, gcvOBJ_OS);
5278+ gcmkVERIFY_ARGUMENT(Address < Os->device->requestedRegisterMemSizes[Core]);
5279 gcmkVERIFY_ARGUMENT(Data != gcvNULL);
5280
5281 *Data = readl((gctUINT8 *)Os->device->registerBases[Core] + Address);
5282@@ -2357,6 +2457,8 @@ gckOS_WriteRegisterEx(
5283 {
5284 gcmkHEADER_ARG("Os=0x%X Core=%d Address=0x%X Data=0x%08x", Os, Core, Address, Data);
5285
5286+ gcmkVERIFY_ARGUMENT(Address < Os->device->requestedRegisterMemSizes[Core]);
5287+
5288 writel(Data, (gctUINT8 *)Os->device->registerBases[Core] + Address);
5289
5290 /* Success. */
5291@@ -2799,16 +2901,25 @@ gckOS_MapPhysical(
5292
5293 if (mdl == gcvNULL)
5294 {
5295+#if LINUX_VERSION_CODE >= KERNEL_VERSION(3,10,0)
5296+ struct contiguous_mem_pool *pool = Os->device->pool;
5297+
5298+ if (Physical >= pool->phys && Physical < pool->phys + pool->size)
5299+ logical = (gctPOINTER)(Physical - pool->phys + pool->virt);
5300+ else
5301+ logical = gcvNULL;
5302+#else
5303 /* Map memory as cached memory. */
5304 request_mem_region(physical, Bytes, "MapRegion");
5305 logical = (gctPOINTER) ioremap_nocache(physical, Bytes);
5306+#endif
5307
5308 if (logical == gcvNULL)
5309 {
5310 gcmkTRACE_ZONE(
5311 gcvLEVEL_INFO, gcvZONE_OS,
5312- "%s(%d): Failed to ioremap",
5313- __FUNCTION__, __LINE__
5314+ "%s(%d): Failed to map physical address 0x%08x",
5315+ __FUNCTION__, __LINE__, Physical
5316 );
5317
5318 MEMORY_UNLOCK(Os);
5319@@ -3621,7 +3732,7 @@ gckOS_Delay(
5320 if (Delay > 0)
5321 {
5322 #if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 28)
5323- ktime_t delay = ktime_set(0, Delay * NSEC_PER_MSEC);
5324+ ktime_t delay = ktime_set(Delay/1000, (Delay%1000) * NSEC_PER_MSEC);
5325 __set_current_state(TASK_UNINTERRUPTIBLE);
5326 schedule_hrtimeout(&delay, HRTIMER_MODE_REL);
5327 #else
5328@@ -3881,8 +3992,13 @@ gckOS_AllocatePagedMemoryEx(
5329
5330 if (Contiguous)
5331 {
5332- /* Get contiguous pages, and suppress warning (stack dump) from kernel when
5333- we run out of memory. */
5334+ gctUINT32 order = get_order(bytes);
5335+
5336+ if (order >= MAX_ORDER)
5337+ {
5338+ gcmkONERROR(gcvSTATUS_OUT_OF_MEMORY);
5339+ }
5340+
5341 #if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 27)
5342 addr =
5343 alloc_pages_exact(numPages * PAGE_SIZE, GFP_KERNEL | gcdNOWARN | __GFP_NORETRY);
5344@@ -3894,12 +4010,12 @@ gckOS_AllocatePagedMemoryEx(
5345 mdl->exact = gcvTRUE;
5346 #else
5347 mdl->u.contiguousPages =
5348- alloc_pages(GFP_KERNEL | gcdNOWARN | __GFP_NORETRY, GetOrder(numPages));
5349+ alloc_pages(GFP_KERNEL | gcdNOWARN | __GFP_NORETRY, order);
5350 #endif
5351 if (mdl->u.contiguousPages == gcvNULL)
5352 {
5353 mdl->u.contiguousPages =
5354- alloc_pages(GFP_KERNEL | __GFP_HIGHMEM | gcdNOWARN, GetOrder(numPages));
5355+ alloc_pages(GFP_KERNEL | __GFP_HIGHMEM | gcdNOWARN, order);
5356
5357 #if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 27)
5358 mdl->exact = gcvFALSE;
5359@@ -4239,13 +4355,13 @@ gckOS_LockPages(
5360 }
5361
5362 mdlMap->vma->vm_flags |= gcdVM_FLAGS;
5363-#if !gcdPAGED_MEMORY_CACHEABLE
5364+
5365 if (Cacheable == gcvFALSE)
5366 {
5367 /* Make this mapping non-cached. */
5368 mdlMap->vma->vm_page_prot = gcmkPAGED_MEMROY_PROT(mdlMap->vma->vm_page_prot);
5369 }
5370-#endif
5371+
5372 addr = mdl->addr;
5373
5374 /* Now map all the vmalloc pages to this user address. */
5375@@ -5336,6 +5452,7 @@ OnError:
5376 {
5377 /* Get the user pages. */
5378 down_read(&current->mm->mmap_sem);
5379+
5380 result = get_user_pages(current,
5381 current->mm,
5382 memory & PAGE_MASK,
5383@@ -5345,105 +5462,127 @@ OnError:
5384 pages,
5385 gcvNULL
5386 );
5387+
5388 up_read(&current->mm->mmap_sem);
5389
5390 if (result <=0 || result < pageCount)
5391 {
5392 struct vm_area_struct *vma;
5393
5394- /* Free the page table. */
5395- if (pages != gcvNULL)
5396+ /* Release the pages if any. */
5397+ if (result > 0)
5398 {
5399- /* Release the pages if any. */
5400- if (result > 0)
5401+ for (i = 0; i < result; i++)
5402 {
5403- for (i = 0; i < result; i++)
5404+ if (pages[i] == gcvNULL)
5405 {
5406- if (pages[i] == gcvNULL)
5407- {
5408- break;
5409- }
5410-
5411- page_cache_release(pages[i]);
5412+ break;
5413 }
5414+
5415+ page_cache_release(pages[i]);
5416+ pages[i] = gcvNULL;
5417 }
5418
5419- kfree(pages);
5420- pages = gcvNULL;
5421+ result = 0;
5422 }
5423
5424 vma = find_vma(current->mm, memory);
5425
5426- if (vma && (vma->vm_flags & VM_PFNMAP) )
5427+ if (vma && (vma->vm_flags & VM_PFNMAP))
5428 {
5429 pte_t * pte;
5430 spinlock_t * ptl;
5431- unsigned long pfn;
5432+ gctUINTPTR_T logical = memory;
5433
5434- pgd_t * pgd = pgd_offset(current->mm, memory);
5435- pud_t * pud = pud_offset(pgd, memory);
5436- if (pud)
5437+ for (i = 0; i < pageCount; i++)
5438 {
5439- pmd_t * pmd = pmd_offset(pud, memory);
5440- pte = pte_offset_map_lock(current->mm, pmd, memory, &ptl);
5441- if (!pte)
5442+ pgd_t * pgd = pgd_offset(current->mm, logical);
5443+ pud_t * pud = pud_offset(pgd, logical);
5444+
5445+ if (pud)
5446+ {
5447+ pmd_t * pmd = pmd_offset(pud, logical);
5448+ pte = pte_offset_map_lock(current->mm, pmd, logical, &ptl);
5449+ if (!pte)
5450+ {
5451+ gcmkONERROR(gcvSTATUS_OUT_OF_RESOURCES);
5452+ }
5453+ }
5454+ else
5455 {
5456 gcmkONERROR(gcvSTATUS_OUT_OF_RESOURCES);
5457 }
5458+
5459+ pages[i] = pte_page(*pte);
5460+ pte_unmap_unlock(pte, ptl);
5461+
5462+ /* Advance to next. */
5463+ logical += PAGE_SIZE;
5464 }
5465- else
5466+ }
5467+ else
5468+ {
5469+ gcmkONERROR(gcvSTATUS_OUT_OF_RESOURCES);
5470+ }
5471+
5472+ /* Check if this memory is contiguous for old mmu. */
5473+ if (Os->device->kernels[Core]->hardware->mmuVersion == 0)
5474+ {
5475+ for (i = 1; i < pageCount; i++)
5476 {
5477- gcmkONERROR(gcvSTATUS_OUT_OF_RESOURCES);
5478+ if (pages[i] != nth_page(pages[0], i))
5479+ {
5480+ /* Non-contiguous. */
5481+ break;
5482+ }
5483 }
5484
5485- pfn = pte_pfn(*pte);
5486-
5487- physical = (pfn << PAGE_SHIFT) | (memory & ~PAGE_MASK);
5488+ if (i == pageCount)
5489+ {
5490+ /* Contiguous memory. */
5491+ physical = page_to_phys(pages[0]) | (memory & ~PAGE_MASK);
5492
5493- pte_unmap_unlock(pte, ptl);
5494+ if (!((physical - Os->device->baseAddress) & 0x80000000))
5495+ {
5496+ kfree(pages);
5497+ pages = gcvNULL;
5498
5499- if ((Os->device->kernels[Core]->hardware->mmuVersion == 0)
5500- && !((physical - Os->device->baseAddress) & 0x80000000))
5501- {
5502- info->pages = gcvNULL;
5503- info->pageTable = gcvNULL;
5504+ info->pages = gcvNULL;
5505+ info->pageTable = gcvNULL;
5506
5507- MEMORY_MAP_UNLOCK(Os);
5508+ MEMORY_MAP_UNLOCK(Os);
5509
5510- *Address = physical - Os->device->baseAddress;
5511- *Info = info;
5512+ *Address = physical - Os->device->baseAddress;
5513+ *Info = info;
5514
5515- gcmkFOOTER_ARG("*Info=0x%X *Address=0x%08x",
5516- *Info, *Address);
5517+ gcmkFOOTER_ARG("*Info=0x%X *Address=0x%08x",
5518+ *Info, *Address);
5519
5520- return gcvSTATUS_OK;
5521+ return gcvSTATUS_OK;
5522+ }
5523 }
5524 }
5525- else
5526+
5527+ /* Reference pages. */
5528+ for (i = 0; i < pageCount; i++)
5529 {
5530- gcmkONERROR(gcvSTATUS_OUT_OF_RESOURCES);
5531+ get_page(pages[i]);
5532 }
5533 }
5534 }
5535
5536- if (pages)
5537- {
5538- for (i = 0; i < pageCount; i++)
5539- {
5540- /* Flush(clean) the data cache. */
5541- gcmkONERROR(gckOS_CacheFlush(Os, _GetProcessID(), gcvNULL,
5542- (gctPOINTER)(gctUINTPTR_T)page_to_phys(pages[i]),
5543- (gctPOINTER)(memory & PAGE_MASK) + i*PAGE_SIZE,
5544- PAGE_SIZE));
5545- }
5546- }
5547- else
5548+ for (i = 0; i < pageCount; i++)
5549 {
5550+#ifdef CONFIG_ARM
5551+ gctUINT32 data;
5552+ get_user(data, (gctUINT32*)((memory & PAGE_MASK) + i * PAGE_SIZE));
5553+#endif
5554+
5555 /* Flush(clean) the data cache. */
5556 gcmkONERROR(gckOS_CacheFlush(Os, _GetProcessID(), gcvNULL,
5557- (gctPOINTER)(gctUINTPTR_T)(physical & PAGE_MASK),
5558- (gctPOINTER)(memory & PAGE_MASK),
5559- PAGE_SIZE * pageCount));
5560+ (gctPOINTER)(gctUINTPTR_T)page_to_phys(pages[i]),
5561+ (gctPOINTER)(memory & PAGE_MASK) + i*PAGE_SIZE,
5562+ PAGE_SIZE));
5563 }
5564
5565 #if gcdENABLE_VG
5566@@ -5464,20 +5603,14 @@ OnError:
5567 (gctPOINTER *) &pageTable,
5568 &address));
5569 }
5570+
5571 /* Fill the page table. */
5572 for (i = 0; i < pageCount; i++)
5573 {
5574 gctUINT32 phys;
5575 gctUINT32_PTR tab = pageTable + i * (PAGE_SIZE/4096);
5576
5577- if (pages)
5578- {
5579- phys = page_to_phys(pages[i]);
5580- }
5581- else
5582- {
5583- phys = (physical & PAGE_MASK) + i * PAGE_SIZE;
5584- }
5585+ phys = page_to_phys(pages[i]);
5586
5587 #if gcdENABLE_VG
5588 if (Core == gcvCORE_VG)
5589@@ -6126,7 +6259,7 @@ gckOS_CacheClean(
5590 #else
5591 dma_sync_single_for_device(
5592 gcvNULL,
5593- Physical,
5594+ (dma_addr_t)Physical,
5595 Bytes,
5596 DMA_TO_DEVICE);
5597 #endif
5598@@ -6205,7 +6338,7 @@ gckOS_CacheInvalidate(
5599 #else
5600 dma_sync_single_for_device(
5601 gcvNULL,
5602- Physical,
5603+ (dma_addr_t)Physical,
5604 Bytes,
5605 DMA_FROM_DEVICE);
5606 #endif
5607@@ -6279,7 +6412,7 @@ gckOS_CacheFlush(
5608 #else
5609 dma_sync_single_for_device(
5610 gcvNULL,
5611- Physical,
5612+ (dma_addr_t)Physical,
5613 Bytes,
5614 DMA_BIDIRECTIONAL);
5615 #endif
5616@@ -6827,6 +6960,9 @@ gckOS_SetGPUPower(
5617 struct clk *clk_2dcore = Os->device->clk_2d_core;
5618 struct clk *clk_2d_axi = Os->device->clk_2d_axi;
5619 struct clk *clk_vg_axi = Os->device->clk_vg_axi;
5620+#if LINUX_VERSION_CODE < KERNEL_VERSION(3,5,0) || LINUX_VERSION_CODE >= KERNEL_VERSION(3,10,0)
5621+ int ret;
5622+#endif
5623
5624 gctBOOL oldClockState = gcvFALSE;
5625 gctBOOL oldPowerState = gcvFALSE;
5626@@ -6852,9 +6988,13 @@ gckOS_SetGPUPower(
5627 }
5628 if((Power == gcvTRUE) && (oldPowerState == gcvFALSE))
5629 {
5630-#if LINUX_VERSION_CODE < KERNEL_VERSION(3,5,0)
5631- if(!IS_ERR(Os->device->gpu_regulator))
5632- regulator_enable(Os->device->gpu_regulator);
5633+#if LINUX_VERSION_CODE < KERNEL_VERSION(3,5,0) || LINUX_VERSION_CODE >= KERNEL_VERSION(3,10,0)
5634+ if(!IS_ERR(Os->device->gpu_regulator)) {
5635+ ret = regulator_enable(Os->device->gpu_regulator);
5636+ if (ret != 0)
5637+ gckOS_Print("%s(%d): fail to enable pu regulator %d!\n",
5638+ __FUNCTION__, __LINE__, ret);
5639+ }
5640 #else
5641 imx_gpc_power_up_pu(true);
5642 #endif
5643@@ -6969,7 +7109,7 @@ gckOS_SetGPUPower(
5644 pm_runtime_put_sync(Os->device->pmdev);
5645 #endif
5646
5647-#if LINUX_VERSION_CODE < KERNEL_VERSION(3,5,0)
5648+#if LINUX_VERSION_CODE < KERNEL_VERSION(3,5,0) || LINUX_VERSION_CODE >= KERNEL_VERSION(3,10,0)
5649 if(!IS_ERR(Os->device->gpu_regulator))
5650 regulator_disable(Os->device->gpu_regulator);
5651 #else
5652@@ -7033,6 +7173,10 @@ gckOS_ResetGPU(
5653 }
5654
5655 gcmkFOOTER_NO();
5656+#elif LINUX_VERSION_CODE >= KERNEL_VERSION(3,10,0)
5657+ struct reset_control *rstc = Os->device->rstc[Core];
5658+ if (rstc)
5659+ reset_control_reset(rstc);
5660 #else
5661 imx_src_reset_gpu((int)Core);
5662 #endif
5663@@ -8529,3 +8673,338 @@ gckOS_GetProcessNameByPid(
5664 return gcvSTATUS_OK;
5665 }
5666
5667+#if gcdANDROID_NATIVE_FENCE_SYNC
5668+
5669+gceSTATUS
5670+gckOS_CreateSyncPoint(
5671+ IN gckOS Os,
5672+ OUT gctSYNC_POINT * SyncPoint
5673+ )
5674+{
5675+ gceSTATUS status;
5676+ gcsSYNC_POINT_PTR syncPoint;
5677+
5678+ gcmkHEADER_ARG("Os=0x%X", Os);
5679+
5680+ /* Verify the arguments. */
5681+ gcmkVERIFY_OBJECT(Os, gcvOBJ_OS);
5682+
5683+ /* Create an sync point structure. */
5684+ syncPoint = (gcsSYNC_POINT_PTR) kmalloc(
5685+ sizeof(gcsSYNC_POINT), GFP_KERNEL | gcdNOWARN);
5686+
5687+ if (syncPoint == gcvNULL)
5688+ {
5689+ gcmkONERROR(gcvSTATUS_OUT_OF_MEMORY);
5690+ }
5691+
5692+ /* Initialize the sync point. */
5693+ atomic_set(&syncPoint->ref, 1);
5694+ atomic_set(&syncPoint->state, 0);
5695+
5696+ gcmkONERROR(_AllocateIntegerId(&Os->syncPointDB, syncPoint, &syncPoint->id));
5697+
5698+ *SyncPoint = (gctSYNC_POINT)(gctUINTPTR_T)syncPoint->id;
5699+
5700+ gcmkFOOTER_ARG("*SyncPonint=%d", syncPoint->id);
5701+ return gcvSTATUS_OK;
5702+
5703+OnError:
5704+ if (syncPoint != gcvNULL)
5705+ {
5706+ kfree(syncPoint);
5707+ }
5708+
5709+ gcmkFOOTER();
5710+ return status;
5711+}
5712+
5713+gceSTATUS
5714+gckOS_ReferenceSyncPoint(
5715+ IN gckOS Os,
5716+ IN gctSYNC_POINT SyncPoint
5717+ )
5718+{
5719+ gceSTATUS status;
5720+ gcsSYNC_POINT_PTR syncPoint;
5721+
5722+ gcmkHEADER_ARG("Os=0x%X", Os);
5723+
5724+ /* Verify the arguments. */
5725+ gcmkVERIFY_OBJECT(Os, gcvOBJ_OS);
5726+ gcmkVERIFY_ARGUMENT(SyncPoint != gcvNULL);
5727+
5728+ gcmkONERROR(
5729+ _QueryIntegerId(&Os->syncPointDB,
5730+ (gctUINT32)(gctUINTPTR_T)SyncPoint,
5731+ (gctPOINTER)&syncPoint));
5732+
5733+ /* Initialize the sync point. */
5734+ atomic_inc(&syncPoint->ref);
5735+
5736+ gcmkFOOTER_NO();
5737+ return gcvSTATUS_OK;
5738+
5739+OnError:
5740+ gcmkFOOTER();
5741+ return status;
5742+}
5743+
5744+gceSTATUS
5745+gckOS_DestroySyncPoint(
5746+ IN gckOS Os,
5747+ IN gctSYNC_POINT SyncPoint
5748+ )
5749+{
5750+ gceSTATUS status;
5751+ gcsSYNC_POINT_PTR syncPoint;
5752+ gctBOOL acquired = gcvFALSE;
5753+
5754+ gcmkHEADER_ARG("Os=0x%X SyncPoint=%d", Os, (gctUINT32)(gctUINTPTR_T)SyncPoint);
5755+
5756+ /* Verify the arguments. */
5757+ gcmkVERIFY_OBJECT(Os, gcvOBJ_OS);
5758+ gcmkVERIFY_ARGUMENT(SyncPoint != gcvNULL);
5759+
5760+ gcmkONERROR(gckOS_AcquireMutex(Os, Os->syncPointMutex, gcvINFINITE));
5761+ acquired = gcvTRUE;
5762+
5763+ gcmkONERROR(
5764+ _QueryIntegerId(&Os->syncPointDB,
5765+ (gctUINT32)(gctUINTPTR_T)SyncPoint,
5766+ (gctPOINTER)&syncPoint));
5767+
5768+ gcmkASSERT(syncPoint->id == (gctUINT32)(gctUINTPTR_T)SyncPoint);
5769+
5770+ if (atomic_dec_and_test(&syncPoint->ref))
5771+ {
5772+ gcmkVERIFY_OK(_DestroyIntegerId(&Os->syncPointDB, syncPoint->id));
5773+
5774+ /* Free the sgianl. */
5775+ syncPoint->timeline = gcvNULL;
5776+ kfree(syncPoint);
5777+ }
5778+
5779+ gcmkVERIFY_OK(gckOS_ReleaseMutex(Os, Os->syncPointMutex));
5780+ acquired = gcvFALSE;
5781+
5782+ /* Success. */
5783+ gcmkFOOTER_NO();
5784+ return gcvSTATUS_OK;
5785+
5786+OnError:
5787+ if (acquired)
5788+ {
5789+ /* Release the mutex. */
5790+ gcmkVERIFY_OK(gckOS_ReleaseMutex(Os, Os->syncPointMutex));
5791+ }
5792+
5793+ gcmkFOOTER();
5794+ return status;
5795+}
5796+
5797+gceSTATUS
5798+gckOS_SignalSyncPoint(
5799+ IN gckOS Os,
5800+ IN gctSYNC_POINT SyncPoint
5801+ )
5802+{
5803+ gceSTATUS status;
5804+ gcsSYNC_POINT_PTR syncPoint;
5805+ gctBOOL acquired = gcvFALSE;
5806+
5807+ gcmkHEADER_ARG("Os=0x%X SyncPoint=%d", Os, (gctUINT32)(gctUINTPTR_T)SyncPoint);
5808+
5809+ /* Verify the arguments. */
5810+ gcmkVERIFY_OBJECT(Os, gcvOBJ_OS);
5811+ gcmkVERIFY_ARGUMENT(SyncPoint != gcvNULL);
5812+
5813+ gcmkONERROR(gckOS_AcquireMutex(Os, Os->syncPointMutex, gcvINFINITE));
5814+ acquired = gcvTRUE;
5815+
5816+ gcmkONERROR(
5817+ _QueryIntegerId(&Os->syncPointDB,
5818+ (gctUINT32)(gctUINTPTR_T)SyncPoint,
5819+ (gctPOINTER)&syncPoint));
5820+
5821+ gcmkASSERT(syncPoint->id == (gctUINT32)(gctUINTPTR_T)SyncPoint);
5822+
5823+ /* Get state. */
5824+ atomic_set(&syncPoint->state, gcvTRUE);
5825+
5826+ /* Signal timeline. */
5827+ if (syncPoint->timeline)
5828+ {
5829+ sync_timeline_signal(syncPoint->timeline);
5830+ }
5831+
5832+ gcmkVERIFY_OK(gckOS_ReleaseMutex(Os, Os->syncPointMutex));
5833+ acquired = gcvFALSE;
5834+
5835+ /* Success. */
5836+ gcmkFOOTER_NO();
5837+ return gcvSTATUS_OK;
5838+
5839+OnError:
5840+ if (acquired)
5841+ {
5842+ /* Release the mutex. */
5843+ gcmkVERIFY_OK(gckOS_ReleaseMutex(Os, Os->syncPointMutex));
5844+ }
5845+
5846+ gcmkFOOTER();
5847+ return status;
5848+}
5849+
5850+gceSTATUS
5851+gckOS_QuerySyncPoint(
5852+ IN gckOS Os,
5853+ IN gctSYNC_POINT SyncPoint,
5854+ OUT gctBOOL_PTR State
5855+ )
5856+{
5857+ gceSTATUS status;
5858+ gcsSYNC_POINT_PTR syncPoint;
5859+
5860+ gcmkHEADER_ARG("Os=0x%X SyncPoint=%d", Os, (gctUINT32)(gctUINTPTR_T)SyncPoint);
5861+
5862+ /* Verify the arguments. */
5863+ gcmkVERIFY_OBJECT(Os, gcvOBJ_OS);
5864+ gcmkVERIFY_ARGUMENT(SyncPoint != gcvNULL);
5865+
5866+ gcmkONERROR(
5867+ _QueryIntegerId(&Os->syncPointDB,
5868+ (gctUINT32)(gctUINTPTR_T)SyncPoint,
5869+ (gctPOINTER)&syncPoint));
5870+
5871+ gcmkASSERT(syncPoint->id == (gctUINT32)(gctUINTPTR_T)SyncPoint);
5872+
5873+ /* Get state. */
5874+ *State = atomic_read(&syncPoint->state);
5875+
5876+ /* Success. */
5877+ gcmkFOOTER_ARG("*State=%d", *State);
5878+ return gcvSTATUS_OK;
5879+
5880+OnError:
5881+ gcmkFOOTER();
5882+ return status;
5883+}
5884+
5885+gceSTATUS
5886+gckOS_CreateSyncTimeline(
5887+ IN gckOS Os,
5888+ OUT gctHANDLE * Timeline
5889+ )
5890+{
5891+ struct viv_sync_timeline * timeline;
5892+
5893+ /* Create viv sync timeline. */
5894+ timeline = viv_sync_timeline_create("viv timeline", Os);
5895+
5896+ if (timeline == gcvNULL)
5897+ {
5898+ /* Out of memory. */
5899+ return gcvSTATUS_OUT_OF_MEMORY;
5900+ }
5901+
5902+ *Timeline = (gctHANDLE) timeline;
5903+ return gcvSTATUS_OK;
5904+}
5905+
5906+gceSTATUS
5907+gckOS_DestroySyncTimeline(
5908+ IN gckOS Os,
5909+ IN gctHANDLE Timeline
5910+ )
5911+{
5912+ struct viv_sync_timeline * timeline;
5913+ gcmkASSERT(Timeline != gcvNULL);
5914+
5915+ /* Destroy timeline. */
5916+ timeline = (struct viv_sync_timeline *) Timeline;
5917+ sync_timeline_destroy(&timeline->obj);
5918+
5919+ return gcvSTATUS_OK;
5920+}
5921+
5922+gceSTATUS
5923+gckOS_CreateNativeFence(
5924+ IN gckOS Os,
5925+ IN gctHANDLE Timeline,
5926+ IN gctSYNC_POINT SyncPoint,
5927+ OUT gctINT * FenceFD
5928+ )
5929+{
5930+ int fd = -1;
5931+ struct viv_sync_timeline *timeline;
5932+ struct sync_pt * pt = gcvNULL;
5933+ struct sync_fence * fence;
5934+ char name[32];
5935+ gcsSYNC_POINT_PTR syncPoint;
5936+ gceSTATUS status;
5937+
5938+ gcmkHEADER_ARG("Os=0x%X Timeline=0x%X SyncPoint=%d",
5939+ Os, Timeline, (gctUINT)(gctUINTPTR_T)SyncPoint);
5940+
5941+ gcmkONERROR(
5942+ _QueryIntegerId(&Os->syncPointDB,
5943+ (gctUINT32)(gctUINTPTR_T)SyncPoint,
5944+ (gctPOINTER)&syncPoint));
5945+
5946+ /* Cast timeline. */
5947+ timeline = (struct viv_sync_timeline *) Timeline;
5948+
5949+ fd = get_unused_fd();
5950+
5951+ if (fd < 0)
5952+ {
5953+ /* Out of resources. */
5954+ gcmkONERROR(gcvSTATUS_OUT_OF_RESOURCES);
5955+ }
5956+
5957+ /* Create viv_sync_pt. */
5958+ pt = viv_sync_pt_create(timeline, SyncPoint);
5959+
5960+ if (pt == gcvNULL)
5961+ {
5962+ gcmkONERROR(gcvSTATUS_OUT_OF_MEMORY);
5963+ }
5964+
5965+ /* Reference sync_timeline. */
5966+ syncPoint->timeline = &timeline->obj;
5967+
5968+ /* Build fence name. */
5969+ snprintf(name, 32, "viv sync_fence-%u", (gctUINT)(gctUINTPTR_T)SyncPoint);
5970+
5971+ /* Create sync_fence. */
5972+ fence = sync_fence_create(name, pt);
5973+
5974+ if (fence == NULL)
5975+ {
5976+ gcmkONERROR(gcvSTATUS_OUT_OF_MEMORY);
5977+ }
5978+
5979+ /* Install fence to fd. */
5980+ sync_fence_install(fence, fd);
5981+
5982+ *FenceFD = fd;
5983+ gcmkFOOTER_ARG("*FenceFD=%d", fd);
5984+ return gcvSTATUS_OK;
5985+
5986+OnError:
5987+ /* Error roll back. */
5988+ if (pt)
5989+ {
5990+ sync_pt_free(pt);
5991+ }
5992+
5993+ if (fd > 0)
5994+ {
5995+ put_unused_fd(fd);
5996+ }
5997+
5998+ gcmkFOOTER();
5999+ return status;
6000+}
6001+#endif
6002diff --git a/drivers/mxc/gpu-viv/hal/os/linux/kernel/gc_hal_kernel_sync.c b/drivers/mxc/gpu-viv/hal/os/linux/kernel/gc_hal_kernel_sync.c
6003new file mode 100644
6004index 0000000..7efae1c
6005--- /dev/null
6006+++ b/drivers/mxc/gpu-viv/hal/os/linux/kernel/gc_hal_kernel_sync.c
6007@@ -0,0 +1,174 @@
6008+/****************************************************************************
6009+*
6010+* Copyright (C) 2005 - 2013 by Vivante Corp.
6011+*
6012+* This program is free software; you can redistribute it and/or modify
6013+* it under the terms of the GNU General Public License as published by
6014+* the Free Software Foundation; either version 2 of the license, or
6015+* (at your option) any later version.
6016+*
6017+* This program is distributed in the hope that it will be useful,
6018+* but WITHOUT ANY WARRANTY; without even the implied warranty of
6019+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
6020+* GNU General Public License for more details.
6021+*
6022+* You should have received a copy of the GNU General Public License
6023+* along with this program; if not write to the Free Software
6024+* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
6025+*
6026+*****************************************************************************/
6027+
6028+
6029+#include <linux/kernel.h>
6030+#include <linux/file.h>
6031+#include <linux/fs.h>
6032+#include <linux/miscdevice.h>
6033+#include <linux/module.h>
6034+#include <linux/syscalls.h>
6035+#include <linux/uaccess.h>
6036+
6037+#include "gc_hal_kernel_sync.h"
6038+
6039+#if gcdANDROID_NATIVE_FENCE_SYNC
6040+
6041+static struct sync_pt *
6042+viv_sync_pt_dup(
6043+ struct sync_pt * sync_pt
6044+ )
6045+{
6046+ gceSTATUS status;
6047+ struct viv_sync_pt *pt;
6048+ struct viv_sync_pt *src;
6049+ struct viv_sync_timeline *obj;
6050+
6051+ src = (struct viv_sync_pt *) sync_pt;
6052+ obj = (struct viv_sync_timeline *) sync_pt->parent;
6053+
6054+ /* Create the new sync_pt. */
6055+ pt = (struct viv_sync_pt *)
6056+ sync_pt_create(&obj->obj, sizeof(struct viv_sync_pt));
6057+
6058+ pt->stamp = src->stamp;
6059+ pt->sync = src->sync;
6060+
6061+ /* Reference sync point. */
6062+ status = gckOS_ReferenceSyncPoint(obj->os, pt->sync);
6063+
6064+ if (gcmIS_ERROR(status))
6065+ {
6066+ sync_pt_free((struct sync_pt *)pt);
6067+ return NULL;
6068+ }
6069+
6070+ return (struct sync_pt *)pt;
6071+}
6072+
6073+static int
6074+viv_sync_pt_has_signaled(
6075+ struct sync_pt * sync_pt
6076+ )
6077+{
6078+ gceSTATUS status;
6079+ gctBOOL state;
6080+ struct viv_sync_pt * pt;
6081+ struct viv_sync_timeline * obj;
6082+
6083+ pt = (struct viv_sync_pt *)sync_pt;
6084+ obj = (struct viv_sync_timeline *)sync_pt->parent;
6085+
6086+ status = gckOS_QuerySyncPoint(obj->os, pt->sync, &state);
6087+
6088+ if (gcmIS_ERROR(status))
6089+ {
6090+ /* Error. */
6091+ return -1;
6092+ }
6093+
6094+ return state;
6095+}
6096+
6097+static int
6098+viv_sync_pt_compare(
6099+ struct sync_pt * a,
6100+ struct sync_pt * b
6101+ )
6102+{
6103+ int ret;
6104+ struct viv_sync_pt * pt1 = (struct viv_sync_pt *) a;
6105+ struct viv_sync_pt * pt2 = (struct viv_sync_pt *) b;
6106+
6107+ ret = (pt1->stamp < pt2->stamp) ? -1
6108+ : (pt1->stamp == pt2->stamp) ? 0
6109+ : 1;
6110+
6111+ return ret;
6112+}
6113+
6114+static void
6115+viv_sync_pt_free(
6116+ struct sync_pt * sync_pt
6117+ )
6118+{
6119+ struct viv_sync_pt * pt;
6120+ struct viv_sync_timeline * obj;
6121+
6122+ pt = (struct viv_sync_pt *) sync_pt;
6123+ obj = (struct viv_sync_timeline *) sync_pt->parent;
6124+
6125+ gckOS_DestroySyncPoint(obj->os, pt->sync);
6126+}
6127+
6128+static struct sync_timeline_ops viv_timeline_ops =
6129+{
6130+ .driver_name = "viv_sync",
6131+ .dup = viv_sync_pt_dup,
6132+ .has_signaled = viv_sync_pt_has_signaled,
6133+ .compare = viv_sync_pt_compare,
6134+ .free_pt = viv_sync_pt_free,
6135+};
6136+
6137+struct viv_sync_timeline *
6138+viv_sync_timeline_create(
6139+ const char * name,
6140+ gckOS os
6141+ )
6142+{
6143+ struct viv_sync_timeline * obj;
6144+
6145+ obj = (struct viv_sync_timeline *)
6146+ sync_timeline_create(&viv_timeline_ops, sizeof(struct viv_sync_timeline), name);
6147+
6148+ obj->os = os;
6149+ obj->stamp = 0;
6150+
6151+ return obj;
6152+}
6153+
6154+struct sync_pt *
6155+viv_sync_pt_create(
6156+ struct viv_sync_timeline * obj,
6157+ gctSYNC_POINT SyncPoint
6158+ )
6159+{
6160+ gceSTATUS status;
6161+ struct viv_sync_pt * pt;
6162+
6163+ pt = (struct viv_sync_pt *)
6164+ sync_pt_create(&obj->obj, sizeof(struct viv_sync_pt));
6165+
6166+ pt->stamp = obj->stamp++;
6167+ pt->sync = SyncPoint;
6168+
6169+ /* Dup signal. */
6170+ status = gckOS_ReferenceSyncPoint(obj->os, SyncPoint);
6171+
6172+ if (gcmIS_ERROR(status))
6173+ {
6174+ sync_pt_free((struct sync_pt *)pt);
6175+ return NULL;
6176+ }
6177+
6178+ return (struct sync_pt *) pt;
6179+}
6180+
6181+#endif
6182diff --git a/drivers/mxc/gpu-viv/hal/os/linux/kernel/gc_hal_kernel_sync.h b/drivers/mxc/gpu-viv/hal/os/linux/kernel/gc_hal_kernel_sync.h
6183new file mode 100644
6184index 0000000..6fc12e5
6185--- /dev/null
6186+++ b/drivers/mxc/gpu-viv/hal/os/linux/kernel/gc_hal_kernel_sync.h
6187@@ -0,0 +1,71 @@
6188+/****************************************************************************
6189+*
6190+* Copyright (C) 2005 - 2013 by Vivante Corp.
6191+*
6192+* This program is free software; you can redistribute it and/or modify
6193+* it under the terms of the GNU General Public License as published by
6194+* the Free Software Foundation; either version 2 of the license, or
6195+* (at your option) any later version.
6196+*
6197+* This program is distributed in the hope that it will be useful,
6198+* but WITHOUT ANY WARRANTY; without even the implied warranty of
6199+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
6200+* GNU General Public License for more details.
6201+*
6202+* You should have received a copy of the GNU General Public License
6203+* along with this program; if not write to the Free Software
6204+* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
6205+*
6206+*****************************************************************************/
6207+
6208+
6209+#ifndef __gc_hal_kernel_sync_h_
6210+#define __gc_hal_kernel_sync_h_
6211+
6212+#include <linux/types.h>
6213+
6214+#include <linux/sync.h>
6215+
6216+#include <gc_hal.h>
6217+#include <gc_hal_base.h>
6218+
6219+struct viv_sync_timeline
6220+{
6221+ /* Parent object. */
6222+ struct sync_timeline obj;
6223+
6224+ /* Timestamp when sync_pt is created. */
6225+ gctUINT stamp;
6226+
6227+ /* Pointer to os struct. */
6228+ gckOS os;
6229+};
6230+
6231+
6232+struct viv_sync_pt
6233+{
6234+ /* Parent object. */
6235+ struct sync_pt pt;
6236+
6237+ /* Reference sync point*/
6238+ gctSYNC_POINT sync;
6239+
6240+ /* Timestamp when sync_pt is created. */
6241+ gctUINT stamp;
6242+};
6243+
6244+/* Create viv_sync_timeline object. */
6245+struct viv_sync_timeline *
6246+viv_sync_timeline_create(
6247+ const char * Name,
6248+ gckOS Os
6249+ );
6250+
6251+/* Create viv_sync_pt object. */
6252+struct sync_pt *
6253+viv_sync_pt_create(
6254+ struct viv_sync_timeline * Obj,
6255+ gctSYNC_POINT SyncPoint
6256+ );
6257+
6258+#endif /* __gc_hal_kernel_sync_h_ */
6259--
62601.7.9.5
6261
diff --git a/recipes-kernel/linux/linux-cubox-i-3.0.35/defconfig b/recipes-kernel/linux/linux-cubox-i-3.0.35/defconfig
new file mode 100644
index 0000000..efd187a
--- /dev/null
+++ b/recipes-kernel/linux/linux-cubox-i-3.0.35/defconfig
@@ -0,0 +1,366 @@
1CONFIG_EXPERIMENTAL=y
2CONFIG_LOCALVERSION="-4.1.0+yocto"
3CONFIG_SYSVIPC=y
4CONFIG_IKCONFIG=y
5CONFIG_IKCONFIG_PROC=y
6CONFIG_LOG_BUF_SHIFT=14
7CONFIG_CGROUPS=y
8CONFIG_CGROUP_FREEZER=y
9CONFIG_CGROUP_DEVICE=y
10CONFIG_CGROUP_CPUACCT=y
11CONFIG_CGROUP_PERF=y
12CONFIG_CGROUP_SCHED=y
13CONFIG_EMBEDDED=y
14CONFIG_PERF_EVENTS=y
15CONFIG_MODULES=y
16CONFIG_MODULE_UNLOAD=y
17CONFIG_MODULE_FORCE_UNLOAD=y
18CONFIG_MODVERSIONS=y
19# CONFIG_BLK_DEV_BSG is not set
20CONFIG_ARCH_MXC=y
21CONFIG_GPIO_PCA953X=y
22CONFIG_ARCH_MX6=y
23CONFIG_FORCE_MAX_ZONEORDER=14
24CONFIG_MACH_MX6Q_ARM2=y
25CONFIG_MACH_MX6Q_SABRELITE=y
26CONFIG_MACH_MX6Q_SABRESD=y
27CONFIG_MACH_MX6Q_SABREAUTO=y
28CONFIG_MACH_MX6Q_HDMIDONGLE=y
29CONFIG_MACH_HB=y
30CONFIG_MACH_CUBOX_I=y
31CONFIG_USB_EHCI_ARC_H1=y
32CONFIG_USB_FSL_ARC_OTG=y
33CONFIG_MXC_PWM=y
34CONFIG_MXC_REBOOT_MFGMODE=y
35CONFIG_CLK_DEBUG=y
36CONFIG_DMA_ZONE_SIZE=184
37# CONFIG_SWP_EMULATE is not set
38CONFIG_ARM_ERRATA_743622=y
39CONFIG_ARM_ERRATA_751472=y
40CONFIG_ARM_ERRATA_754322=y
41CONFIG_ARM_ERRATA_775420=y
42CONFIG_ARM_ERRATA_764369=y
43CONFIG_PL310_ERRATA_769419=y
44CONFIG_NO_HZ=y
45CONFIG_HIGH_RES_TIMERS=y
46CONFIG_SMP=y
47CONFIG_VMSPLIT_2G=y
48CONFIG_PREEMPT=y
49CONFIG_AEABI=y
50# CONFIG_OABI_COMPAT is not set
51CONFIG_HIGHMEM=y
52CONFIG_COMPACTION=y
53CONFIG_KSM=y
54CONFIG_ZBOOT_ROM_TEXT=0x0
55CONFIG_ZBOOT_ROM_BSS=0x0
56CONFIG_CMDLINE="noinitrd console=ttymxc0,115200 root=/dev/mtdblock2 rw rootfstype=jffs2 ip=off"
57CONFIG_CPU_FREQ=y
58CONFIG_CPU_FREQ_DEFAULT_GOV_INTERACTIVE=y
59CONFIG_CPU_FREQ_GOV_PERFORMANCE=y
60CONFIG_CPU_FREQ_GOV_POWERSAVE=y
61CONFIG_CPU_FREQ_GOV_USERSPACE=y
62CONFIG_CPU_FREQ_GOV_ONDEMAND=y
63CONFIG_CPU_FREQ_GOV_CONSERVATIVE=y
64CONFIG_CPU_FREQ_IMX=y
65CONFIG_VFP=y
66CONFIG_NEON=y
67# CONFIG_CORE_DUMP_DEFAULT_ELF_HEADERS is not set
68CONFIG_SUSPEND_DEVICE_TIME_DEBUG=y
69CONFIG_PM_RUNTIME=y
70CONFIG_PM_DEBUG=y
71CONFIG_APM_EMULATION=y
72CONFIG_NET=y
73CONFIG_PACKET=y
74CONFIG_UNIX=y
75CONFIG_INET=y
76CONFIG_IP_MULTICAST=y
77CONFIG_IP_PNP=y
78CONFIG_IP_PNP_DHCP=y
79CONFIG_IP_PNP_BOOTP=y
80# CONFIG_INET_LRO is not set
81# CONFIG_IPV6 is not set
82CONFIG_LLC2=y
83CONFIG_CAN=y
84CONFIG_CAN_RAW=y
85CONFIG_CAN_BCM=y
86CONFIG_CAN_VCAN=y
87CONFIG_CAN_FLEXCAN=y
88CONFIG_BT=y
89CONFIG_BT_L2CAP=y
90CONFIG_BT_SCO=y
91CONFIG_BT_RFCOMM=y
92CONFIG_BT_RFCOMM_TTY=y
93CONFIG_BT_BNEP=y
94CONFIG_BT_BNEP_MC_FILTER=y
95CONFIG_BT_BNEP_PROTO_FILTER=y
96CONFIG_BT_HIDP=y
97CONFIG_BT_HCIBTUSB=y
98CONFIG_BT_HCIUART=y
99CONFIG_BT_HCIUART_ATH3K=y
100CONFIG_BT_HCIVHCI=y
101CONFIG_CFG80211=y
102CONFIG_RFKILL=y
103CONFIG_RFKILL_INPUT=y
104CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug"
105CONFIG_DEVTMPFS=y
106CONFIG_DEVTMPFS_MOUNT=y
107CONFIG_CONNECTOR=y
108CONFIG_MTD=y
109CONFIG_MTD_CHAR=y
110CONFIG_MTD_BLOCK=y
111CONFIG_MTD_CFI=y
112CONFIG_MTD_CFI_AMDSTD=y
113CONFIG_MTD_PHYSMAP=y
114CONFIG_MTD_M25P80=y
115CONFIG_MTD_NAND=y
116CONFIG_MTD_NAND_GPMI_NAND=y
117CONFIG_MTD_UBI=y
118CONFIG_BLK_DEV_LOOP=y
119CONFIG_MISC_DEVICES=y
120CONFIG_MXS_PERFMON=m
121CONFIG_BLK_DEV_SD=y
122CONFIG_SCSI_MULTI_LUN=y
123CONFIG_ATA=y
124# CONFIG_SATA_PMP is not set
125CONFIG_SATA_AHCI_PLATFORM=y
126CONFIG_NETDEVICES=y
127CONFIG_MICREL_PHY=y
128CONFIG_NET_ETHERNET=y
129CONFIG_SMSC911X=y
130CONFIG_FEC_NAPI=y
131# CONFIG_NETDEV_1000 is not set
132# CONFIG_NETDEV_10000 is not set
133CONFIG_ATH_COMMON=m
134CONFIG_ATH6KL=m
135CONFIG_BRCMFMAC=y
136CONFIG_HOSTAP=y
137CONFIG_INPUT_POLLDEV=y
138CONFIG_INPUT_EVDEV=y
139CONFIG_KEYBOARD_GPIO=y
140# CONFIG_INPUT_MOUSE is not set
141CONFIG_INPUT_TOUCHSCREEN=y
142CONFIG_TOUCHSCREEN_EGALAX=y
143CONFIG_TOUCHSCREEN_ELAN=y
144CONFIG_TOUCHSCREEN_MAX11801=y
145CONFIG_INPUT_MISC=y
146CONFIG_INPUT_UINPUT=y
147CONFIG_INPUT_ISL29023=y
148CONFIG_VT_HW_CONSOLE_BINDING=y
149CONFIG_SERIAL_IMX=y
150CONFIG_SERIAL_IMX_CONSOLE=y
151CONFIG_FSL_OTP=y
152CONFIG_HW_RANDOM=y
153CONFIG_MXS_VIIM=y
154CONFIG_I2C_CHARDEV=y
155CONFIG_I2C_IMX=y
156CONFIG_SPI=y
157CONFIG_SPI_IMX=y
158CONFIG_GPIO_SYSFS=y
159CONFIG_SABRESD_MAX8903=y
160CONFIG_SENSORS_MAX17135=y
161CONFIG_SENSORS_MAG3110=y
162# CONFIG_MXC_MMA8450 is not set
163CONFIG_WATCHDOG=y
164CONFIG_WATCHDOG_NOWAYOUT=y
165CONFIG_IMX2_WDT=y
166CONFIG_MFD_WM8994=y
167CONFIG_MFD_PFUZE=y
168CONFIG_MFD_MAX17135=y
169CONFIG_REGULATOR=y
170CONFIG_REGULATOR_FIXED_VOLTAGE=y
171CONFIG_REGULATOR_PFUZE100=y
172CONFIG_REGULATOR_MAX17135=y
173CONFIG_MEDIA_SUPPORT=y
174CONFIG_VIDEO_DEV=y
175CONFIG_IR_GPIO_CIR=y
176# CONFIG_MEDIA_TUNER_CUSTOMISE is not set
177CONFIG_VIDEO_MXC_CAMERA=m
178CONFIG_MXC_CAMERA_OV3640=m
179CONFIG_MXC_CAMERA_OV5640=m
180CONFIG_MXC_CAMERA_OV8820_MIPI=m
181CONFIG_MXC_CAMERA_OV5642=m
182CONFIG_MXC_TVIN_ADV7180=m
183CONFIG_MXC_CAMERA_OV5640_MIPI=m
184CONFIG_MXC_IPU_DEVICE_QUEUE_SDC=m
185CONFIG_USB_VIDEO_CLASS=m
186# CONFIG_RADIO_ADAPTERS is not set
187CONFIG_DRM=y
188CONFIG_DRM_VIVANTE=y
189CONFIG_FB=y
190CONFIG_BACKLIGHT_LCD_SUPPORT=y
191# CONFIG_LCD_CLASS_DEVICE is not set
192CONFIG_BACKLIGHT_CLASS_DEVICE=y
193# CONFIG_BACKLIGHT_GENERIC is not set
194CONFIG_BACKLIGHT_PWM=y
195CONFIG_FB_MXC_LDB=y
196CONFIG_FB_MXC_MIPI_DSI=y
197CONFIG_FB_MXC_TRULY_WVGA_SYNC_PANEL=y
198CONFIG_FB_MXC_EINK_PANEL=y
199CONFIG_FB_MXC_HDMI=y
200CONFIG_FRAMEBUFFER_CONSOLE=y
201CONFIG_FRAMEBUFFER_CONSOLE_DETECT_PRIMARY=y
202CONFIG_FONTS=y
203CONFIG_FONT_8x16=y
204CONFIG_LOGO=y
205CONFIG_SOUND=y
206CONFIG_SND=y
207CONFIG_SND_USB_AUDIO=y
208CONFIG_SND_SOC=y
209CONFIG_SND_IMX_SOC=y
210CONFIG_SND_SOC_IMX_SGTL5000=y
211CONFIG_SND_SOC_IMX_WM8962=y
212CONFIG_SND_SOC_IMX_CS42888=y
213CONFIG_SND_SOC_IMX_SPDIF=y
214CONFIG_SND_SOC_IMX_HDMI=y
215CONFIG_HIDRAW=y
216CONFIG_HID_A4TECH=m
217CONFIG_HID_APPLE=m
218CONFIG_HID_BELKIN=m
219CONFIG_HID_CHERRY=m
220CONFIG_HID_CHICONY=m
221CONFIG_HID_CYPRESS=m
222CONFIG_HID_EZKEY=m
223CONFIG_HID_GYRATION=m
224CONFIG_HID_LOGITECH=m
225CONFIG_HID_MICROSOFT=m
226CONFIG_HID_MONTEREY=m
227CONFIG_HID_PANTHERLORD=m
228CONFIG_HID_PETALYNX=m
229CONFIG_HID_SAMSUNG=m
230CONFIG_HID_SONY=m
231CONFIG_HID_SUNPLUS=m
232CONFIG_USB=y
233# CONFIG_USB_DEVICE_CLASS is not set
234CONFIG_USB_SUSPEND=y
235# CONFIG_USB_OTG_WHITELIST is not set
236CONFIG_USB_EHCI_HCD=y
237CONFIG_USB_EHCI_ARC=y
238CONFIG_USB_EHCI_ROOT_HUB_TT=y
239CONFIG_USB_STORAGE=y
240CONFIG_USB_SERIAL=y
241CONFIG_USB_SERIAL_CONSOLE=y
242CONFIG_USB_SERIAL_GENERIC=y
243CONFIG_USB_SERIAL_AIRCABLE=m
244CONFIG_USB_SERIAL_ARK3116=m
245CONFIG_USB_SERIAL_BELKIN=m
246CONFIG_USB_SERIAL_CH341=m
247CONFIG_USB_SERIAL_WHITEHEAT=m
248CONFIG_USB_SERIAL_DIGI_ACCELEPORT=m
249CONFIG_USB_SERIAL_CP210X=m
250CONFIG_USB_SERIAL_CYPRESS_M8=m
251CONFIG_USB_SERIAL_EMPEG=m
252CONFIG_USB_SERIAL_FTDI_SIO=y
253CONFIG_USB_SERIAL_FUNSOFT=m
254CONFIG_USB_SERIAL_VISOR=m
255CONFIG_USB_SERIAL_IPAQ=m
256CONFIG_USB_SERIAL_IR=m
257CONFIG_USB_SERIAL_EDGEPORT=m
258CONFIG_USB_SERIAL_EDGEPORT_TI=m
259CONFIG_USB_SERIAL_GARMIN=m
260CONFIG_USB_SERIAL_IPW=m
261CONFIG_USB_SERIAL_IUU=m
262CONFIG_USB_SERIAL_KEYSPAN_PDA=m
263CONFIG_USB_SERIAL_KLSI=m
264CONFIG_USB_SERIAL_KOBIL_SCT=m
265CONFIG_USB_SERIAL_MCT_U232=m
266CONFIG_USB_SERIAL_MOS7720=m
267CONFIG_USB_SERIAL_MOS7840=m
268CONFIG_USB_SERIAL_MOTOROLA=m
269CONFIG_USB_SERIAL_NAVMAN=m
270CONFIG_USB_SERIAL_PL2303=y
271CONFIG_USB_SERIAL_OTI6858=m
272CONFIG_USB_SERIAL_QCAUX=m
273CONFIG_USB_SERIAL_QUALCOMM=m
274CONFIG_USB_SERIAL_SPCP8X5=m
275CONFIG_USB_SERIAL_HP4X=m
276CONFIG_USB_SERIAL_SAFE=m
277CONFIG_USB_SERIAL_SAFE_PADDED=y
278CONFIG_USB_SERIAL_SIEMENS_MPI=m
279CONFIG_USB_SERIAL_SIERRAWIRELESS=m
280CONFIG_USB_SERIAL_SYMBOL=m
281CONFIG_USB_SERIAL_TI=m
282CONFIG_USB_SERIAL_CYBERJACK=m
283CONFIG_USB_SERIAL_XIRCOM=m
284CONFIG_USB_SERIAL_OPTION=m
285CONFIG_USB_SERIAL_OMNINET=m
286CONFIG_USB_SERIAL_OPTICON=m
287CONFIG_USB_SERIAL_VIVOPAY_SERIAL=m
288CONFIG_USB_SERIAL_ZIO=m
289CONFIG_USB_SERIAL_SSU100=m
290CONFIG_USB_GADGET=y
291CONFIG_USB_AUDIO=m
292CONFIG_USB_ETH=m
293CONFIG_USB_FILE_STORAGE=m
294CONFIG_USB_G_SERIAL=m
295CONFIG_MXC_OTG=y
296CONFIG_MMC=y
297CONFIG_MMC_UNSAFE_RESUME=y
298CONFIG_MMC_SDHCI=y
299CONFIG_MMC_SDHCI_PLTFM=y
300CONFIG_MMC_SDHCI_ESDHC_IMX=y
301CONFIG_NEW_LEDS=y
302CONFIG_LEDS_CLASS=y
303CONFIG_LEDS_GPIO=y
304CONFIG_LEDS_TRIGGERS=y
305CONFIG_LEDS_TRIGGER_GPIO=y
306CONFIG_LEDS_TRIGGER_DEFAULT_ON=y
307CONFIG_RTC_CLASS=y
308CONFIG_RTC_INTF_DEV_UIE_EMUL=y
309CONFIG_RTC_DRV_PCF8523=y
310CONFIG_RTC_DRV_SNVS=y
311CONFIG_DMADEVICES=y
312CONFIG_MXC_PXP_V2=y
313CONFIG_IMX_SDMA=y
314CONFIG_MXC_IPU=y
315# CONFIG_MXC_HMP4E is not set
316# CONFIG_MXC_HWEVENT is not set
317CONFIG_MXC_ASRC=y
318CONFIG_MXC_MLB150=m
319CONFIG_MXC_GPU_VIV=y
320CONFIG_MXC_MIPI_CSI2=y
321CONFIG_MXC_HDMI_CEC=y
322CONFIG_EXT2_FS=y
323CONFIG_EXT3_FS=y
324# CONFIG_EXT3_DEFAULTS_TO_ORDERED is not set
325CONFIG_EXT4_FS=y
326CONFIG_AUTOFS4_FS=m
327CONFIG_FUSE_FS=y
328CONFIG_CUSE=y
329CONFIG_MSDOS_FS=y
330CONFIG_VFAT_FS=y
331CONFIG_TMPFS=y
332CONFIG_JFFS2_FS=y
333CONFIG_UBIFS_FS=y
334CONFIG_CRAMFS=y
335CONFIG_NFS_FS=y
336CONFIG_NFS_V3=y
337CONFIG_ROOT_NFS=y
338CONFIG_CIFS=y
339CONFIG_CIFS_STATS=y
340CONFIG_CIFS_STATS2=y
341CONFIG_CIFS_XATTR=y
342CONFIG_CIFS_POSIX=y
343CONFIG_PARTITION_ADVANCED=y
344CONFIG_EFI_PARTITION=y
345CONFIG_NLS_CODEPAGE_437=y
346CONFIG_NLS_ASCII=m
347CONFIG_NLS_ISO8859_1=y
348CONFIG_NLS_UTF8=m
349CONFIG_MAGIC_SYSRQ=y
350CONFIG_DEBUG_FS=y
351CONFIG_SYSCTL_SYSCALL_CHECK=y
352# CONFIG_CRYPTO_MANAGER_DISABLE_TESTS is not set
353CONFIG_CRYPTO_TEST=m
354CONFIG_CRYPTO_CCM=y
355CONFIG_CRYPTO_GCM=y
356CONFIG_CRYPTO_CBC=y
357CONFIG_CRYPTO_CTS=y
358CONFIG_CRYPTO_LRW=y
359CONFIG_CRYPTO_PCBC=y
360CONFIG_CRYPTO_XTS=y
361# CONFIG_CRYPTO_ANSI_CPRNG is not set
362CONFIG_CRYPTO_DEV_FSL_CAAM=y
363CONFIG_CRYPTO_DEV_FSL_CAAM_SM=y
364CONFIG_CRYPTO_DEV_FSL_CAAM_SM_TEST=y
365CONFIG_CRYPTO_DEV_FSL_CAAM_SECVIO=y
366CONFIG_CRC_CCITT=m
diff --git a/recipes-kernel/linux/linux-cubox-i-3.0.35/epdc-Rename-mxcfb_epdc_kernel.h-to-mxc_epdc.h.patch b/recipes-kernel/linux/linux-cubox-i-3.0.35/epdc-Rename-mxcfb_epdc_kernel.h-to-mxc_epdc.h.patch
new file mode 100644
index 0000000..0a20b3f
--- /dev/null
+++ b/recipes-kernel/linux/linux-cubox-i-3.0.35/epdc-Rename-mxcfb_epdc_kernel.h-to-mxc_epdc.h.patch
@@ -0,0 +1,143 @@
1From 149545df26169d257b144ff78934ce9cb5b6818b Mon Sep 17 00:00:00 2001
2From: Otavio Salvador <otavio@ossystems.com.br>
3Date: Sat, 19 Oct 2013 10:55:11 -0300
4Subject: [PATCH] epdc: Rename mxcfb_epdc_kernel.h to mxc_epdc.h
5Organization: O.S. Systems Software LTDA.
6
7This allow for forward compatibility with imx-test >= 3.10.9-1.0.0.
8
9Signed-off-by: Otavio Salvador <otavio@ossystems.com.br>
10---
11 drivers/video/mxc/mxc_epdc_fb.c | 2 +-
12 include/linux/mxcfb_epdc.h | 49 +++++++++++++++++++++++++++++++++++++++
13 include/linux/mxcfb_epdc_kernel.h | 49 ---------------------------------------
14 3 files changed, 50 insertions(+), 50 deletions(-)
15 create mode 100644 include/linux/mxcfb_epdc.h
16 delete mode 100644 include/linux/mxcfb_epdc_kernel.h
17
18diff --git a/drivers/video/mxc/mxc_epdc_fb.c b/drivers/video/mxc/mxc_epdc_fb.c
19index 4103498..b3ef8ea 100644
20--- a/drivers/video/mxc/mxc_epdc_fb.c
21+++ b/drivers/video/mxc/mxc_epdc_fb.c
22@@ -43,7 +43,7 @@
23 #include <linux/dmaengine.h>
24 #include <linux/pxp_dma.h>
25 #include <linux/mxcfb.h>
26-#include <linux/mxcfb_epdc_kernel.h>
27+#include <linux/mxcfb_epdc.h>
28 #include <linux/gpio.h>
29 #include <linux/regulator/driver.h>
30 #include <linux/fsl_devices.h>
31diff --git a/include/linux/mxcfb_epdc.h b/include/linux/mxcfb_epdc.h
32new file mode 100644
33index 0000000..06fea6f
34--- /dev/null
35+++ b/include/linux/mxcfb_epdc.h
36@@ -0,0 +1,49 @@
37+/*
38+ * Copyright (C) 2010-2012 Freescale Semiconductor, Inc. All Rights Reserved.
39+ *
40+ * This program is free software; you can redistribute it and/or modify
41+ * it under the terms of the GNU General Public License as published by
42+ * the Free Software Foundation; either version 2 of the License, or
43+ * (at your option) any later version.
44+ *
45+ * This program is distributed in the hope that it will be useful,
46+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
47+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
48+ * GNU General Public License for more details.
49+ *
50+ * You should have received a copy of the GNU General Public License
51+ * along with this program; if not, write to the Free Software
52+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
53+ *
54+ */
55+#ifndef _MXCFB_EPDC_KERNEL
56+#define _MXCFB_EPDC_KERNEL
57+
58+void mxc_epdc_fb_set_waveform_modes(struct mxcfb_waveform_modes *modes,
59+ struct fb_info *info);
60+int mxc_epdc_fb_set_temperature(int temperature, struct fb_info *info);
61+int mxc_epdc_fb_set_auto_update(u32 auto_mode, struct fb_info *info);
62+int mxc_epdc_fb_send_update(struct mxcfb_update_data *upd_data,
63+ struct fb_info *info);
64+int mxc_epdc_fb_wait_update_complete(
65+ struct mxcfb_update_marker_data *marker_data,
66+ struct fb_info *info);
67+int mxc_epdc_fb_set_pwrdown_delay(u32 pwrdown_delay,
68+ struct fb_info *info);
69+int mxc_epdc_get_pwrdown_delay(struct fb_info *info);
70+int mxc_epdc_fb_set_upd_scheme(u32 upd_scheme, struct fb_info *info);
71+
72+void mxc_spdc_fb_set_waveform_modes(struct mxcfb_waveform_modes *modes,
73+ struct fb_info *info);
74+int mxc_spdc_fb_set_temperature(int temperature, struct fb_info *info);
75+int mxc_spdc_fb_set_auto_update(u32 auto_mode, struct fb_info *info);
76+int mxc_spdc_fb_send_update(struct mxcfb_update_data *upd_data,
77+ struct fb_info *info);
78+int mxc_spdc_fb_wait_update_complete(
79+ struct mxcfb_update_marker_data *marker_data,
80+ struct fb_info *info);
81+int mxc_spdc_fb_set_pwrdown_delay(u32 pwrdown_delay,
82+ struct fb_info *info);
83+int mxc_spdc_get_pwrdown_delay(struct fb_info *info);
84+int mxc_spdc_fb_set_upd_scheme(u32 upd_scheme, struct fb_info *info);
85+#endif
86diff --git a/include/linux/mxcfb_epdc_kernel.h b/include/linux/mxcfb_epdc_kernel.h
87deleted file mode 100644
88index 06fea6f..0000000
89--- a/include/linux/mxcfb_epdc_kernel.h
90+++ /dev/null
91@@ -1,49 +0,0 @@
92-/*
93- * Copyright (C) 2010-2012 Freescale Semiconductor, Inc. All Rights Reserved.
94- *
95- * This program is free software; you can redistribute it and/or modify
96- * it under the terms of the GNU General Public License as published by
97- * the Free Software Foundation; either version 2 of the License, or
98- * (at your option) any later version.
99- *
100- * This program is distributed in the hope that it will be useful,
101- * but WITHOUT ANY WARRANTY; without even the implied warranty of
102- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
103- * GNU General Public License for more details.
104- *
105- * You should have received a copy of the GNU General Public License
106- * along with this program; if not, write to the Free Software
107- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
108- *
109- */
110-#ifndef _MXCFB_EPDC_KERNEL
111-#define _MXCFB_EPDC_KERNEL
112-
113-void mxc_epdc_fb_set_waveform_modes(struct mxcfb_waveform_modes *modes,
114- struct fb_info *info);
115-int mxc_epdc_fb_set_temperature(int temperature, struct fb_info *info);
116-int mxc_epdc_fb_set_auto_update(u32 auto_mode, struct fb_info *info);
117-int mxc_epdc_fb_send_update(struct mxcfb_update_data *upd_data,
118- struct fb_info *info);
119-int mxc_epdc_fb_wait_update_complete(
120- struct mxcfb_update_marker_data *marker_data,
121- struct fb_info *info);
122-int mxc_epdc_fb_set_pwrdown_delay(u32 pwrdown_delay,
123- struct fb_info *info);
124-int mxc_epdc_get_pwrdown_delay(struct fb_info *info);
125-int mxc_epdc_fb_set_upd_scheme(u32 upd_scheme, struct fb_info *info);
126-
127-void mxc_spdc_fb_set_waveform_modes(struct mxcfb_waveform_modes *modes,
128- struct fb_info *info);
129-int mxc_spdc_fb_set_temperature(int temperature, struct fb_info *info);
130-int mxc_spdc_fb_set_auto_update(u32 auto_mode, struct fb_info *info);
131-int mxc_spdc_fb_send_update(struct mxcfb_update_data *upd_data,
132- struct fb_info *info);
133-int mxc_spdc_fb_wait_update_complete(
134- struct mxcfb_update_marker_data *marker_data,
135- struct fb_info *info);
136-int mxc_spdc_fb_set_pwrdown_delay(u32 pwrdown_delay,
137- struct fb_info *info);
138-int mxc_spdc_get_pwrdown_delay(struct fb_info *info);
139-int mxc_spdc_fb_set_upd_scheme(u32 upd_scheme, struct fb_info *info);
140-#endif
141--
1421.8.4.rc3
143
diff --git a/recipes-kernel/linux/linux-cubox-i-3.0.35/fix-install-breakage-for-fw-images.patch b/recipes-kernel/linux/linux-cubox-i-3.0.35/fix-install-breakage-for-fw-images.patch
new file mode 100644
index 0000000..86d4c37
--- /dev/null
+++ b/recipes-kernel/linux/linux-cubox-i-3.0.35/fix-install-breakage-for-fw-images.patch
@@ -0,0 +1,32 @@
1From f6a15304bc2730ba091eb747c413d4ef4124565e Mon Sep 17 00:00:00 2001
2From: Denys Dmytriyenko <denys at ti.com>
3Date: Mon, 5 Mar 2012 16:34:53 -0500
4Subject: [PATCH] Makefile.fwinst: fix install breakage for FW images residing
5 in firmware/ dir
6
7This fixes below error found on some distros (Gentoo and Fedora):
8*** No rule to make target `lib/firmware/./', needed by `lib/firmware/ti_3410.fw'. Stop.
9
10Upstream-Status: Pending
11
12Signed-off-by: Denys Dmytriyenko <denys at ti.com>
13---
14 scripts/Makefile.fwinst | 2 +-
15 1 files changed, 1 insertions(+), 1 deletions(-)
16
17diff --git a/scripts/Makefile.fwinst b/scripts/Makefile.fwinst
18index 6bf8e87..4d908d1 100644
19--- a/scripts/Makefile.fwinst
20+++ b/scripts/Makefile.fwinst
21@@ -27,7 +27,7 @@ endif
22 installed-mod-fw := $(addprefix $(INSTALL_FW_PATH)/,$(mod-fw))
23
24 installed-fw := $(addprefix $(INSTALL_FW_PATH)/,$(fw-shipped-all))
25-installed-fw-dirs := $(sort $(dir $(installed-fw))) $(INSTALL_FW_PATH)/.
26+installed-fw-dirs := $(sort $(dir $(installed-fw))) $(INSTALL_FW_PATH)/./
27
28 # Workaround for make < 3.81, where .SECONDEXPANSION doesn't work.
29 PHONY += $(INSTALL_FW_PATH)/$$(%) install-all-dirs
30--
311.7.8.5
32
diff --git a/recipes-kernel/linux/linux-cubox-i-3.0.35/mxc_hdmi-dont-require-cea-mode.patch b/recipes-kernel/linux/linux-cubox-i-3.0.35/mxc_hdmi-dont-require-cea-mode.patch
new file mode 100644
index 0000000..99d7f0c
--- /dev/null
+++ b/recipes-kernel/linux/linux-cubox-i-3.0.35/mxc_hdmi-dont-require-cea-mode.patch
@@ -0,0 +1,25 @@
1This fixes problems with DVI monitors connected to the HDMI port
2via a DVI <-> HDMI cable. With dvi monitors, the list of CEA modes
3is always zero, preventing modes higher than 1024x768 to be used.
4This patch disables the CEA mode check.
5
6Upstream-Status: Pending
7
8diff --git a/drivers/video/mxc_hdmi.c b/drivers/video/mxc_hdmi.c
9index 544f352..fa67128 100644
10--- a/drivers/video/mxc_hdmi.c
11+++ b/drivers/video/mxc_hdmi.c
12@@ -1804,10 +1804,10 @@ static void mxc_hdmi_edid_rebuild_modelist(struct mxc_hdmi *hdmi)
13 */
14 mode = &hdmi->fbi->monspecs.modedb[i];
15
16- if (!(mode->vmode & FB_VMODE_INTERLACED) &&
17- (mxc_edid_mode_to_vic(mode) != 0)) {
18+ if (!(mode->vmode & FB_VMODE_INTERLACED)) {
19+ int vic = mxc_edid_mode_to_vic(mode);
20
21- dev_dbg(&hdmi->pdev->dev, "Added mode %d:", i);
22+ dev_dbg(&hdmi->pdev->dev, "%s: Added mode %d(VIC %u):", __func__, i, vic);
23 dev_dbg(&hdmi->pdev->dev,
24 "xres = %d, yres = %d, freq = %d, vmode = %d, flag = %d\n",
25 hdmi->fbi->monspecs.modedb[i].xres,
diff --git a/recipes-kernel/linux/linux-cubox-i_3.0.35.bb b/recipes-kernel/linux/linux-cubox-i_3.0.35.bb
new file mode 100644
index 0000000..389a4c0
--- /dev/null
+++ b/recipes-kernel/linux/linux-cubox-i_3.0.35.bb
@@ -0,0 +1,25 @@
1include recipes-kernel/linux/linux-imx.inc
2
3SUMMARY = "Freescale Kernel 3.0.35 supported by SolidRun with additional machine specific patches"
4SRCREV = "6fc170bb7bba5917a1515bfa3dc78c091dfbcde3"
5LOCALVERSION = "-4.1.0-cubox-i+yocto"
6SRCBRANCH ?= "imx_3.0.35_4.1.0"
7
8# The added patches are the ones from linux-imx 3.0.35 , with exception of these which
9# are already included in the kernel repository:
10# drm-vivante-Add-00-sufix-in-returned-bus-Id.patch
11# 0001-perf-tools-Fix-getrusage-related-build-failure-on-gl.patch
12# 0002-ARM-7668-1-fix-memset-related-crashes-caused-by-rece.patch
13# 0003-ARM-7670-1-fix-the-memset-fix.patch
14SRC_URI = "git://github.com/SolidRun/linux-imx6.git;branch=${SRCBRANCH} \
15 file://defconfig \
16 file://epdc-Rename-mxcfb_epdc_kernel.h-to-mxc_epdc.h.patch \
17 file://0004-ENGR00271136-Fix-build-break-when-CONFIG_CLK_DEBUG-i.patch \
18 file://0005-ENGR00271359-Add-Multi-touch-support.patch \
19 file://0006-Add-support-for-DVI-monitors.patch \
20 file://0007-ARM-mach-mx6-board-mx6q_sabresd-Register-SDHC3-first.patch \
21 file://mxc_hdmi-dont-require-cea-mode.patch \
22 file://fix-install-breakage-for-fw-images.patch \
23 file://ENGR00278350-gpu-viante-4.6.9p13-kernel-part-integra.patch"
24
25COMPATIBLE_MACHINE = "(cubox-i)"
diff --git a/recipes-kernel/linux/linux-denx.inc b/recipes-kernel/linux/linux-denx.inc
new file mode 100644
index 0000000..ec331ac
--- /dev/null
+++ b/recipes-kernel/linux/linux-denx.inc
@@ -0,0 +1,22 @@
1# Copyright (C) 2013 Marek Vasut <marex@denx.de>
2# Released under the MIT license (see COPYING.MIT for the terms)
3
4SUMMARY = "DENX mainline based Linux kernel"
5LICENSE = "GPLv2"
6LIC_FILES_CHKSUM = "file://COPYING;md5=d7810fab7487fb0aad327b76f1be7cd7"
7DEPENDS += "lzop-native"
8PROVIDES = "virtual/kernel linux-mainline"
9
10inherit kernel
11
12require recipes-kernel/linux/linux-imx.inc
13require recipes-kernel/linux/linux-dtb.inc
14
15# Avoid imx-test installation hacks
16IMX_TEST_SUPPORT = "n"
17
18SRCBRANCH ?= "master"
19SRC_URI = "git://git.denx.de/linux-denx.git;branch=${SRCBRANCH} \
20 file://defconfig"
21
22LOCALVERSION = "-denx"
diff --git a/recipes-kernel/linux/linux-denx/m53evk/defconfig b/recipes-kernel/linux/linux-denx/m53evk/defconfig
new file mode 100644
index 0000000..23b29af
--- /dev/null
+++ b/recipes-kernel/linux/linux-denx/m53evk/defconfig
@@ -0,0 +1,290 @@
1# CONFIG_LOCALVERSION_AUTO is not set
2CONFIG_KERNEL_LZMA=y
3CONFIG_SYSVIPC=y
4CONFIG_NO_HZ=y
5CONFIG_HIGH_RES_TIMERS=y
6CONFIG_LOG_BUF_SHIFT=18
7CONFIG_CGROUPS=y
8CONFIG_RELAY=y
9CONFIG_EXPERT=y
10# CONFIG_SLUB_DEBUG is not set
11# CONFIG_COMPAT_BRK is not set
12CONFIG_MODULES=y
13CONFIG_MODULE_UNLOAD=y
14CONFIG_MODVERSIONS=y
15CONFIG_MODULE_SRCVERSION_ALL=y
16# CONFIG_BLK_DEV_BSG is not set
17CONFIG_ARCH_MULTI_V6=y
18CONFIG_ARCH_MXC=y
19CONFIG_MACH_MX31LILLY=y
20CONFIG_MACH_MX31LITE=y
21CONFIG_MACH_PCM037=y
22CONFIG_MACH_PCM037_EET=y
23CONFIG_MACH_MX31_3DS=y
24CONFIG_MACH_MX31MOBOARD=y
25CONFIG_MACH_QONG=y
26CONFIG_MACH_ARMADILLO5X0=y
27CONFIG_MACH_KZM_ARM11_01=y
28CONFIG_MACH_PCM043=y
29CONFIG_MACH_MX35_3DS=y
30CONFIG_MACH_VPR200=y
31CONFIG_MACH_IMX51_DT=y
32CONFIG_MACH_MX51_BABBAGE=y
33CONFIG_MACH_EUKREA_CPUIMX51SD=y
34CONFIG_SOC_IMX53=y
35CONFIG_SOC_IMX6Q=y
36CONFIG_SMP=y
37CONFIG_VMSPLIT_2G=y
38CONFIG_PREEMPT_VOLUNTARY=y
39CONFIG_AEABI=y
40# CONFIG_OABI_COMPAT is not set
41CONFIG_CMDLINE="noinitrd console=ttymxc0,115200"
42CONFIG_VFP=y
43CONFIG_NEON=y
44CONFIG_BINFMT_MISC=m
45CONFIG_PM_DEBUG=y
46CONFIG_PM_TEST_SUSPEND=y
47CONFIG_NET=y
48CONFIG_PACKET=y
49CONFIG_UNIX=y
50CONFIG_INET=y
51CONFIG_IP_PNP=y
52CONFIG_IP_PNP_DHCP=y
53# CONFIG_INET_XFRM_MODE_TRANSPORT is not set
54# CONFIG_INET_XFRM_MODE_TUNNEL is not set
55# CONFIG_INET_XFRM_MODE_BEET is not set
56# CONFIG_INET_LRO is not set
57CONFIG_IPV6=y
58CONFIG_CAN=y
59# CONFIG_CAN_BCM is not set
60# CONFIG_CAN_GW is not set
61CONFIG_CAN_FLEXCAN=y
62# CONFIG_WIRELESS is not set
63CONFIG_DEVTMPFS=y
64CONFIG_DEVTMPFS_MOUNT=y
65# CONFIG_STANDALONE is not set
66CONFIG_CONNECTOR=y
67CONFIG_MTD=y
68CONFIG_MTD_CMDLINE_PARTS=y
69CONFIG_MTD_CHAR=y
70CONFIG_MTD_BLOCK=y
71CONFIG_MTD_CFI=y
72CONFIG_MTD_JEDECPROBE=y
73CONFIG_MTD_CFI_INTELEXT=y
74CONFIG_MTD_CFI_AMDSTD=y
75CONFIG_MTD_CFI_STAA=y
76CONFIG_MTD_DATAFLASH=y
77CONFIG_MTD_M25P80=y
78CONFIG_MTD_SST25L=y
79CONFIG_MTD_NAND=y
80CONFIG_MTD_NAND_MXC=y
81CONFIG_MTD_UBI=y
82CONFIG_BLK_DEV_LOOP=y
83CONFIG_BLK_DEV_RAM=y
84CONFIG_BLK_DEV_RAM_SIZE=65536
85CONFIG_EEPROM_AT24=y
86CONFIG_EEPROM_AT25=y
87# CONFIG_SCSI_PROC_FS is not set
88CONFIG_BLK_DEV_SD=y
89CONFIG_SCSI_MULTI_LUN=y
90CONFIG_SCSI_CONSTANTS=y
91CONFIG_SCSI_LOGGING=y
92CONFIG_SCSI_SCAN_ASYNC=y
93# CONFIG_SCSI_LOWLEVEL is not set
94CONFIG_ATA=y
95CONFIG_SATA_AHCI_PLATFORM=y
96CONFIG_PATA_IMX=y
97CONFIG_NETDEVICES=y
98# CONFIG_NET_VENDOR_BROADCOM is not set
99CONFIG_CS89x0=y
100CONFIG_CS89x0_PLATFORM=y
101# CONFIG_NET_VENDOR_FARADAY is not set
102# CONFIG_NET_VENDOR_INTEL is not set
103# CONFIG_NET_VENDOR_MARVELL is not set
104# CONFIG_NET_VENDOR_MICREL is not set
105# CONFIG_NET_VENDOR_MICROCHIP is not set
106# CONFIG_NET_VENDOR_NATSEMI is not set
107# CONFIG_NET_VENDOR_SEEQ is not set
108CONFIG_SMC91X=y
109CONFIG_SMC911X=y
110CONFIG_SMSC911X=y
111# CONFIG_NET_VENDOR_STMICRO is not set
112CONFIG_AT803X_PHY=y
113CONFIG_AMD_PHY=y
114CONFIG_MARVELL_PHY=y
115CONFIG_DAVICOM_PHY=y
116CONFIG_QSEMI_PHY=y
117CONFIG_LXT_PHY=y
118CONFIG_CICADA_PHY=y
119CONFIG_VITESSE_PHY=y
120CONFIG_SMSC_PHY=y
121CONFIG_BROADCOM_PHY=y
122CONFIG_BCM87XX_PHY=y
123CONFIG_ICPLUS_PHY=y
124CONFIG_REALTEK_PHY=y
125CONFIG_NATIONAL_PHY=y
126CONFIG_STE10XP=y
127CONFIG_LSI_ET1011C_PHY=y
128CONFIG_MICREL_PHY=y
129# CONFIG_WLAN is not set
130# CONFIG_INPUT_MOUSEDEV_PSAUX is not set
131CONFIG_INPUT_MOUSEDEV_SCREEN_X=800
132CONFIG_INPUT_MOUSEDEV_SCREEN_Y=480
133CONFIG_INPUT_EVDEV=y
134CONFIG_INPUT_EVBUG=m
135CONFIG_KEYBOARD_GPIO=y
136CONFIG_KEYBOARD_IMX=y
137CONFIG_MOUSE_PS2=m
138CONFIG_MOUSE_PS2_ELANTECH=y
139CONFIG_INPUT_TOUCHSCREEN=y
140CONFIG_TOUCHSCREEN_MC13783=y
141CONFIG_TOUCHSCREEN_STMPE=y
142CONFIG_INPUT_MISC=y
143CONFIG_INPUT_MMA8450=y
144CONFIG_SERIO_SERPORT=m
145CONFIG_VT_HW_CONSOLE_BINDING=y
146# CONFIG_LEGACY_PTYS is not set
147# CONFIG_DEVKMEM is not set
148CONFIG_SERIAL_IMX=y
149CONFIG_SERIAL_IMX_CONSOLE=y
150CONFIG_HW_RANDOM=y
151CONFIG_HW_RANDOM_MXC_RNGA=y
152# CONFIG_I2C_COMPAT is not set
153CONFIG_I2C_CHARDEV=y
154# CONFIG_I2C_HELPER_AUTO is not set
155CONFIG_I2C_ALGOPCF=m
156CONFIG_I2C_ALGOPCA=m
157CONFIG_I2C_IMX=y
158CONFIG_SPI=y
159CONFIG_SPI_IMX=y
160CONFIG_GPIO_SYSFS=y
161CONFIG_GPIO_MC9S08DZ60=y
162# CONFIG_HWMON is not set
163CONFIG_WATCHDOG=y
164CONFIG_IMX2_WDT=y
165CONFIG_MFD_STMPE=y
166CONFIG_MFD_DA9052_I2C=y
167CONFIG_MFD_MC13XXX_SPI=y
168CONFIG_MFD_MC13XXX_I2C=y
169CONFIG_REGULATOR=y
170CONFIG_REGULATOR_DA9052=y
171CONFIG_REGULATOR_MC13783=y
172CONFIG_REGULATOR_MC13892=y
173CONFIG_MEDIA_SUPPORT=y
174CONFIG_MEDIA_CAMERA_SUPPORT=y
175CONFIG_V4L_PLATFORM_DRIVERS=y
176CONFIG_SOC_CAMERA=y
177CONFIG_VIDEO_MX3=y
178CONFIG_SOC_CAMERA_OV2640=y
179CONFIG_DRM=y
180CONFIG_DRM_LOAD_EDID_FIRMWARE=y
181CONFIG_OF_VIDEOMODE=y
182CONFIG_FIRMWARE_EDID=y
183CONFIG_FB_MODE_HELPERS=y
184CONFIG_FB_TILEBLITTING=y
185CONFIG_BACKLIGHT_LCD_SUPPORT=y
186CONFIG_LCD_CLASS_DEVICE=y
187CONFIG_LCD_L4F00242T03=y
188CONFIG_LCD_PLATFORM=y
189CONFIG_BACKLIGHT_CLASS_DEVICE=y
190CONFIG_BACKLIGHT_PWM=y
191CONFIG_FRAMEBUFFER_CONSOLE=y
192CONFIG_FONTS=y
193CONFIG_FONT_8x8=y
194CONFIG_FONT_8x16=y
195CONFIG_LOGO=y
196CONFIG_SOUND=y
197CONFIG_SND=y
198CONFIG_SND_SEQUENCER=y
199CONFIG_SND_MIXER_OSS=y
200CONFIG_SND_PCM_OSS=y
201CONFIG_SND_SEQUENCER_OSS=y
202CONFIG_SND_HRTIMER=y
203CONFIG_SND_SOC=y
204CONFIG_SND_IMX_SOC=y
205CONFIG_SND_SOC_PHYCORE_AC97=y
206CONFIG_SND_SOC_EUKREA_TLV320=y
207CONFIG_SND_SOC_IMX_SGTL5000=y
208CONFIG_SND_SOC_IMX_MC13783=y
209CONFIG_USB=y
210CONFIG_USB_EHCI_HCD=y
211CONFIG_USB_CHIPIDEA=y
212CONFIG_USB_CHIPIDEA_HOST=y
213CONFIG_USB_STORAGE=y
214CONFIG_USB_MXS_PHY=y
215CONFIG_MMC=y
216CONFIG_MMC_SDHCI=y
217CONFIG_MMC_SDHCI_PLTFM=y
218CONFIG_MMC_SDHCI_ESDHC_IMX=y
219CONFIG_NEW_LEDS=y
220CONFIG_LEDS_CLASS=y
221CONFIG_LEDS_GPIO=y
222CONFIG_LEDS_TRIGGERS=y
223CONFIG_LEDS_TRIGGER_HEARTBEAT=y
224CONFIG_RTC_CLASS=y
225CONFIG_RTC_INTF_DEV_UIE_EMUL=y
226CONFIG_RTC_DRV_M41T80=y
227CONFIG_RTC_DRV_MC13XXX=y
228CONFIG_RTC_DRV_MXC=y
229CONFIG_DMADEVICES=y
230CONFIG_IMX_SDMA=y
231CONFIG_MXS_DMA=y
232CONFIG_STAGING=y
233CONFIG_DRM_IMX=y
234CONFIG_DRM_IMX_FB_HELPER=y
235CONFIG_DRM_IMX_PARALLEL_DISPLAY=y
236CONFIG_DRM_IMX_IPUV3_CORE=y
237CONFIG_DRM_IMX_IPUV3=y
238CONFIG_COMMON_CLK_DEBUG=y
239# CONFIG_IOMMU_SUPPORT is not set
240CONFIG_PWM=y
241CONFIG_PWM_IMX=y
242CONFIG_EXT2_FS=y
243CONFIG_EXT2_FS_XATTR=y
244CONFIG_EXT2_FS_POSIX_ACL=y
245CONFIG_EXT2_FS_SECURITY=y
246CONFIG_EXT3_FS=y
247CONFIG_EXT3_FS_POSIX_ACL=y
248CONFIG_EXT3_FS_SECURITY=y
249CONFIG_EXT4_FS=y
250CONFIG_EXT4_FS_POSIX_ACL=y
251CONFIG_EXT4_FS_SECURITY=y
252CONFIG_QUOTA=y
253CONFIG_QUOTA_NETLINK_INTERFACE=y
254# CONFIG_PRINT_QUOTA_WARNING is not set
255CONFIG_AUTOFS4_FS=y
256CONFIG_FUSE_FS=y
257CONFIG_ISO9660_FS=m
258CONFIG_JOLIET=y
259CONFIG_ZISOFS=y
260CONFIG_UDF_FS=m
261CONFIG_MSDOS_FS=m
262CONFIG_VFAT_FS=y
263CONFIG_TMPFS=y
264CONFIG_CONFIGFS_FS=m
265CONFIG_JFFS2_FS=y
266CONFIG_UBIFS_FS=y
267CONFIG_NFS_FS=y
268CONFIG_NFS_V3_ACL=y
269CONFIG_NFS_V4=y
270CONFIG_ROOT_NFS=y
271CONFIG_NLS_DEFAULT="cp437"
272CONFIG_NLS_CODEPAGE_437=y
273CONFIG_NLS_ASCII=y
274CONFIG_NLS_ISO8859_1=y
275CONFIG_NLS_ISO8859_15=m
276CONFIG_NLS_UTF8=y
277CONFIG_PRINTK_TIME=y
278CONFIG_MAGIC_SYSRQ=y
279# CONFIG_SCHED_DEBUG is not set
280# CONFIG_DEBUG_BUGVERBOSE is not set
281CONFIG_DEBUG_INFO=y
282# CONFIG_FTRACE is not set
283# CONFIG_ARM_UNWIND is not set
284CONFIG_SECURITYFS=y
285# CONFIG_CRYPTO_ANSI_CPRNG is not set
286# CONFIG_CRYPTO_HW is not set
287CONFIG_CRC_CCITT=m
288CONFIG_CRC_T10DIF=y
289CONFIG_CRC7=m
290CONFIG_LIBCRC32C=m
diff --git a/recipes-kernel/linux/linux-denx_3.9.bb b/recipes-kernel/linux/linux-denx_3.9.bb
new file mode 100644
index 0000000..90f3905
--- /dev/null
+++ b/recipes-kernel/linux/linux-denx_3.9.bb
@@ -0,0 +1,10 @@
1# Copyright (C) 2013 Marek Vasut <marex@denx.de>
2# Released under the MIT license (see COPYING.MIT for the terms)
3
4include linux-denx.inc
5
6# m53evk
7SRCREV_m53evk = "7c75b82904fa555ce7988b97619b85a436a8ed12"
8SRCBRANCH_m53evk = "m53evk-rel-2013-05-02-v3.9"
9
10COMPATIBLE_MACHINE = "(mx5)"
diff --git a/recipes-kernel/linux/linux-timesys-3.0.15/pcl052/defconfig b/recipes-kernel/linux/linux-timesys-3.0.15/pcl052/defconfig
new file mode 100644
index 0000000..6780b34
--- /dev/null
+++ b/recipes-kernel/linux/linux-timesys-3.0.15/pcl052/defconfig
@@ -0,0 +1,167 @@
1CONFIG_EXPERIMENTAL=y
2CONFIG_SYSVIPC=y
3CONFIG_IKCONFIG=y
4CONFIG_IKCONFIG_PROC=y
5CONFIG_LOG_BUF_SHIFT=14
6CONFIG_EMBEDDED=y
7# CONFIG_PERF_EVENTS is not set
8CONFIG_PROFILING=y
9CONFIG_MODULES=y
10CONFIG_MODULE_UNLOAD=y
11CONFIG_MODULE_FORCE_UNLOAD=y
12CONFIG_MODVERSIONS=y
13# CONFIG_BLK_DEV_BSG is not set
14CONFIG_ARCH_MXC=y
15CONFIG_ARCH_MVF=y
16CONFIG_MACH_PCL052=y
17CONFIG_MXC_PWM=m
18CONFIG_MXC_USE_PIT=y
19CONFIG_DMA_ZONE_SIZE=16
20# CONFIG_CACHE_L2X0 is not set
21CONFIG_ARM_ERRATA_743622=y
22CONFIG_ARM_ERRATA_754322=y
23CONFIG_HIGH_RES_TIMERS=y
24CONFIG_VMSPLIT_2G=y
25CONFIG_AEABI=y
26# CONFIG_OABI_COMPAT is not set
27CONFIG_COMPACTION=y
28CONFIG_KSM=y
29CONFIG_ZBOOT_ROM_TEXT=0x0
30CONFIG_ZBOOT_ROM_BSS=0x0
31CONFIG_CMDLINE="root=/dev/nfs rw nfsroot=10.193.20.106:/tftpboot/10.193.20.115 ip=10.193.20.115:10.193.20.106:10.193.20.254:255.255.255.0::eth0:off console=ttymxc1,115200 mem=128M"
32CONFIG_VFP=y
33CONFIG_NEON=y
34# CONFIG_CORE_DUMP_DEFAULT_ELF_HEADERS is not set
35# CONFIG_SUSPEND is not set
36CONFIG_PM_RUNTIME=y
37CONFIG_NET=y
38CONFIG_PACKET=y
39CONFIG_UNIX=y
40CONFIG_INET=y
41CONFIG_IP_MULTICAST=y
42CONFIG_IP_PNP=y
43CONFIG_IP_PNP_DHCP=y
44CONFIG_IP_PNP_BOOTP=y
45# CONFIG_INET_LRO is not set
46# CONFIG_IPV6 is not set
47CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug"
48CONFIG_DEVTMPFS=y
49CONFIG_DEVTMPFS_MOUNT=y
50CONFIG_MTD=y
51CONFIG_MTD_CMDLINE_PARTS=y
52CONFIG_MTD_CHAR=y
53CONFIG_MTD_BLOCK=y
54CONFIG_MTD_NAND=y
55CONFIG_MTD_NAND_FSL_NFC=y
56CONFIG_MTD_NAND_FSL_NFC_SWECC=y
57CONFIG_BLK_DEV_RAM=y
58CONFIG_MISC_DEVICES=y
59CONFIG_MVF_ADC=y
60CONFIG_EEPROM_AT24=y
61CONFIG_SCSI=y
62CONFIG_BLK_DEV_SD=y
63CONFIG_SCSI_MULTI_LUN=y
64# CONFIG_SCSI_LOWLEVEL is not set
65CONFIG_NETDEVICES=y
66CONFIG_MICREL_PHY=y
67CONFIG_NET_ETHERNET=y
68CONFIG_FEC1=y
69# CONFIG_NETDEV_1000 is not set
70# CONFIG_NETDEV_10000 is not set
71CONFIG_INPUT_POLLDEV=y
72CONFIG_INPUT_EVDEV=y
73CONFIG_KEYBOARD_GPIO=y
74# CONFIG_INPUT_MOUSE is not set
75CONFIG_INPUT_TOUCHSCREEN=y
76CONFIG_INPUT_MISC=y
77CONFIG_INPUT_UINPUT=y
78# CONFIG_CONSOLE_TRANSLATIONS is not set
79# CONFIG_LEGACY_PTYS is not set
80CONFIG_SERIAL_IMX=y
81CONFIG_SERIAL_IMX_CONSOLE=y
82CONFIG_HW_RANDOM=y
83CONFIG_I2C=y
84CONFIG_I2C_CHARDEV=y
85CONFIG_I2C_IMX=y
86CONFIG_SPI=y
87CONFIG_SPI_MVF_QSPI=m
88CONFIG_SPI_MVF=m
89CONFIG_SPI_SPIDEV=m
90CONFIG_GPIO_SYSFS=y
91# CONFIG_HWMON is not set
92CONFIG_WATCHDOG=y
93CONFIG_IMX2_WDT=y
94# CONFIG_MFD_MXC_HDMI is not set
95CONFIG_FB=y
96CONFIG_FB_MVF_DCU=y
97CONFIG_MVF_TDA_998X=y
98CONFIG_FRAMEBUFFER_CONSOLE=y
99CONFIG_FRAMEBUFFER_CONSOLE_DETECT_PRIMARY=y
100CONFIG_FRAMEBUFFER_CONSOLE_ROTATION=y
101CONFIG_FONTS=y
102CONFIG_FONT_8x8=y
103CONFIG_FONT_8x16=y
104CONFIG_LOGO=y
105CONFIG_SOUND=y
106# CONFIG_SOUND_OSS_CORE_PRECLAIM is not set
107CONFIG_SND=y
108CONFIG_SND_PCM_OSS=y
109CONFIG_SND_SOC=y
110# CONFIG_SND_SOC_PCM052_SGTL5000 is not set
111# CONFIG_HID_SUPPORT is not set
112CONFIG_USB=y
113CONFIG_USB_EHCI_HCD=y
114CONFIG_USB_EHCI_ARC=y
115CONFIG_USB_EHCI_ROOT_HUB_TT=y
116CONFIG_USB_STORAGE=y
117CONFIG_USB_GADGET=y
118CONFIG_USB_ETH=m
119CONFIG_MMC=y
120CONFIG_MMC_SDHCI=y
121CONFIG_MMC_SDHCI_PLTFM=y
122CONFIG_MMC_SDHCI_ESDHC_IMX=y
123CONFIG_NEW_LEDS=y
124CONFIG_LEDS_CLASS=y
125CONFIG_LEDS_GPIO=y
126CONFIG_LEDS_TRIGGERS=y
127CONFIG_LEDS_TRIGGER_TIMER=y
128CONFIG_LEDS_TRIGGER_HEARTBEAT=y
129CONFIG_LEDS_TRIGGER_BACKLIGHT=y
130CONFIG_LEDS_TRIGGER_GPIO=y
131CONFIG_LEDS_TRIGGER_DEFAULT_ON=y
132CONFIG_RTC_CLASS=y
133CONFIG_RTC_DRV_SNVS=y
134CONFIG_DMADEVICES=y
135# CONFIG_MXC_HMP4E is not set
136# CONFIG_MXC_HWEVENT is not set
137CONFIG_EXT2_FS=y
138CONFIG_EXT3_FS=y
139# CONFIG_EXT3_DEFAULTS_TO_ORDERED is not set
140CONFIG_EXT4_FS=y
141CONFIG_AUTOFS4_FS=y
142CONFIG_MSDOS_FS=y
143CONFIG_VFAT_FS=y
144CONFIG_TMPFS=y
145CONFIG_JFFS2_FS=y
146CONFIG_CRAMFS=y
147CONFIG_NFS_FS=y
148CONFIG_NFS_V3=y
149CONFIG_ROOT_NFS=y
150CONFIG_PARTITION_ADVANCED=y
151CONFIG_EFI_PARTITION=y
152CONFIG_NLS_CODEPAGE_437=y
153CONFIG_NLS_ASCII=m
154CONFIG_NLS_ISO8859_1=y
155CONFIG_NLS_UTF8=m
156CONFIG_FTRACE=y
157CONFIG_ENABLE_DEFAULT_TRACERS=y
158CONFIG_CRYPTO_TEST=m
159CONFIG_CRYPTO_CBC=y
160CONFIG_CRYPTO_ECB=y
161CONFIG_CRYPTO_MICHAEL_MIC=y
162CONFIG_CRYPTO_AES=y
163CONFIG_CRYPTO_ARC4=y
164CONFIG_CRYPTO_DEFLATE=y
165CONFIG_CRYPTO_LZO=y
166# CONFIG_CRYPTO_ANSI_CPRNG is not set
167CONFIG_CRC_CCITT=m
diff --git a/recipes-kernel/linux/linux-timesys-3.0.15/pcm052/defconfig b/recipes-kernel/linux/linux-timesys-3.0.15/pcm052/defconfig
new file mode 100644
index 0000000..cb6419a
--- /dev/null
+++ b/recipes-kernel/linux/linux-timesys-3.0.15/pcm052/defconfig
@@ -0,0 +1,163 @@
1CONFIG_EXPERIMENTAL=y
2CONFIG_SYSVIPC=y
3CONFIG_IKCONFIG=y
4CONFIG_IKCONFIG_PROC=y
5CONFIG_LOG_BUF_SHIFT=14
6CONFIG_EMBEDDED=y
7# CONFIG_PERF_EVENTS is not set
8CONFIG_PROFILING=y
9CONFIG_MODULES=y
10CONFIG_MODULE_UNLOAD=y
11CONFIG_MODULE_FORCE_UNLOAD=y
12CONFIG_MODVERSIONS=y
13# CONFIG_BLK_DEV_BSG is not set
14CONFIG_ARCH_MXC=y
15CONFIG_ARCH_MVF=y
16CONFIG_MACH_PCM052=y
17CONFIG_MXC_PWM=y
18CONFIG_MXC_USE_PIT=y
19CONFIG_DMA_ZONE_SIZE=16
20# CONFIG_CACHE_L2X0 is not set
21CONFIG_ARM_ERRATA_743622=y
22CONFIG_ARM_ERRATA_754322=y
23CONFIG_HIGH_RES_TIMERS=y
24CONFIG_VMSPLIT_2G=y
25CONFIG_AEABI=y
26# CONFIG_OABI_COMPAT is not set
27CONFIG_COMPACTION=y
28CONFIG_KSM=y
29CONFIG_ZBOOT_ROM_TEXT=0x0
30CONFIG_ZBOOT_ROM_BSS=0x0
31CONFIG_CMDLINE="root=/dev/nfs rw nfsroot=10.193.20.106:/tftpboot/10.193.20.115 ip=10.193.20.115:10.193.20.106:10.193.20.254:255.255.255.0::eth0:off console=ttymxc1,115200 mem=128M"
32CONFIG_VFP=y
33CONFIG_NEON=y
34# CONFIG_CORE_DUMP_DEFAULT_ELF_HEADERS is not set
35# CONFIG_SUSPEND is not set
36CONFIG_PM_RUNTIME=y
37CONFIG_NET=y
38CONFIG_PACKET=y
39CONFIG_UNIX=y
40CONFIG_INET=y
41CONFIG_IP_MULTICAST=y
42CONFIG_IP_PNP=y
43CONFIG_IP_PNP_DHCP=y
44CONFIG_IP_PNP_BOOTP=y
45# CONFIG_INET_LRO is not set
46# CONFIG_IPV6 is not set
47CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug"
48CONFIG_DEVTMPFS=y
49CONFIG_DEVTMPFS_MOUNT=y
50CONFIG_MTD=y
51CONFIG_MTD_CMDLINE_PARTS=y
52CONFIG_MTD_CHAR=y
53CONFIG_MTD_BLOCK=y
54CONFIG_MTD_M25P80=y
55# CONFIG_M25PXX_USE_FAST_READ is not set
56CONFIG_MTD_NAND=y
57CONFIG_MTD_NAND_FSL_NFC=y
58CONFIG_MTD_NAND_FSL_NFC_SWECC=y
59CONFIG_BLK_DEV_RAM=y
60CONFIG_MISC_DEVICES=y
61CONFIG_MVF_ADC=y
62CONFIG_EEPROM_AT24=y
63CONFIG_SCSI=y
64CONFIG_BLK_DEV_SD=y
65CONFIG_SCSI_MULTI_LUN=y
66# CONFIG_SCSI_LOWLEVEL is not set
67CONFIG_NETDEVICES=y
68CONFIG_MICREL_PHY=y
69CONFIG_NET_ETHERNET=y
70CONFIG_FEC1=y
71# CONFIG_NETDEV_1000 is not set
72# CONFIG_NETDEV_10000 is not set
73CONFIG_INPUT_POLLDEV=y
74CONFIG_INPUT_EVDEV=y
75CONFIG_KEYBOARD_GPIO=y
76# CONFIG_INPUT_MOUSE is not set
77CONFIG_INPUT_TOUCHSCREEN=y
78CONFIG_TOUCHSCREEN_STMPE=y
79CONFIG_INPUT_MISC=y
80CONFIG_INPUT_UINPUT=y
81# CONFIG_CONSOLE_TRANSLATIONS is not set
82# CONFIG_LEGACY_PTYS is not set
83CONFIG_SERIAL_IMX=y
84CONFIG_SERIAL_IMX_CONSOLE=y
85CONFIG_HW_RANDOM=y
86CONFIG_I2C=y
87CONFIG_I2C_CHARDEV=y
88CONFIG_I2C_IMX=y
89CONFIG_SPI=y
90CONFIG_SPI_MVF_QSPI=y
91CONFIG_SPI_SPIDEV=y
92CONFIG_GPIO_SYSFS=y
93# CONFIG_HWMON is not set
94CONFIG_WATCHDOG=y
95CONFIG_IMX2_WDT=y
96CONFIG_MFD_STMPE=y
97# CONFIG_MFD_MXC_HDMI is not set
98CONFIG_FB=y
99CONFIG_FB_MVF_DCU=y
100CONFIG_BACKLIGHT_LCD_SUPPORT=y
101CONFIG_BACKLIGHT_CLASS_DEVICE=y
102CONFIG_BACKLIGHT_GENERIC=m
103CONFIG_BACKLIGHT_PWM=y
104CONFIG_FRAMEBUFFER_CONSOLE=y
105CONFIG_FRAMEBUFFER_CONSOLE_DETECT_PRIMARY=y
106CONFIG_FRAMEBUFFER_CONSOLE_ROTATION=y
107CONFIG_FONTS=y
108CONFIG_FONT_8x8=y
109CONFIG_FONT_8x16=y
110CONFIG_LOGO=y
111CONFIG_SOUND=y
112# CONFIG_SOUND_OSS_CORE_PRECLAIM is not set
113CONFIG_SND=y
114CONFIG_SND_PCM_OSS=y
115CONFIG_SND_SOC=y
116# CONFIG_HID_SUPPORT is not set
117CONFIG_USB=y
118CONFIG_USB_EHCI_HCD=y
119CONFIG_USB_EHCI_ARC=y
120CONFIG_USB_EHCI_ROOT_HUB_TT=y
121CONFIG_USB_STORAGE=y
122CONFIG_USB_GADGET=y
123CONFIG_USB_ETH=m
124CONFIG_MMC=y
125CONFIG_MMC_SDHCI=y
126CONFIG_MMC_SDHCI_PLTFM=y
127CONFIG_MMC_SDHCI_ESDHC_IMX=y
128CONFIG_RTC_CLASS=y
129CONFIG_RTC_DRV_SNVS=y
130CONFIG_DMADEVICES=y
131# CONFIG_MXC_HMP4E is not set
132# CONFIG_MXC_HWEVENT is not set
133CONFIG_EXT2_FS=y
134CONFIG_EXT3_FS=y
135# CONFIG_EXT3_DEFAULTS_TO_ORDERED is not set
136CONFIG_EXT4_FS=y
137CONFIG_AUTOFS4_FS=y
138CONFIG_MSDOS_FS=y
139CONFIG_VFAT_FS=y
140CONFIG_TMPFS=y
141CONFIG_JFFS2_FS=y
142CONFIG_CRAMFS=y
143CONFIG_NFS_FS=y
144CONFIG_NFS_V3=y
145CONFIG_ROOT_NFS=y
146CONFIG_PARTITION_ADVANCED=y
147CONFIG_EFI_PARTITION=y
148CONFIG_NLS_CODEPAGE_437=y
149CONFIG_NLS_ASCII=m
150CONFIG_NLS_ISO8859_1=y
151CONFIG_NLS_UTF8=m
152CONFIG_FTRACE=y
153CONFIG_ENABLE_DEFAULT_TRACERS=y
154CONFIG_CRYPTO_TEST=m
155CONFIG_CRYPTO_CBC=y
156CONFIG_CRYPTO_ECB=y
157CONFIG_CRYPTO_MICHAEL_MIC=y
158CONFIG_CRYPTO_AES=y
159CONFIG_CRYPTO_ARC4=y
160CONFIG_CRYPTO_DEFLATE=y
161CONFIG_CRYPTO_LZO=y
162# CONFIG_CRYPTO_ANSI_CPRNG is not set
163CONFIG_CRC_CCITT=m
diff --git a/recipes-kernel/linux/linux-timesys-3.0.15/quartz/defconfig b/recipes-kernel/linux/linux-timesys-3.0.15/quartz/defconfig
new file mode 100644
index 0000000..1e11c2b
--- /dev/null
+++ b/recipes-kernel/linux/linux-timesys-3.0.15/quartz/defconfig
@@ -0,0 +1,175 @@
1CONFIG_EXPERIMENTAL=y
2CONFIG_SYSVIPC=y
3CONFIG_IKCONFIG=m
4CONFIG_IKCONFIG_PROC=y
5CONFIG_LOG_BUF_SHIFT=14
6CONFIG_EMBEDDED=y
7CONFIG_PERF_COUNTERS=y
8CONFIG_PROFILING=y
9CONFIG_MODULES=y
10CONFIG_MODULE_UNLOAD=y
11CONFIG_MODULE_FORCE_UNLOAD=y
12CONFIG_MODVERSIONS=y
13# CONFIG_BLK_DEV_BSG is not set
14CONFIG_ARCH_MXC=y
15CONFIG_ARCH_MVF=y
16CONFIG_MACH_DS_QUARTZ=y
17CONFIG_DMA_ZONE_SIZE=16
18CONFIG_ARM_ERRATA_743622=y
19CONFIG_ARM_ERRATA_754322=y
20CONFIG_HIGH_RES_TIMERS=y
21CONFIG_VMSPLIT_2G=y
22CONFIG_AEABI=y
23# CONFIG_OABI_COMPAT is not set
24CONFIG_COMPACTION=y
25CONFIG_KSM=y
26CONFIG_ZBOOT_ROM_TEXT=0x0
27CONFIG_ZBOOT_ROM_BSS=0x0
28CONFIG_CMDLINE="root=/dev/nfs rw nfsroot=10.193.20.106:/tftpboot/10.193.20.115 ip=10.193.20.115:10.193.20.106:10.193.20.254:255.255.255.0::eth0:off console=ttymxc1,115200 mem=128M"
29CONFIG_VFP=y
30CONFIG_NEON=y
31# CONFIG_CORE_DUMP_DEFAULT_ELF_HEADERS is not set
32CONFIG_SUSPEND_DEVICE_TIME_DEBUG=y
33CONFIG_PM_RUNTIME=y
34CONFIG_PM_DEBUG=y
35CONFIG_PM_ADVANCED_DEBUG=y
36CONFIG_NET=y
37CONFIG_PACKET=y
38CONFIG_UNIX=y
39CONFIG_INET=y
40CONFIG_IP_MULTICAST=y
41CONFIG_IP_PNP=y
42CONFIG_IP_PNP_DHCP=y
43CONFIG_IP_PNP_BOOTP=y
44# CONFIG_INET_LRO is not set
45# CONFIG_IPV6 is not set
46CONFIG_DEVTMPFS=y
47CONFIG_DEVTMPFS_MOUNT=y
48CONFIG_MTD=y
49CONFIG_MTD_CMDLINE_PARTS=y
50CONFIG_MTD_CHAR=y
51CONFIG_MTD_BLOCK=y
52CONFIG_MTD_NAND=y
53CONFIG_MTD_NAND_FSL_NFC=y
54CONFIG_MTD_NAND_FSL_NFC_SWECC=y
55CONFIG_BLK_DEV_RAM=y
56CONFIG_MISC_DEVICES=y
57CONFIG_MVF_ADC=y
58CONFIG_SCSI=y
59CONFIG_BLK_DEV_SD=y
60CONFIG_SCSI_MULTI_LUN=y
61# CONFIG_SCSI_LOWLEVEL is not set
62CONFIG_NETDEVICES=y
63CONFIG_MICREL_PHY=y
64CONFIG_NET_ETHERNET=y
65CONFIG_FEC1=y
66# CONFIG_NETDEV_1000 is not set
67# CONFIG_NETDEV_10000 is not set
68CONFIG_INPUT_POLLDEV=y
69CONFIG_INPUT_EVDEV=y
70CONFIG_KEYBOARD_GPIO=y
71# CONFIG_INPUT_MOUSE is not set
72CONFIG_INPUT_TOUCHSCREEN=y
73CONFIG_TOUCHSCREEN_EGALAX=y
74CONFIG_TOUCHSCREEN_CRTOUCH=y
75CONFIG_INPUT_MISC=y
76CONFIG_INPUT_UINPUT=y
77# CONFIG_CONSOLE_TRANSLATIONS is not set
78CONFIG_LEGACY_PTY_COUNT=4
79CONFIG_SERIAL_IMX=y
80CONFIG_SERIAL_IMX_CONSOLE=y
81CONFIG_HW_RANDOM=y
82CONFIG_I2C=y
83CONFIG_I2C_CHARDEV=y
84CONFIG_I2C_IMX=y
85CONFIG_I2C_DEBUG_CORE=y
86CONFIG_I2C_DEBUG_ALGO=y
87CONFIG_I2C_DEBUG_BUS=y
88CONFIG_SPI=y
89CONFIG_SPI_MVF_DSPI_EDMA=y
90CONFIG_GPIO_SYSFS=y
91# CONFIG_HWMON is not set
92CONFIG_WATCHDOG=y
93CONFIG_IMX2_WDT=y
94# CONFIG_MFD_SUPPORT is not set
95CONFIG_MEDIA_SUPPORT=y
96CONFIG_VIDEO_DEV=y
97CONFIG_USB_VIDEO_CLASS=y
98CONFIG_FB=y
99CONFIG_FB_MVF_DCU=y
100CONFIG_MVF_DCU_BLANKING_TEST=y
101CONFIG_LOGO=y
102CONFIG_SOUND=y
103# CONFIG_SOUND_OSS_CORE_PRECLAIM is not set
104CONFIG_SND=y
105CONFIG_SND_PCM_OSS=y
106CONFIG_SND_SOC=y
107CONFIG_HIDRAW=y
108CONFIG_USB_HIDDEV=y
109CONFIG_HID_MULTITOUCH=y
110CONFIG_USB=y
111CONFIG_USB_EHCI_HCD=y
112CONFIG_USB_EHCI_ARC=y
113CONFIG_USB_EHCI_ROOT_HUB_TT=y
114CONFIG_USB_STORAGE=y
115CONFIG_USB_GADGET=y
116CONFIG_USB_ETH=m
117CONFIG_MMC=y
118CONFIG_MMC_DEBUG=y
119CONFIG_MMC_UNSAFE_RESUME=y
120# CONFIG_MMC_BLOCK_BOUNCE is not set
121CONFIG_MMC_SDHCI=y
122CONFIG_MMC_SDHCI_PLTFM=y
123CONFIG_MMC_SDHCI_ESDHC_IMX=y
124CONFIG_NEW_LEDS=y
125CONFIG_LEDS_CLASS=y
126CONFIG_LEDS_GPIO=y
127CONFIG_LEDS_TRIGGERS=y
128CONFIG_LEDS_TRIGGER_GPIO=y
129CONFIG_RTC_CLASS=y
130CONFIG_RTC_DRV_M41T80=y
131CONFIG_RTC_DRV_M41T80_WDT=y
132CONFIG_RTC_MXC=y
133CONFIG_RTC_DRV_MXC_V2=y
134CONFIG_RTC_DRV_SNVS=y
135CONFIG_DMADEVICES=y
136# CONFIG_MXC_HMP4E is not set
137# CONFIG_MXC_HWEVENT is not set
138CONFIG_EXT2_FS=y
139CONFIG_EXT3_FS=y
140# CONFIG_EXT3_DEFAULTS_TO_ORDERED is not set
141CONFIG_EXT4_FS=y
142CONFIG_AUTOFS4_FS=m
143CONFIG_MSDOS_FS=y
144CONFIG_VFAT_FS=y
145CONFIG_TMPFS=y
146CONFIG_JFFS2_FS=y
147CONFIG_CRAMFS=y
148CONFIG_NFS_FS=y
149CONFIG_NFS_V3=y
150CONFIG_ROOT_NFS=y
151CONFIG_PARTITION_ADVANCED=y
152CONFIG_EFI_PARTITION=y
153CONFIG_NLS_CODEPAGE_437=y
154CONFIG_NLS_ASCII=m
155CONFIG_NLS_ISO8859_1=y
156CONFIG_NLS_UTF8=m
157CONFIG_MAGIC_SYSRQ=y
158CONFIG_DEBUG_FS=y
159CONFIG_DEBUG_KERNEL=y
160CONFIG_LOCKUP_DETECTOR=y
161CONFIG_DETECT_HUNG_TASK=y
162CONFIG_DEBUG_SPINLOCK=y
163CONFIG_DEBUG_SPINLOCK_SLEEP=y
164# CONFIG_FTRACE is not set
165# CONFIG_ARM_UNWIND is not set
166CONFIG_CRYPTO_TEST=m
167CONFIG_CRYPTO_CBC=y
168CONFIG_CRYPTO_ECB=y
169CONFIG_CRYPTO_MICHAEL_MIC=y
170CONFIG_CRYPTO_AES=y
171CONFIG_CRYPTO_ARC4=y
172CONFIG_CRYPTO_DEFLATE=y
173CONFIG_CRYPTO_LZO=y
174# CONFIG_CRYPTO_ANSI_CPRNG is not set
175CONFIG_CRC_CCITT=m
diff --git a/recipes-kernel/linux/linux-timesys_3.0.15.bbappend b/recipes-kernel/linux/linux-timesys_3.0.15.bbappend
new file mode 100644
index 0000000..ec5c94d
--- /dev/null
+++ b/recipes-kernel/linux/linux-timesys_3.0.15.bbappend
@@ -0,0 +1,11 @@
1# Copyright (C) 2013-2014 Timesys Corporation
2# Released under the MIT license (see COPYING.MIT for the terms)
3
4FILESEXTRAPATHS_prepend := "${THISDIR}/${PN}-${PV}:"
5
6SRCBRANCH_pcl052 = "3.0-pcl052"
7SRCREV_pcl052 = "5e9d9a5a732c65ee5ae51055effad8b6e593770b"
8SRCBRANCH_pcm052 = "3.0-pcm052"
9SRCREV_pcm052 = "7a27fd26d2b5b732e12ecea13a846679cbafe9a9"
10SRCBRANCH_quartz = "3.0-quartz"
11SRCREV_quartz = "803c45456f42736bf49af1de164e966ee972848e"
diff --git a/recipes-kernel/linux/linux-wandboard-3.0.35/0001-ENGR00255688-4.6.9p11.1-gpu-GPU-Kernel-driver-integr.patch b/recipes-kernel/linux/linux-wandboard-3.0.35/0001-ENGR00255688-4.6.9p11.1-gpu-GPU-Kernel-driver-integr.patch
new file mode 100644
index 0000000..9c7cd44
--- /dev/null
+++ b/recipes-kernel/linux/linux-wandboard-3.0.35/0001-ENGR00255688-4.6.9p11.1-gpu-GPU-Kernel-driver-integr.patch
@@ -0,0 +1,1040 @@
1From 46e3a6de5adb9379f9d6eef2c038c2f18637d407 Mon Sep 17 00:00:00 2001
2From: Loren Huang <b02279@freescale.com>
3Date: Mon, 25 Mar 2013 15:43:57 +0800
4Subject: [PATCH 1/6] ENGR00255688 4.6.9p11.1 [gpu]GPU Kernel driver
5 integration
6
74.6.9p11.1 GPU kernel driver integration
8Cherry pick from imx_3.0.35
9
10Upstream-Status: Backport [3.5.7-1.0.0]
11
12Signed-off-by: Loren Huang <b02279@freescale.com>
13Acked-by: Lily Zhang
14---
15 drivers/mxc/gpu-viv/Kbuild | 2 +-
16 .../arch/XAQ2/hal/kernel/gc_hal_kernel_context.c | 2 +-
17 .../arch/XAQ2/hal/kernel/gc_hal_kernel_hardware.c | 7 +-
18 drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel.h | 2 +-
19 drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel_db.c | 53 ++++--
20 .../mxc/gpu-viv/hal/kernel/gc_hal_kernel_event.c | 5 +-
21 drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel_mmu.c | 178 ++++++++++++---------
22 .../hal/kernel/gc_hal_kernel_video_memory.c | 3 +-
23 .../gpu-viv/hal/kernel/inc/gc_hal_eglplatform.h | 13 +-
24 drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_engine.h | 25 +++
25 .../mxc/gpu-viv/hal/kernel/inc/gc_hal_options.h | 35 ++++
26 .../mxc/gpu-viv/hal/kernel/inc/gc_hal_version.h | 2 +-
27 .../hal/os/linux/kernel/gc_hal_kernel_driver.c | 2 +-
28 .../hal/os/linux/kernel/gc_hal_kernel_linux.h | 6 +
29 .../gpu-viv/hal/os/linux/kernel/gc_hal_kernel_os.c | 82 +++++++++-
30 15 files changed, 304 insertions(+), 113 deletions(-)
31
32diff --git a/drivers/mxc/gpu-viv/Kbuild b/drivers/mxc/gpu-viv/Kbuild
33index 0b18a7b..93b1259 100644
34--- a/drivers/mxc/gpu-viv/Kbuild
35+++ b/drivers/mxc/gpu-viv/Kbuild
36@@ -1,6 +1,6 @@
37 ##############################################################################
38 #
39-# Copyright (C) 2005 - 2012 by Vivante Corp.
40+# Copyright (C) 2005 - 2013 by Vivante Corp.
41 #
42 # This program is free software; you can redistribute it and/or modify
43 # it under the terms of the GNU General Public License as published by
44diff --git a/drivers/mxc/gpu-viv/arch/XAQ2/hal/kernel/gc_hal_kernel_context.c b/drivers/mxc/gpu-viv/arch/XAQ2/hal/kernel/gc_hal_kernel_context.c
45index 22e1f27..24003e7 100644
46--- a/drivers/mxc/gpu-viv/arch/XAQ2/hal/kernel/gc_hal_kernel_context.c
47+++ b/drivers/mxc/gpu-viv/arch/XAQ2/hal/kernel/gc_hal_kernel_context.c
48@@ -471,7 +471,7 @@ _InitializeContextBuffer(
49 index += _SwitchPipe(Context, index, gcvPIPE_3D);
50
51 /* Current context pointer. */
52-#if gcdDEBUG
53+#if gcdDEBUG
54 index += _State(Context, index, 0x03850 >> 2, 0x00000000, 1, gcvFALSE, gcvFALSE);
55 #endif
56
57diff --git a/drivers/mxc/gpu-viv/arch/XAQ2/hal/kernel/gc_hal_kernel_hardware.c b/drivers/mxc/gpu-viv/arch/XAQ2/hal/kernel/gc_hal_kernel_hardware.c
58index a87259e..3829999 100644
59--- a/drivers/mxc/gpu-viv/arch/XAQ2/hal/kernel/gc_hal_kernel_hardware.c
60+++ b/drivers/mxc/gpu-viv/arch/XAQ2/hal/kernel/gc_hal_kernel_hardware.c
61@@ -232,7 +232,8 @@ _IdentifyHardware(
62 }
63
64 /* Exception for GC1000, revision 5035 & GC800, revision 4612 */
65- if (((Identity->chipModel == gcv1000) && (Identity->chipRevision == 0x5035))
66+ if (((Identity->chipModel == gcv1000) && ((Identity->chipRevision == 0x5035)
67+ || (Identity->chipRevision == 0x5036)))
68 || ((Identity->chipModel == gcv800) && (Identity->chipRevision == 0x4612)))
69 {
70 Identity->superTileMode = 1;
71@@ -751,7 +752,7 @@ gckHARDWARE_Construct(
72 /* Initialize the fast clear. */
73 gcmkONERROR(gckHARDWARE_SetFastClear(hardware, -1, -1));
74
75-#if !gcdENABLE_128B_MERGE
76+#if !gcdENABLE_128B_MERGE
77
78 if (((((gctUINT32) (hardware->identity.chipMinorFeatures2)) >> (0 ? 21:21) & ((gctUINT32) ((((1 ? 21:21) - (0 ? 21:21) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 21:21) - (0 ? 21:21) + 1)))))) == (0x1 & ((gctUINT32) ((((1 ? 21:21) - (0 ? 21:21) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 21:21) - (0 ? 21:21) + 1))))))))
79 {
80@@ -1027,7 +1028,7 @@ gckHARDWARE_InitializeHardware(
81 0x00424,
82 baseAddress));
83
84-#if !VIVANTE_PROFILER
85+#if !VIVANTE_PROFILER
86 {
87 gctUINT32 data;
88
89diff --git a/drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel.h b/drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel.h
90index 1da80b7..5896e93 100644
91--- a/drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel.h
92+++ b/drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel.h
93@@ -186,7 +186,7 @@ typedef struct _gcsDATABASE
94 gctUINT64 idle;
95
96 /* Pointer to database. */
97- gcsDATABASE_RECORD_PTR list;
98+ gcsDATABASE_RECORD_PTR list[48];
99
100 #if gcdSECURE_USER
101 /* Secure cache. */
102diff --git a/drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel_db.c b/drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel_db.c
103index 1fb18fb..bc5f083 100644
104--- a/drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel_db.c
105+++ b/drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel_db.c
106@@ -26,6 +26,9 @@
107 /*******************************************************************************
108 ***** Private fuctions ********************************************************/
109
110+#define _GetSlot(database, x) \
111+ (gctUINT32)(((gcmPTR_TO_UINT64(x) >> 7) % gcmCOUNTOF(database->list)))
112+
113 /*******************************************************************************
114 ** gckKERNEL_NewDatabase
115 **
116@@ -56,6 +59,7 @@ gckKERNEL_NewDatabase(
117 gcsDATABASE_PTR database;
118 gctBOOL acquired = gcvFALSE;
119 gctSIZE_T slot;
120+ gcsDATABASE_PTR existingDatabase;
121
122 gcmkHEADER_ARG("Kernel=0x%x ProcessID=%d", Kernel, ProcessID);
123
124@@ -63,6 +67,21 @@ gckKERNEL_NewDatabase(
125 gcmkONERROR(gckOS_AcquireMutex(Kernel->os, Kernel->db->dbMutex, gcvINFINITE));
126 acquired = gcvTRUE;
127
128+ /* Compute the hash for the database. */
129+ slot = ProcessID % gcmCOUNTOF(Kernel->db->db);
130+
131+ /* Walk the hash list. */
132+ for (existingDatabase = Kernel->db->db[slot];
133+ existingDatabase != gcvNULL;
134+ existingDatabase = existingDatabase->next)
135+ {
136+ if (existingDatabase->processID == ProcessID)
137+ {
138+ /* One process can't be added twice. */
139+ gcmkONERROR(gcvSTATUS_NOT_SUPPORTED);
140+ }
141+ }
142+
143 if (Kernel->db->freeDatabase != gcvNULL)
144 {
145 /* Allocate a database from the free list. */
146@@ -81,9 +100,6 @@ gckKERNEL_NewDatabase(
147 database = pointer;
148 }
149
150- /* Compute the hash for the database. */
151- slot = ProcessID % gcmCOUNTOF(Kernel->db->db);
152-
153 /* Insert the database into the hash. */
154 database->next = Kernel->db->db[slot];
155 Kernel->db->db[slot] = database;
156@@ -350,6 +366,7 @@ static gceSTATUS
157 gckKERNEL_NewRecord(
158 IN gckKERNEL Kernel,
159 IN gcsDATABASE_PTR Database,
160+ IN gctUINT32 Slot,
161 OUT gcsDATABASE_RECORD_PTR * Record
162 )
163 {
164@@ -383,8 +400,8 @@ gckKERNEL_NewRecord(
165 }
166
167 /* Insert the record in the database. */
168- record->next = Database->list;
169- Database->list = record;
170+ record->next = Database->list[Slot];
171+ Database->list[Slot] = record;
172
173 /* Release the database mutex. */
174 gcmkONERROR(gckOS_ReleaseMutex(Kernel->os, Kernel->db->dbMutex));
175@@ -449,6 +466,7 @@ gckKERNEL_DeleteRecord(
176 gceSTATUS status;
177 gctBOOL acquired = gcvFALSE;
178 gcsDATABASE_RECORD_PTR record, previous;
179+ gctUINT32 slot = _GetSlot(Database, Data);
180
181 gcmkHEADER_ARG("Kernel=0x%x Database=0x%x Type=%d Data=0x%x",
182 Kernel, Database, Type, Data);
183@@ -458,8 +476,9 @@ gckKERNEL_DeleteRecord(
184 gckOS_AcquireMutex(Kernel->os, Kernel->db->dbMutex, gcvINFINITE));
185 acquired = gcvTRUE;
186
187+
188 /* Scan the database for this record. */
189- for (record = Database->list, previous = gcvNULL;
190+ for (record = Database->list[slot], previous = gcvNULL;
191 record != gcvNULL;
192 record = record->next
193 )
194@@ -490,7 +509,7 @@ gckKERNEL_DeleteRecord(
195 /* Remove record from database. */
196 if (previous == gcvNULL)
197 {
198- Database->list = record->next;
199+ Database->list[slot] = record->next;
200 }
201 else
202 {
203@@ -557,6 +576,7 @@ gckKERNEL_FindRecord(
204 gceSTATUS status;
205 gctBOOL acquired = gcvFALSE;
206 gcsDATABASE_RECORD_PTR record;
207+ gctUINT32 slot = _GetSlot(Database, Data);
208
209 gcmkHEADER_ARG("Kernel=0x%x Database=0x%x Type=%d Data=0x%x",
210 Kernel, Database, Type, Data);
211@@ -567,7 +587,7 @@ gckKERNEL_FindRecord(
212 acquired = gcvTRUE;
213
214 /* Scan the database for this record. */
215- for (record = Database->list;
216+ for (record = Database->list[slot];
217 record != gcvNULL;
218 record = record->next
219 )
220@@ -642,6 +662,7 @@ gckKERNEL_CreateProcessDB(
221 {
222 gceSTATUS status;
223 gcsDATABASE_PTR database = gcvNULL;
224+ gctUINT32 i;
225
226 gcmkHEADER_ARG("Kernel=0x%x ProcessID=%d", Kernel, ProcessID);
227
228@@ -668,7 +689,11 @@ gckKERNEL_CreateProcessDB(
229 database->mapUserMemory.bytes = 0;
230 database->mapUserMemory.maxBytes = 0;
231 database->mapUserMemory.totalBytes = 0;
232- database->list = gcvNULL;
233+
234+ for (i = 0; i < gcmCOUNTOF(database->list); i++)
235+ {
236+ database->list[i] = gcvNULL;
237+ }
238
239 #if gcdSECURE_USER
240 {
241@@ -848,7 +873,7 @@ gckKERNEL_AddProcessDB(
242 gcmkONERROR(gckKERNEL_FindDatabase(Kernel, ProcessID, gcvFALSE, &database));
243
244 /* Create a new record in the database. */
245- gcmkONERROR(gckKERNEL_NewRecord(Kernel, database, &record));
246+ gcmkONERROR(gckKERNEL_NewRecord(Kernel, database, _GetSlot(database, Pointer), &record));
247
248 /* Initialize the record. */
249 record->kernel = Kernel;
250@@ -1086,6 +1111,7 @@ gckKERNEL_DestroyProcessDB(
251 gctPHYS_ADDR physical;
252 gcuVIDMEM_NODE_PTR node;
253 gckKERNEL kernel = Kernel;
254+ gctUINT32 i;
255
256 gcmkHEADER_ARG("Kernel=0x%x ProcessID=%d", Kernel, ProcessID);
257
258@@ -1126,8 +1152,11 @@ gckKERNEL_DestroyProcessDB(
259 ProcessID);
260 }
261
262+ for(i = 0; i < gcmCOUNTOF(database->list); i++)
263+ {
264+
265 /* Walk all records. */
266- for (record = database->list; record != gcvNULL; record = next)
267+ for (record = database->list[i]; record != gcvNULL; record = next)
268 {
269 /* Next next record. */
270 next = record->next;
271@@ -1293,6 +1322,8 @@ gckKERNEL_DestroyProcessDB(
272 gcvNULL));
273 }
274
275+ }
276+
277 /* Delete the database. */
278 gcmkONERROR(gckKERNEL_DeleteDatabase(Kernel, database));
279
280diff --git a/drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel_event.c b/drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel_event.c
281index f78d096..217f7f1 100644
282--- a/drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel_event.c
283+++ b/drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel_event.c
284@@ -959,6 +959,8 @@ gckEVENT_AddList(
285 record->kernel = Event->kernel;
286 #endif
287
288+ gcmkONERROR(__RemoveRecordFromProcessDB(Event, record));
289+
290 /* Acquire the mutex. */
291 gcmkONERROR(gckOS_AcquireMutex(Event->os, Event->eventListMutex, gcvINFINITE));
292 acquired = gcvTRUE;
293@@ -1539,9 +1541,6 @@ gckEVENT_Submit(
294 gcmkONERROR(gckOS_ReleaseMutex(Event->os, Event->eventListMutex));
295 acquired = gcvFALSE;
296
297- gcmkONERROR(__RemoveRecordFromProcessDB(Event,
298- Event->queues[id].head));
299-
300 #if gcdNULL_DRIVER
301 /* Notify immediately on infinite hardware. */
302 gcmkONERROR(gckEVENT_Interrupt(Event, 1 << id));
303diff --git a/drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel_mmu.c b/drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel_mmu.c
304index 0c71e28..43c9297 100644
305--- a/drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel_mmu.c
306+++ b/drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel_mmu.c
307@@ -97,6 +97,43 @@ static gcsMirrorPageTable_PTR mirrorPageTable = gcvNULL;
308 static gctPOINTER mirrorPageTableMutex = gcvNULL;
309 #endif
310
311+static void
312+_WritePageEntry(
313+ IN gctUINT32_PTR PageEntry,
314+ IN gctUINT32 EntryValue
315+ )
316+{
317+ static gctUINT16 data = 0xff00;
318+
319+ if (*(gctUINT8 *)&data == 0xff)
320+ {
321+ *PageEntry = gcmSWAB32(EntryValue);
322+ }
323+ else
324+ {
325+ *PageEntry = EntryValue;
326+ }
327+}
328+
329+static gctUINT32
330+_ReadPageEntry(
331+ IN gctUINT32_PTR PageEntry
332+ )
333+{
334+ static gctUINT16 data = 0xff00;
335+ gctUINT32 entryValue;
336+
337+ if (*(gctUINT8 *)&data == 0xff)
338+ {
339+ entryValue = *PageEntry;
340+ return gcmSWAB32(entryValue);
341+ }
342+ else
343+ {
344+ return *PageEntry;
345+ }
346+}
347+
348 static gceSTATUS
349 _FillPageTable(
350 IN gctUINT32_PTR PageTable,
351@@ -108,7 +145,7 @@ _FillPageTable(
352
353 for (i = 0; i < PageCount; i++)
354 {
355- PageTable[i] = EntryValue;
356+ _WritePageEntry(PageTable + i, EntryValue);
357 }
358
359 return gcvSTATUS_OK;
360@@ -132,16 +169,16 @@ _Link(
361 gctUINT32_PTR pageTable = Mmu->pageTableLogical;
362
363 /* Dispatch on node type. */
364- switch (gcmENTRY_TYPE(pageTable[Index]))
365+ switch (gcmENTRY_TYPE(_ReadPageEntry(&pageTable[Index])))
366 {
367 case gcvMMU_SINGLE:
368 /* Set single index. */
369- pageTable[Index] = (Next << 8) | gcvMMU_SINGLE;
370+ _WritePageEntry(&pageTable[Index], (Next << 8) | gcvMMU_SINGLE);
371 break;
372
373 case gcvMMU_FREE:
374 /* Set index. */
375- pageTable[Index + 1] = Next;
376+ _WritePageEntry(&pageTable[Index + 1], Next);
377 break;
378
379 default:
380@@ -167,13 +204,13 @@ _AddFree(
381 if (Count == 1)
382 {
383 /* Initialize a single page node. */
384- pageTable[Node] = (~((1U<<8)-1)) | gcvMMU_SINGLE;
385+ _WritePageEntry(pageTable + Node, (~((1U<<8)-1)) | gcvMMU_SINGLE);
386 }
387 else
388 {
389 /* Initialize the node. */
390- pageTable[Node + 0] = (Count << 8) | gcvMMU_FREE;
391- pageTable[Node + 1] = ~0U;
392+ _WritePageEntry(pageTable + Node + 0, (Count << 8) | gcvMMU_FREE);
393+ _WritePageEntry(pageTable + Node + 1, ~0U);
394 }
395
396 /* Append the node. */
397@@ -196,7 +233,7 @@ _Collect(
398 for (i = 0; i < Mmu->pageTableEntries; ++i)
399 {
400 /* Dispatch based on type of page. */
401- switch (gcmENTRY_TYPE(pageTable[i]))
402+ switch (gcmENTRY_TYPE(_ReadPageEntry(&pageTable[i])))
403 {
404 case gcvMMU_USED:
405 /* Used page, so close any open node. */
406@@ -229,10 +266,10 @@ _Collect(
407 }
408
409 /* Advance the count. */
410- count += pageTable[i] >> 8;
411+ count += _ReadPageEntry(&pageTable[i]) >> 8;
412
413 /* Advance the index into the page table. */
414- i += (pageTable[i] >> 8) - 1;
415+ i += (_ReadPageEntry(&pageTable[i]) >> 8) - 1;
416 break;
417
418 default:
419@@ -341,19 +378,20 @@ _FillFlatMapping(
420 gcmkONERROR(gcvSTATUS_NOT_ALIGNED);
421 }
422
423- *(Mmu->mtlbLogical + mStart)
424- = stlb->physBase
425- /* 64KB page size */
426- | (1 << 2)
427- /* Ignore exception */
428- | (0 << 1)
429- /* Present */
430- | (1 << 0);
431+ _WritePageEntry(Mmu->mtlbLogical + mStart,
432+ stlb->physBase
433+ /* 64KB page size */
434+ | (1 << 2)
435+ /* Ignore exception */
436+ | (0 << 1)
437+ /* Present */
438+ | (1 << 0)
439+ );
440 #if gcdMMU_TABLE_DUMP
441 gckOS_Print("%s(%d): insert MTLB[%d]: %08x\n",
442 __FUNCTION__, __LINE__,
443 mStart,
444- *(Mmu->mtlbLogical + mStart));
445+ _ReadPageEntry(Mmu->mtlbLogical + mStart));
446 #endif
447
448 stlb->mtlbIndex = mStart;
449@@ -368,12 +406,12 @@ _FillFlatMapping(
450 while (sStart <= last)
451 {
452 gcmkASSERT(!(start & gcdMMU_PAGE_64K_MASK));
453- *(stlb->logical + sStart) = _SetPage(start);
454+ _WritePageEntry(stlb->logical + sStart, _SetPage(start));
455 #if gcdMMU_TABLE_DUMP
456 gckOS_Print("%s(%d): insert STLB[%d]: %08x\n",
457 __FUNCTION__, __LINE__,
458 sStart,
459- *(stlb->logical + sStart));
460+ _ReadPageEntry(stlb->logical + sStart));
461 #endif
462 /* next page. */
463 start += gcdMMU_PAGE_64K_SIZE;
464@@ -428,7 +466,7 @@ OnError:
465 if (pre->mtlbEntryNum != 0)
466 {
467 gcmkASSERT(pre->mtlbEntryNum == 1);
468- *(Mmu->mtlbLogical + pre->mtlbIndex) = 0;
469+ _WritePageEntry(Mmu->mtlbLogical + pre->mtlbIndex, 0);
470 }
471
472 gcmkVERIFY_OK(gcmkOS_SAFE_FREE(Mmu->os, pre));
473@@ -493,8 +531,8 @@ _SetupDynamicSpace(
474
475 /* Initilization. */
476 pageTable = Mmu->pageTableLogical;
477- pageTable[0] = (Mmu->pageTableEntries << 8) | gcvMMU_FREE;
478- pageTable[1] = ~0U;
479+ _WritePageEntry(pageTable, (Mmu->pageTableEntries << 8) | gcvMMU_FREE);
480+ _WritePageEntry(pageTable + 1, ~0U);
481 Mmu->heapList = 0;
482 Mmu->freeNodes = gcvFALSE;
483
484@@ -509,18 +547,20 @@ _SetupDynamicSpace(
485 /* Map to Master TLB. */
486 for (; i < gcdMMU_MTLB_ENTRY_NUM; i++)
487 {
488- Mmu->mtlbLogical[i] = physical
489- /* 4KB page size */
490- | (0 << 2)
491- /* Ignore exception */
492- | (0 << 1)
493- /* Present */
494- | (1 << 0);
495+ _WritePageEntry(Mmu->mtlbLogical + i,
496+ physical
497+ /* 4KB page size */
498+ | (0 << 2)
499+ /* Ignore exception */
500+ | (0 << 1)
501+ /* Present */
502+ | (1 << 0)
503+ );
504 #if gcdMMU_TABLE_DUMP
505 gckOS_Print("%s(%d): insert MTLB[%d]: %08x\n",
506 __FUNCTION__, __LINE__,
507 i,
508- *(Mmu->mtlbLogical + i));
509+ _ReadPageEntry(Mmu->mtlbLogical + i));
510 #endif
511 physical += gcdMMU_STLB_4K_SIZE;
512 }
513@@ -645,18 +685,11 @@ _Construct(
514 pageTable = mmu->pageTableLogical;
515
516 #if gcdMMU_CLEAR_VALUE
517- {
518- gctUINT32 i;
519-
520- for (i = 0; i < mmu->pageTableEntries; ++i)
521- {
522- pageTable[i] = gcdMMU_CLEAR_VALUE;
523- }
524- }
525+ _FillPageTable(pageTable, mmu->pageTableEntries, gcdMMU_CLEAR_VALUE);
526 #endif
527
528- pageTable[0] = (mmu->pageTableEntries << 8) | gcvMMU_FREE;
529- pageTable[1] = ~0U;
530+ _WritePageEntry(pageTable, (mmu->pageTableEntries << 8) | gcvMMU_FREE);
531+ _WritePageEntry(pageTable + 1, ~0U);
532 mmu->heapList = 0;
533 mmu->freeNodes = gcvFALSE;
534
535@@ -797,7 +830,7 @@ _Destroy(
536 if (pre->mtlbEntryNum != 0)
537 {
538 gcmkASSERT(pre->mtlbEntryNum == 1);
539- *(Mmu->mtlbLogical + pre->mtlbIndex) = 0;
540+ _WritePageEntry(Mmu->mtlbLogical + pre->mtlbIndex, 0);
541 #if gcdMMU_TABLE_DUMP
542 gckOS_Print("%s(%d): clean MTLB[%d]\n",
543 __FUNCTION__, __LINE__,
544@@ -1044,7 +1077,7 @@ _AllocatePages(
545 for (index = Mmu->heapList; !gotIt && (index < Mmu->pageTableEntries);)
546 {
547 /* Check the node type. */
548- switch (gcmENTRY_TYPE(pageTable[index]))
549+ switch (gcmENTRY_TYPE(_ReadPageEntry(&pageTable[index])))
550 {
551 case gcvMMU_SINGLE:
552 /* Single odes are valid if we only need 1 page. */
553@@ -1056,13 +1089,13 @@ _AllocatePages(
554 {
555 /* Move to next node. */
556 previous = index;
557- index = pageTable[index] >> 8;
558+ index = _ReadPageEntry(&pageTable[index]) >> 8;
559 }
560 break;
561
562 case gcvMMU_FREE:
563 /* Test if the node has enough space. */
564- if (PageCount <= (pageTable[index] >> 8))
565+ if (PageCount <= (_ReadPageEntry(&pageTable[index]) >> 8))
566 {
567 gotIt = gcvTRUE;
568 }
569@@ -1070,7 +1103,7 @@ _AllocatePages(
570 {
571 /* Move to next node. */
572 previous = index;
573- index = pageTable[index + 1];
574+ index = _ReadPageEntry(&pageTable[index + 1]);
575 }
576 break;
577
578@@ -1099,36 +1132,36 @@ _AllocatePages(
579 }
580 }
581
582- switch (gcmENTRY_TYPE(pageTable[index]))
583+ switch (gcmENTRY_TYPE(_ReadPageEntry(&pageTable[index])))
584 {
585 case gcvMMU_SINGLE:
586 /* Unlink single node from free list. */
587 gcmkONERROR(
588- _Link(Mmu, previous, pageTable[index] >> 8));
589+ _Link(Mmu, previous, _ReadPageEntry(&pageTable[index]) >> 8));
590 break;
591
592 case gcvMMU_FREE:
593 /* Check how many pages will be left. */
594- left = (pageTable[index] >> 8) - PageCount;
595+ left = (_ReadPageEntry(&pageTable[index]) >> 8) - PageCount;
596 switch (left)
597 {
598 case 0:
599 /* The entire node is consumed, just unlink it. */
600 gcmkONERROR(
601- _Link(Mmu, previous, pageTable[index + 1]));
602+ _Link(Mmu, previous, _ReadPageEntry(&pageTable[index + 1])));
603 break;
604
605 case 1:
606 /* One page will remain. Convert the node to a single node and
607 ** advance the index. */
608- pageTable[index] = (pageTable[index + 1] << 8) | gcvMMU_SINGLE;
609+ _WritePageEntry(&pageTable[index], (_ReadPageEntry(&pageTable[index + 1]) << 8) | gcvMMU_SINGLE);
610 index ++;
611 break;
612
613 default:
614 /* Enough pages remain for a new node. However, we will just adjust
615 ** the size of the current node and advance the index. */
616- pageTable[index] = (left << 8) | gcvMMU_FREE;
617+ _WritePageEntry(&pageTable[index], (left << 8) | gcvMMU_FREE);
618 index += left;
619 break;
620 }
621@@ -1232,35 +1265,32 @@ _FreePages(
622 #if gcdMMU_CLEAR_VALUE
623 if (Mmu->hardware->mmuVersion == 0)
624 {
625- gctUINT32 i;
626-
627- for (i = 0; i < PageCount; ++i)
628- {
629- pageTable[i] = gcdMMU_CLEAR_VALUE;
630- }
631+ _FillPageTable(pageTable, PageCount, gcdMMU_CLEAR_VALUE);
632 }
633 #endif
634
635 if (PageCount == 1)
636 {
637 /* Single page node. */
638- pageTable[0] = (~((1U<<8)-1)) | gcvMMU_SINGLE
639+ _WritePageEntry(pageTable,
640+ (~((1U<<8)-1)) | gcvMMU_SINGLE
641 #if gcdUSE_MMU_EXCEPTION
642- /* Enable exception */
643- | (1 << 1)
644+ /* Enable exception */
645+ | 1 << 1
646 #endif
647- ;
648+ );
649 }
650 else
651 {
652 /* Mark the node as free. */
653- pageTable[0] = (PageCount << 8) | gcvMMU_FREE
654+ _WritePageEntry(pageTable,
655+ (PageCount << 8) | gcvMMU_FREE
656 #if gcdUSE_MMU_EXCEPTION
657- /* Enable exception */
658- | (1 << 1)
659+ /* Enable exception */
660+ | 1 << 1
661 #endif
662- ;
663- pageTable[1] = ~0U;
664+ );
665+ _WritePageEntry(pageTable + 1, ~0U);
666
667 #if gcdUSE_MMU_EXCEPTION
668 /* Enable exception */
669@@ -1509,12 +1539,8 @@ gckMMU_SetPage(
670 data = _SetPage(PageAddress);
671 }
672
673- if (Mmu->hardware->bigEndian)
674- {
675- data = gcmSWAB32(data);
676- }
677+ _WritePageEntry(PageEntry, data);
678
679- *PageEntry = data;
680 #if gcdMIRROR_PAGETABLE
681 for (i = 0; i < mirrorPageTable->reference; i++)
682 {
683@@ -1526,11 +1552,11 @@ gckMMU_SetPage(
684
685 if (mmu->hardware->mmuVersion == 0)
686 {
687- *pageEntry = PageAddress;
688+ _WritePageEntry(pageEntry, PageAddress);
689 }
690 else
691 {
692- *pageEntry = _SetPage(PageAddress);
693+ _WritePageEntry(pageEntry, _SetPage(PageAddress));
694 }
695 }
696
697@@ -1734,7 +1760,7 @@ gckMMU_DumpPageTableEntry(
698 * gcdMMU_STLB_4K_ENTRY_NUM
699 + stlb;
700
701- gcmkPRINT(" Page table entry = 0x%08X", pageTable[index]);
702+ gcmkPRINT(" Page table entry = 0x%08X", _ReadPageEntry(pageTable + index));
703 }
704
705 gcmkFOOTER_NO();
706diff --git a/drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel_video_memory.c b/drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel_video_memory.c
707index d49aa64..8a442a2 100644
708--- a/drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel_video_memory.c
709+++ b/drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel_video_memory.c
710@@ -1027,7 +1027,8 @@ gckVIDMEM_AllocateLinear(
711 )
712 {
713 /* The left memory is for small memory.*/
714- gcmkONERROR(gcvSTATUS_OUT_OF_MEMORY);
715+ status = gcvSTATUS_OUT_OF_MEMORY;
716+ goto OnError;
717 }
718 #endif
719
720diff --git a/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_eglplatform.h b/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_eglplatform.h
721index 496276e..06eea79 100644
722--- a/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_eglplatform.h
723+++ b/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_eglplatform.h
724@@ -227,7 +227,8 @@ gcoOS_GetDisplayInfoEx(
725 );
726
727 gceSTATUS
728-gcoOS_GetNextDisplayInfoEx(
729+gcoOS_GetNextDisplayInfoExByIndex(
730+ IN gctINT Index,
731 IN HALNativeDisplayType Display,
732 IN HALNativeWindowType Window,
733 IN gctUINT DisplayInfoSize,
734@@ -274,15 +275,15 @@ gcoOS_SetDisplayVirtualEx(
735
736 gceSTATUS
737 gcoOS_SetSwapInterval(
738- IN HALNativeDisplayType Display,
739- IN gctINT Interval
740+ IN HALNativeDisplayType Display,
741+ IN gctINT Interval
742 );
743
744 gceSTATUS
745 gcoOS_GetSwapInterval(
746- IN HALNativeDisplayType Display,
747- IN gctINT_PTR Min,
748- IN gctINT_PTR Max
749+ IN HALNativeDisplayType Display,
750+ IN gctINT_PTR Min,
751+ IN gctINT_PTR Max
752 );
753
754 gceSTATUS
755diff --git a/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_engine.h b/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_engine.h
756index d441d1d..249b61b 100644
757--- a/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_engine.h
758+++ b/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_engine.h
759@@ -1430,6 +1430,16 @@ typedef enum _gceTEXTURE_FACE
760 }
761 gceTEXTURE_FACE;
762
763+#if gcdFORCE_MIPMAP
764+typedef enum
765+{
766+ gcvForceMipDisabled = 0,
767+ gcvForceMipEnable = 1,
768+ gcvForceMipGenerated = 2,
769+ gcvForceMipNever = 3,
770+}gceFORCE_MIPMAP;
771+#endif
772+
773 typedef struct _gcsTEXTURE
774 {
775 /* Addressing modes. */
776@@ -1446,6 +1456,10 @@ typedef struct _gcsTEXTURE
777 gceTEXTURE_FILTER mipFilter;
778 gctUINT anisoFilter;
779 gctBOOL forceTopLevel;
780+ gctBOOL autoMipmap;
781+#if gcdFORCE_MIPMAP
782+ gceFORCE_MIPMAP forceMipmap;
783+#endif
784 /* Level of detail. */
785 gctFIXED_POINT lodBias;
786 gctFIXED_POINT lodMin;
787@@ -1479,7 +1493,18 @@ gceSTATUS
788 gcoTEXTURE_Destroy(
789 IN gcoTEXTURE Texture
790 );
791+#if gcdFORCE_MIPMAP
792+gceSTATUS
793+gcoTEXTURE_DestroyForceMipmap(
794+ IN gcoTEXTURE Texture
795+ );
796
797+gceSTATUS
798+gcoTEXTURE_GetMipLevels(
799+ IN gcoTEXTURE Texture,
800+ OUT gctINT * levels
801+ );
802+#endif
803 /* Replace a mipmap in gcoTEXTURE object. */
804 gceSTATUS
805 gcoTEXTURE_ReplaceMipMap(
806diff --git a/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_options.h b/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_options.h
807index 86e9133..afe83d0 100644
808--- a/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_options.h
809+++ b/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_options.h
810@@ -114,6 +114,30 @@
811 #define COMMAND_PROCESSOR_VERSION 1
812
813 /*
814+ gcdDUMP_KEY
815+
816+ Set this to a string that appears in 'cat /proc/<pid>/cmdline'. E.g. 'camera'.
817+ HAL will create dumps for the processes matching this key.
818+*/
819+#ifndef gcdDUMP_KEY
820+# define gcdDUMP_KEY "process"
821+#endif
822+
823+/*
824+ gcdDUMP_PATH
825+
826+ The dump file location. Some processes cannot write to the sdcard.
827+ Try apps' data dir, e.g. /data/data/com.android.launcher
828+*/
829+#ifndef gcdDUMP_PATH
830+#if defined(ANDROID)
831+# define gcdDUMP_PATH "/mnt/sdcard/"
832+#else
833+# define gcdDUMP_PATH "./"
834+#endif
835+#endif
836+
837+/*
838 gcdDUMP
839
840 When set to 1, a dump of all states and memory uploads, as well as other
841@@ -342,6 +366,17 @@
842 #endif
843
844 /*
845+ gcdUSER_HEAP_ALLOCATOR
846+
847+ Set to 1 to enable user mode heap allocator for fast memory allocation
848+ and destroying. Otherwise, memory allocation/destroying in user mode
849+ will be directly managed by system. Only for linux for now.
850+*/
851+#ifndef gcdUSER_HEAP_ALLOCATOR
852+# define gcdUSER_HEAP_ALLOCATOR 1
853+#endif
854+
855+/*
856 gcdHEAP_SIZE
857
858 Set the allocation size for the internal heaps. Each time a heap is
859diff --git a/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_version.h b/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_version.h
860index 2881604..808fde0 100644
861--- a/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_version.h
862+++ b/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_version.h
863@@ -28,7 +28,7 @@
864
865 #define gcvVERSION_PATCH 9
866
867-#define gcvVERSION_BUILD 1210
868+#define gcvVERSION_BUILD 4651
869
870 #define gcvVERSION_DATE __DATE__
871
872diff --git a/drivers/mxc/gpu-viv/hal/os/linux/kernel/gc_hal_kernel_driver.c b/drivers/mxc/gpu-viv/hal/os/linux/kernel/gc_hal_kernel_driver.c
873index 4e3819c..2ed3d0e 100644
874--- a/drivers/mxc/gpu-viv/hal/os/linux/kernel/gc_hal_kernel_driver.c
875+++ b/drivers/mxc/gpu-viv/hal/os/linux/kernel/gc_hal_kernel_driver.c
876@@ -663,7 +663,7 @@ static int drv_mmap(
877
878 #if !gcdPAGED_MEMORY_CACHEABLE
879 vma->vm_page_prot = pgprot_writecombine(vma->vm_page_prot);
880- vma->vm_flags |= VM_IO | VM_DONTCOPY | VM_DONTEXPAND;
881+ vma->vm_flags |= gcdVM_FLAGS;
882 #endif
883 vma->vm_pgoff = 0;
884
885diff --git a/drivers/mxc/gpu-viv/hal/os/linux/kernel/gc_hal_kernel_linux.h b/drivers/mxc/gpu-viv/hal/os/linux/kernel/gc_hal_kernel_linux.h
886index 9c0bcd5..3c148f6 100644
887--- a/drivers/mxc/gpu-viv/hal/os/linux/kernel/gc_hal_kernel_linux.h
888+++ b/drivers/mxc/gpu-viv/hal/os/linux/kernel/gc_hal_kernel_linux.h
889@@ -73,6 +73,12 @@
890
891 #define GetPageCount(size, offset) ((((size) + ((offset) & ~PAGE_CACHE_MASK)) + PAGE_CACHE_SIZE - 1) >> PAGE_CACHE_SHIFT)
892
893+#if LINUX_VERSION_CODE >= KERNEL_VERSION (3,7,0)
894+#define gcdVM_FLAGS (VM_IO | VM_DONTCOPY | VM_DONTEXPAND | VM_DONTDUMP)
895+#else
896+#define gcdVM_FLAGS (VM_IO | VM_DONTCOPY | VM_DONTEXPAND | VM_RESERVED)
897+#endif
898+
899 static inline gctINT
900 GetOrder(
901 IN gctINT numPages
902diff --git a/drivers/mxc/gpu-viv/hal/os/linux/kernel/gc_hal_kernel_os.c b/drivers/mxc/gpu-viv/hal/os/linux/kernel/gc_hal_kernel_os.c
903index c07ded8..9c2bae6 100644
904--- a/drivers/mxc/gpu-viv/hal/os/linux/kernel/gc_hal_kernel_os.c
905+++ b/drivers/mxc/gpu-viv/hal/os/linux/kernel/gc_hal_kernel_os.c
906@@ -869,6 +869,60 @@ _UnmapUserLogical(
907 #endif
908 }
909
910+gceSTATUS
911+_QueryProcessPageTable(
912+ IN gctPOINTER Logical,
913+ OUT gctUINT32 * Address
914+ )
915+{
916+ spinlock_t *lock;
917+ gctUINTPTR_T logical = (gctUINTPTR_T)Logical;
918+ pgd_t *pgd;
919+ pud_t *pud;
920+ pmd_t *pmd;
921+ pte_t *pte;
922+
923+ if (!current->mm)
924+ {
925+ return gcvSTATUS_NOT_FOUND;
926+ }
927+
928+ pgd = pgd_offset(current->mm, logical);
929+ if (pgd_none(*pgd) || pgd_bad(*pgd))
930+ {
931+ return gcvSTATUS_NOT_FOUND;
932+ }
933+
934+ pud = pud_offset(pgd, logical);
935+ if (pud_none(*pud) || pud_bad(*pud))
936+ {
937+ return gcvSTATUS_NOT_FOUND;
938+ }
939+
940+ pmd = pmd_offset(pud, logical);
941+ if (pmd_none(*pmd) || pmd_bad(*pmd))
942+ {
943+ return gcvSTATUS_NOT_FOUND;
944+ }
945+
946+ pte = pte_offset_map_lock(current->mm, pmd, logical, &lock);
947+ if (!pte)
948+ {
949+ return gcvSTATUS_NOT_FOUND;
950+ }
951+
952+ if (!pte_present(*pte))
953+ {
954+ pte_unmap_unlock(pte, lock);
955+ return gcvSTATUS_NOT_FOUND;
956+ }
957+
958+ *Address = (pte_pfn(*pte) << PAGE_SHIFT) | (logical & ~PAGE_MASK);
959+ pte_unmap_unlock(pte, lock);
960+
961+ return gcvSTATUS_OK;
962+}
963+
964 /*******************************************************************************
965 **
966 ** gckOS_Construct
967@@ -1106,6 +1160,9 @@ _CreateKernelVirtualMapping(
968 numPages,
969 0,
970 PAGE_KERNEL);
971+
972+ /* Trigger a page fault. */
973+ memset(addr, 0, numPages * PAGE_SIZE);
974 }
975 #else
976 struct page ** pages;
977@@ -1136,6 +1193,9 @@ _CreateKernelVirtualMapping(
978 /* ioremap() can't work on system memory since 2.6.38. */
979 addr = vmap(pages, numPages, 0, gcmkNONPAGED_MEMROY_PROT(PAGE_KERNEL));
980
981+ /* Trigger a page fault. */
982+ memset(addr, 0, numPages * PAGE_SIZE);
983+
984 if (free)
985 {
986 kfree(pages);
987@@ -1540,7 +1600,7 @@ gckOS_MapMemory(
988 #else
989 #if !gcdPAGED_MEMORY_CACHEABLE
990 mdlMap->vma->vm_page_prot = gcmkPAGED_MEMROY_PROT(mdlMap->vma->vm_page_prot);
991- mdlMap->vma->vm_flags |= VM_IO | VM_DONTCOPY | VM_DONTEXPAND | VM_RESERVED;
992+ mdlMap->vma->vm_flags |= gcdVM_FLAGS;
993 # endif
994 mdlMap->vma->vm_pgoff = 0;
995
996@@ -1987,7 +2047,7 @@ gckOS_AllocateNonPagedMemory(
997 }
998 #else
999 mdlMap->vma->vm_page_prot = gcmkNONPAGED_MEMROY_PROT(mdlMap->vma->vm_page_prot);
1000- mdlMap->vma->vm_flags |= VM_IO | VM_DONTCOPY | VM_DONTEXPAND | VM_RESERVED;
1001+ mdlMap->vma->vm_flags |= gcdVM_FLAGS;
1002 mdlMap->vma->vm_pgoff = 0;
1003
1004 if (remap_pfn_range(mdlMap->vma,
1005@@ -2367,12 +2427,18 @@ gckOS_GetPhysicalAddress(
1006 gcmkVERIFY_OBJECT(Os, gcvOBJ_OS);
1007 gcmkVERIFY_ARGUMENT(Address != gcvNULL);
1008
1009- /* Get current process ID. */
1010- processID = _GetProcessID();
1011+ /* Query page table of current process first. */
1012+ status = _QueryProcessPageTable(Logical, Address);
1013
1014- /* Route through other function. */
1015- gcmkONERROR(
1016- gckOS_GetPhysicalAddressProcess(Os, Logical, processID, Address));
1017+ if (gcmIS_ERROR(status))
1018+ {
1019+ /* Get current process ID. */
1020+ processID = _GetProcessID();
1021+
1022+ /* Route through other function. */
1023+ gcmkONERROR(
1024+ gckOS_GetPhysicalAddressProcess(Os, Logical, processID, Address));
1025+ }
1026
1027 /* Success. */
1028 gcmkFOOTER_ARG("*Address=0x%08x", *Address);
1029@@ -4139,7 +4205,7 @@ gckOS_LockPages(
1030 return gcvSTATUS_OUT_OF_RESOURCES;
1031 }
1032
1033- mdlMap->vma->vm_flags |= VM_RESERVED;
1034+ mdlMap->vma->vm_flags |= gcdVM_FLAGS;
1035 #if !gcdPAGED_MEMORY_CACHEABLE
1036 if (Cacheable == gcvFALSE)
1037 {
1038--
10391.8.3.2
1040
diff --git a/recipes-kernel/linux/linux-wandboard-3.0.35/0002-ENGR00265465-gpu-Add-global-value-for-minimum-3D-clo.patch b/recipes-kernel/linux/linux-wandboard-3.0.35/0002-ENGR00265465-gpu-Add-global-value-for-minimum-3D-clo.patch
new file mode 100644
index 0000000..5725ab7
--- /dev/null
+++ b/recipes-kernel/linux/linux-wandboard-3.0.35/0002-ENGR00265465-gpu-Add-global-value-for-minimum-3D-clo.patch
@@ -0,0 +1,62 @@
1From 2df4dba8faa9a781a5a1c6c09d646d2b692c9a0c Mon Sep 17 00:00:00 2001
2From: Loren Huang <b02279@freescale.com>
3Date: Tue, 4 Jun 2013 15:08:15 +0800
4Subject: [PATCH 2/6] ENGR00265465 gpu:Add global value for minimum 3D clock
5 export
6
7Add global value gpu3DMinClock so that minimum 3D clock can be change by user.
8When gpu min clock is too low, it may cause IPU starvation issue in certain case.
9Use echo x > /sys/module/galcore/parameters/gpu3DMinClock to change it.
10
11Cherry-pick from 3.0.35 branch.
12
13Upstream-Status: Backport [3.5.7-1.0.0]
14
15Signed-off-by: Loren Huang <b02279@freescale.com>
16Acked-by: Lily Zhang
17---
18 drivers/mxc/gpu-viv/arch/XAQ2/hal/kernel/gc_hal_kernel_hardware.c | 6 +++++-
19 drivers/mxc/gpu-viv/hal/os/linux/kernel/gc_hal_kernel_driver.c | 3 +++
20 2 files changed, 8 insertions(+), 1 deletion(-)
21
22diff --git a/drivers/mxc/gpu-viv/arch/XAQ2/hal/kernel/gc_hal_kernel_hardware.c b/drivers/mxc/gpu-viv/arch/XAQ2/hal/kernel/gc_hal_kernel_hardware.c
23index 3829999..ebd36fe 100644
24--- a/drivers/mxc/gpu-viv/arch/XAQ2/hal/kernel/gc_hal_kernel_hardware.c
25+++ b/drivers/mxc/gpu-viv/arch/XAQ2/hal/kernel/gc_hal_kernel_hardware.c
26@@ -36,6 +36,7 @@ typedef struct _gcsiDEBUG_REGISTERS
27 }
28 gcsiDEBUG_REGISTERS;
29
30+extern int gpu3DMinClock;
31 /******************************************************************************\
32 ********************************* Support Code *********************************
33 \******************************************************************************/
34@@ -4630,7 +4631,10 @@ gckHARDWARE_GetFscaleValue(
35 )
36 {
37 *FscaleValue = Hardware->powerOnFscaleVal;
38- *MinFscaleValue = 1;
39+ if ((gpu3DMinClock > 0) && (gpu3DMinClock <= 64) && (Hardware->core == gcvCORE_MAJOR))
40+ *MinFscaleValue = gpu3DMinClock;
41+ else
42+ *MinFscaleValue = 1;
43 *MaxFscaleValue = 64;
44
45 return gcvSTATUS_OK;
46diff --git a/drivers/mxc/gpu-viv/hal/os/linux/kernel/gc_hal_kernel_driver.c b/drivers/mxc/gpu-viv/hal/os/linux/kernel/gc_hal_kernel_driver.c
47index 2ed3d0e..64cace1 100644
48--- a/drivers/mxc/gpu-viv/hal/os/linux/kernel/gc_hal_kernel_driver.c
49+++ b/drivers/mxc/gpu-viv/hal/os/linux/kernel/gc_hal_kernel_driver.c
50@@ -146,6 +146,9 @@ module_param(logFileSize,uint, 0644);
51 static int showArgs = 0;
52 module_param(showArgs, int, 0644);
53
54+int gpu3DMinClock = 0;
55+module_param(gpu3DMinClock, int, 0644);
56+
57 #if ENABLE_GPU_CLOCK_BY_DRIVER
58 unsigned long coreClock = 156000000;
59 module_param(coreClock, ulong, 0644);
60--
611.8.3.2
62
diff --git a/recipes-kernel/linux/linux-wandboard-3.0.35/0003-ENGR00261814-4-gpu-use-new-PU-power-on-off-interface.patch b/recipes-kernel/linux/linux-wandboard-3.0.35/0003-ENGR00261814-4-gpu-use-new-PU-power-on-off-interface.patch
new file mode 100644
index 0000000..23a415d
--- /dev/null
+++ b/recipes-kernel/linux/linux-wandboard-3.0.35/0003-ENGR00261814-4-gpu-use-new-PU-power-on-off-interface.patch
@@ -0,0 +1,53 @@
1From 1579de9397783ab5321c80f1e76661653ef38ccd Mon Sep 17 00:00:00 2001
2From: Robin Gong <b38343@freescale.com>
3Date: Thu, 9 May 2013 11:45:55 +0800
4Subject: [PATCH 3/6] ENGR00261814-4 gpu: use new PU power on/off interface
5
6use new PU power on/off interface in GPU driver
7
8Upstream-Status: Backport [3.5.7-1.0.0]
9
10Signed-off-by: Robin Gong <b38343@freescale.com>
11Acked-by: Lily Zhang
12---
13 .../mxc/gpu-viv/hal/os/linux/kernel/gc_hal_kernel_os.c | 16 +++++++++++++---
14 1 file changed, 13 insertions(+), 3 deletions(-)
15
16diff --git a/drivers/mxc/gpu-viv/hal/os/linux/kernel/gc_hal_kernel_os.c b/drivers/mxc/gpu-viv/hal/os/linux/kernel/gc_hal_kernel_os.c
17index 9c2bae6..dfbc699 100644
18--- a/drivers/mxc/gpu-viv/hal/os/linux/kernel/gc_hal_kernel_os.c
19+++ b/drivers/mxc/gpu-viv/hal/os/linux/kernel/gc_hal_kernel_os.c
20@@ -6819,8 +6819,13 @@ gckOS_SetGPUPower(
21 }
22 if((Power == gcvTRUE) && (oldPowerState == gcvFALSE))
23 {
24- if(!IS_ERR(Os->device->gpu_regulator))
25- regulator_enable(Os->device->gpu_regulator);
26+#if LINUX_VERSION_CODE < KERNEL_VERSION(3,5,0)
27+ if(!IS_ERR(Os->device->gpu_regulator))
28+ regulator_enable(Os->device->gpu_regulator);
29+#else
30+ imx_gpc_power_up_pu(true);
31+#endif
32+
33 #ifdef CONFIG_PM
34 pm_runtime_get_sync(Os->device->pmdev);
35 #endif
36@@ -6930,8 +6935,13 @@ gckOS_SetGPUPower(
37 #ifdef CONFIG_PM
38 pm_runtime_put_sync(Os->device->pmdev);
39 #endif
40+
41+#if LINUX_VERSION_CODE < KERNEL_VERSION(3,5,0)
42 if(!IS_ERR(Os->device->gpu_regulator))
43- regulator_disable(Os->device->gpu_regulator);
44+ regulator_disable(Os->device->gpu_regulator);
45+#else
46+ imx_gpc_power_up_pu(false);
47+#endif
48 }
49 /* TODO: Put your code here. */
50 gcmkFOOTER_NO();
51--
521.8.3.2
53
diff --git a/recipes-kernel/linux/linux-wandboard-3.0.35/0004-ENGR00264288-1-GPU-Integrate-4.6.9p12-release-kernel.patch b/recipes-kernel/linux/linux-wandboard-3.0.35/0004-ENGR00264288-1-GPU-Integrate-4.6.9p12-release-kernel.patch
new file mode 100644
index 0000000..08ca88a
--- /dev/null
+++ b/recipes-kernel/linux/linux-wandboard-3.0.35/0004-ENGR00264288-1-GPU-Integrate-4.6.9p12-release-kernel.patch
@@ -0,0 +1,2006 @@
1From c090a0238315094d245de2503b6f9a5bce0bda03 Mon Sep 17 00:00:00 2001
2From: Loren Huang <b02279@freescale.com>
3Date: Mon, 27 May 2013 17:45:48 +0800
4Subject: [PATCH 4/6] ENGR00264288-1 [GPU]Integrate 4.6.9p12 release kernel
5 part code
6
7Integrate 4.6.9p12 release kernel part code.
8Cherry-pick from 3.0.35 branch.
9
10Upstream-Status: Backport [3.5.7-1.0.0]
11
12Signed-off-by: Loren Huang <b02279@freescale.com>
13Acked-by: Lily Zhang
14---
15 .../GC350/hal/kernel/gc_hal_kernel_hardware_vg.c | 63 +++-
16 .../GC350/hal/kernel/gc_hal_kernel_hardware_vg.h | 2 +
17 .../arch/XAQ2/hal/kernel/gc_hal_kernel_hardware.c | 174 ++++++++---
18 .../arch/XAQ2/hal/kernel/gc_hal_kernel_hardware.h | 2 +
19 drivers/mxc/gpu-viv/config | 1 -
20 drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel.c | 329 +++++++--------------
21 .../mxc/gpu-viv/hal/kernel/gc_hal_kernel_command.c | 6 +-
22 .../gpu-viv/hal/kernel/gc_hal_kernel_command_vg.c | 14 +-
23 drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel_db.c | 6 +-
24 drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel_mmu.c | 119 +++++++-
25 .../hal/kernel/gc_hal_kernel_video_memory.c | 3 +
26 drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal.h | 6 +
27 drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_base.h | 34 +--
28 .../mxc/gpu-viv/hal/kernel/inc/gc_hal_compiler.h | 20 +-
29 drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_driver.h | 35 ++-
30 drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_engine.h | 62 +---
31 drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_enum.h | 7 -
32 .../mxc/gpu-viv/hal/kernel/inc/gc_hal_options.h | 31 +-
33 .../mxc/gpu-viv/hal/kernel/inc/gc_hal_version.h | 2 +-
34 drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_vg.h | 6 +
35 .../hal/os/linux/kernel/gc_hal_kernel_device.c | 13 +
36 .../hal/os/linux/kernel/gc_hal_kernel_device.h | 1 +
37 .../hal/os/linux/kernel/gc_hal_kernel_driver.c | 10 +-
38 .../gpu-viv/hal/os/linux/kernel/gc_hal_kernel_os.c | 74 +++--
39 .../gpu-viv/hal/os/linux/kernel/gc_hal_kernel_os.h | 3 +
40 25 files changed, 574 insertions(+), 449 deletions(-)
41
42diff --git a/drivers/mxc/gpu-viv/arch/GC350/hal/kernel/gc_hal_kernel_hardware_vg.c b/drivers/mxc/gpu-viv/arch/GC350/hal/kernel/gc_hal_kernel_hardware_vg.c
43index 4a6010d..70c2cd6 100644
44--- a/drivers/mxc/gpu-viv/arch/GC350/hal/kernel/gc_hal_kernel_hardware_vg.c
45+++ b/drivers/mxc/gpu-viv/arch/GC350/hal/kernel/gc_hal_kernel_hardware_vg.c
46@@ -217,7 +217,6 @@ _IdentifyHardware(
47 return status;
48 }
49
50-#if gcdPOWER_MANAGEMENT
51 static gctTHREADFUNCRESULT gctTHREADFUNCTYPE
52 _TimeIdleThread(
53 gctTHREADFUNCPARAMETER ThreadParameter
54@@ -262,8 +261,6 @@ _TimeIdleThread(
55 }
56 return 0;
57 }
58-#endif
59-
60
61 /******************************************************************************\
62 ****************************** gckVGHARDWARE API code *****************************
63@@ -309,6 +306,7 @@ gckVGHARDWARE_Construct(
64 do
65 {
66 gcmkERR_BREAK(gckOS_SetGPUPower(Os, gcvCORE_VG, gcvTRUE, gcvTRUE));
67+
68 status = _ResetGPU(Os);
69
70 if (status != gcvSTATUS_OK)
71@@ -368,14 +366,17 @@ gckVGHARDWARE_Construct(
72
73 gcmkERR_BREAK(gckOS_CreateMutex(Os, &hardware->powerMutex));
74 gcmkERR_BREAK(gckOS_CreateSignal(Os, gcvFALSE, &hardware->idleSignal));
75-#if gcdPOWER_MANAGEMENT
76+
77+ /* Enable power management by default. */
78+ hardware->powerManagement = gcvTRUE;
79+
80 gcmkERR_BREAK(gckOS_StartThread(
81 hardware->os,
82 _TimeIdleThread,
83 hardware,
84 &hardware->timeIdleThread
85 ));
86-#endif
87+
88 /* Return pointer to the gckVGHARDWARE object. */
89 *Hardware = hardware;
90
91@@ -395,6 +396,8 @@ gckVGHARDWARE_Construct(
92 gcmkVERIFY_OK(gckOS_Free(Os, hardware));
93 }
94
95+ gcmkVERIFY_OK(gckOS_SetGPUPower(Os, gcvCORE_VG, gcvFALSE, gcvFALSE));
96+
97 gcmkFOOTER();
98 /* Return the status. */
99 return status;
100@@ -425,11 +428,10 @@ gckVGHARDWARE_Destroy(
101 /* Verify the arguments. */
102 gcmkVERIFY_OBJECT(Hardware, gcvOBJ_HARDWARE);
103
104-#if gcdPOWER_MANAGEMENT
105 Hardware->killThread = gcvTRUE;
106 gcmkVERIFY_OK(gckOS_Signal(Hardware->os, Hardware->idleSignal, gcvTRUE));
107 gcmkVERIFY_OK(gckOS_StopThread(Hardware->os, Hardware->timeIdleThread));
108-#endif
109+
110 /* Mark the object as unknown. */
111 Hardware->object.type = gcvOBJ_UNKNOWN;
112
113@@ -1432,7 +1434,6 @@ gckVGHARDWARE_ReadInterrupt(
114 return status;
115 }
116
117-#if gcdPOWER_MANAGEMENT
118 static gceSTATUS _CommandStall(
119 gckVGHARDWARE Hardware)
120 {
121@@ -1477,7 +1478,6 @@ static gceSTATUS _CommandStall(
122 /* Return the status. */
123 return status;
124 }
125-#endif
126
127 /*******************************************************************************
128 **
129@@ -1500,7 +1500,6 @@ gckVGHARDWARE_SetPowerManagementState(
130 IN gceCHIPPOWERSTATE State
131 )
132 {
133-#if gcdPOWER_MANAGEMENT
134 gceSTATUS status;
135 gckVGCOMMAND command = gcvNULL;
136 gckOS os;
137@@ -1600,6 +1599,12 @@ gckVGHARDWARE_SetPowerManagementState(
138 command = Hardware->kernel->command;
139 gcmkVERIFY_OBJECT(command, gcvOBJ_COMMAND);
140
141+ if (Hardware->powerManagement == gcvFALSE)
142+ {
143+ gcmkFOOTER_NO();
144+ return gcvSTATUS_OK;
145+ }
146+
147 /* Start profiler. */
148 gcmkPROFILE_INIT(freq, time);
149
150@@ -1914,10 +1919,6 @@ OnError:
151 /* Return the status. */
152 gcmkFOOTER();
153 return status;
154-#else /* gcdPOWER_MANAGEMENT */
155- /* Do nothing */
156- return gcvSTATUS_OK;
157-#endif
158 }
159
160 /*******************************************************************************
161@@ -1955,6 +1956,40 @@ gckVGHARDWARE_QueryPowerManagementState(
162 return gcvSTATUS_OK;
163 }
164
165+/*******************************************************************************
166+**
167+** gckVGHARDWARE_SetPowerManagement
168+**
169+** Configure GPU power management function.
170+** Only used in driver initialization stage.
171+**
172+** INPUT:
173+**
174+** gckVGHARDWARE Harwdare
175+** Pointer to an gckHARDWARE object.
176+**
177+** gctBOOL PowerManagement
178+** Power Mangement State.
179+**
180+*/
181+gceSTATUS
182+gckVGHARDWARE_SetPowerManagement(
183+ IN gckVGHARDWARE Hardware,
184+ IN gctBOOL PowerManagement
185+ )
186+{
187+ gcmkHEADER_ARG("Hardware=0x%x", Hardware);
188+
189+ /* Verify the arguments. */
190+ gcmkVERIFY_OBJECT(Hardware, gcvOBJ_HARDWARE);
191+
192+ Hardware->powerManagement = PowerManagement;
193+
194+ /* Success. */
195+ gcmkFOOTER_NO();
196+ return gcvSTATUS_OK;
197+}
198+
199 gceSTATUS
200 gckVGHARDWARE_SetPowerOffTimeout(
201 IN gckVGHARDWARE Hardware,
202diff --git a/drivers/mxc/gpu-viv/arch/GC350/hal/kernel/gc_hal_kernel_hardware_vg.h b/drivers/mxc/gpu-viv/arch/GC350/hal/kernel/gc_hal_kernel_hardware_vg.h
203index 83a603e..16b81ae 100644
204--- a/drivers/mxc/gpu-viv/arch/GC350/hal/kernel/gc_hal_kernel_hardware_vg.h
205+++ b/drivers/mxc/gpu-viv/arch/GC350/hal/kernel/gc_hal_kernel_hardware_vg.h
206@@ -66,6 +66,8 @@ struct _gckVGHARDWARE
207 gctTHREAD timeIdleThread;
208 gctBOOL killThread;
209 gctPOINTER pageTableDirty;
210+
211+ gctBOOL powerManagement;
212 };
213
214 #endif /* __gc_hal_kernel_hardware_h_ */
215diff --git a/drivers/mxc/gpu-viv/arch/XAQ2/hal/kernel/gc_hal_kernel_hardware.c b/drivers/mxc/gpu-viv/arch/XAQ2/hal/kernel/gc_hal_kernel_hardware.c
216index ebd36fe..00f3839 100644
217--- a/drivers/mxc/gpu-viv/arch/XAQ2/hal/kernel/gc_hal_kernel_hardware.c
218+++ b/drivers/mxc/gpu-viv/arch/XAQ2/hal/kernel/gc_hal_kernel_hardware.c
219@@ -176,6 +176,7 @@ _IdentifyHardware(
220 Identity->chipMinorFeatures1 = 0;
221 Identity->chipMinorFeatures2 = 0;
222 Identity->chipMinorFeatures3 = 0;
223+ Identity->chipMinorFeatures4 = 0;
224 }
225 else
226 {
227@@ -207,13 +208,20 @@ _IdentifyHardware(
228 gckOS_ReadRegisterEx(Os, Core,
229 0x00088,
230 &Identity->chipMinorFeatures3));
231+
232+ /* Read chip minor featuress register #4. */
233+ gcmkONERROR(
234+ gckOS_ReadRegisterEx(Os, Core,
235+ 0x00094,
236+ &Identity->chipMinorFeatures4));
237 }
238 else
239 {
240- /* Chip doesn't has minor features register #1 or 2 or 3. */
241+ /* Chip doesn't has minor features register #1 or 2 or 3 or 4. */
242 Identity->chipMinorFeatures1 = 0;
243 Identity->chipMinorFeatures2 = 0;
244 Identity->chipMinorFeatures3 = 0;
245+ Identity->chipMinorFeatures4 = 0;
246 }
247 }
248
249@@ -234,14 +242,14 @@ _IdentifyHardware(
250
251 /* Exception for GC1000, revision 5035 & GC800, revision 4612 */
252 if (((Identity->chipModel == gcv1000) && ((Identity->chipRevision == 0x5035)
253- || (Identity->chipRevision == 0x5036)))
254+ || (Identity->chipRevision == 0x5036)
255+ || (Identity->chipRevision == 0x5037)))
256 || ((Identity->chipModel == gcv800) && (Identity->chipRevision == 0x4612)))
257 {
258 Identity->superTileMode = 1;
259 }
260
261
262-
263 /* Disable HZ when EZ is present for older chips. */
264 if (!((((gctUINT32) (Identity->chipFeatures)) >> (0 ? 16:16) & ((gctUINT32) ((((1 ? 16:16) - (0 ? 16:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 16:16) - (0 ? 16:16) + 1)))))) == (0x1 & ((gctUINT32) ((((1 ? 16:16) - (0 ? 16:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 16:16) - (0 ? 16:16) + 1))))))))
265 {
266@@ -285,6 +293,10 @@ _IdentifyHardware(
267 "Identity: chipMinorFeatures3=0x%08X",
268 Identity->chipMinorFeatures3);
269
270+ gcmkTRACE_ZONE(gcvLEVEL_INFO, gcvZONE_HARDWARE,
271+ "Identity: chipMinorFeatures4=0x%08X",
272+ Identity->chipMinorFeatures4);
273+
274 /***************************************************************************
275 ** Get chip specs.
276 */
277@@ -576,7 +588,6 @@ OnError:
278 return status;
279 }
280
281-#if gcdPOWER_MANAGEMENT
282 static gceSTATUS
283 _IsGPUPresent(
284 IN gckHARDWARE Hardware
285@@ -631,7 +642,6 @@ OnError:
286 gcmkFOOTER();
287 return status;
288 }
289-#endif
290
291 /******************************************************************************\
292 ****************************** gckHARDWARE API code *****************************
293@@ -708,6 +718,7 @@ gckHARDWARE_Construct(
294
295 case gcv300:
296 case gcv320:
297+ case gcv420:
298 hardware->type = gcvHARDWARE_2D;
299 /*set outstanding limit*/
300 gcmkONERROR(gckOS_ReadRegisterEx(Os, Core, 0x00414, &axi_ot));
301@@ -795,6 +806,9 @@ gckHARDWARE_Construct(
302 hardware->linkQueue.count = 0;
303 #endif
304
305+ /* Enable power management by default. */
306+ hardware->powerManagement = gcvTRUE;
307+
308 /* Return pointer to the gckHARDWARE object. */
309 *Hardware = hardware;
310
311@@ -1404,6 +1418,7 @@ gckHARDWARE_QueryChipIdentity(
312 Identity->chipMinorFeatures1 = Hardware->identity.chipMinorFeatures1;
313 Identity->chipMinorFeatures2 = Hardware->identity.chipMinorFeatures2;
314 Identity->chipMinorFeatures3 = Hardware->identity.chipMinorFeatures3;
315+ Identity->chipMinorFeatures4 = Hardware->identity.chipMinorFeatures4;
316
317 /* Return chip specs. */
318 Identity->streamCount = Hardware->identity.streamCount;
319@@ -3129,7 +3144,7 @@ gckHARDWARE_FlushMMU(
320 | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 25:16) - (0 ? 25:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 25:16) - (0 ? 25:16) + 1))))))) << (0 ? 25:16))) | (((gctUINT32) ((gctUINT32) (1) & ((gctUINT32) ((((1 ? 25:16) - (0 ? 25:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 25:16) - (0 ? 25:16) + 1))))))) << (0 ? 25:16)));
321
322 buffer[9]
323- = (((((gctUINT32) (~0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 4:4) - (0 ? 4:4) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 4:4) - (0 ? 4:4) + 1))))))) << (0 ? 4:4))) | (((gctUINT32) (0x1 & ((gctUINT32) ((((1 ? 4:4) - (0 ? 4:4) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 4:4) - (0 ? 4:4) + 1))))))) << (0 ? 4:4))) & ((((gctUINT32) (~0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 7:7) - (0 ? 7:7) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 7:7) - (0 ? 7:7) + 1))))))) << (0 ? 7:7))) | (((gctUINT32) (0x0 & ((gctUINT32) ((((1 ? 7:7) - (0 ? 7:7) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 7:7) - (0 ? 7:7) + 1))))))) << (0 ? 7:7))) );
324+ = (((((gctUINT32) (~0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 4:4) - (0 ? 4:4) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 4:4) - (0 ? 4:4) + 1))))))) << (0 ? 4:4))) | (((gctUINT32) (0x1 & ((gctUINT32) ((((1 ? 4:4) - (0 ? 4:4) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 4:4) - (0 ? 4:4) + 1))))))) << (0 ? 4:4))) & ((((gctUINT32) (~0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 7:7) - (0 ? 7:7) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 7:7) - (0 ? 7:7) + 1))))))) << (0 ? 7:7))) | (((gctUINT32) (0x0 & ((gctUINT32) ((((1 ? 7:7) - (0 ? 7:7) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 7:7) - (0 ? 7:7) + 1))))))) << (0 ? 7:7))));
325
326 /* Arm the PE-FE Semaphore. */
327 buffer[10]
328@@ -3660,7 +3675,7 @@ typedef enum
329 }
330 gcePOWER_FLAGS;
331
332-#if gcmIS_DEBUG(gcdDEBUG_TRACE) && gcdPOWER_MANAGEMENT
333+#if gcmIS_DEBUG(gcdDEBUG_TRACE)
334 static gctCONST_STRING
335 _PowerEnum(gceCHIPPOWERSTATE State)
336 {
337@@ -3709,7 +3724,6 @@ gckHARDWARE_SetPowerManagementState(
338 IN gceCHIPPOWERSTATE State
339 )
340 {
341-#if gcdPOWER_MANAGEMENT
342 gceSTATUS status;
343 gckCOMMAND command = gcvNULL;
344 gckOS os;
345@@ -3841,6 +3855,12 @@ gckHARDWARE_SetPowerManagementState(
346 command = Hardware->kernel->command;
347 gcmkVERIFY_OBJECT(command, gcvOBJ_COMMAND);
348
349+ if (Hardware->powerManagement == gcvFALSE)
350+ {
351+ gcmkFOOTER_NO();
352+ return gcvSTATUS_OK;
353+ }
354+
355 /* Start profiler. */
356 gcmkPROFILE_INIT(freq, time);
357
358@@ -4491,10 +4511,6 @@ OnError:
359 /* Return the status. */
360 gcmkFOOTER();
361 return status;
362-#else /* gcdPOWER_MANAGEMENT */
363- /* Do nothing */
364- return gcvSTATUS_OK;
365-#endif
366 }
367
368 /*******************************************************************************
369@@ -4532,6 +4548,40 @@ gckHARDWARE_QueryPowerManagementState(
370 return gcvSTATUS_OK;
371 }
372
373+/*******************************************************************************
374+**
375+** gckHARDWARE_SetPowerManagement
376+**
377+** Configure GPU power management function.
378+** Only used in driver initialization stage.
379+**
380+** INPUT:
381+**
382+** gckHARDWARE Harwdare
383+** Pointer to an gckHARDWARE object.
384+**
385+** gctBOOL PowerManagement
386+** Power Mangement State.
387+**
388+*/
389+gceSTATUS
390+gckHARDWARE_SetPowerManagement(
391+ IN gckHARDWARE Hardware,
392+ IN gctBOOL PowerManagement
393+ )
394+{
395+ gcmkHEADER_ARG("Hardware=0x%x", Hardware);
396+
397+ /* Verify the arguments. */
398+ gcmkVERIFY_OBJECT(Hardware, gcvOBJ_HARDWARE);
399+
400+ Hardware->powerManagement = PowerManagement;
401+
402+ /* Success. */
403+ gcmkFOOTER_NO();
404+ return gcvSTATUS_OK;
405+}
406+
407 #if gcdENABLE_FSCALE_VAL_ADJUST
408 gceSTATUS
409 gckHARDWARE_SetFscaleValue(
410@@ -4767,6 +4817,21 @@ OnError:
411 GC_DEBUG_SIGNALS_##block##_Address, \
412 &profiler->data))
413
414+#define gcmkREAD_DEBUG_REGISTER_N(control, block, index, data) \
415+ gcmkONERROR(\
416+ gckOS_WriteRegisterEx(Hardware->os, \
417+ Hardware->core, \
418+ GC_DEBUG_CONTROL##control##_Address, \
419+ gcmSETFIELD(0, \
420+ GC_DEBUG_CONTROL##control, \
421+ block, \
422+ index))); \
423+ gcmkONERROR(\
424+ gckOS_ReadRegisterEx(Hardware->os, \
425+ Hardware->core, \
426+ GC_DEBUG_SIGNALS_##block##_Address, \
427+ &data))
428+
429 #define gcmkRESET_DEBUG_REGISTER(control, block) \
430 gcmkONERROR(\
431 gckOS_WriteRegisterEx(Hardware->os, \
432@@ -4857,6 +4922,9 @@ gckHARDWARE_QueryProfileRegisters(
433 {
434 gceSTATUS status;
435 gcsPROFILER_COUNTERS * profiler = Counters;
436+ gctUINT i, clock;
437+ gctUINT32 colorKilled, colorDrawn, depthKilled, depthDrawn;
438+ gctUINT32 totalRead, totalWrite;
439
440 gcmkHEADER_ARG("Hardware=0x%x Counters=0x%x", Hardware, Counters);
441
442@@ -4867,16 +4935,6 @@ gckHARDWARE_QueryProfileRegisters(
443 gcmkONERROR(
444 gckOS_ReadRegisterEx(Hardware->os,
445 Hardware->core,
446- 0x00040,
447- &profiler->gpuTotalRead64BytesPerFrame));
448- gcmkONERROR(
449- gckOS_ReadRegisterEx(Hardware->os,
450- Hardware->core,
451- 0x00044,
452- &profiler->gpuTotalWrite64BytesPerFrame));
453- gcmkONERROR(
454- gckOS_ReadRegisterEx(Hardware->os,
455- Hardware->core,
456 0x00438,
457 &profiler->gpuCyclesCounter));
458
459@@ -4892,8 +4950,63 @@ gckHARDWARE_QueryProfileRegisters(
460 0x0007C,
461 &profiler->gpuIdleCyclesCounter));
462
463- if(Reset){
464
465+ /* Read clock control register. */
466+ gcmkONERROR(gckOS_ReadRegisterEx(Hardware->os,
467+ Hardware->core,
468+ 0x00000,
469+ &clock));
470+
471+ profiler->gpuTotalRead64BytesPerFrame = 0;
472+ profiler->gpuTotalWrite64BytesPerFrame = 0;
473+ profiler->pe_pixel_count_killed_by_color_pipe = 0;
474+ profiler->pe_pixel_count_killed_by_depth_pipe = 0;
475+ profiler->pe_pixel_count_drawn_by_color_pipe = 0;
476+ profiler->pe_pixel_count_drawn_by_depth_pipe = 0;
477+
478+ /* Walk through all avaiable pixel pipes. */
479+ for (i = 0; i < Hardware->identity.pixelPipes; ++i)
480+ {
481+ /* Select proper pipe. */
482+ gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os,
483+ Hardware->core,
484+ 0x00000,
485+ ((((gctUINT32) (clock)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 23:20) - (0 ? 23:20) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 23:20) - (0 ? 23:20) + 1))))))) << (0 ? 23:20))) | (((gctUINT32) ((gctUINT32) (i) & ((gctUINT32) ((((1 ? 23:20) - (0 ? 23:20) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 23:20) - (0 ? 23:20) + 1))))))) << (0 ? 23:20)))));
486+
487+ /* BW */
488+ gcmkONERROR(
489+ gckOS_ReadRegisterEx(Hardware->os,
490+ Hardware->core,
491+ 0x00040,
492+ &totalRead));
493+ gcmkONERROR(
494+ gckOS_ReadRegisterEx(Hardware->os,
495+ Hardware->core,
496+ 0x00044,
497+ &totalWrite));
498+
499+ profiler->gpuTotalRead64BytesPerFrame += totalRead;
500+ profiler->gpuTotalWrite64BytesPerFrame += totalWrite;
501+
502+ /* PE */
503+ gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00470, ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 23:16) - (0 ? 23:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 23:16) - (0 ? 23:16) + 1))))))) << (0 ? 23:16))) | (((gctUINT32) ((gctUINT32) (0) & ((gctUINT32) ((((1 ? 23:16) - (0 ? 23:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 23:16) - (0 ? 23:16) + 1))))))) << (0 ? 23:16)))));gcmkONERROR(gckOS_ReadRegisterEx(Hardware->os, Hardware->core, 0x00454, &colorKilled));
504+ gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00470, ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 23:16) - (0 ? 23:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 23:16) - (0 ? 23:16) + 1))))))) << (0 ? 23:16))) | (((gctUINT32) ((gctUINT32) (1) & ((gctUINT32) ((((1 ? 23:16) - (0 ? 23:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 23:16) - (0 ? 23:16) + 1))))))) << (0 ? 23:16)))));gcmkONERROR(gckOS_ReadRegisterEx(Hardware->os, Hardware->core, 0x00454, &depthKilled));
505+ gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00470, ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 23:16) - (0 ? 23:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 23:16) - (0 ? 23:16) + 1))))))) << (0 ? 23:16))) | (((gctUINT32) ((gctUINT32) (2) & ((gctUINT32) ((((1 ? 23:16) - (0 ? 23:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 23:16) - (0 ? 23:16) + 1))))))) << (0 ? 23:16)))));gcmkONERROR(gckOS_ReadRegisterEx(Hardware->os, Hardware->core, 0x00454, &colorDrawn));
506+ gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00470, ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 23:16) - (0 ? 23:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 23:16) - (0 ? 23:16) + 1))))))) << (0 ? 23:16))) | (((gctUINT32) ((gctUINT32) (3) & ((gctUINT32) ((((1 ? 23:16) - (0 ? 23:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 23:16) - (0 ? 23:16) + 1))))))) << (0 ? 23:16)))));gcmkONERROR(gckOS_ReadRegisterEx(Hardware->os, Hardware->core, 0x00454, &depthDrawn));
507+
508+ profiler->pe_pixel_count_killed_by_color_pipe += colorKilled;
509+ profiler->pe_pixel_count_killed_by_depth_pipe += depthKilled;
510+ profiler->pe_pixel_count_drawn_by_color_pipe += colorDrawn;
511+ profiler->pe_pixel_count_drawn_by_depth_pipe += depthDrawn;
512+ }
513+
514+ /* Reset clock control register. */
515+ gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os,
516+ Hardware->core,
517+ 0x00000,
518+ clock));
519+
520+ if(Reset){
521 /* Reset counters. */
522 gcmkONERROR(
523 gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x0003C, 1));
524@@ -4903,19 +5016,10 @@ gckHARDWARE_QueryProfileRegisters(
525 gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00438, 0));
526 gcmkONERROR(
527 gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00078, 0));
528- }
529- /* PE */
530- gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00470, ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 23:16) - (0 ? 23:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 23:16) - (0 ? 23:16) + 1))))))) << (0 ? 23:16))) | (((gctUINT32) ((gctUINT32) (0) & ((gctUINT32) ((((1 ? 23:16) - (0 ? 23:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 23:16) - (0 ? 23:16) + 1))))))) << (0 ? 23:16))) ));
531-gcmkONERROR(gckOS_ReadRegisterEx(Hardware->os, Hardware->core, 0x00454, &profiler->pe_pixel_count_killed_by_color_pipe));
532- gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00470, ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 23:16) - (0 ? 23:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 23:16) - (0 ? 23:16) + 1))))))) << (0 ? 23:16))) | (((gctUINT32) ((gctUINT32) (1) & ((gctUINT32) ((((1 ? 23:16) - (0 ? 23:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 23:16) - (0 ? 23:16) + 1))))))) << (0 ? 23:16))) ));
533-gcmkONERROR(gckOS_ReadRegisterEx(Hardware->os, Hardware->core, 0x00454, &profiler->pe_pixel_count_killed_by_depth_pipe));
534- gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00470, ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 23:16) - (0 ? 23:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 23:16) - (0 ? 23:16) + 1))))))) << (0 ? 23:16))) | (((gctUINT32) ((gctUINT32) (2) & ((gctUINT32) ((((1 ? 23:16) - (0 ? 23:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 23:16) - (0 ? 23:16) + 1))))))) << (0 ? 23:16))) ));
535-gcmkONERROR(gckOS_ReadRegisterEx(Hardware->os, Hardware->core, 0x00454, &profiler->pe_pixel_count_drawn_by_color_pipe));
536- gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00470, ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 23:16) - (0 ? 23:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 23:16) - (0 ? 23:16) + 1))))))) << (0 ? 23:16))) | (((gctUINT32) ((gctUINT32) (3) & ((gctUINT32) ((((1 ? 23:16) - (0 ? 23:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 23:16) - (0 ? 23:16) + 1))))))) << (0 ? 23:16))) ));
537-gcmkONERROR(gckOS_ReadRegisterEx(Hardware->os, Hardware->core, 0x00454, &profiler->pe_pixel_count_drawn_by_depth_pipe));
538- if(Reset){ gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00470, ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 23:16) - (0 ? 23:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 23:16) - (0 ? 23:16) + 1))))))) << (0 ? 23:16))) | (((gctUINT32) ((gctUINT32) (15) & ((gctUINT32) ((((1 ? 23:16) - (0 ? 23:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 23:16) - (0 ? 23:16) + 1))))))) << (0 ? 23:16))) ));
539+ gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00470, ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 23:16) - (0 ? 23:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 23:16) - (0 ? 23:16) + 1))))))) << (0 ? 23:16))) | (((gctUINT32) ((gctUINT32) (15) & ((gctUINT32) ((((1 ? 23:16) - (0 ? 23:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 23:16) - (0 ? 23:16) + 1))))))) << (0 ? 23:16))) ));
540 gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00470, ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 23:16) - (0 ? 23:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 23:16) - (0 ? 23:16) + 1))))))) << (0 ? 23:16))) | (((gctUINT32) ((gctUINT32) (0) & ((gctUINT32) ((((1 ? 23:16) - (0 ? 23:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 23:16) - (0 ? 23:16) + 1))))))) << (0 ? 23:16)))
541-)); }
542+));
543+ }
544
545 /* SH */
546 gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00470, ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 31:24) - (0 ? 31:24) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:24) - (0 ? 31:24) + 1))))))) << (0 ? 31:24))) | (((gctUINT32) ((gctUINT32) (7) & ((gctUINT32) ((((1 ? 31:24) - (0 ? 31:24) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:24) - (0 ? 31:24) + 1))))))) << (0 ? 31:24))) ));
547diff --git a/drivers/mxc/gpu-viv/arch/XAQ2/hal/kernel/gc_hal_kernel_hardware.h b/drivers/mxc/gpu-viv/arch/XAQ2/hal/kernel/gc_hal_kernel_hardware.h
548index 517b35c..37226b7 100644
549--- a/drivers/mxc/gpu-viv/arch/XAQ2/hal/kernel/gc_hal_kernel_hardware.h
550+++ b/drivers/mxc/gpu-viv/arch/XAQ2/hal/kernel/gc_hal_kernel_hardware.h
551@@ -90,6 +90,8 @@ struct _gckHARDWARE
552 #if gcdLINK_QUEUE_SIZE
553 struct _gckLINKQUEUE linkQueue;
554 #endif
555+
556+ gctBOOL powerManagement;
557 };
558
559 gceSTATUS
560diff --git a/drivers/mxc/gpu-viv/config b/drivers/mxc/gpu-viv/config
561index 1196efa..cdd143e 100644
562--- a/drivers/mxc/gpu-viv/config
563+++ b/drivers/mxc/gpu-viv/config
564@@ -22,7 +22,6 @@
565 ARCH_TYPE ?= arm
566 SDK_DIR ?= $(AQROOT)/build/sdk
567 USE_3D_VG ?= 1
568-USE_POWER_MANAGEMENT ?= 1
569 FORCE_ALL_VIDEO_MEMORY_CACHED ?= 0
570 NONPAGED_MEMORY_CACHEABLE ?= 0
571 NONPAGED_MEMORY_BUFFERABLE ?= 1
572diff --git a/drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel.c b/drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel.c
573index 7964585..b7b0d28 100644
574--- a/drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel.c
575+++ b/drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel.c
576@@ -904,9 +904,6 @@ gckKERNEL_Dispatch(
577 gctSIGNAL signal;
578 #endif
579
580- gcsDATABASE_RECORD record;
581- gctPOINTER data;
582-
583 gcmkHEADER_ARG("Kernel=0x%x FromUser=%d Interface=0x%x",
584 Kernel, FromUser, Interface);
585
586@@ -1940,249 +1937,133 @@ gckKERNEL_Dispatch(
587 #endif
588
589 case gcvHAL_GET_SHARED_INFO:
590- bytes = (gctSIZE_T) Interface->u.GetSharedInfo.size;
591-
592- if (Interface->u.GetSharedInfo.dataId != 0)
593+ if (Interface->u.GetSharedInfo.data == gcvNULL)
594 {
595- gcmkONERROR(gckKERNEL_FindProcessDB(Kernel,
596- Interface->u.GetSharedInfo.pid,
597- 0,
598- gcvDB_SHARED_INFO,
599- gcmINT2PTR(Interface->u.GetSharedInfo.dataId),
600- &record));
601-
602- /* find a record in db, check size */
603- if (record.bytes != bytes)
604- {
605- /* Size change is not allowed */
606- gcmkONERROR(gcvSTATUS_INVALID_DATA);
607- }
608-
609- /* fetch data */
610- gcmkONERROR(gckOS_CopyToUserData(
611- Kernel->os,
612- record.physical,
613- gcmUINT64_TO_PTR(Interface->u.GetSharedInfo.data),
614- bytes
615- ));
616-
617+ gcmkONERROR(gcvSTATUS_INVALID_ARGUMENT);
618 }
619-
620- if ((node = gcmUINT64_TO_PTR(Interface->u.GetSharedInfo.node)) != gcvNULL)
621+ else
622 {
623- switch (Interface->u.GetSharedInfo.infoType)
624- {
625- case gcvVIDMEM_INFO_GENERIC:
626- { /* Generic data stored */
627- if (node->VidMem.memory->object.type == gcvOBJ_VIDMEM)
628- {
629- data = &node->VidMem.sharedInfo;
630-
631- }
632- else
633- {
634- data = &node->Virtual.sharedInfo;
635- }
636+ gctUINT32 pid = Interface->u.GetSharedInfo.pid;
637+ gctUINT32 dataId = Interface->u.GetSharedInfo.dataId;
638+ gctSIZE_T bytes = Interface->u.GetSharedInfo.bytes;
639+ gctPOINTER data = Interface->u.GetSharedInfo.data;
640+ gcsDATABASE_RECORD record;
641
642- gcmkONERROR(gckOS_CopyToUserData(
643- Kernel->os,
644- data,
645- gcmUINT64_TO_PTR(Interface->u.GetSharedInfo.nodeData),
646- sizeof(gcsVIDMEM_NODE_SHARED_INFO)
647- ));
648- }
649- break;
650-
651- case gcvVIDMEM_INFO_DIRTY_RECTANGLE:
652- { /* Dirty rectangle stored */
653- gcsVIDMEM_NODE_SHARED_INFO *storedSharedInfo;
654- gcsVIDMEM_NODE_SHARED_INFO alignedSharedInfo;
655-
656- if (node->VidMem.memory->object.type == gcvOBJ_VIDMEM)
657- {
658- storedSharedInfo = &node->VidMem.sharedInfo;
659- }
660- else
661- {
662- storedSharedInfo = &node->Virtual.sharedInfo;
663- }
664-
665- /* Stored shared info holds the unaligned dirty rectangle.
666- Align it first. */
667-
668- /* Hardware requires 64-byte aligned address, and 16x4 pixel aligned rectsize.
669- We simply align to 32 pixels which covers both 16- and 32-bpp formats. */
670-
671- /* Make sure we have a legit rectangle. */
672- gcmkASSERT((storedSharedInfo->RectSize.width != 0) && (storedSharedInfo->RectSize.height != 0));
673-
674- alignedSharedInfo.SrcOrigin.x = gcmALIGN_BASE(storedSharedInfo->SrcOrigin.x, 32);
675- alignedSharedInfo.RectSize.width = gcmALIGN((storedSharedInfo->RectSize.width + (storedSharedInfo->SrcOrigin.x - alignedSharedInfo.SrcOrigin.x)), 16);
676-
677- alignedSharedInfo.SrcOrigin.y = gcmALIGN_BASE(storedSharedInfo->SrcOrigin.y, 4);
678- alignedSharedInfo.RectSize.height = gcmALIGN((storedSharedInfo->RectSize.height + (storedSharedInfo->SrcOrigin.y - alignedSharedInfo.SrcOrigin.y)), 4);
679-
680- gcmkONERROR(gckOS_CopyToUserData(
681- Kernel->os,
682- &alignedSharedInfo,
683- gcmUINT64_TO_PTR(Interface->u.GetSharedInfo.nodeData),
684- sizeof(gcsVIDMEM_NODE_SHARED_INFO)
685- ));
686-
687- gcmkTRACE_ZONE(gcvLEVEL_VERBOSE, gcvZONE_KERNEL,
688- "Node = %p, unaligned rectangle (l=%d, t=%d, w=%d, h=%d) aligned to (l=%d, t=%d, w=%d, h=%d)", node,
689- storedSharedInfo->SrcOrigin.x, storedSharedInfo->SrcOrigin.y,
690- storedSharedInfo->RectSize.width, storedSharedInfo->RectSize.height,
691- alignedSharedInfo.SrcOrigin.x, alignedSharedInfo.SrcOrigin.y,
692- alignedSharedInfo.RectSize.width, alignedSharedInfo.RectSize.height);
693+ /* Find record. */
694+ gcmkONERROR(
695+ gckKERNEL_FindProcessDB(Kernel,
696+ pid,
697+ 0,
698+ gcvDB_SHARED_INFO,
699+ gcmINT2PTR(dataId),
700+ &record));
701+
702+ /* Check memory size. */
703+ if (bytes < record.bytes)
704+ {
705+ /* Insufficient memory to hold shared data. */
706+ gcmkONERROR(gcvSTATUS_INVALID_ARGUMENT);
707+ }
708
709- /* Rectangle */
710- storedSharedInfo->SrcOrigin.x =
711- storedSharedInfo->SrcOrigin.y =
712- storedSharedInfo->RectSize.width =
713- storedSharedInfo->RectSize.height = 0;
714- }
715- break;
716- }
717+ /* Copy to user. */
718+ status = gckOS_CopyToUserData(Kernel->os,
719+ record.physical,
720+ data,
721+ record.bytes);
722+
723+ /*
724+ * Remove from process db.
725+ * Every time when shared info is taken, the record is erased in
726+ * kernel side.
727+ */
728+ gcmkVERIFY_OK(
729+ gckKERNEL_RemoveProcessDB(Kernel,
730+ pid,
731+ gcvDB_SHARED_INFO,
732+ gcmINT2PTR(dataId)));
733+ /* Free existed data. */
734+ gcmkVERIFY_OK(
735+ gckOS_FreeMemory(Kernel->os, record.physical));
736 }
737 break;
738
739 case gcvHAL_SET_SHARED_INFO:
740- bytes = (gctSIZE_T) Interface->u.SetSharedInfo.size;
741-
742- if (Interface->u.SetSharedInfo.dataId != 0)
743 {
744- status = gckKERNEL_FindProcessDB(Kernel, processID, 0,
745- gcvDB_SHARED_INFO,
746- gcmINT2PTR(Interface->u.SetSharedInfo.dataId),
747- &record);
748-
749- if (status == gcvSTATUS_INVALID_DATA)
750- {
751- /* private data has not been created yet */
752- /* Note: we count on DestoryProcessDB to free it */
753- gcmkONERROR(gckOS_AllocateMemory(
754- Kernel->os,
755- bytes,
756- &data
757- ));
758-
759- gcmkONERROR(
760- gckKERNEL_AddProcessDB(Kernel, processID,
761- gcvDB_SHARED_INFO,
762- gcmINT2PTR(Interface->u.SetSharedInfo.dataId),
763- data,
764- bytes
765- ));
766- }
767- else
768+ gctUINT32 dataId = Interface->u.SetSharedInfo.dataId;
769+ gctPOINTER data = Interface->u.SetSharedInfo.data;
770+ gctUINT32 bytes = Interface->u.SetSharedInfo.bytes;
771+ gctPOINTER memory = gcvNULL;
772+ gcsDATABASE_RECORD record;
773+
774+ if (gcmIS_SUCCESS(gckKERNEL_FindProcessDB(Kernel,
775+ processID,
776+ 0,
777+ gcvDB_SHARED_INFO,
778+ gcmINT2PTR(dataId),
779+ &record)))
780 {
781- /* bail on other errors */
782- gcmkONERROR(status);
783-
784- /* find a record in db, check size */
785- if (record.bytes != bytes)
786+ /* Find a record with the same id. */
787+ if (bytes != record.bytes)
788 {
789- /* Size change is not allowed */
790- gcmkONERROR(gcvSTATUS_INVALID_DATA);
791+ /* Remove from process db. */
792+ gcmkVERIFY_OK(
793+ gckKERNEL_RemoveProcessDB(Kernel,
794+ processID,
795+ gcvDB_SHARED_INFO,
796+ gcmINT2PTR(dataId)));
797+
798+ /* Free existed data. */
799+ gcmkVERIFY_OK(
800+ gckOS_FreeMemory(Kernel->os, record.physical));
801 }
802-
803- /* get storage address */
804- data = record.physical;
805- }
806-
807- gcmkONERROR(gckOS_CopyFromUserData(
808- Kernel->os,
809- data,
810- gcmUINT64_TO_PTR(Interface->u.SetSharedInfo.data),
811- bytes
812- ));
813- }
814-
815- if ((node = gcmUINT64_TO_PTR(Interface->u.SetSharedInfo.node)) != gcvNULL)
816- {
817- switch (Interface->u.SetSharedInfo.infoType)
818+ else
819 {
820- case gcvVIDMEM_INFO_GENERIC:
821- { /* Generic data stored */
822- if (node->VidMem.memory->object.type == gcvOBJ_VIDMEM)
823- {
824- data = &node->VidMem.sharedInfo;
825- }
826- else
827- {
828- data = &node->Virtual.sharedInfo;
829- }
830-
831- gcmkONERROR(gckOS_CopyFromUserData(
832- Kernel->os,
833- data,
834- gcmUINT64_TO_PTR(Interface->u.SetSharedInfo.nodeData),
835- sizeof(gcsVIDMEM_NODE_SHARED_INFO)
836- ));
837- }
838- break;
839+ /* Re-use allocated memory. */
840+ memory = record.physical;
841+ }
842+ }
843
844- case gcvVIDMEM_INFO_DIRTY_RECTANGLE:
845- { /* Dirty rectangle stored */
846- gcsVIDMEM_NODE_SHARED_INFO newSharedInfo;
847- gcsVIDMEM_NODE_SHARED_INFO *currentSharedInfo;
848- gctINT dirtyX, dirtyY, right, bottom;
849-
850- /* Expand the dirty rectangle stored in the node to include the rectangle passed in. */
851- gcmkONERROR(gckOS_CopyFromUserData(
852- Kernel->os,
853- &newSharedInfo,
854- gcmUINT64_TO_PTR(Interface->u.SetSharedInfo.nodeData),
855- gcmSIZEOF(gcsVIDMEM_NODE_SHARED_INFO)
856- ));
857-
858- if (node->VidMem.memory->object.type == gcvOBJ_VIDMEM)
859- {
860- currentSharedInfo = &node->VidMem.sharedInfo;
861- }
862- else
863- {
864- currentSharedInfo = &node->Virtual.sharedInfo;
865- }
866+ if ((data == gcvNULL) || (bytes == 0))
867+ {
868+ /* Nothing to record. */
869+ break;
870+ }
871
872- gcmkTRACE_ZONE(gcvLEVEL_VERBOSE, gcvZONE_KERNEL, "Node = %p Stored rectangle (l=%d, t=%d, w=%d, h=%d)", node,
873- currentSharedInfo->SrcOrigin.x, currentSharedInfo->SrcOrigin.y,
874- currentSharedInfo->RectSize.width, currentSharedInfo->RectSize.height);
875+ if (bytes > 1024)
876+ {
877+ /* Limite data size. */
878+ gcmkONERROR(gcvSTATUS_TOO_COMPLEX);
879+ }
880
881- gcmkTRACE_ZONE(gcvLEVEL_VERBOSE, gcvZONE_KERNEL, "To combine with (l=%d, t=%d, w=%d, h=%d)",
882- newSharedInfo.SrcOrigin.x, newSharedInfo.SrcOrigin.y,
883- newSharedInfo.RectSize.width, newSharedInfo.RectSize.height);
884+ if (memory == gcvNULL)
885+ {
886+ /* Allocate memory for holding shared data. */
887+ gcmkONERROR(
888+ gckOS_AllocateMemory(Kernel->os, bytes, &memory));
889
890- if ((currentSharedInfo->RectSize.width == 0) || (currentSharedInfo->RectSize.height == 0))
891- { /* Setting it for the first time */
892- currentSharedInfo->SrcOrigin.x = newSharedInfo.SrcOrigin.x;
893- currentSharedInfo->SrcOrigin.y = newSharedInfo.SrcOrigin.y;
894- currentSharedInfo->RectSize.width = newSharedInfo.RectSize.width;
895- currentSharedInfo->RectSize.height = newSharedInfo.RectSize.height;
896- }
897- else
898- {
899- /* Expand the stored rectangle to include newly locked rectangle */
900- dirtyX = (newSharedInfo.SrcOrigin.x < currentSharedInfo->SrcOrigin.x) ? newSharedInfo.SrcOrigin.x : currentSharedInfo->SrcOrigin.x;
901- right = gcmMAX((currentSharedInfo->SrcOrigin.x + currentSharedInfo->RectSize.width), (newSharedInfo.SrcOrigin.x + newSharedInfo.RectSize.width));
902- currentSharedInfo->RectSize.width = right - dirtyX;
903- currentSharedInfo->SrcOrigin.x = dirtyX;
904-
905- dirtyY = (newSharedInfo.SrcOrigin.y < currentSharedInfo->SrcOrigin.y) ? newSharedInfo.SrcOrigin.y : currentSharedInfo->SrcOrigin.y;
906- bottom = gcmMAX((currentSharedInfo->SrcOrigin.y + currentSharedInfo->RectSize.height), (newSharedInfo.SrcOrigin.y + newSharedInfo.RectSize.height));
907- currentSharedInfo->RectSize.height = bottom - dirtyY;
908- currentSharedInfo->SrcOrigin.y = dirtyY;
909- }
910+ /* Add to process db. */
911+ status = gckKERNEL_AddProcessDB(Kernel,
912+ processID,
913+ gcvDB_SHARED_INFO,
914+ gcmINT2PTR(dataId),
915+ memory,
916+ bytes);
917
918- gcmkTRACE_ZONE(gcvLEVEL_VERBOSE, gcvZONE_KERNEL, "Combined rectangle (l=%d, t=%d, w=%d, h=%d)",
919- currentSharedInfo->SrcOrigin.x, currentSharedInfo->SrcOrigin.y,
920- currentSharedInfo->RectSize.width, currentSharedInfo->RectSize.height);
921- }
922+ if (gcmIS_ERROR(status))
923+ {
924+ /* Failed to add process db. Free allocated memory. */
925+ gcmkVERIFY_OK(gckOS_FreeMemory(Kernel->os, memory));
926 break;
927 }
928- }
929+ }
930
931+ /* Copy shared data to kernel memory. */
932+ gcmkONERROR(
933+ gckOS_CopyFromUserData(Kernel->os,
934+ memory,
935+ data,
936+ bytes));
937+ }
938 break;
939
940 case gcvHAL_SET_FSCALE_VALUE:
941diff --git a/drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel_command.c b/drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel_command.c
942index 66ce0d1..9ee9ea1 100644
943--- a/drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel_command.c
944+++ b/drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel_command.c
945@@ -2047,14 +2047,14 @@ gckCOMMAND_Commit(
946 EventQueue = nextEventRecord;
947 }
948
949-#if gcdPOWER_MANAGEMENT
950- if (Command->kernel->eventObj->queueHead == gcvNULL)
951+ if (Command->kernel->eventObj->queueHead == gcvNULL
952+ && Command->kernel->hardware->powerManagement == gcvTRUE
953+ )
954 {
955 /* Commit done event by which work thread knows all jobs done. */
956 gcmkVERIFY_OK(
957 gckEVENT_CommitDone(Command->kernel->eventObj, gcvKERNEL_PIXEL));
958 }
959-#endif
960
961 /* Submit events. */
962 status = gckEVENT_Submit(Command->kernel->eventObj, gcvTRUE, gcvFALSE);
963diff --git a/drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel_command_vg.c b/drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel_command_vg.c
964index 9685a5d..76c1c10 100644
965--- a/drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel_command_vg.c
966+++ b/drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel_command_vg.c
967@@ -1234,7 +1234,6 @@ _EventHandler_BusError(
968 return gcvSTATUS_OK;
969 }
970
971-#if gcdPOWER_MANAGEMENT
972 /******************************************************************************\
973 ****************************** Power Stall Handler *******************************
974 \******************************************************************************/
975@@ -1250,7 +1249,6 @@ _EventHandler_PowerStall(
976 Kernel->command->powerStallSignal,
977 gcvTRUE);
978 }
979-#endif
980
981 /******************************************************************************\
982 ******************************** Task Routines *********************************
983@@ -1965,15 +1963,12 @@ gcmDECLARE_INTERRUPT_HANDLER(COMMAND, 0)
984 );
985 }
986 }
987-#if gcdPOWER_MANAGEMENT
988 else
989 {
990-
991 status = gckVGHARDWARE_SetPowerManagementState(
992 Kernel->command->hardware, gcvPOWER_IDLE_BROADCAST
993 );
994 }
995-#endif
996
997 /* Break out of the loop. */
998 break;
999@@ -2848,7 +2843,7 @@ gckVGCOMMAND_Construct(
1000 _EventHandler_BusError
1001 ));
1002
1003-#if gcdPOWER_MANAGEMENT
1004+
1005 command->powerStallInt = 30;
1006 /* Enable the interrupt. */
1007 gcmkERR_BREAK(gckVGINTERRUPT_Enable(
1008@@ -2856,7 +2851,6 @@ gckVGCOMMAND_Construct(
1009 &command->powerStallInt,
1010 _EventHandler_PowerStall
1011 ));
1012-#endif
1013
1014 /***********************************************************************
1015 ** Task management initialization.
1016@@ -3419,7 +3413,6 @@ gckVGCOMMAND_Commit(
1017 gcvINFINITE
1018 ));
1019
1020-#if gcdPOWER_MANAGEMENT
1021 status = gckVGHARDWARE_SetPowerManagementState(
1022 Command->hardware, gcvPOWER_ON_AUTO);
1023
1024@@ -3447,7 +3440,7 @@ gckVGCOMMAND_Commit(
1025
1026 break;
1027 }
1028-#endif
1029+
1030 gcmkERR_BREAK(_FlushMMU(Command));
1031
1032 do
1033@@ -3676,10 +3669,9 @@ gckVGCOMMAND_Commit(
1034 }
1035 while (gcvFALSE);
1036
1037-#if gcdPOWER_MANAGEMENT
1038 gcmkVERIFY_OK(gckOS_ReleaseSemaphore(
1039 Command->os, Command->powerSemaphore));
1040-#endif
1041+
1042 /* Release the mutex. */
1043 gcmkCHECK_STATUS(gckOS_ReleaseMutex(
1044 Command->os,
1045diff --git a/drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel_db.c b/drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel_db.c
1046index bc5f083..673d4f7 100644
1047--- a/drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel_db.c
1048+++ b/drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel_db.c
1049@@ -1303,9 +1303,9 @@ gckKERNEL_DestroyProcessDB(
1050 gcmPTR2INT(record->data), status);
1051 break;
1052
1053- case gcvDB_SHARED_INFO:
1054- status = gckOS_FreeMemory(Kernel->os, record->physical);
1055- break;
1056+ case gcvDB_SHARED_INFO:
1057+ status = gckOS_FreeMemory(Kernel->os, record->physical);
1058+ break;
1059
1060 default:
1061 gcmkTRACE_ZONE(gcvLEVEL_ERROR, gcvZONE_DATABASE,
1062diff --git a/drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel_mmu.c b/drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel_mmu.c
1063index 43c9297..c7f67c7 100644
1064--- a/drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel_mmu.c
1065+++ b/drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel_mmu.c
1066@@ -97,6 +97,14 @@ static gcsMirrorPageTable_PTR mirrorPageTable = gcvNULL;
1067 static gctPOINTER mirrorPageTableMutex = gcvNULL;
1068 #endif
1069
1070+typedef struct _gcsDynamicSpaceNode * gcsDynamicSpaceNode_PTR;
1071+typedef struct _gcsDynamicSpaceNode
1072+{
1073+ gctUINT32 start;
1074+ gctINT32 entries;
1075+}
1076+gcsDynamicSpaceNode;
1077+
1078 static void
1079 _WritePageEntry(
1080 IN gctUINT32_PTR PageEntry,
1081@@ -482,30 +490,117 @@ OnError:
1082 }
1083
1084 static gceSTATUS
1085+_FindDynamicSpace(
1086+ IN gckMMU Mmu,
1087+ OUT gcsDynamicSpaceNode_PTR *Array,
1088+ OUT gctINT * Size
1089+ )
1090+{
1091+ gceSTATUS status = gcvSTATUS_OK;
1092+ gctPOINTER pointer = gcvNULL;
1093+ gcsDynamicSpaceNode_PTR array = gcvNULL;
1094+ gctINT size = 0;
1095+ gctINT i = 0, nodeStart = -1, nodeEntries = 0;
1096+
1097+ /* Allocate memory for the array. */
1098+ gcmkONERROR(gckOS_Allocate(Mmu->os,
1099+ gcmSIZEOF(*array) * (gcdMMU_MTLB_ENTRY_NUM / 2),
1100+ &pointer));
1101+
1102+ array = (gcsDynamicSpaceNode_PTR)pointer;
1103+
1104+ /* Loop all the entries. */
1105+ while (i < gcdMMU_MTLB_ENTRY_NUM)
1106+ {
1107+ if (!Mmu->mtlbLogical[i])
1108+ {
1109+ if (nodeStart < 0)
1110+ {
1111+ /* This is the first entry of the dynamic space. */
1112+ nodeStart = i;
1113+ nodeEntries = 1;
1114+ }
1115+ else
1116+ {
1117+ /* Other entries of the dynamic space. */
1118+ nodeEntries++;
1119+ }
1120+ }
1121+ else if (nodeStart >= 0)
1122+ {
1123+ /* Save the previous node. */
1124+ array[size].start = nodeStart;
1125+ array[size].entries = nodeEntries;
1126+ size++;
1127+
1128+ /* Reset the start. */
1129+ nodeStart = -1;
1130+ nodeEntries = 0;
1131+ }
1132+
1133+ i++;
1134+ }
1135+
1136+ /* Save the previous node. */
1137+ if (nodeStart >= 0)
1138+ {
1139+ array[size].start = nodeStart;
1140+ array[size].entries = nodeEntries;
1141+ size++;
1142+ }
1143+
1144+#if gcdMMU_TABLE_DUMP
1145+ for (i = 0; i < size; i++)
1146+ {
1147+ gckOS_Print("%s(%d): [%d]: start=%d, entries=%d.\n",
1148+ __FUNCTION__, __LINE__,
1149+ i,
1150+ array[i].start,
1151+ array[i].entries);
1152+ }
1153+#endif
1154+
1155+ *Array = array;
1156+ *Size = size;
1157+
1158+ return gcvSTATUS_OK;
1159+
1160+OnError:
1161+ if (pointer != gcvNULL)
1162+ {
1163+ gckOS_Free(Mmu->os, pointer);
1164+ }
1165+
1166+ return status;
1167+}
1168+
1169+static gceSTATUS
1170 _SetupDynamicSpace(
1171 IN gckMMU Mmu
1172 )
1173 {
1174 gceSTATUS status;
1175- gctINT i;
1176+ gcsDynamicSpaceNode_PTR nodeArray = gcvNULL;
1177+ gctINT i, nodeArraySize = 0;
1178 gctUINT32 physical;
1179- gctINT numEntries;
1180+ gctINT numEntries = 0;
1181 gctUINT32_PTR pageTable;
1182 gctBOOL acquired = gcvFALSE;
1183
1184- /* find the start of dynamic address space. */
1185- for (i = 0; i < gcdMMU_MTLB_ENTRY_NUM; i++)
1186+ /* Find all the dynamic address space. */
1187+ gcmkONERROR(_FindDynamicSpace(Mmu, &nodeArray, &nodeArraySize));
1188+
1189+ /* TODO: We only use the largest one for now. */
1190+ for (i = 0; i < nodeArraySize; i++)
1191 {
1192- if (!Mmu->mtlbLogical[i])
1193+ if (nodeArray[i].entries > numEntries)
1194 {
1195- break;
1196+ Mmu->dynamicMappingStart = nodeArray[i].start;
1197+ numEntries = nodeArray[i].entries;
1198 }
1199 }
1200
1201- Mmu->dynamicMappingStart = i;
1202-
1203- /* Number of entries in Master TLB for dynamic mapping. */
1204- numEntries = gcdMMU_MTLB_ENTRY_NUM - i;
1205+ gckOS_Free(Mmu->os, (gctPOINTER)nodeArray);
1206
1207 Mmu->pageTableSize = numEntries * 4096;
1208
1209@@ -545,7 +640,9 @@ _SetupDynamicSpace(
1210 acquired = gcvTRUE;
1211
1212 /* Map to Master TLB. */
1213- for (; i < gcdMMU_MTLB_ENTRY_NUM; i++)
1214+ for (i = (gctINT)Mmu->dynamicMappingStart;
1215+ i < (gctINT)Mmu->dynamicMappingStart + numEntries;
1216+ i++)
1217 {
1218 _WritePageEntry(Mmu->mtlbLogical + i,
1219 physical
1220diff --git a/drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel_video_memory.c b/drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel_video_memory.c
1221index 8a442a2..8b8bbdc 100644
1222--- a/drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel_video_memory.c
1223+++ b/drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel_video_memory.c
1224@@ -2144,6 +2144,9 @@ gckVIDMEM_Unlock(
1225
1226 if (!Node->Virtual.contiguous
1227 && (Node->Virtual.lockeds[Kernel->core] == 1)
1228+#if gcdENABLE_VG
1229+ && (Kernel->vg == gcvNULL)
1230+#endif
1231 )
1232 {
1233 if (Type == gcvSURF_BITMAP)
1234diff --git a/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal.h b/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal.h
1235index 7077412..4406d7e 100644
1236--- a/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal.h
1237+++ b/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal.h
1238@@ -2072,6 +2072,12 @@ gckHARDWARE_QueryPowerManagementState(
1239 OUT gceCHIPPOWERSTATE* State
1240 );
1241
1242+gceSTATUS
1243+gckHARDWARE_SetPowerManagement(
1244+ IN gckHARDWARE Hardware,
1245+ IN gctBOOL PowerManagement
1246+ );
1247+
1248 #if gcdENABLE_FSCALE_VAL_ADJUST
1249 gceSTATUS
1250 gckHARDWARE_SetFscaleValue(
1251diff --git a/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_base.h b/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_base.h
1252index ac86399..44689b0 100644
1253--- a/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_base.h
1254+++ b/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_base.h
1255@@ -74,7 +74,6 @@ typedef struct _gcsSYNC_CONTEXT * gcsSYNC_CONTEXT_PTR;
1256 /******************************************************************************\
1257 ******************************* Process local storage *************************
1258 \******************************************************************************/
1259-
1260 typedef struct _gcsPLS * gcsPLS_PTR;
1261 typedef struct _gcsPLS
1262 {
1263@@ -107,6 +106,7 @@ typedef struct _gcsPLS
1264
1265 /* Reference count for destructor. */
1266 gcsATOM_PTR reference;
1267+ gctBOOL bKFS;
1268 #if gcdUSE_NPOT_PATCH
1269 gctBOOL bNeedSupportNP2Texture;
1270 #endif
1271@@ -123,7 +123,7 @@ extern gcsPLS gcPLS;
1272 typedef struct _gcsTLS * gcsTLS_PTR;
1273
1274 typedef void (* gctTLS_DESTRUCTOR) (
1275- gcsTLS_PTR TLS
1276+ gcsTLS_PTR
1277 );
1278
1279 typedef struct _gcsTLS
1280@@ -658,8 +658,6 @@ gcoHAL_QueryChipFeature(
1281 IN gceFEATURE Feature);
1282
1283 #endif
1284-
1285-
1286 /******************************************************************************\
1287 ********************************** gcoOS Object *********************************
1288 \******************************************************************************/
1289@@ -1775,20 +1773,6 @@ gcoSURF_QueryVidMemNode(
1290 OUT gctUINT_PTR Bytes
1291 );
1292
1293-/* Set usage attribute of a surface. */
1294-gceSTATUS
1295-gcoSURF_SetUsage(
1296- IN gcoSURF Surface,
1297- IN gceSURF_USAGE Usage
1298- );
1299-
1300-/* Return usage attribute of a surface. */
1301-gceSTATUS
1302-gcoSURF_QueryUsage(
1303- IN gcoSURF Surface,
1304- OUT gceSURF_USAGE *Usage
1305- );
1306-
1307 /* Set the color type of the surface. */
1308 gceSTATUS
1309 gcoSURF_SetColorType(
1310@@ -1975,6 +1959,14 @@ gcoSURF_SetWindow(
1311 IN gctUINT Height
1312 );
1313
1314+/* Set width/height alignment of the surface directly and calculate stride/size. This is only for dri backend now. Please be careful before use. */
1315+gceSTATUS
1316+gcoSURF_SetAlignment(
1317+ IN gcoSURF Surface,
1318+ IN gctUINT Width,
1319+ IN gctUINT Height
1320+ );
1321+
1322 /* Increase reference count of the surface. */
1323 gceSTATUS
1324 gcoSURF_ReferenceSurface(
1325@@ -2009,6 +2001,12 @@ gcoSURF_SetOffset(
1326 );
1327
1328 gceSTATUS
1329+gcoSURF_GetOffset(
1330+ IN gcoSURF Surface,
1331+ OUT gctUINT *Offset
1332+ );
1333+
1334+gceSTATUS
1335 gcoSURF_NODE_Cache(
1336 IN gcsSURF_NODE_PTR Node,
1337 IN gctPOINTER Logical,
1338diff --git a/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_compiler.h b/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_compiler.h
1339index 4a0870f..8693c37 100644
1340--- a/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_compiler.h
1341+++ b/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_compiler.h
1342@@ -36,12 +36,16 @@ extern "C" {
1343 #endif
1344
1345 #ifndef GC_ENABLE_LOADTIME_OPT
1346-#define GC_ENABLE_LOADTIME_OPT 1
1347+#define GC_ENABLE_LOADTIME_OPT 1
1348 #endif
1349
1350 #define TEMP_OPT_CONSTANT_TEXLD_COORD 1
1351
1352-#define TEMP_SHADER_PATCH 1
1353+#define TEMP_SHADER_PATCH 1
1354+
1355+#define ADD_PRE_ROTATION_TO_VS 0
1356+
1357+#define TEMP_INLINE_ALL_EXPANSION 1
1358 /******************************* IR VERSION ******************/
1359 #define gcdSL_IR_VERSION gcmCC('\0','\0','\0','\1')
1360
1361@@ -683,6 +687,13 @@ typedef enum _gceSHADER_FLAGS
1362 gcvSHADER_USE_ALPHA_KILL = 0x100,
1363 #endif
1364
1365+#if ADD_PRE_ROTATION_TO_VS
1366+ gcvSHADER_VS_PRE_ROTATION = 0x200,
1367+#endif
1368+
1369+#if TEMP_INLINE_ALL_EXPANSION
1370+ gcvSHADER_INLINE_ALL_EXPANSION = 0x200,
1371+#endif
1372 }
1373 gceSHADER_FLAGS;
1374
1375@@ -771,10 +782,15 @@ typedef enum _gceSHADER_OPTIMIZATION
1376 /* optimize varying packing */
1377 gcvOPTIMIZATION_VARYINGPACKING = 1 << 22,
1378
1379+#if TEMP_INLINE_ALL_EXPANSION
1380+ gcvOPTIMIZATION_INLINE_ALL_EXPANSION = 1 << 23,
1381+#endif
1382+
1383 /* Full optimization. */
1384 /* Note that gcvOPTIMIZATION_LOAD_SW_WORKAROUND is off. */
1385 gcvOPTIMIZATION_FULL = 0x7FFFFFFF &
1386 ~gcvOPTIMIZATION_LOAD_SW_WORKAROUND &
1387+ ~gcvOPTIMIZATION_INLINE_ALL_EXPANSION &
1388 ~gcvOPTIMIZATION_POWER_OPTIMIZATION,
1389
1390 /* Optimization Unit Test flag. */
1391diff --git a/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_driver.h b/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_driver.h
1392index 028bbd1..b056c52 100644
1393--- a/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_driver.h
1394+++ b/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_driver.h
1395@@ -210,6 +210,9 @@ typedef struct _gcsHAL_QUERY_CHIP_IDENTITY
1396 /* Supported minor feature 3 fields. */
1397 gctUINT32 chipMinorFeatures3;
1398
1399+ /* Supported minor feature 4 fields. */
1400+ gctUINT32 chipMinorFeatures4;
1401+
1402 /* Number of streams supported. */
1403 gctUINT32 streamCount;
1404
1405@@ -929,30 +932,30 @@ typedef struct _gcsHAL_INTERFACE
1406
1407 struct _gcsHAL_GET_SHARED_INFO
1408 {
1409+ /* Process id. */
1410 IN gctUINT32 pid;
1411+
1412+ /* Data id. */
1413 IN gctUINT32 dataId;
1414- /* gcuVIDMEM_NODE_PTR */
1415- IN gctUINT64 node;
1416- /* gctUINT8_PTR */
1417- OUT gctUINT64 data;
1418- /* fix size. gctUINT8_PTR*/
1419- OUT gctUINT64 nodeData;
1420- gctUINT64 size;
1421- IN gceVIDMEM_NODE_SHARED_INFO_TYPE infoType;
1422+
1423+ /* Data size. */
1424+ IN gctSIZE_T bytes;
1425+
1426+ /* Pointer to save the shared data. */
1427+ OUT gctPOINTER data;
1428 }
1429 GetSharedInfo;
1430
1431 struct _gcsHAL_SET_SHARED_INFO
1432 {
1433+ /* Data id. */
1434 IN gctUINT32 dataId;
1435- /* gcuVIDMEM_NODE_PTR */
1436- IN gctUINT64 node;
1437- /* gctUINT8_PTR */
1438- IN gctUINT64 data;
1439- /* gctUINT8_PTR */
1440- IN gctUINT64 nodeData;
1441- IN gctUINT64 size;
1442- IN gceVIDMEM_NODE_SHARED_INFO_TYPE infoType;
1443+
1444+ /* Data to be shared. */
1445+ IN gctPOINTER data;
1446+
1447+ /* Data size. */
1448+ IN gctSIZE_T bytes;
1449 }
1450 SetSharedInfo;
1451
1452diff --git a/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_engine.h b/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_engine.h
1453index 249b61b..8481375 100644
1454--- a/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_engine.h
1455+++ b/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_engine.h
1456@@ -323,50 +323,6 @@ gcoSURF_Resolve(
1457 IN gcoSURF DestSurface
1458 );
1459
1460-/* Export the render target. */
1461-gceSTATUS
1462-gcoSURF_ExportRenderTarget(
1463- IN gcoSURF SrcSurface
1464-);
1465-
1466-/* Import the render target. */
1467-gceSTATUS
1468-gcoSURF_ImportRenderTarget(
1469- IN gctUINT32 Pid,
1470- IN gcoSURF SrcSurface
1471-);
1472-
1473-/* Save the Resolve info to kernel. */
1474-gceSTATUS
1475-gcoSURF_PrepareRemoteResolveRect(
1476- IN gcoSURF SrcSurface,
1477- IN gcsPOINT_PTR SrcOrigin,
1478- IN gcsPOINT_PTR DestOrigin,
1479- IN gcsPOINT_PTR RectSize
1480- );
1481-
1482-/* Resolve using the rectangle info previously saved in the vid mem node. */
1483-gceSTATUS
1484-gcoSURF_ResolveFromStoredRect(
1485- IN gcoSURF SrcSurface,
1486- IN gcoSURF DestSurface
1487- );
1488-
1489-/* Using the info that Process Pid saved to do resolve. */
1490-gceSTATUS
1491-gcoSURF_RemoteResolveRect(
1492- IN gcoSURF SrcSurface,
1493- IN gcoSURF DestSurface,
1494- IN gctBOOL *resolveDiscarded
1495- );
1496-
1497-/* Return the "resolve submitted indicator" signal. */
1498-gceSTATUS
1499-gcoSURF_GetRTSignal(
1500- IN gcoSURF RTSurface,
1501- OUT gctSIGNAL * resolveSubmittedSignal
1502- );
1503-
1504 /* Resolve rectangular area of a surface. */
1505 gceSTATUS
1506 gcoSURF_ResolveRect(
1507@@ -1684,6 +1640,12 @@ gcoTEXTURE_IsRenderable(
1508 );
1509
1510 gceSTATUS
1511+gcoTEXTURE_IsRenderableEx(
1512+ IN gcoTEXTURE Texture,
1513+ IN gctUINT Level
1514+ );
1515+
1516+gceSTATUS
1517 gcoTEXTURE_IsComplete(
1518 IN gcoTEXTURE Texture,
1519 IN gctINT MaxLevel
1520@@ -2028,21 +1990,15 @@ gceSTATUS
1521 gcoHAL_GetSharedInfo(
1522 IN gctUINT32 Pid,
1523 IN gctUINT32 DataId,
1524- OUT gctUINT8_PTR Data,
1525 IN gctSIZE_T Bytes,
1526- IN gctUINT64 Node,
1527- OUT gctUINT8_PTR NodeData,
1528- IN gceVIDMEM_NODE_SHARED_INFO_TYPE SharedInfoType
1529+ OUT gctPOINTER Data
1530 );
1531
1532 gceSTATUS
1533 gcoHAL_SetSharedInfo(
1534 IN gctUINT32 DataId,
1535- IN gctUINT8_PTR Data,
1536- IN gctSIZE_T Bytes,
1537- IN gctUINT64 Node,
1538- IN gctUINT8_PTR NodeData,
1539- IN gceVIDMEM_NODE_SHARED_INFO_TYPE SharedInfoType
1540+ IN gctPOINTER Data,
1541+ IN gctSIZE_T Bytes
1542 );
1543
1544 #ifdef __cplusplus
1545diff --git a/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_enum.h b/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_enum.h
1546index cf6b425..a1d9ae5 100644
1547--- a/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_enum.h
1548+++ b/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_enum.h
1549@@ -181,13 +181,6 @@ typedef enum _gceCACHEOPERATION
1550 }
1551 gceCACHEOPERATION;
1552
1553-typedef enum _gceVIDMEM_NODE_SHARED_INFO_TYPE
1554-{
1555- gcvVIDMEM_INFO_GENERIC,
1556- gcvVIDMEM_INFO_DIRTY_RECTANGLE
1557-}
1558-gceVIDMEM_NODE_SHARED_INFO_TYPE;
1559-
1560 /* Surface types. */
1561 typedef enum _gceSURF_TYPE
1562 {
1563diff --git a/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_options.h b/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_options.h
1564index afe83d0..9e2a8db 100644
1565--- a/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_options.h
1566+++ b/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_options.h
1567@@ -391,15 +391,6 @@
1568 #endif
1569
1570 /*
1571- gcdPOWER_MANAGEMENT
1572-
1573- This define enables the power management code.
1574-*/
1575-#ifndef gcdPOWER_MANAGEMENT
1576-# define gcdPOWER_MANAGEMENT 1
1577-#endif
1578-
1579-/*
1580 gcdPOWER_SUSNPEND_WHEN_IDLE
1581
1582 Set to 1 to make GPU enter gcvPOWER_SUSPEND when idle detected,
1583@@ -428,7 +419,7 @@
1584 If the value is 0, no timeout will be checked for.
1585 */
1586 #ifndef gcdGPU_TIMEOUT
1587-# if gcdFPGA_BUILD
1588+#if gcdFPGA_BUILD
1589 # define gcdGPU_TIMEOUT 0
1590 # else
1591 # define gcdGPU_TIMEOUT 20000
1592@@ -726,31 +717,13 @@
1593
1594 Support swap with a specific rectangle.
1595
1596- Set the rectangle with eglSetSwapRectangleANDROID api.
1597+ Set the rectangle with eglSetSwapRectangleVIV api.
1598 */
1599 #ifndef gcdSUPPORT_SWAP_RECTANGLE
1600 # define gcdSUPPORT_SWAP_RECTANGLE 0
1601 #endif
1602
1603 /*
1604- gcdDEFER_RESOLVES
1605-
1606- Support deferred resolves for 3D apps.
1607-*/
1608-#ifndef gcdDEFER_RESOLVES
1609-# define gcdDEFER_RESOLVES 0
1610-#endif
1611-
1612-/*
1613- gcdCOPYBLT_OPTIMIZATION
1614-
1615- Combine dirty areas resulting from Android's copyBlt.
1616-*/
1617-#ifndef gcdCOPYBLT_OPTIMIZATION
1618-# define gcdCOPYBLT_OPTIMIZATION 0
1619-#endif
1620-
1621-/*
1622 gcdGPU_LINEAR_BUFFER_ENABLED
1623
1624 Use linear buffer for GPU apps so HWC can do 2D composition.
1625diff --git a/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_version.h b/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_version.h
1626index 808fde0..03cb4d6 100644
1627--- a/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_version.h
1628+++ b/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_version.h
1629@@ -28,7 +28,7 @@
1630
1631 #define gcvVERSION_PATCH 9
1632
1633-#define gcvVERSION_BUILD 4651
1634+#define gcvVERSION_BUILD 6622
1635
1636 #define gcvVERSION_DATE __DATE__
1637
1638diff --git a/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_vg.h b/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_vg.h
1639index 5ff0281..2a910e8 100644
1640--- a/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_vg.h
1641+++ b/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_vg.h
1642@@ -552,6 +552,12 @@ gckVGHARDWARE_QueryPowerManagementState(
1643 );
1644
1645 gceSTATUS
1646+gckVGHARDWARE_SetPowerManagement(
1647+ IN gckVGHARDWARE Hardware,
1648+ IN gctBOOL PowerManagement
1649+ );
1650+
1651+gceSTATUS
1652 gckVGHARDWARE_SetPowerOffTimeout(
1653 IN gckVGHARDWARE Hardware,
1654 IN gctUINT32 Timeout
1655diff --git a/drivers/mxc/gpu-viv/hal/os/linux/kernel/gc_hal_kernel_device.c b/drivers/mxc/gpu-viv/hal/os/linux/kernel/gc_hal_kernel_device.c
1656index 7168f0e..168987a 100644
1657--- a/drivers/mxc/gpu-viv/hal/os/linux/kernel/gc_hal_kernel_device.c
1658+++ b/drivers/mxc/gpu-viv/hal/os/linux/kernel/gc_hal_kernel_device.c
1659@@ -304,6 +304,7 @@ gckGALDEVICE_Construct(
1660 IN gctINT Signal,
1661 IN gctUINT LogFileSize,
1662 IN struct device *pdev,
1663+ IN gctINT PowerManagement,
1664 OUT gckGALDEVICE *Device
1665 )
1666 {
1667@@ -538,6 +539,9 @@ gckGALDEVICE_Construct(
1668 device->kernels[gcvCORE_MAJOR]->hardware, FastClear, Compression
1669 ));
1670
1671+ gcmkONERROR(gckHARDWARE_SetPowerManagement(
1672+ device->kernels[gcvCORE_MAJOR]->hardware, PowerManagement
1673+ ));
1674
1675 #if COMMAND_PROCESSOR_VERSION == 1
1676 /* Start the command queue. */
1677@@ -593,6 +597,10 @@ gckGALDEVICE_Construct(
1678 device
1679 ));
1680
1681+ gcmkONERROR(gckHARDWARE_SetPowerManagement(
1682+ device->kernels[gcvCORE_2D]->hardware, PowerManagement
1683+ ));
1684+
1685 #if COMMAND_PROCESSOR_VERSION == 1
1686 /* Start the command queue. */
1687 gcmkONERROR(gckCOMMAND_Start(device->kernels[gcvCORE_2D]->command));
1688@@ -624,6 +632,11 @@ gckGALDEVICE_Construct(
1689 device->coreMapping[gcvHARDWARE_VG] = gcvCORE_VG;
1690 }
1691
1692+
1693+ gcmkONERROR(gckVGHARDWARE_SetPowerManagement(
1694+ device->kernels[gcvCORE_VG]->vg->hardware,
1695+ PowerManagement
1696+ ));
1697 #endif
1698 }
1699 else
1700diff --git a/drivers/mxc/gpu-viv/hal/os/linux/kernel/gc_hal_kernel_device.h b/drivers/mxc/gpu-viv/hal/os/linux/kernel/gc_hal_kernel_device.h
1701index 460f022..d488fc8 100644
1702--- a/drivers/mxc/gpu-viv/hal/os/linux/kernel/gc_hal_kernel_device.h
1703+++ b/drivers/mxc/gpu-viv/hal/os/linux/kernel/gc_hal_kernel_device.h
1704@@ -169,6 +169,7 @@ gceSTATUS gckGALDEVICE_Construct(
1705 IN gctINT Signal,
1706 IN gctUINT LogFileSize,
1707 IN struct device *pdev,
1708+ IN gctINT PowerManagement,
1709 OUT gckGALDEVICE *Device
1710 );
1711
1712diff --git a/drivers/mxc/gpu-viv/hal/os/linux/kernel/gc_hal_kernel_driver.c b/drivers/mxc/gpu-viv/hal/os/linux/kernel/gc_hal_kernel_driver.c
1713index 64cace1..183000d 100644
1714--- a/drivers/mxc/gpu-viv/hal/os/linux/kernel/gc_hal_kernel_driver.c
1715+++ b/drivers/mxc/gpu-viv/hal/os/linux/kernel/gc_hal_kernel_driver.c
1716@@ -131,6 +131,9 @@ module_param(fastClear, int, 0644);
1717 static int compression = -1;
1718 module_param(compression, int, 0644);
1719
1720+static int powerManagement = 1;
1721+module_param(powerManagement, int, 0644);
1722+
1723 static int signal = 48;
1724 module_param(signal, int, 0644);
1725
1726@@ -781,6 +784,9 @@ static int drv_init(struct device *pdev)
1727 }
1728 #endif
1729
1730+ printk(KERN_INFO "Galcore version %d.%d.%d.%d\n",
1731+ gcvVERSION_MAJOR, gcvVERSION_MINOR, gcvVERSION_PATCH, gcvVERSION_BUILD);
1732+
1733 if (showArgs)
1734 {
1735 printk("galcore options:\n");
1736@@ -810,7 +816,8 @@ static int drv_init(struct device *pdev)
1737 printk(" signal = %d\n", signal);
1738 printk(" baseAddress = 0x%08lX\n", baseAddress);
1739 printk(" physSize = 0x%08lX\n", physSize);
1740- printk(" logFileSize = %d KB \n", logFileSize);
1741+ printk(" logFileSize = %d KB \n", logFileSize);
1742+ printk(" powerManagement = %d\n", powerManagement);
1743 #if ENABLE_GPU_CLOCK_BY_DRIVER
1744 printk(" coreClock = %lu\n", coreClock);
1745 #endif
1746@@ -833,6 +840,7 @@ static int drv_init(struct device *pdev)
1747 bankSize, fastClear, compression, baseAddress, physSize, signal,
1748 logFileSize,
1749 pdev,
1750+ powerManagement,
1751 &device
1752 ));
1753
1754diff --git a/drivers/mxc/gpu-viv/hal/os/linux/kernel/gc_hal_kernel_os.c b/drivers/mxc/gpu-viv/hal/os/linux/kernel/gc_hal_kernel_os.c
1755index dfbc699..6a0295d 100644
1756--- a/drivers/mxc/gpu-viv/hal/os/linux/kernel/gc_hal_kernel_os.c
1757+++ b/drivers/mxc/gpu-viv/hal/os/linux/kernel/gc_hal_kernel_os.c
1758@@ -55,6 +55,7 @@ const char * _PLATFORM = "\n\0$PLATFORM$Linux$\n";
1759 #endif
1760
1761 #define USER_SIGNAL_TABLE_LEN_INIT 64
1762+#define gcdSUPPRESS_OOM_MESSAGE 1
1763
1764 #define MEMORY_LOCK(os) \
1765 gcmkVERIFY_OK(gckOS_AcquireMutex( \
1766@@ -85,6 +86,12 @@ const char * _PLATFORM = "\n\0$PLATFORM$Linux$\n";
1767 #define gcmkNONPAGED_MEMROY_PROT(x) pgprot_noncached(x)
1768 #endif
1769
1770+#if gcdSUPPRESS_OOM_MESSAGE
1771+#define gcdNOWARN __GFP_NOWARN
1772+#else
1773+#define gcdNOWARN 0
1774+#endif
1775+
1776 #define gcdINFINITE_TIMEOUT (60 * 1000)
1777 #define gcdDETECT_TIMEOUT 0
1778 #define gcdDETECT_DMA_ADDRESS 1
1779@@ -261,7 +268,7 @@ _CreateMdl(
1780
1781 gcmkHEADER_ARG("ProcessID=%d", ProcessID);
1782
1783- mdl = (PLINUX_MDL)kzalloc(sizeof(struct _LINUX_MDL), GFP_KERNEL | __GFP_NOWARN);
1784+ mdl = (PLINUX_MDL)kzalloc(sizeof(struct _LINUX_MDL), GFP_KERNEL | gcdNOWARN);
1785 if (mdl == gcvNULL)
1786 {
1787 gcmkFOOTER_NO();
1788@@ -322,7 +329,7 @@ _CreateMdlMap(
1789
1790 gcmkHEADER_ARG("Mdl=0x%X ProcessID=%d", Mdl, ProcessID);
1791
1792- mdlMap = (PLINUX_MDL_MAP)kmalloc(sizeof(struct _LINUX_MDL_MAP), GFP_KERNEL | __GFP_NOWARN);
1793+ mdlMap = (PLINUX_MDL_MAP)kmalloc(sizeof(struct _LINUX_MDL_MAP), GFP_KERNEL | gcdNOWARN);
1794 if (mdlMap == gcvNULL)
1795 {
1796 gcmkFOOTER_NO();
1797@@ -481,7 +488,7 @@ _NonContiguousAlloc(
1798
1799 size = NumPages * sizeof(struct page *);
1800
1801- pages = kmalloc(size, GFP_KERNEL | __GFP_NOWARN);
1802+ pages = kmalloc(size, GFP_KERNEL | gcdNOWARN);
1803
1804 if (!pages)
1805 {
1806@@ -496,7 +503,7 @@ _NonContiguousAlloc(
1807
1808 for (i = 0; i < NumPages; i++)
1809 {
1810- p = alloc_page(GFP_KERNEL | __GFP_HIGHMEM | __GFP_NOWARN);
1811+ p = alloc_page(GFP_KERNEL | __GFP_HIGHMEM | gcdNOWARN);
1812
1813 if (!p)
1814 {
1815@@ -762,7 +769,7 @@ _AllocateIntegerId(
1816 int result;
1817
1818 again:
1819- if (idr_pre_get(&Database->idr, GFP_KERNEL | __GFP_NOWARN) == 0)
1820+ if (idr_pre_get(&Database->idr, GFP_KERNEL | gcdNOWARN) == 0)
1821 {
1822 return gcvSTATUS_OUT_OF_MEMORY;
1823 }
1824@@ -954,7 +961,7 @@ gckOS_Construct(
1825 gcmkVERIFY_ARGUMENT(Os != gcvNULL);
1826
1827 /* Allocate the gckOS object. */
1828- os = (gckOS) kmalloc(gcmSIZEOF(struct _gckOS), GFP_KERNEL | __GFP_NOWARN);
1829+ os = (gckOS) kmalloc(gcmSIZEOF(struct _gckOS), GFP_KERNEL | gcdNOWARN);
1830
1831 if (os == gcvNULL)
1832 {
1833@@ -1171,7 +1178,7 @@ _CreateKernelVirtualMapping(
1834
1835 if (Mdl->contiguous)
1836 {
1837- pages = kmalloc(sizeof(struct page *) * numPages, GFP_KERNEL | __GFP_NOWARN);
1838+ pages = kmalloc(sizeof(struct page *) * numPages, GFP_KERNEL | gcdNOWARN);
1839
1840 if (!pages)
1841 {
1842@@ -1385,7 +1392,7 @@ gckOS_AllocateMemory(
1843 }
1844 else
1845 {
1846- memory = (gctPOINTER) kmalloc(Bytes, GFP_KERNEL | __GFP_NOWARN);
1847+ memory = (gctPOINTER) kmalloc(Bytes, GFP_KERNEL | gcdNOWARN);
1848 }
1849
1850 if (memory == gcvNULL)
1851@@ -1904,7 +1911,7 @@ gckOS_AllocateNonPagedMemory(
1852 addr = dma_alloc_coherent(gcvNULL,
1853 mdl->numPages * PAGE_SIZE,
1854 &mdl->dmaHandle,
1855- GFP_KERNEL | __GFP_NOWARN);
1856+ GFP_KERNEL | gcdNOWARN);
1857 }
1858 #else
1859 size = mdl->numPages * PAGE_SIZE;
1860@@ -1915,7 +1922,7 @@ gckOS_AllocateNonPagedMemory(
1861 if (page == gcvNULL)
1862 #endif
1863 {
1864- page = alloc_pages(GFP_KERNEL | __GFP_NOWARN, order);
1865+ page = alloc_pages(GFP_KERNEL | gcdNOWARN, order);
1866 }
1867
1868 if (page == gcvNULL)
1869@@ -3848,6 +3855,9 @@ gckOS_AllocatePagedMemoryEx(
1870 gctSIZE_T bytes;
1871 gctBOOL locked = gcvFALSE;
1872 gceSTATUS status;
1873+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 27)
1874+ gctPOINTER addr = gcvNULL;
1875+#endif
1876
1877 gcmkHEADER_ARG("Os=0x%X Contiguous=%d Bytes=%lu", Os, Contiguous, Bytes);
1878
1879@@ -3873,13 +3883,27 @@ gckOS_AllocatePagedMemoryEx(
1880 {
1881 /* Get contiguous pages, and suppress warning (stack dump) from kernel when
1882 we run out of memory. */
1883- mdl->u.contiguousPages =
1884- alloc_pages(GFP_KERNEL | __GFP_NOWARN | __GFP_NORETRY, GetOrder(numPages));
1885+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 27)
1886+ addr =
1887+ alloc_pages_exact(numPages * PAGE_SIZE, GFP_KERNEL | gcdNOWARN | __GFP_NORETRY);
1888
1889+ mdl->u.contiguousPages = addr
1890+ ? virt_to_page(addr)
1891+ : gcvNULL;
1892+
1893+ mdl->exact = gcvTRUE;
1894+#else
1895+ mdl->u.contiguousPages =
1896+ alloc_pages(GFP_KERNEL | gcdNOWARN | __GFP_NORETRY, GetOrder(numPages));
1897+#endif
1898 if (mdl->u.contiguousPages == gcvNULL)
1899 {
1900 mdl->u.contiguousPages =
1901- alloc_pages(GFP_KERNEL | __GFP_HIGHMEM | __GFP_NOWARN, GetOrder(numPages));
1902+ alloc_pages(GFP_KERNEL | __GFP_HIGHMEM | gcdNOWARN, GetOrder(numPages));
1903+
1904+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 27)
1905+ mdl->exact = gcvFALSE;
1906+#endif
1907 }
1908 }
1909 else
1910@@ -4024,7 +4048,16 @@ gckOS_FreePagedMemory(
1911
1912 if (mdl->contiguous)
1913 {
1914- __free_pages(mdl->u.contiguousPages, GetOrder(mdl->numPages));
1915+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 27)
1916+ if (mdl->exact == gcvTRUE)
1917+ {
1918+ free_pages_exact(page_address(mdl->u.contiguousPages), mdl->numPages * PAGE_SIZE);
1919+ }
1920+ else
1921+#endif
1922+ {
1923+ __free_pages(mdl->u.contiguousPages, GetOrder(mdl->numPages));
1924+ }
1925 }
1926 else
1927 {
1928@@ -4859,7 +4892,7 @@ gckOS_MapUserPointer(
1929 gcmkVERIFY_ARGUMENT(Size > 0);
1930 gcmkVERIFY_ARGUMENT(KernelPointer != gcvNULL);
1931
1932- buf = kmalloc(Size, GFP_KERNEL | __GFP_NOWARN);
1933+ buf = kmalloc(Size, GFP_KERNEL | gcdNOWARN);
1934 if (buf == gcvNULL)
1935 {
1936 gcmkTRACE(
1937@@ -5274,7 +5307,7 @@ OnError:
1938 MEMORY_MAP_LOCK(Os);
1939
1940 /* Allocate the Info struct. */
1941- info = (gcsPageInfo_PTR)kmalloc(sizeof(gcsPageInfo), GFP_KERNEL | __GFP_NOWARN);
1942+ info = (gcsPageInfo_PTR)kmalloc(sizeof(gcsPageInfo), GFP_KERNEL | gcdNOWARN);
1943
1944 if (info == gcvNULL)
1945 {
1946@@ -5283,7 +5316,7 @@ OnError:
1947 }
1948
1949 /* Allocate the array of page addresses. */
1950- pages = (struct page **)kmalloc(pageCount * sizeof(struct page *), GFP_KERNEL | __GFP_NOWARN);
1951+ pages = (struct page **)kmalloc(pageCount * sizeof(struct page *), GFP_KERNEL | gcdNOWARN);
1952
1953 if (pages == gcvNULL)
1954 {
1955@@ -6502,7 +6535,7 @@ gckOS_CreateSemaphore(
1956 gcmkVERIFY_ARGUMENT(Semaphore != gcvNULL);
1957
1958 /* Allocate the semaphore structure. */
1959- sem = (struct semaphore *)kmalloc(gcmSIZEOF(struct semaphore), GFP_KERNEL | __GFP_NOWARN);
1960+ sem = (struct semaphore *)kmalloc(gcmSIZEOF(struct semaphore), GFP_KERNEL | gcdNOWARN);
1961 if (sem == gcvNULL)
1962 {
1963 gcmkONERROR(gcvSTATUS_OUT_OF_MEMORY);
1964@@ -6942,6 +6975,7 @@ gckOS_SetGPUPower(
1965 #else
1966 imx_gpc_power_up_pu(false);
1967 #endif
1968+
1969 }
1970 /* TODO: Put your code here. */
1971 gcmkFOOTER_NO();
1972@@ -7255,7 +7289,7 @@ gckOS_CreateSignal(
1973 gcmkVERIFY_ARGUMENT(Signal != gcvNULL);
1974
1975 /* Create an event structure. */
1976- signal = (gcsSIGNAL_PTR) kmalloc(sizeof(gcsSIGNAL), GFP_KERNEL | __GFP_NOWARN);
1977+ signal = (gcsSIGNAL_PTR) kmalloc(sizeof(gcsSIGNAL), GFP_KERNEL | gcdNOWARN);
1978
1979 if (signal == gcvNULL)
1980 {
1981@@ -8000,7 +8034,7 @@ gckOS_CreateSemaphoreVG(
1982 do
1983 {
1984 /* Allocate the semaphore structure. */
1985- newSemaphore = (struct semaphore *)kmalloc(gcmSIZEOF(struct semaphore), GFP_KERNEL | __GFP_NOWARN);
1986+ newSemaphore = (struct semaphore *)kmalloc(gcmSIZEOF(struct semaphore), GFP_KERNEL | gcdNOWARN);
1987 if (newSemaphore == gcvNULL)
1988 {
1989 gcmkERR_BREAK(gcvSTATUS_OUT_OF_MEMORY);
1990diff --git a/drivers/mxc/gpu-viv/hal/os/linux/kernel/gc_hal_kernel_os.h b/drivers/mxc/gpu-viv/hal/os/linux/kernel/gc_hal_kernel_os.h
1991index e970477..006632c 100644
1992--- a/drivers/mxc/gpu-viv/hal/os/linux/kernel/gc_hal_kernel_os.h
1993+++ b/drivers/mxc/gpu-viv/hal/os/linux/kernel/gc_hal_kernel_os.h
1994@@ -54,6 +54,9 @@ typedef struct _LINUX_MDL
1995 gctINT numPages;
1996 gctINT pagedMem;
1997 gctBOOL contiguous;
1998+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 27)
1999+ gctBOOL exact;
2000+#endif
2001 dma_addr_t dmaHandle;
2002 PLINUX_MDL_MAP maps;
2003 struct _LINUX_MDL * prev;
2004--
20051.8.3.2
2006
diff --git a/recipes-kernel/linux/linux-wandboard-3.0.35/0005-ENGR00264275-GPU-Correct-suspend-resume-calling-afte.patch b/recipes-kernel/linux/linux-wandboard-3.0.35/0005-ENGR00264275-GPU-Correct-suspend-resume-calling-afte.patch
new file mode 100644
index 0000000..fa937e4
--- /dev/null
+++ b/recipes-kernel/linux/linux-wandboard-3.0.35/0005-ENGR00264275-GPU-Correct-suspend-resume-calling-afte.patch
@@ -0,0 +1,61 @@
1From a845abe4589366d3e37b5a646be6337984074b28 Mon Sep 17 00:00:00 2001
2From: Loren HUANG <b02279@freescale.com>
3Date: Wed, 22 May 2013 17:21:30 +0800
4Subject: [PATCH 5/6] ENGR00264275 [GPU]Correct suspend/resume calling after
5 adding runtime pm.
6
7After enabling runtime pm the suspend/resume entry is changed.
8
9-Add new entry for suspend/resume in runtime pm frame work.
10-Add static define for all runtime pm function.
11
12Upstream-Status: Backport [3.5.7-1.0.0]
13
14Signed-off-by: Loren HUANG <b02279@freescale.com>
15Acked-by: Lily Zhang
16---
17 .../gpu-viv/hal/os/linux/kernel/gc_hal_kernel_driver.c | 16 ++++++++++++++--
18 1 file changed, 14 insertions(+), 2 deletions(-)
19
20diff --git a/drivers/mxc/gpu-viv/hal/os/linux/kernel/gc_hal_kernel_driver.c b/drivers/mxc/gpu-viv/hal/os/linux/kernel/gc_hal_kernel_driver.c
21index 183000d..3632a6c 100644
22--- a/drivers/mxc/gpu-viv/hal/os/linux/kernel/gc_hal_kernel_driver.c
23+++ b/drivers/mxc/gpu-viv/hal/os/linux/kernel/gc_hal_kernel_driver.c
24@@ -1252,20 +1252,32 @@ static const struct of_device_id mxs_gpu_dt_ids[] = {
25 MODULE_DEVICE_TABLE(of, mxs_gpu_dt_ids);
26
27 #ifdef CONFIG_PM
28-int gpu_runtime_suspend(struct device *dev)
29+static int gpu_runtime_suspend(struct device *dev)
30 {
31 release_bus_freq(BUS_FREQ_HIGH);
32 return 0;
33 }
34
35-int gpu_runtime_resume(struct device *dev)
36+static int gpu_runtime_resume(struct device *dev)
37 {
38 request_bus_freq(BUS_FREQ_HIGH);
39 return 0;
40 }
41
42+static int gpu_system_suspend(struct device *dev)
43+{
44+ pm_message_t state={0};
45+ return gpu_suspend(to_platform_device(dev), state);
46+}
47+
48+static int gpu_system_resume(struct device *dev)
49+{
50+ return gpu_resume(to_platform_device(dev));
51+}
52+
53 static const struct dev_pm_ops gpu_pm_ops = {
54 SET_RUNTIME_PM_OPS(gpu_runtime_suspend, gpu_runtime_resume, NULL)
55+ SET_SYSTEM_SLEEP_PM_OPS(gpu_system_suspend, gpu_system_resume)
56 };
57 #endif
58 #endif
59--
601.8.3.2
61
diff --git a/recipes-kernel/linux/linux-wandboard-3.0.35/0006-ENGR00265130-gpu-Correct-section-mismatch-in-gpu-ker.patch b/recipes-kernel/linux/linux-wandboard-3.0.35/0006-ENGR00265130-gpu-Correct-section-mismatch-in-gpu-ker.patch
new file mode 100644
index 0000000..43407a1
--- /dev/null
+++ b/recipes-kernel/linux/linux-wandboard-3.0.35/0006-ENGR00265130-gpu-Correct-section-mismatch-in-gpu-ker.patch
@@ -0,0 +1,60 @@
1From 376d63e9b981118f83646a836ce6626e541de1a3 Mon Sep 17 00:00:00 2001
2From: Loren HUANG <b02279@freescale.com>
3Date: Fri, 31 May 2013 18:29:58 +0800
4Subject: [PATCH 6/6] ENGR00265130 gpu:Correct section mismatch in gpu kernel
5 driver
6
7-Remove the __devinit for suspend/resume function.
8-Replace __devinit to __devexit for remove function.
9
10Upstream-Status: Backport [3.5.7-1.0.0]
11
12Signed-off-by: Loren HUANG <b02279@freescale.com>
13Acked-by: Lily Zhang
14---
15 drivers/mxc/gpu-viv/hal/os/linux/kernel/gc_hal_kernel_driver.c | 8 ++++----
16 1 file changed, 4 insertions(+), 4 deletions(-)
17
18diff --git a/drivers/mxc/gpu-viv/hal/os/linux/kernel/gc_hal_kernel_driver.c b/drivers/mxc/gpu-viv/hal/os/linux/kernel/gc_hal_kernel_driver.c
19index 3632a6c..9d9dc57 100644
20--- a/drivers/mxc/gpu-viv/hal/os/linux/kernel/gc_hal_kernel_driver.c
21+++ b/drivers/mxc/gpu-viv/hal/os/linux/kernel/gc_hal_kernel_driver.c
22@@ -1111,7 +1111,7 @@ static int __devinit gpu_probe(struct platform_device *pdev)
23 return ret;
24 }
25
26-static int __devinit gpu_remove(struct platform_device *pdev)
27+static int __devexit gpu_remove(struct platform_device *pdev)
28 {
29 gcmkHEADER();
30 #if gcdENABLE_FSCALE_VAL_ADJUST
31@@ -1123,7 +1123,7 @@ static int __devinit gpu_remove(struct platform_device *pdev)
32 return 0;
33 }
34
35-static int __devinit gpu_suspend(struct platform_device *dev, pm_message_t state)
36+static int gpu_suspend(struct platform_device *dev, pm_message_t state)
37 {
38 gceSTATUS status;
39 gckGALDEVICE device;
40@@ -1173,7 +1173,7 @@ static int __devinit gpu_suspend(struct platform_device *dev, pm_message_t state
41 return 0;
42 }
43
44-static int __devinit gpu_resume(struct platform_device *dev)
45+static int gpu_resume(struct platform_device *dev)
46 {
47 gceSTATUS status;
48 gckGALDEVICE device;
49@@ -1284,7 +1284,7 @@ static const struct dev_pm_ops gpu_pm_ops = {
50
51 static struct platform_driver gpu_driver = {
52 .probe = gpu_probe,
53- .remove = gpu_remove,
54+ .remove = __devexit_p(gpu_remove),
55
56 .suspend = gpu_suspend,
57 .resume = gpu_resume,
58--
591.8.3.2
60
diff --git a/recipes-kernel/linux/linux-wandboard-3.0.35/defconfig b/recipes-kernel/linux/linux-wandboard-3.0.35/defconfig
new file mode 100644
index 0000000..dae399a
--- /dev/null
+++ b/recipes-kernel/linux/linux-wandboard-3.0.35/defconfig
@@ -0,0 +1,242 @@
1CONFIG_EXPERIMENTAL=y
2CONFIG_LOCALVERSION="-wandboard+yocto"
3CONFIG_DEFAULT_HOSTNAME="wandboard"
4# CONFIG_SWAP is not set
5CONFIG_SYSVIPC=y
6CONFIG_FHANDLE=y
7CONFIG_LOG_BUF_SHIFT=14
8CONFIG_CGROUPS=y
9CONFIG_BLK_DEV_INITRD=y
10CONFIG_EMBEDDED=y
11CONFIG_PERF_EVENTS=y
12# CONFIG_VM_EVENT_COUNTERS is not set
13CONFIG_MODULES=y
14CONFIG_MODULE_FORCE_LOAD=y
15CONFIG_MODULE_UNLOAD=y
16CONFIG_MODVERSIONS=y
17# CONFIG_BLK_DEV_BSG is not set
18CONFIG_ARCH_MXC=y
19CONFIG_ARCH_MX6=y
20CONFIG_FORCE_MAX_ZONEORDER=14
21CONFIG_MACH_WANDBOARD=y
22CONFIG_EXPANSION_FWBADAPT=y
23CONFIG_IMX_PCIE=y
24CONFIG_USB_EHCI_ARC_H1=y
25CONFIG_USB_FSL_ARC_OTG=y
26CONFIG_CLK_DEBUG=y
27CONFIG_DMA_ZONE_SIZE=184
28CONFIG_ARM_THUMBEE=y
29# CONFIG_SWP_EMULATE is not set
30CONFIG_ARM_ERRATA_743622=y
31CONFIG_ARM_ERRATA_751472=y
32CONFIG_ARM_ERRATA_754322=y
33CONFIG_ARM_ERRATA_764369=y
34CONFIG_NO_HZ=y
35CONFIG_HIGH_RES_TIMERS=y
36CONFIG_SMP=y
37CONFIG_PREEMPT=y
38CONFIG_AEABI=y
39# CONFIG_OABI_COMPAT is not set
40CONFIG_HIGHMEM=y
41CONFIG_COMPACTION=y
42CONFIG_KSM=y
43CONFIG_ZBOOT_ROM_TEXT=0x0
44CONFIG_ZBOOT_ROM_BSS=0x0
45CONFIG_CMDLINE="noinitrd console=ttymxc0,115200"
46CONFIG_CPU_FREQ=y
47CONFIG_CPU_FREQ_STAT_DETAILS=y
48CONFIG_CPU_FREQ_DEFAULT_GOV_INTERACTIVE=y
49CONFIG_CPU_FREQ_GOV_PERFORMANCE=y
50CONFIG_CPU_FREQ_GOV_POWERSAVE=y
51CONFIG_CPU_FREQ_GOV_USERSPACE=y
52CONFIG_CPU_FREQ_GOV_ONDEMAND=y
53CONFIG_CPU_FREQ_GOV_CONSERVATIVE=y
54CONFIG_CPU_FREQ_IMX=y
55CONFIG_VFP=y
56CONFIG_NEON=y
57CONFIG_PM_RUNTIME=y
58CONFIG_PM_DEBUG=y
59CONFIG_APM_EMULATION=y
60CONFIG_NET=y
61CONFIG_PACKET=y
62CONFIG_UNIX=y
63CONFIG_INET=y
64CONFIG_IP_MULTICAST=y
65CONFIG_IP_PNP=y
66CONFIG_IP_PNP_DHCP=y
67# CONFIG_INET_XFRM_MODE_TRANSPORT is not set
68# CONFIG_INET_XFRM_MODE_TUNNEL is not set
69# CONFIG_INET_XFRM_MODE_BEET is not set
70# CONFIG_INET_DIAG is not set
71# CONFIG_IPV6 is not set
72CONFIG_NETFILTER=y
73CONFIG_BT=y
74CONFIG_BT_L2CAP=y
75CONFIG_BT_SCO=y
76CONFIG_BT_RFCOMM=y
77CONFIG_BT_BNEP=y
78CONFIG_BT_BNEP_MC_FILTER=y
79CONFIG_BT_HIDP=y
80CONFIG_BT_HCIBTUSB=m
81CONFIG_BT_HCIUART=y
82CONFIG_BT_HCIUART_H4=y
83CONFIG_CFG80211=y
84# CONFIG_CFG80211_DEFAULT_PS is not set
85# CONFIG_WIRELESS_EXT_SYSFS is not set
86CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug"
87CONFIG_DEVTMPFS=y
88CONFIG_DEVTMPFS_MOUNT=y
89CONFIG_CONNECTOR=y
90CONFIG_BLK_DEV_LOOP=y
91CONFIG_MISC_DEVICES=y
92# CONFIG_SCSI_PROC_FS is not set
93CONFIG_BLK_DEV_SD=y
94# CONFIG_SCSI_LOWLEVEL is not set
95CONFIG_ATA=y
96CONFIG_SATA_AHCI_PLATFORM=y
97# CONFIG_ATA_SFF is not set
98CONFIG_NETDEVICES=y
99CONFIG_NET_ETHERNET=y
100CONFIG_FEC_NAPI=y
101# CONFIG_NETDEV_1000 is not set
102# CONFIG_NETDEV_10000 is not set
103CONFIG_BRCMFMAC=m
104CONFIG_BRCMDBG=y
105CONFIG_HOSTAP=y
106# CONFIG_INPUT_MOUSEDEV_PSAUX is not set
107CONFIG_INPUT_MOUSEDEV_SCREEN_X=1280
108CONFIG_INPUT_MOUSEDEV_SCREEN_Y=720
109CONFIG_INPUT_EVDEV=y
110# CONFIG_INPUT_MOUSE is not set
111CONFIG_INPUT_TOUCHSCREEN=y
112CONFIG_TOUCHSCREEN_PRISM=y
113CONFIG_INPUT_MISC=y
114# CONFIG_SERIO_SERPORT is not set
115CONFIG_VT_HW_CONSOLE_BINDING=y
116CONFIG_SERIAL_IMX=y
117CONFIG_SERIAL_IMX_CONSOLE=y
118CONFIG_HW_RANDOM=y
119CONFIG_MXS_VIIM=y
120CONFIG_I2C=y
121CONFIG_I2C_CHARDEV=y
122CONFIG_I2C_IMX=y
123CONFIG_SPI=y
124CONFIG_SPI_IMX=y
125CONFIG_GPIO_SYSFS=y
126# CONFIG_HWMON is not set
127CONFIG_WATCHDOG=y
128CONFIG_WATCHDOG_NOWAYOUT=y
129CONFIG_IMX2_WDT=y
130CONFIG_REGULATOR=y
131CONFIG_REGULATOR_DUMMY=y
132CONFIG_REGULATOR_FIXED_VOLTAGE=y
133CONFIG_MEDIA_SUPPORT=y
134CONFIG_VIDEO_DEV=y
135# CONFIG_RC_CORE is not set
136# CONFIG_MEDIA_TUNER_CUSTOMISE is not set
137CONFIG_VIDEO_MXC_CAMERA=m
138CONFIG_MXC_CAMERA_OV5640_MIPI=m
139CONFIG_MXC_IPU_DEVICE_QUEUE_SDC=m
140CONFIG_USB_VIDEO_CLASS=m
141# CONFIG_USB_GSPCA is not set
142# CONFIG_RADIO_ADAPTERS is not set
143CONFIG_DRM=m
144CONFIG_DRM_VIVANTE=m
145CONFIG_FB=y
146CONFIG_FB_MXC_LDB=y
147CONFIG_FB_MXC_HDMI=y
148CONFIG_FRAMEBUFFER_CONSOLE=y
149CONFIG_FRAMEBUFFER_CONSOLE_DETECT_PRIMARY=y
150CONFIG_FONTS=y
151CONFIG_FONT_8x16=y
152CONFIG_FONT_10x18=y
153CONFIG_SOUND=y
154CONFIG_SND=y
155# CONFIG_SND_DRIVERS is not set
156# CONFIG_SND_PCI is not set
157CONFIG_SND_USB_AUDIO=y
158CONFIG_SND_SOC=y
159CONFIG_SND_IMX_SOC=y
160CONFIG_SND_SOC_IMX_SGTL5000=y
161CONFIG_SND_SOC_IMX_SPDIF=y
162CONFIG_SND_SOC_IMX_HDMI=y
163CONFIG_HIDRAW=y
164CONFIG_USB=y
165CONFIG_USB_DEVICEFS=y
166# CONFIG_USB_DEVICE_CLASS is not set
167CONFIG_USB_EHCI_HCD=y
168CONFIG_USB_EHCI_ARC=y
169CONFIG_USB_EHCI_ROOT_HUB_TT=y
170CONFIG_USB_ACM=m
171CONFIG_USB_STORAGE=y
172CONFIG_USB_GADGET=y
173CONFIG_USB_GADGET_VBUS_DRAW=100
174CONFIG_USB_ETH=m
175CONFIG_USB_FILE_STORAGE=m
176CONFIG_USB_MASS_STORAGE=m
177CONFIG_USB_G_SERIAL=m
178CONFIG_USB_CDC_COMPOSITE=m
179CONFIG_USB_GPIO_VBUS=y
180CONFIG_USB_ULPI=y
181CONFIG_MMC=y
182CONFIG_MMC_UNSAFE_RESUME=y
183CONFIG_MMC_CLKGATE=y
184CONFIG_MMC_SDHCI=y
185CONFIG_MMC_SDHCI_PLTFM=y
186CONFIG_MMC_SDHCI_ESDHC_IMX=y
187CONFIG_RTC_CLASS=y
188CONFIG_RTC_DRV_SNVS=y
189CONFIG_DMADEVICES=y
190CONFIG_MXC_PXP_V2=y
191CONFIG_IMX_SDMA=y
192CONFIG_MXC_IPU=y
193CONFIG_MXC_SSI=y
194# CONFIG_MXC_HMP4E is not set
195# CONFIG_MXC_HWEVENT is not set
196CONFIG_MXC_ASRC=y
197CONFIG_MXC_GPU_VIV=y
198CONFIG_MXC_MIPI_CSI2=y
199CONFIG_EXT2_FS=y
200CONFIG_EXT3_FS=y
201# CONFIG_EXT3_DEFAULTS_TO_ORDERED is not set
202CONFIG_EXT4_FS=y
203CONFIG_AUTOFS4_FS=m
204CONFIG_MSDOS_FS=y
205CONFIG_VFAT_FS=y
206CONFIG_TMPFS=y
207# CONFIG_MISC_FILESYSTEMS is not set
208CONFIG_NFS_FS=y
209CONFIG_NFS_V3=y
210CONFIG_NFS_V4=y
211CONFIG_NFS_V4_1=y
212CONFIG_ROOT_NFS=y
213CONFIG_PARTITION_ADVANCED=y
214CONFIG_EFI_PARTITION=y
215CONFIG_NLS_CODEPAGE_437=y
216CONFIG_NLS_ASCII=y
217CONFIG_NLS_ISO8859_1=y
218CONFIG_NLS_UTF8=y
219CONFIG_PRINTK_TIME=y
220CONFIG_FRAME_WARN=4096
221CONFIG_MAGIC_SYSRQ=y
222CONFIG_DEBUG_FS=y
223CONFIG_SYSCTL_SYSCALL_CHECK=y
224# CONFIG_CRYPTO_MANAGER_DISABLE_TESTS is not set
225CONFIG_CRYPTO_TEST=m
226CONFIG_CRYPTO_CCM=y
227CONFIG_CRYPTO_GCM=y
228CONFIG_CRYPTO_CBC=y
229CONFIG_CRYPTO_CTS=y
230CONFIG_CRYPTO_LRW=y
231CONFIG_CRYPTO_PCBC=y
232CONFIG_CRYPTO_XTS=y
233CONFIG_CRYPTO_DES=y
234CONFIG_CRYPTO_DEFLATE=y
235CONFIG_CRYPTO_LZO=y
236# CONFIG_CRYPTO_ANSI_CPRNG is not set
237CONFIG_CRYPTO_DEV_FSL_CAAM=y
238CONFIG_CRYPTO_DEV_FSL_CAAM_SM=y
239CONFIG_CRYPTO_DEV_FSL_CAAM_SM_TEST=y
240CONFIG_CRYPTO_DEV_FSL_CAAM_SECVIO=y
241CONFIG_CRC_CCITT=m
242CONFIG_AVERAGE=y
diff --git a/recipes-kernel/linux/linux-wandboard-3.0.35/drm-vivante-Add-00-sufix-in-returned-bus-Id.patch b/recipes-kernel/linux/linux-wandboard-3.0.35/drm-vivante-Add-00-sufix-in-returned-bus-Id.patch
new file mode 100644
index 0000000..815d02c
--- /dev/null
+++ b/recipes-kernel/linux/linux-wandboard-3.0.35/drm-vivante-Add-00-sufix-in-returned-bus-Id.patch
@@ -0,0 +1,31 @@
1From b37a944f55a5010bd08297a63db0275540922f32 Mon Sep 17 00:00:00 2001
2From: Otavio Salvador <otavio@ossystems.com.br>
3Date: Thu, 22 Aug 2013 16:31:29 -0300
4Subject: [PATCH] drm/vivante: Add ":00" sufix in returned bus Id
5
6This makes the 3.0.35 compatible with a Xorg driver build for 3.5.7 or
7newer kernels.
8
9Upstream-Status: Inapropriate [embedded specific]
10
11Signed-off-by: Otavio Salvador <otavio@ossystems.com.br>
12---
13 drivers/gpu/drm/vivante/vivante_drv.c | 2 +-
14 1 file changed, 1 insertion(+), 1 deletion(-)
15
16diff --git a/drivers/gpu/drm/vivante/vivante_drv.c b/drivers/gpu/drm/vivante/vivante_drv.c
17index 4224608..cea360d 100644
18--- a/drivers/gpu/drm/vivante/vivante_drv.c
19+++ b/drivers/gpu/drm/vivante/vivante_drv.c
20@@ -55,7 +55,7 @@
21
22 #include "drm_pciids.h"
23
24-static char platformdevicename[] = "Vivante GCCore";
25+static char platformdevicename[] = "Vivante GCCore:00";
26 static struct platform_device *pplatformdev;
27
28 static struct drm_driver driver = {
29--
301.8.4.rc1
31
diff --git a/recipes-kernel/linux/linux-wandboard-3.10.17/defconfig b/recipes-kernel/linux/linux-wandboard-3.10.17/defconfig
new file mode 100644
index 0000000..2b2dfc0
--- /dev/null
+++ b/recipes-kernel/linux/linux-wandboard-3.10.17/defconfig
@@ -0,0 +1,359 @@
1CONFIG_LOCALVERSION="-1.0.0-wandboard"
2CONFIG_KERNEL_LZO=y
3CONFIG_SYSVIPC=y
4CONFIG_FHANDLE=y
5CONFIG_NO_HZ=y
6CONFIG_HIGH_RES_TIMERS=y
7CONFIG_IKCONFIG=y
8CONFIG_IKCONFIG_PROC=y
9CONFIG_LOG_BUF_SHIFT=18
10CONFIG_CGROUPS=y
11CONFIG_RELAY=y
12CONFIG_BLK_DEV_INITRD=y
13CONFIG_EMBEDDED=y
14CONFIG_PERF_EVENTS=y
15# CONFIG_COMPAT_BRK is not set
16CONFIG_MODULES=y
17CONFIG_MODULE_UNLOAD=y
18CONFIG_MODVERSIONS=y
19CONFIG_MODULE_SRCVERSION_ALL=y
20# CONFIG_BLK_DEV_BSG is not set
21CONFIG_GPIO_PCA953X=y
22CONFIG_ARCH_MXC=y
23CONFIG_MXC_DEBUG_BOARD=y
24CONFIG_MACH_IMX51_DT=y
25CONFIG_MACH_EUKREA_CPUIMX51SD=y
26CONFIG_SOC_IMX53=y
27CONFIG_SOC_IMX6Q=y
28CONFIG_SOC_IMX6SL=y
29CONFIG_SOC_VF610=y
30CONFIG_WAND_RFKILL=y
31# CONFIG_SWP_EMULATE is not set
32CONFIG_SMP=y
33CONFIG_VMSPLIT_2G=y
34CONFIG_PREEMPT=y
35CONFIG_AEABI=y
36# CONFIG_OABI_COMPAT is not set
37CONFIG_ZBOOT_ROM_TEXT=0x0
38CONFIG_ZBOOT_ROM_BSS=0x0
39CONFIG_CMDLINE="noinitrd console=ttymxc0,115200"
40CONFIG_CPU_FREQ=y
41CONFIG_CPU_FREQ_DEFAULT_GOV_INTERACTIVE=y
42CONFIG_CPU_FREQ_GOV_POWERSAVE=y
43CONFIG_CPU_FREQ_GOV_USERSPACE=y
44CONFIG_CPU_FREQ_GOV_ONDEMAND=y
45CONFIG_CPU_FREQ_GOV_CONSERVATIVE=y
46CONFIG_ARM_IMX6_CPUFREQ=y
47CONFIG_CPU_IDLE=y
48CONFIG_VFP=y
49CONFIG_NEON=y
50CONFIG_BINFMT_MISC=m
51CONFIG_PM_RUNTIME=y
52CONFIG_PM_DEBUG=y
53CONFIG_PM_TEST_SUSPEND=y
54CONFIG_NET=y
55CONFIG_PACKET=y
56CONFIG_UNIX=y
57CONFIG_INET=y
58CONFIG_IP_PNP=y
59CONFIG_IP_PNP_DHCP=y
60# CONFIG_INET_XFRM_MODE_TRANSPORT is not set
61# CONFIG_INET_XFRM_MODE_TUNNEL is not set
62# CONFIG_INET_XFRM_MODE_BEET is not set
63# CONFIG_INET_LRO is not set
64CONFIG_IPV6=y
65CONFIG_NETFILTER=y
66CONFIG_VLAN_8021Q=y
67CONFIG_CAN=y
68CONFIG_CAN_FLEXCAN=y
69CONFIG_CFG80211=y
70CONFIG_CFG80211_WEXT=y
71CONFIG_MAC80211=y
72CONFIG_RFKILL_INPUT=y
73CONFIG_RFKILL_GPIO=y
74CONFIG_DEVTMPFS=y
75CONFIG_DEVTMPFS_MOUNT=y
76# CONFIG_STANDALONE is not set
77CONFIG_CMA=y
78CONFIG_CMA_SIZE_MBYTES=256
79CONFIG_IMX_WEIM=y
80CONFIG_CONNECTOR=y
81CONFIG_MTD=y
82CONFIG_MTD_CMDLINE_PARTS=y
83CONFIG_MTD_BLOCK=y
84CONFIG_MTD_CFI=y
85CONFIG_MTD_JEDECPROBE=y
86CONFIG_MTD_CFI_INTELEXT=y
87CONFIG_MTD_CFI_AMDSTD=y
88CONFIG_MTD_CFI_STAA=y
89CONFIG_MTD_PHYSMAP_OF=y
90CONFIG_MTD_DATAFLASH=y
91CONFIG_MTD_M25P80=y
92CONFIG_MTD_SST25L=y
93CONFIG_MTD_NAND=y
94CONFIG_MTD_NAND_GPMI_NAND=y
95CONFIG_MTD_NAND_MXC=y
96CONFIG_MTD_UBI=y
97CONFIG_PROC_DEVICETREE=y
98CONFIG_BLK_DEV_LOOP=y
99CONFIG_BLK_DEV_RAM=y
100CONFIG_BLK_DEV_RAM_SIZE=65536
101CONFIG_EEPROM_AT24=y
102CONFIG_EEPROM_AT25=y
103# CONFIG_SCSI_PROC_FS is not set
104CONFIG_BLK_DEV_SD=y
105CONFIG_SCSI_MULTI_LUN=y
106CONFIG_SCSI_CONSTANTS=y
107CONFIG_SCSI_LOGGING=y
108CONFIG_SCSI_SCAN_ASYNC=y
109# CONFIG_SCSI_LOWLEVEL is not set
110CONFIG_ATA=y
111CONFIG_SATA_AHCI_PLATFORM=y
112CONFIG_AHCI_IMX=y
113CONFIG_PATA_IMX=y
114CONFIG_NETDEVICES=y
115# CONFIG_NET_VENDOR_BROADCOM is not set
116CONFIG_CS89x0=y
117CONFIG_CS89x0_PLATFORM=y
118# CONFIG_NET_VENDOR_FARADAY is not set
119# CONFIG_NET_VENDOR_INTEL is not set
120# CONFIG_NET_VENDOR_MARVELL is not set
121# CONFIG_NET_VENDOR_MICREL is not set
122# CONFIG_NET_VENDOR_MICROCHIP is not set
123# CONFIG_NET_VENDOR_NATSEMI is not set
124# CONFIG_NET_VENDOR_SEEQ is not set
125CONFIG_SMC91X=y
126CONFIG_SMC911X=y
127CONFIG_SMSC911X=y
128# CONFIG_NET_VENDOR_STMICRO is not set
129CONFIG_USB_HSO=y
130CONFIG_BRCMFMAC=m
131CONFIG_BRCMDBG=y
132# CONFIG_INPUT_MOUSEDEV_PSAUX is not set
133CONFIG_INPUT_EVDEV=y
134CONFIG_INPUT_EVBUG=m
135CONFIG_KEYBOARD_GPIO=y
136CONFIG_KEYBOARD_IMX=y
137CONFIG_MOUSE_PS2=m
138CONFIG_MOUSE_PS2_ELANTECH=y
139CONFIG_INPUT_TOUCHSCREEN=y
140CONFIG_TOUCHSCREEN_EGALAX=y
141CONFIG_TOUCHSCREEN_ELAN=y
142CONFIG_TOUCHSCREEN_MAX11801=y
143CONFIG_TOUCHSCREEN_MC13783=y
144CONFIG_INPUT_MISC=y
145CONFIG_INPUT_MMA8450=y
146CONFIG_INPUT_ISL29023=y
147CONFIG_SERIO_SERPORT=m
148CONFIG_VT_HW_CONSOLE_BINDING=y
149# CONFIG_LEGACY_PTYS is not set
150# CONFIG_DEVKMEM is not set
151CONFIG_SERIAL_IMX=y
152CONFIG_SERIAL_IMX_CONSOLE=y
153CONFIG_SERIAL_FSL_LPUART=y
154CONFIG_SERIAL_FSL_LPUART_CONSOLE=y
155CONFIG_FSL_OTP=y
156# CONFIG_I2C_COMPAT is not set
157CONFIG_I2C_CHARDEV=y
158# CONFIG_I2C_HELPER_AUTO is not set
159CONFIG_I2C_ALGOPCF=m
160CONFIG_I2C_ALGOPCA=m
161CONFIG_I2C_IMX=y
162CONFIG_SPI=y
163CONFIG_SPI_IMX=y
164CONFIG_GPIO_SYSFS=y
165CONFIG_POWER_SUPPLY=y
166CONFIG_SABRESD_MAX8903=y
167CONFIG_IMX6_USB_CHARGER=y
168CONFIG_SENSORS_MAX17135=y
169CONFIG_SENSORS_MAG3110=y
170CONFIG_THERMAL=y
171CONFIG_CPU_THERMAL=y
172CONFIG_IMX_THERMAL=y
173CONFIG_DEVICE_THERMAL=y
174CONFIG_WATCHDOG=y
175CONFIG_IMX2_WDT=y
176CONFIG_MFD_DA9052_I2C=y
177CONFIG_MFD_MC13XXX_SPI=y
178CONFIG_MFD_MC13XXX_I2C=y
179CONFIG_MFD_MAX17135=y
180CONFIG_MFD_SI476X_CORE=y
181CONFIG_REGULATOR=y
182CONFIG_REGULATOR_FIXED_VOLTAGE=y
183CONFIG_REGULATOR_DA9052=y
184CONFIG_REGULATOR_ANATOP=y
185CONFIG_REGULATOR_MC13783=y
186CONFIG_REGULATOR_MC13892=y
187CONFIG_REGULATOR_MAX17135=y
188CONFIG_REGULATOR_PFUZE100=y
189CONFIG_MEDIA_SUPPORT=y
190CONFIG_MEDIA_CAMERA_SUPPORT=y
191CONFIG_MEDIA_RADIO_SUPPORT=y
192CONFIG_VIDEO_V4L2_INT_DEVICE=y
193CONFIG_MEDIA_USB_SUPPORT=y
194CONFIG_USB_VIDEO_CLASS=m
195CONFIG_V4L_PLATFORM_DRIVERS=y
196CONFIG_VIDEO_MXC_OUTPUT=y
197CONFIG_VIDEO_MXC_CAPTURE=m
198CONFIG_VIDEO_MXC_CSI_CAMERA=m
199CONFIG_MXC_CAMERA_OV5640=m
200CONFIG_MXC_CAMERA_OV5642=m
201CONFIG_MXC_CAMERA_OV5640_MIPI=m
202CONFIG_MXC_TVIN_ADV7180=m
203CONFIG_MXC_IPU_DEVICE_QUEUE_SDC=m
204CONFIG_VIDEO_MXC_IPU_OUTPUT=y
205CONFIG_VIDEO_MXC_PXP_V4L2=y
206CONFIG_SOC_CAMERA=y
207CONFIG_VIDEO_MX3=y
208CONFIG_RADIO_SI476X=y
209CONFIG_SOC_CAMERA_OV2640=y
210CONFIG_DRM=y
211CONFIG_DRM_VIVANTE=y
212CONFIG_FB=y
213CONFIG_FB_MXS=y
214CONFIG_BACKLIGHT_LCD_SUPPORT=y
215CONFIG_LCD_CLASS_DEVICE=y
216CONFIG_LCD_L4F00242T03=y
217CONFIG_LCD_PLATFORM=y
218CONFIG_BACKLIGHT_CLASS_DEVICE=y
219CONFIG_BACKLIGHT_PWM=y
220CONFIG_FB_MXC_SYNC_PANEL=y
221CONFIG_FB_MXC_LDB=y
222CONFIG_FB_MXC_MIPI_DSI=y
223CONFIG_FB_MXC_TRULY_WVGA_SYNC_PANEL=y
224CONFIG_FB_MXC_HDMI=y
225CONFIG_FB_MXC_EINK_PANEL=y
226CONFIG_FB_MXS_SII902X=y
227CONFIG_FRAMEBUFFER_CONSOLE=y
228CONFIG_FRAMEBUFFER_CONSOLE_DETECT_PRIMARY=y
229CONFIG_FONTS=y
230CONFIG_FONT_8x8=y
231CONFIG_FONT_8x16=y
232CONFIG_LOGO=y
233CONFIG_SOUND=y
234CONFIG_SND=y
235CONFIG_SND_USB_AUDIO=m
236CONFIG_SND_SOC=y
237CONFIG_SND_IMX_SOC=y
238CONFIG_SND_SOC_EUKREA_TLV320=y
239CONFIG_SND_SOC_IMX_CS42888=y
240CONFIG_SND_SOC_IMX_WM8962=y
241CONFIG_SND_SOC_IMX_SGTL5000=y
242CONFIG_SND_SOC_IMX_SPDIF=y
243CONFIG_SND_SOC_IMX_MC13783=y
244CONFIG_SND_SOC_IMX_HDMI=y
245CONFIG_SND_SOC_IMX_SI476X=y
246CONFIG_USB=y
247CONFIG_USB_EHCI_HCD=y
248CONFIG_USB_STORAGE=y
249CONFIG_USB_CHIPIDEA=y
250CONFIG_USB_CHIPIDEA_UDC=y
251CONFIG_USB_CHIPIDEA_HOST=y
252CONFIG_USB_PHY=y
253CONFIG_NOP_USB_XCEIV=y
254CONFIG_USB_MXS_PHY=y
255CONFIG_USB_GADGET=y
256CONFIG_USB_ZERO=m
257CONFIG_USB_ETH=m
258CONFIG_USB_MASS_STORAGE=m
259CONFIG_USB_G_SERIAL=m
260CONFIG_MMC=y
261CONFIG_MMC_UNSAFE_RESUME=y
262CONFIG_MMC_SDHCI=y
263CONFIG_MMC_SDHCI_PLTFM=y
264CONFIG_MMC_SDHCI_ESDHC_IMX=y
265CONFIG_MXC_IPU=y
266CONFIG_MXC_GPU_VIV=y
267CONFIG_MXC_ASRC=y
268CONFIG_MXC_MIPI_CSI2=y
269CONFIG_MXC_MLB150=m
270CONFIG_NEW_LEDS=y
271CONFIG_LEDS_CLASS=y
272CONFIG_RTC_CLASS=y
273CONFIG_RTC_INTF_DEV_UIE_EMUL=y
274CONFIG_RTC_DRV_MC13XXX=y
275CONFIG_RTC_DRV_MXC=y
276CONFIG_RTC_DRV_SNVS=y
277CONFIG_DMADEVICES=y
278CONFIG_MXC_PXP_V2=y
279CONFIG_IMX_SDMA=y
280CONFIG_MXS_DMA=y
281CONFIG_STAGING=y
282CONFIG_COMMON_CLK_DEBUG=y
283# CONFIG_IOMMU_SUPPORT is not set
284CONFIG_PWM=y
285CONFIG_PWM_IMX=y
286CONFIG_EXT2_FS=y
287CONFIG_EXT2_FS_XATTR=y
288CONFIG_EXT2_FS_POSIX_ACL=y
289CONFIG_EXT2_FS_SECURITY=y
290CONFIG_EXT3_FS=y
291CONFIG_EXT3_FS_POSIX_ACL=y
292CONFIG_EXT3_FS_SECURITY=y
293CONFIG_EXT4_FS=y
294CONFIG_EXT4_FS_POSIX_ACL=y
295CONFIG_EXT4_FS_SECURITY=y
296CONFIG_QUOTA=y
297CONFIG_QUOTA_NETLINK_INTERFACE=y
298# CONFIG_PRINT_QUOTA_WARNING is not set
299CONFIG_AUTOFS4_FS=y
300CONFIG_FUSE_FS=y
301CONFIG_ISO9660_FS=m
302CONFIG_JOLIET=y
303CONFIG_ZISOFS=y
304CONFIG_UDF_FS=m
305CONFIG_MSDOS_FS=m
306CONFIG_VFAT_FS=y
307CONFIG_TMPFS=y
308CONFIG_JFFS2_FS=y
309CONFIG_UBIFS_FS=y
310CONFIG_NFS_FS=y
311CONFIG_NFS_V3_ACL=y
312CONFIG_NFS_V4=y
313CONFIG_ROOT_NFS=y
314CONFIG_NLS_DEFAULT="cp437"
315CONFIG_NLS_CODEPAGE_437=y
316CONFIG_NLS_ASCII=y
317CONFIG_NLS_ISO8859_1=y
318CONFIG_NLS_ISO8859_15=m
319CONFIG_NLS_UTF8=y
320CONFIG_MAGIC_SYSRQ=y
321# CONFIG_SCHED_DEBUG is not set
322# CONFIG_DEBUG_BUGVERBOSE is not set
323# CONFIG_FTRACE is not set
324CONFIG_SECURITYFS=y
325CONFIG_CRYPTO_USER=y
326CONFIG_CRYPTO_TEST=m
327CONFIG_CRYPTO_CCM=y
328CONFIG_CRYPTO_GCM=y
329CONFIG_CRYPTO_CBC=y
330CONFIG_CRYPTO_CTS=y
331CONFIG_CRYPTO_ECB=y
332CONFIG_CRYPTO_LRW=y
333CONFIG_CRYPTO_XTS=y
334CONFIG_CRYPTO_MD4=y
335CONFIG_CRYPTO_MD5=y
336CONFIG_CRYPTO_MICHAEL_MIC=y
337CONFIG_CRYPTO_RMD128=y
338CONFIG_CRYPTO_RMD160=y
339CONFIG_CRYPTO_RMD256=y
340CONFIG_CRYPTO_RMD320=y
341CONFIG_CRYPTO_SHA1_ARM=y
342CONFIG_CRYPTO_SHA256=y
343CONFIG_CRYPTO_SHA512=y
344CONFIG_CRYPTO_TGR192=y
345CONFIG_CRYPTO_WP512=y
346CONFIG_CRYPTO_AES_ARM=y
347CONFIG_CRYPTO_BLOWFISH=y
348CONFIG_CRYPTO_CAMELLIA=y
349CONFIG_CRYPTO_DES=y
350CONFIG_CRYPTO_TWOFISH=y
351# CONFIG_CRYPTO_ANSI_CPRNG is not set
352CONFIG_CRYPTO_DEV_FSL_CAAM=y
353CONFIG_CRYPTO_DEV_FSL_CAAM_SM=y
354CONFIG_CRYPTO_DEV_FSL_CAAM_SM_TEST=y
355CONFIG_CRYPTO_DEV_FSL_CAAM_SECVIO=y
356CONFIG_CRC_CCITT=m
357CONFIG_CRC_T10DIF=y
358CONFIG_CRC7=m
359CONFIG_LIBCRC32C=m
diff --git a/recipes-kernel/linux/linux-wandboard.inc b/recipes-kernel/linux/linux-wandboard.inc
new file mode 100644
index 0000000..792e991
--- /dev/null
+++ b/recipes-kernel/linux/linux-wandboard.inc
@@ -0,0 +1,24 @@
1# Adapted from linux-imx.inc, copyright (C) 2012, 2013 O.S. Systems Software LTDA
2# Released under the MIT license (see COPYING.MIT for the terms)
3
4SUMMARY = "Linux kernel for Wandboard"
5LICENSE = "GPLv2"
6LIC_FILES_CHKSUM = "file://COPYING;md5=d7810fab7487fb0aad327b76f1be7cd7"
7
8require recipes-kernel/linux/linux-imx.inc
9
10# Put a local version until we have a true SRCREV to point to
11LOCALVERSION ?= "+yocto"
12SCMVERSION ?= "y"
13
14SRCBRANCH ??= "master"
15
16# Allow override of WANDBOARD_GITHUB_MIRROR to make use of
17# local repository easier
18WANDBOARD_GITHUB_MIRROR ?= "git://github.com/wandboard-org/linux.git"
19
20# SRC_URI for wandboard kernel
21SRC_URI = "${WANDBOARD_GITHUB_MIRROR};branch=${SRCBRANCH} \
22 file://defconfig \
23"
24
diff --git a/recipes-kernel/linux/linux-wandboard_3.0.35.bb b/recipes-kernel/linux/linux-wandboard_3.0.35.bb
new file mode 100644
index 0000000..b443d42
--- /dev/null
+++ b/recipes-kernel/linux/linux-wandboard_3.0.35.bb
@@ -0,0 +1,20 @@
1# adapted from linux-imx.inc, copyright (C) 2012-2013 O.S. Systems Software LTDA
2# Released under the MIT license (see COPYING.MIT for the terms)
3
4include linux-wandboard.inc
5
6# Wandboard branch - based on 4.0.0 from Freescale git
7SRCBRANCH = "wandboard_imx_3.0.35_4.0.0"
8SRCREV = "d35902c77a077a25e4dfedc6aac11ba49c52c586"
9LOCALVERSION = "-4.0.0-wandboard"
10
11# GPU support patches
12SRC_URI += "file://drm-vivante-Add-00-sufix-in-returned-bus-Id.patch \
13 file://0001-ENGR00255688-4.6.9p11.1-gpu-GPU-Kernel-driver-integr.patch \
14 file://0002-ENGR00265465-gpu-Add-global-value-for-minimum-3D-clo.patch \
15 file://0003-ENGR00261814-4-gpu-use-new-PU-power-on-off-interface.patch \
16 file://0004-ENGR00264288-1-GPU-Integrate-4.6.9p12-release-kernel.patch \
17 file://0005-ENGR00264275-GPU-Correct-suspend-resume-calling-afte.patch \
18 file://0006-ENGR00265130-gpu-Correct-section-mismatch-in-gpu-ker.patch"
19
20COMPATIBLE_MACHINE = "(wandboard)"
diff --git a/recipes-kernel/linux/linux-wandboard_3.10.17.bb b/recipes-kernel/linux/linux-wandboard_3.10.17.bb
new file mode 100644
index 0000000..5449374
--- /dev/null
+++ b/recipes-kernel/linux/linux-wandboard_3.10.17.bb
@@ -0,0 +1,15 @@
1# adapted from linux-imx.inc, copyright (C) 2012-2013 O.S. Systems Software LTDA
2# Released under the MIT license (see COPYING.MIT for the terms)
3
4include linux-wandboard.inc
5require recipes-kernel/linux/linux-dtb.inc
6
7DEPENDS += "lzop-native bc-native"
8
9# Wandboard branch - based on 3.10.17_1.0.0_ga from Freescale git
10SRCBRANCH = "wandboard_imx_3.10.17_1.0.0_ga"
11SRCREV = "9d567e4f285e80bc332e79f0636259bc05a4ee3b"
12LOCALVERSION = "-1.0.0-wandboard"
13
14
15COMPATIBLE_MACHINE = "(wandboard)"