diff options
author | Waldemar Brodkorb <wbx@openadk.org> | 2014-03-11 14:21:31 +0100 |
---|---|---|
committer | Waldemar Brodkorb <wbx@openadk.org> | 2014-03-11 14:21:31 +0100 |
commit | d65d767c45ebce8001ec1e028fba9d7881b5f847 (patch) | |
tree | 93d6a8b9f94efaa754619cc54c4dd46d29ed5036 /target/linux | |
parent | f9c7b800e7bf803b808cdbefd645a6878d0a101e (diff) | |
parent | 2e0e960c27afd0218d58157eefc89d5456406035 (diff) |
Merge branch 'master' of git+ssh://openadk.org/git/openadk
Diffstat (limited to 'target/linux')
-rw-r--r-- | target/linux/config/Config.in.audio | 33 | ||||
-rw-r--r-- | target/linux/config/Config.in.cpu | 22 | ||||
-rw-r--r-- | target/linux/config/Config.in.debug | 29 | ||||
-rw-r--r-- | target/linux/config/Config.in.netfilter.ip4 | 11 | ||||
-rw-r--r-- | target/linux/config/Config.in.pm | 9 | ||||
-rw-r--r-- | target/linux/config/Config.in.watchdog | 2 | ||||
-rw-r--r-- | target/linux/kernel.config | 5 | ||||
-rw-r--r-- | target/linux/patches/3.10.30/bsd-compatibility.patch (renamed from target/linux/patches/3.13.5/bsd-compatibility.patch) | 0 | ||||
-rw-r--r-- | target/linux/patches/3.10.30/solidrun-cubox-i.patch | 584365 | ||||
-rw-r--r-- | target/linux/patches/3.10.30/startup.patch | 12 | ||||
-rw-r--r-- | target/linux/patches/3.13.6/bsd-compatibility.patch | 2538 | ||||
-rw-r--r-- | target/linux/patches/3.13.6/defaults.patch (renamed from target/linux/patches/3.13.5/defaults.patch) | 0 | ||||
-rw-r--r-- | target/linux/patches/3.13.6/disable-netfilter.patch (renamed from target/linux/patches/3.13.5/disable-netfilter.patch) | 0 | ||||
-rw-r--r-- | target/linux/patches/3.13.6/export-symbol-for-exmap.patch (renamed from target/linux/patches/3.13.5/export-symbol-for-exmap.patch) | 0 | ||||
-rw-r--r-- | target/linux/patches/3.13.6/gemalto.patch (renamed from target/linux/patches/3.13.5/gemalto.patch) | 0 | ||||
-rw-r--r-- | target/linux/patches/3.13.6/lemote-rfkill.patch (renamed from target/linux/patches/3.13.5/lemote-rfkill.patch) | 0 | ||||
-rw-r--r-- | target/linux/patches/3.13.6/microblaze-axi.patch (renamed from target/linux/patches/3.13.5/microblaze-axi.patch) | 0 | ||||
-rw-r--r-- | target/linux/patches/3.13.6/microblaze-ethernet.patch (renamed from target/linux/patches/3.13.5/microblaze-ethernet.patch) | 0 | ||||
-rw-r--r-- | target/linux/patches/3.13.6/microblaze-setup.patch (renamed from target/linux/patches/3.13.5/microblaze-setup.patch) | 0 | ||||
-rw-r--r-- | target/linux/patches/3.13.6/mtd-rootfs.patch (renamed from target/linux/patches/3.13.5/mtd-rootfs.patch) | 0 | ||||
-rw-r--r-- | target/linux/patches/3.13.6/non-static.patch (renamed from target/linux/patches/3.13.5/non-static.patch) | 0 | ||||
-rw-r--r-- | target/linux/patches/3.13.6/ppc64-missing-zlib.patch (renamed from target/linux/patches/3.13.5/ppc64-missing-zlib.patch) | 0 | ||||
-rw-r--r-- | target/linux/patches/3.13.6/ppc64-missing_arch_random.patch (renamed from target/linux/patches/3.13.5/ppc64-missing_arch_random.patch) | 0 | ||||
-rw-r--r-- | target/linux/patches/3.13.6/raspberry.patch (renamed from target/linux/patches/3.13.5/raspberry.patch) | 7216 | ||||
-rw-r--r-- | target/linux/patches/3.13.6/startup.patch (renamed from target/linux/patches/3.13.5/startup.patch) | 0 | ||||
-rw-r--r-- | target/linux/patches/3.13.6/uuid.patch (renamed from target/linux/patches/3.13.5/uuid.patch) | 0 | ||||
-rw-r--r-- | target/linux/patches/3.13.6/vga-cons-default-off.patch (renamed from target/linux/patches/3.13.5/vga-cons-default-off.patch) | 0 | ||||
-rw-r--r-- | target/linux/patches/3.13.6/wlan-cf.patch (renamed from target/linux/patches/3.13.5/wlan-cf.patch) | 0 | ||||
-rw-r--r-- | target/linux/patches/3.13.6/xargs.patch (renamed from target/linux/patches/3.13.5/xargs.patch) | 0 | ||||
-rw-r--r-- | target/linux/patches/3.13.6/zlib-inflate.patch (renamed from target/linux/patches/3.13.5/zlib-inflate.patch) | 0 |
30 files changed, 593447 insertions, 795 deletions
diff --git a/target/linux/config/Config.in.audio b/target/linux/config/Config.in.audio index 76c353f0c..c466bed45 100644 --- a/target/linux/config/Config.in.audio +++ b/target/linux/config/Config.in.audio @@ -7,9 +7,6 @@ config ADK_KERNEL_SND_ARM config ADK_KERNEL_SND_USB boolean -config ADK_KERNEL_SND_SOC - boolean - config ADK_KERNEL_SND_PXA2XX_AC97 boolean @@ -105,6 +102,10 @@ config ADK_KPACKAGE_KMOD_SND_CS5535AUDIO help ALSA AMD CS5535 driver +config ADK_KPACKAGE_KMOD_SND_SOC + tristate + default n + config ADK_KERNEL_SND_PXA2XX_SOC tristate default n @@ -113,10 +114,10 @@ config ADK_KPACKAGE_KMOD_SND_PXA2XX_SOC_SPITZ prompt "kmod-snd-pxa2xx-soc-spitz..... ALSA SOC Sharp Zaurus" tristate select ADK_KERNEL_SND_ARM - select ADK_KERNEL_SND_SOC select ADK_KERNEL_SND_PXA2XX_AC97 - select ADK_KPACKAGE_KMOD_SND_AC97_CODEC select ADK_KPACKAGE_KMOD_SND + select ADK_KPACKAGE_KMOD_SND_AC97_CODEC + select ADK_KPACKAGE_KMOD_SND_SOC select ADK_KERNEL_SND_PXA2XX_SOC depends on ADK_TARGET_SYSTEM_SHARP_ZAURUS default y if ADK_TARGET_SYSTEM_SHARP_ZAURUS @@ -131,4 +132,26 @@ config ADK_KPACKAGE_KMOD_SND_BCM2835 default y if ADK_TARGET_SYSTEM_RASPBERRY_PI default n +config ADK_KPACKAGE_KMOD_SND_BCM2708_SOC_I2S + prompt "kmod-snd-bcm2708-soc-i2s........ ALSA SOC I2S Raspberry PI" + select ADK_KPACKAGE_KMOD_SND + select ADK_KERNEL_SND_ARM + select ADK_KPACKAGE_KMOD_SND_SOC + boolean + default n + +config ADK_KPACKAGE_KMOD_SND_BCM2708_SOC_HIFIBERRY_DAC + prompt "kmod-snd-bcm2708-hifiberry-dac.... ALSA for Raspberry PI with hifiberry DAC" + tristate + select ADK_KPACKAGE_KMOD_SND_BCM2708_SOC_I2S + depends on ADK_TARGET_SYSTEM_RASPBERRY_PI + default n + +config ADK_KPACKAGE_KMOD_SND_BCM2708_SOC_HIFIBERRY_DIGI + prompt "kmod-snd-bcm2708-hifiberry-digi... ALSA for Raspberry PI with hifiberry DIGI" + tristate + select ADK_KPACKAGE_KMOD_SND_BCM2708_SOC_I2S + depends on ADK_TARGET_SYSTEM_RASPBERRY_PI + default n + endmenu diff --git a/target/linux/config/Config.in.cpu b/target/linux/config/Config.in.cpu index efaf3a658..a8dfd5188 100644 --- a/target/linux/config/Config.in.cpu +++ b/target/linux/config/Config.in.cpu @@ -39,6 +39,14 @@ config ADK_KERNEL_CPU_FREQ boolean default n +config ADK_KERNEL_REGULATOR + boolean + default n + +config ADK_KERNEL_REGULATOR_ANATOP + boolean + default n + config ADK_KERNEL_CPU_FREQ_GOV_PERFORMANCE boolean default n @@ -59,15 +67,25 @@ config ADK_KERNEL_CPU_FREQ_GOV_CONSERVATIVE boolean default n +config ADK_KERNEL_ARM_IMX6_CPUFREQ + prompt "CPU frequency support for cubox-i" + boolean + select ADK_KERNEL_CPU_FREQ + select ADK_KERNEL_REGULATOR + select ADK_KERNEL_REGULATOR_ANATOP + default y if ADK_TARGET_SYSTEM_CUBOX_I + depends on ADK_TARGET_SYSTEM_CUBOX_I + config ADK_KERNEL_ARM_BCM2835_CPUFREQ - prompt "CPU frequency support" + prompt "CPU frequency support for raspberry-pi" boolean select ADK_KERNEL_CPU_FREQ default y if ADK_TARGET_SYSTEM_RASPBERRY_PI + depends on ADK_TARGET_SYSTEM_RASPBERRY_PI choice prompt "Governor" -depends on ADK_KERNEL_ARM_BCM2835_CPUFREQ +depends on ADK_KERNEL_ARM_BCM2835_CPUFREQ || ADK_KERNEL_ARM_IMX6_CPUFREQ config ADK_KERNEL_CPU_FREQ_DEFAULT_GOV_ONDEMAND boolean "ondemand" diff --git a/target/linux/config/Config.in.debug b/target/linux/config/Config.in.debug index 6236b329b..80387c627 100644 --- a/target/linux/config/Config.in.debug +++ b/target/linux/config/Config.in.debug @@ -25,6 +25,35 @@ config ADK_QUIET_KERNEL help Make bootup quiet without messages from the kernel. +config ADK_KERNEL_EARLY_PRINTK + boolean + default n + +config ADK_KERNEL_PRINTK + prompt "Enable printk to save space and quieten bootup" + boolean + select ADK_KERNEL_EARLY_PRINTK + default y + depends on !ADK_PKG_TEST + help + Disable printk to save space and quieten bootup. + +config ADK_KERNEL_PRINTK_TIME + prompt "Enable timing information for printk" + boolean + depends on ADK_KERNEL_PRINTK + default n + help + Enable timing information for printk, to analyze kernel + bootup performance. + +config ADK_KERNEL_BUG + prompt "Enable BUGS() in the kernel" + boolean + default n + help + Enable if you need BUGS() in the kernel. + config ADK_KERNEL_NETCONSOLE prompt "Netconsole" boolean diff --git a/target/linux/config/Config.in.netfilter.ip4 b/target/linux/config/Config.in.netfilter.ip4 index cf33c02a2..b43a566b9 100644 --- a/target/linux/config/Config.in.netfilter.ip4 +++ b/target/linux/config/Config.in.netfilter.ip4 @@ -37,9 +37,10 @@ config ADK_KPACKAGE_KMOD_IP_NF_FILTER config ADK_KPACKAGE_KMOD_FULL_NAT tristate "Meta package for Full NAT" select ADK_KPACKAGE_KMOD_NF_NAT if ADK_KERNEL_VERSION_3_4_82 + select ADK_KPACKAGE_KMOD_NF_NAT_IPV4 if ADK_KERNEL_VERSION_3_10_30 select ADK_KPACKAGE_KMOD_NF_NAT_IPV4 if ADK_KERNEL_VERSION_3_11_10 - select ADK_KPACKAGE_KMOD_NF_NAT_IPV4 if ADK_KERNEL_VERSION_3_12_11 - select ADK_KPACKAGE_KMOD_NF_NAT_IPV4 if ADK_KERNEL_VERSION_3_13_5 + select ADK_KPACKAGE_KMOD_NF_NAT_IPV4 if ADK_KERNEL_VERSION_3_12_13 + select ADK_KPACKAGE_KMOD_NF_NAT_IPV4 if ADK_KERNEL_VERSION_3_13_6 config ADK_KPACKAGE_KMOD_NF_NAT tristate 'Full NAT' @@ -53,8 +54,10 @@ config ADK_KPACKAGE_KMOD_NF_NAT config ADK_KPACKAGE_KMOD_NF_NAT_IPV4 tristate 'Full NAT' depends on ADK_KPACKAGE_KMOD_IP_NF_IPTABLES - depends on ADK_KERNEL_VERSION_3_11_10 || ADK_KERNEL_VERSION_3_12_11 \ - || ADK_KERNEL_VERSION_3_13_5 + depends on ADK_KERNEL_VERSION_3_10_30 \ + || ADK_KERNEL_VERSION_3_11_10 \ + || ADK_KERNEL_VERSION_3_12_13 \ + || ADK_KERNEL_VERSION_3_13_6 help The Full NAT option allows masquerading, port forwarding and other forms of full Network Address Port Translation. It is controlled by diff --git a/target/linux/config/Config.in.pm b/target/linux/config/Config.in.pm index deff5b3f6..4bfe42c58 100644 --- a/target/linux/config/Config.in.pm +++ b/target/linux/config/Config.in.pm @@ -1,5 +1,6 @@ -config ADK_KERNEL_PM +config ADK_KERNEL_PM_RUNTIME boolean + default y if ADK_TARGET_SYSTEM_CUBOX_I config ADK_KERNEL_ACPI boolean @@ -28,7 +29,7 @@ depends on ADK_TARGET_WITH_ACPI || ADK_TARGET_SYSTEM_LEMOTE_YEELONG config ADK_HARDWARE_ACPI prompt "Enable ACPI support" boolean - select ADK_KERNEL_PM + select ADK_KERNEL_PM_RUNTIME select ADK_KERNEL_ACPI select ADK_KERNEL_ACPI_SYSFS_POWER select ADK_KERNEL_ACPI_AC @@ -44,7 +45,7 @@ config ADK_HARDWARE_ACPI config ADK_KERNEL_SUSPEND prompt "Enable Suspend-to-RAM support" boolean - select ADK_KERNEL_PM + select ADK_KERNEL_PM_RUNTIME default y if ADK_TARGET_SYSTEM_IBM_X40 default y if ADK_TARGET_SYSTEM_LEMOTE_YEELONG default n @@ -54,7 +55,7 @@ config ADK_KERNEL_SUSPEND config ADK_KERNEL_HIBERNATION prompt "Enable Suspend-to-Disk support" boolean - select ADK_KERNEL_PM + select ADK_KERNEL_PM_RUNTIME select ADK_KERNEL_SWAP select BUSYBOX_SWAPONOFF default y if ADK_TARGET_SYSTEM_IBM_X40 diff --git a/target/linux/config/Config.in.watchdog b/target/linux/config/Config.in.watchdog index 08e884a01..4a727e7d6 100644 --- a/target/linux/config/Config.in.watchdog +++ b/target/linux/config/Config.in.watchdog @@ -73,7 +73,7 @@ config ADK_KERNEL_RC32434_WDT Routerboard 532's SoC, the IDT RC32434. config ADK_KPACKAGE_KMOD_SOFT_WATCHDOG - prompt "kmod-softdog...................... Software watchdog" + prompt "kmod-soft-watchdog...................... Software watchdog" tristate default n select ADK_KERNEL_WATCHDOG diff --git a/target/linux/kernel.config b/target/linux/kernel.config index 26205a842..a28c2088b 100644 --- a/target/linux/kernel.config +++ b/target/linux/kernel.config @@ -7,6 +7,7 @@ CONFIG_SYSVIPC=y CONFIG_SYSVIPC_SYSCTL=y CONFIG_POSIX_MQUEUE=y CONFIG_POSIX_MQUEUE_SYSCTL=y +CONFIG_SLOB=y CONFIG_NET=y CONFIG_PACKET=y CONFIG_UNIX=y @@ -27,8 +28,6 @@ CONFIG_BINFMT_SCRIPT=y CONFIG_DEVTMPFS=y CONFIG_DEVTMPFS_MOUNT=y CONFIG_STANDALONE=y -CONFIG_PRINTK=y -CONFIG_BUG=n CONFIG_FUTEX=y CONFIG_EPOLL=y CONFIG_SIGNALFD=y @@ -39,5 +38,3 @@ CONFIG_AIO=y CONFIG_PCI_QUIRKS=y CONFIG_TTY=y CONFIG_UNIX98_PTYS=y -CONFIG_PRINTK_TIME=y -CONFIG_EARLY_PRINTK=y diff --git a/target/linux/patches/3.13.5/bsd-compatibility.patch b/target/linux/patches/3.10.30/bsd-compatibility.patch index b954b658f..b954b658f 100644 --- a/target/linux/patches/3.13.5/bsd-compatibility.patch +++ b/target/linux/patches/3.10.30/bsd-compatibility.patch diff --git a/target/linux/patches/3.10.30/solidrun-cubox-i.patch b/target/linux/patches/3.10.30/solidrun-cubox-i.patch new file mode 100644 index 000000000..beaa71b4e --- /dev/null +++ b/target/linux/patches/3.10.30/solidrun-cubox-i.patch @@ -0,0 +1,584365 @@ +diff -Nur linux-3.10.30/Documentation/ABI/testing/sysfs-class-mtd linux-3.10.30-cubox-i/Documentation/ABI/testing/sysfs-class-mtd +--- linux-3.10.30/Documentation/ABI/testing/sysfs-class-mtd 2014-02-13 22:48:15.000000000 +0100 ++++ linux-3.10.30-cubox-i/Documentation/ABI/testing/sysfs-class-mtd 2014-03-08 20:32:51.000000000 +0100 +@@ -104,7 +104,7 @@ + One of the following ASCII strings, representing the device + type: + +- absent, ram, rom, nor, nand, dataflash, ubi, unknown ++ absent, ram, rom, nor, nand, mlc-nand, dataflash, ubi, unknown + + What: /sys/class/mtd/mtdX/writesize + Date: April 2009 +@@ -128,9 +128,8 @@ + Contact: linux-mtd@lists.infradead.org + Description: + Maximum number of bit errors that the device is capable of +- correcting within each region covering an ecc step. This will +- always be a non-negative integer. Note that some devices will +- have multiple ecc steps within each writesize region. ++ correcting within each region covering an ECC step (see ++ ecc_step_size). This will always be a non-negative integer. + + In the case of devices lacking any ECC capability, it is 0. + +@@ -173,3 +172,15 @@ + This is generally applicable only to NAND flash devices with ECC + capability. It is ignored on devices lacking ECC capability; + i.e., devices for which ecc_strength is zero. ++ ++What: /sys/class/mtd/mtdX/ecc_step_size ++Date: May 2013 ++KernelVersion: 3.10 ++Contact: linux-mtd@lists.infradead.org ++Description: ++ The size of a single region covered by ECC, known as the ECC ++ step. Devices may have several equally sized ECC steps within ++ each writesize region. ++ ++ It will always be a non-negative integer. In the case of ++ devices lacking any ECC capability, it is 0. +diff -Nur linux-3.10.30/Documentation/DocBook/mtdnand.tmpl linux-3.10.30-cubox-i/Documentation/DocBook/mtdnand.tmpl +--- linux-3.10.30/Documentation/DocBook/mtdnand.tmpl 2014-02-13 22:48:15.000000000 +0100 ++++ linux-3.10.30-cubox-i/Documentation/DocBook/mtdnand.tmpl 2014-03-08 20:32:51.000000000 +0100 +@@ -1222,10 +1222,6 @@ + #define NAND_BBT_VERSION 0x00000100 + /* Create a bbt if none axists */ + #define NAND_BBT_CREATE 0x00000200 +-/* Search good / bad pattern through all pages of a block */ +-#define NAND_BBT_SCANALLPAGES 0x00000400 +-/* Scan block empty during good / bad block scan */ +-#define NAND_BBT_SCANEMPTY 0x00000800 + /* Write bbt if neccecary */ + #define NAND_BBT_WRITE 0x00001000 + /* Read and write back block contents when writing bbt */ +diff -Nur linux-3.10.30/Documentation/arm/small_task_packing.txt linux-3.10.30-cubox-i/Documentation/arm/small_task_packing.txt +--- linux-3.10.30/Documentation/arm/small_task_packing.txt 1970-01-01 01:00:00.000000000 +0100 ++++ linux-3.10.30-cubox-i/Documentation/arm/small_task_packing.txt 2014-03-08 20:32:51.000000000 +0100 +@@ -0,0 +1,136 @@ ++Small Task Packing in the big.LITTLE MP Reference Patch Set ++ ++What is small task packing? ++---- ++Simply that the scheduler will fit as many small tasks on a single CPU ++as possible before using other CPUs. A small task is defined as one ++whose tracked load is less than 90% of a NICE_0 task. This is a change ++from the usual behavior since the scheduler will normally use an idle ++CPU for a waking task unless that task is considered cache hot. ++ ++ ++How is it implemented? ++---- ++Since all small tasks must wake up relatively frequently, the main ++requirement for packing small tasks is to select a partly-busy CPU when ++waking rather than looking for an idle CPU. We use the tracked load of ++the CPU runqueue to determine how heavily loaded each CPU is and the ++tracked load of the task to determine if it will fit on the CPU. We ++always start with the lowest-numbered CPU in a sched domain and stop ++looking when we find a CPU with enough space for the task. ++ ++Some further tweaks are necessary to suppress load balancing when the ++CPU is not fully loaded, otherwise the scheduler attempts to spread ++tasks evenly across the domain. ++ ++ ++How does it interact with the HMP patches? ++---- ++Firstly, we only enable packing on the little domain. The intent is that ++the big domain is intended to spread tasks amongst the available CPUs ++one-task-per-CPU. The little domain however is attempting to use as ++little power as possible while servicing its tasks. ++ ++Secondly, since we offload big tasks onto little CPUs in order to try ++to devote one CPU to each task, we have a threshold above which we do ++not try to pack a task and instead will select an idle CPU if possible. ++This maintains maximum forward progress for busy tasks temporarily ++demoted from big CPUs. ++ ++ ++Can the behaviour be tuned? ++---- ++Yes, the load level of a 'full' CPU can be easily modified in the source ++and is exposed through sysfs as /sys/kernel/hmp/packing_limit to be ++changed at runtime. The presence of the packing behaviour is controlled ++by CONFIG_SCHED_HMP_LITTLE_PACKING and can be disabled at run-time ++using /sys/kernel/hmp/packing_enable. ++The definition of a small task is hard coded as 90% of NICE_0_LOAD ++and cannot be modified at run time. ++ ++ ++Why do I need to tune it? ++---- ++The optimal configuration is likely to be different depending upon the ++design and manufacturing of your SoC. ++ ++In the main, there are two system effects from enabling small task ++packing. ++ ++1. CPU operating point may increase ++2. wakeup latency of tasks may be increased ++ ++There are also likely to be secondary effects from loading one CPU ++rather than spreading tasks. ++ ++Note that all of these system effects are dependent upon the workload ++under consideration. ++ ++ ++CPU Operating Point ++---- ++The primary impact of loading one CPU with a number of light tasks is to ++increase the compute requirement of that CPU since it is no longer idle ++as often. Increased compute requirement causes an increase in the ++frequency of the CPU through CPUfreq. ++ ++Consider this example: ++We have a system with 3 CPUs which can operate at any frequency between ++350MHz and 1GHz. The system has 6 tasks which would each produce 10% ++load at 1GHz. The scheduler has frequency-invariant load scaling ++enabled. Our DVFS governor aims for 80% utilization at the chosen ++frequency. ++ ++Without task packing, these tasks will be spread out amongst all CPUs ++such that each has 2. This will produce roughly 20% system load, and ++the frequency of the package will remain at 350MHz. ++ ++With task packing set to the default packing_limit, all of these tasks ++will sit on one CPU and require a package frequency of ~750MHz to reach ++80% utilization. (0.75 = 0.6 * 0.8). ++ ++When a package operates on a single frequency domain, all CPUs in that ++package share frequency and voltage. ++ ++Depending upon the SoC implementation there can be a significant amount ++of energy lost to leakage from idle CPUs. The decision about how ++loaded a CPU must be to be considered 'full' is therefore controllable ++through sysfs (sys/kernel/hmp/packing_limit) and directly in the code. ++ ++Continuing the example, lets set packing_limit to 450 which means we ++will pack tasks until the total load of all running tasks >= 450. In ++practise, this is very similar to a 55% idle 1Ghz CPU. ++ ++Now we are only able to place 4 tasks on CPU0, and two will overflow ++onto CPU1. CPU0 will have a load of 40% and CPU1 will have a load of ++20%. In order to still hit 80% utilization, CPU0 now only needs to ++operate at (0.4*0.8=0.32) 320MHz, which means that the lowest operating ++point will be selected, the same as in the non-packing case, except that ++now CPU2 is no longer needed and can be power-gated. ++ ++In order to use less energy, the saving from power-gating CPU2 must be ++more than the energy spent running CPU0 for the extra cycles. This ++depends upon the SoC implementation. ++ ++This is obviously a contrived example requiring all the tasks to ++be runnable at the same time, but it illustrates the point. ++ ++ ++Wakeup Latency ++---- ++This is an unavoidable consequence of trying to pack tasks together ++rather than giving them a CPU each. If you cannot find an acceptable ++level of wakeup latency, you should turn packing off. ++ ++Cyclictest is a good test application for determining the added latency ++when configuring packing. ++ ++ ++Why is it turned off for the VersatileExpress V2P_CA15A7 CoreTile? ++---- ++Simply, this core tile only has power gating for the whole A7 package. ++When small task packing is enabled, all our low-energy use cases ++normally fit onto one A7 CPU. We therefore end up with 2 mostly-idle ++CPUs and one mostly-busy CPU. This decreases the amount of time ++available where the whole package is idle and can be turned off. ++ +diff -Nur linux-3.10.30/Documentation/devicetree/bindings/arm/cci.txt linux-3.10.30-cubox-i/Documentation/devicetree/bindings/arm/cci.txt +--- linux-3.10.30/Documentation/devicetree/bindings/arm/cci.txt 1970-01-01 01:00:00.000000000 +0100 ++++ linux-3.10.30-cubox-i/Documentation/devicetree/bindings/arm/cci.txt 2014-03-08 20:32:51.000000000 +0100 +@@ -0,0 +1,172 @@ ++======================================================= ++ARM CCI cache coherent interconnect binding description ++======================================================= ++ ++ARM multi-cluster systems maintain intra-cluster coherency through a ++cache coherent interconnect (CCI) that is capable of monitoring bus ++transactions and manage coherency, TLB invalidations and memory barriers. ++ ++It allows snooping and distributed virtual memory message broadcast across ++clusters, through memory mapped interface, with a global control register ++space and multiple sets of interface control registers, one per slave ++interface. ++ ++Bindings for the CCI node follow the ePAPR standard, available from: ++ ++www.power.org/documentation/epapr-version-1-1/ ++ ++with the addition of the bindings described in this document which are ++specific to ARM. ++ ++* CCI interconnect node ++ ++ Description: Describes a CCI cache coherent Interconnect component ++ ++ Node name must be "cci". ++ Node's parent must be the root node /, and the address space visible ++ through the CCI interconnect is the same as the one seen from the ++ root node (ie from CPUs perspective as per DT standard). ++ Every CCI node has to define the following properties: ++ ++ - compatible ++ Usage: required ++ Value type: <string> ++ Definition: must be set to ++ "arm,cci-400" ++ ++ - reg ++ Usage: required ++ Value type: <prop-encoded-array> ++ Definition: A standard property. Specifies base physical ++ address of CCI control registers common to all ++ interfaces. ++ ++ - ranges: ++ Usage: required ++ Value type: <prop-encoded-array> ++ Definition: A standard property. Follow rules in the ePAPR for ++ hierarchical bus addressing. CCI interfaces ++ addresses refer to the parent node addressing ++ scheme to declare their register bases. ++ ++ CCI interconnect node can define the following child nodes: ++ ++ - CCI control interface nodes ++ ++ Node name must be "slave-if". ++ Parent node must be CCI interconnect node. ++ ++ A CCI control interface node must contain the following ++ properties: ++ ++ - compatible ++ Usage: required ++ Value type: <string> ++ Definition: must be set to ++ "arm,cci-400-ctrl-if" ++ ++ - interface-type: ++ Usage: required ++ Value type: <string> ++ Definition: must be set to one of {"ace", "ace-lite"} ++ depending on the interface type the node ++ represents. ++ ++ - reg: ++ Usage: required ++ Value type: <prop-encoded-array> ++ Definition: the base address and size of the ++ corresponding interface programming ++ registers. ++ ++* CCI interconnect bus masters ++ ++ Description: masters in the device tree connected to a CCI port ++ (inclusive of CPUs and their cpu nodes). ++ ++ A CCI interconnect bus master node must contain the following ++ properties: ++ ++ - cci-control-port: ++ Usage: required ++ Value type: <phandle> ++ Definition: a phandle containing the CCI control interface node ++ the master is connected to. ++ ++Example: ++ ++ cpus { ++ #size-cells = <0>; ++ #address-cells = <1>; ++ ++ CPU0: cpu@0 { ++ device_type = "cpu"; ++ compatible = "arm,cortex-a15"; ++ cci-control-port = <&cci_control1>; ++ reg = <0x0>; ++ }; ++ ++ CPU1: cpu@1 { ++ device_type = "cpu"; ++ compatible = "arm,cortex-a15"; ++ cci-control-port = <&cci_control1>; ++ reg = <0x1>; ++ }; ++ ++ CPU2: cpu@100 { ++ device_type = "cpu"; ++ compatible = "arm,cortex-a7"; ++ cci-control-port = <&cci_control2>; ++ reg = <0x100>; ++ }; ++ ++ CPU3: cpu@101 { ++ device_type = "cpu"; ++ compatible = "arm,cortex-a7"; ++ cci-control-port = <&cci_control2>; ++ reg = <0x101>; ++ }; ++ ++ }; ++ ++ dma0: dma@3000000 { ++ compatible = "arm,pl330", "arm,primecell"; ++ cci-control-port = <&cci_control0>; ++ reg = <0x0 0x3000000 0x0 0x1000>; ++ interrupts = <10>; ++ #dma-cells = <1>; ++ #dma-channels = <8>; ++ #dma-requests = <32>; ++ }; ++ ++ cci@2c090000 { ++ compatible = "arm,cci-400"; ++ #address-cells = <1>; ++ #size-cells = <1>; ++ reg = <0x0 0x2c090000 0 0x1000>; ++ ranges = <0x0 0x0 0x2c090000 0x6000>; ++ ++ cci_control0: slave-if@1000 { ++ compatible = "arm,cci-400-ctrl-if"; ++ interface-type = "ace-lite"; ++ reg = <0x1000 0x1000>; ++ }; ++ ++ cci_control1: slave-if@4000 { ++ compatible = "arm,cci-400-ctrl-if"; ++ interface-type = "ace"; ++ reg = <0x4000 0x1000>; ++ }; ++ ++ cci_control2: slave-if@5000 { ++ compatible = "arm,cci-400-ctrl-if"; ++ interface-type = "ace"; ++ reg = <0x5000 0x1000>; ++ }; ++ }; ++ ++This CCI node corresponds to a CCI component whose control registers sits ++at address 0x000000002c090000. ++CCI slave interface @0x000000002c091000 is connected to dma controller dma0. ++CCI slave interface @0x000000002c094000 is connected to CPUs {CPU0, CPU1}; ++CCI slave interface @0x000000002c095000 is connected to CPUs {CPU2, CPU3}; +diff -Nur linux-3.10.30/Documentation/devicetree/bindings/arm/imx/busfreq-imx6.txt linux-3.10.30-cubox-i/Documentation/devicetree/bindings/arm/imx/busfreq-imx6.txt +--- linux-3.10.30/Documentation/devicetree/bindings/arm/imx/busfreq-imx6.txt 1970-01-01 01:00:00.000000000 +0100 ++++ linux-3.10.30-cubox-i/Documentation/devicetree/bindings/arm/imx/busfreq-imx6.txt 2014-03-08 20:32:51.000000000 +0100 +@@ -0,0 +1,64 @@ ++Freescale Busfreq driver ++ ++It is a generic driver that manages the frequency of the DDR, AHB and AXI buses in the iMX6x architecture. ++It works for both SMP and UP systems and for both DDR3 and LPDDR2 memory types. ++ ++Required properties are listed below: ++- compatible: should be "fsl,imx6_busfreq" ++- clocks: Lists the various clocks used by the busfreq driver ++- interrupts - Lists the interrupts used by the busfreq driver. This is needed only for SMP architecutre. ++- fsl,max_ddr_freq - The max ddr freq for this chip ++ ++Examples: ++For SOC imx6q.dtsi: ++ busfreq { /* BUSFREQ */ ++ compatible = "fsl,imx6_busfreq"; ++ clocks = <&clks 171>, <&clks 6>, <&clks 11>, <&clks 104>, <&clks 172>, <&clks 58>, ++ <&clks 18>, <&clks 60>, <&clks 20>, <&clks 3>; ++ clock-names = "pll2_bus", "pll2_pfd2_396m", "pll2_198m", "arm", "pll3_usb_otg", "periph", ++ "periph_pre", "periph_clk2", "periph_clk2_sel", "osc"; ++ interrupts = <0 107 0x04>, <0 112 0x4>, <0 113 0x4>, <0 114 0x4>; ++ interrupt-names = "irq_busfreq_0", "irq_busfreq_1", "irq_busfreq_2", "irq_busfreq_3"; ++ fsl,max_ddr_freq = <528000000>; ++ }; ++ ++The Freescale Busfreq driver supports the following setpoints for the DDR freq: ++enum bus_freq_mode { ++ BUS_FREQ_HIGH, -> The max freq the SOC supports ++ BUS_FREQ_MED, -> Medium setpoint (ex 400MHz for DDR3 when the max is 528MHz) ++ BUS_FREQ_AUDIO, -> Audio playback freq (50MHz) ++ BUS_FREQ_LOW, -> Low power IDLE freq (24MHz) ++}; ++ ++Currently the Freescale Busfreq driver implementation requires drivers to call the following APIs: ++1. request_bus_freq(enum bus_freq_mode): ++ The driver is requesting the system and ddr freq to be set to the requested value. The driver should call this ++ API before it even enables its clocks. ++ ++2. release_bus_freq(enum bus_freq_mode): ++ The driver no longer needs the system and ddr freq at the required value. The driver should call this API after ++ its work is done and it has disabled its clocks. ++ ++Examples: ++In the IPU driver, the requesting and releasing of the required bus frequency is tied into the runtime PM implementation: ++ ++int ipu_runtime_suspend(struct device *dev) ++{ ++ release_bus_freq(BUS_FREQ_HIGH); ++ dev_dbg(dev, "ipu busfreq high release.\n"); ++ ++ return 0; ++} ++ ++int ipu_runtime_resume(struct device *dev) ++{ ++ request_bus_freq(BUS_FREQ_HIGH); ++ dev_dbg(dev, "ipu busfreq high requst.\n"); ++ ++ return 0; ++} ++ ++static const struct dev_pm_ops ipu_pm_ops = { ++ SET_RUNTIME_PM_OPS(ipu_runtime_suspend, ipu_runtime_resume, NULL) ++ SET_SYSTEM_SLEEP_PM_OPS(ipu_suspend, ipu_resume) ++}; +diff -Nur linux-3.10.30/Documentation/devicetree/bindings/arm/imx/gpc.txt linux-3.10.30-cubox-i/Documentation/devicetree/bindings/arm/imx/gpc.txt +--- linux-3.10.30/Documentation/devicetree/bindings/arm/imx/gpc.txt 1970-01-01 01:00:00.000000000 +0100 ++++ linux-3.10.30-cubox-i/Documentation/devicetree/bindings/arm/imx/gpc.txt 2014-03-08 20:32:51.000000000 +0100 +@@ -0,0 +1,20 @@ ++Freescale imx GPC bindings ++ ++Optional properties: ++- fsl,cpu_pupscr_sw2iso: for powering up CPU, number of 32K clock cycle PGC will wait before negating isolation signal. ++- fsl,cpu_pupsc |