firefly-linux-kernel-4.4.55.git
9 years agork fb: fix screen info error when in no dual mode and pull out hdmi
hjc [Wed, 11 Feb 2015 08:28:47 +0000 (16:28 +0800)]
rk fb: fix screen info error when in no dual mode and pull out hdmi

Signed-off-by: hjc <hjc@rock-chips.com>
9 years agork31xx lvds: fix lvds grf config error when disable lvds
hjc [Wed, 11 Feb 2015 08:24:34 +0000 (16:24 +0800)]
rk31xx lvds: fix lvds grf config error when disable lvds

9 years agork3368 mipi: modified the bug of dts file
chenyifu [Wed, 14 Jan 2015 08:12:07 +0000 (16:12 +0800)]
rk3368 mipi: modified the bug of dts file

The address of rk3368 is 64-bits.
Change the order of "pclk_mipi_dsi" and "pclk_mipi_dsi_host"
in order compatible with earlier code.

Signed-off-by: chenyifu <chenyf@rock-chips.com>
9 years agork3368 mipi: add mipi driver of rk3368
chenyifu [Wed, 14 Jan 2015 08:43:55 +0000 (16:43 +0800)]
rk3368 mipi: add mipi driver of rk3368

Signed-off-by: chenyifu <chenyf@rock-chips.com>
9 years agork3368: dts: fix rk3368-p9_818 err
guoyi [Wed, 11 Feb 2015 07:26:36 +0000 (15:26 +0800)]
rk3368: dts: fix rk3368-p9_818 err

9 years agoDrivers:
guoyi [Wed, 11 Feb 2015 06:00:41 +0000 (14:00 +0800)]
Drivers:
input: add gt9xx/ for goodix touchscreen.

9 years agork3368:
guoyi [Wed, 11 Feb 2015 03:13:28 +0000 (11:13 +0800)]
rk3368:
    dts: add rk3368-p9_818.dts

9 years agork fb: enable mmu when uboot-logo is 0
hjc [Wed, 11 Feb 2015 06:02:37 +0000 (14:02 +0800)]
rk fb: enable mmu when uboot-logo is 0

9 years agork: last_log: version 3.1, support arm64
Huang, Tao [Tue, 10 Feb 2015 12:18:09 +0000 (20:18 +0800)]
rk: last_log: version 3.1, support arm64

Signed-off-by: Huang, Tao <huangtao@rock-chips.com>
9 years agoarm64: rockchip: rockchip_defconfig enable TEST_POWER
Huang, Tao [Tue, 10 Feb 2015 11:12:57 +0000 (19:12 +0800)]
arm64: rockchip: rockchip_defconfig enable TEST_POWER

Signed-off-by: Huang, Tao <huangtao@rock-chips.com>
9 years agork: ion: fix compilation error without CONFIG_COMPAT
Huang, Tao [Tue, 10 Feb 2015 08:48:02 +0000 (16:48 +0800)]
rk: ion: fix compilation error without CONFIG_COMPAT

Signed-off-by: Huang, Tao <huangtao@rock-chips.com>
9 years agoMerge branch develop-3.10 into develop-3.10-next
Huang, Tao [Tue, 10 Feb 2015 08:43:50 +0000 (16:43 +0800)]
Merge branch develop-3.10 into develop-3.10-next

Conflicts:
drivers/clk/rockchip/clk-ops.h
drivers/video/rockchip/hdmi/chips/rk3288/rk3288_hdmi.c
drivers/video/rockchip/rk_fb.c

9 years agoMerge tag 'lsk-v3.10-android-15.01'
Huang, Tao [Tue, 10 Feb 2015 08:24:25 +0000 (16:24 +0800)]
Merge tag 'lsk-v3.10-android-15.01'

LSK Android 15.01 v3.10

Conflicts:
arch/arm/Kconfig.debug
arch/arm64/mm/init.c
drivers/Makefile
drivers/cpufreq/cpufreq_interactive.c

9 years agodts: rk3126\rk3126b: modify VIO clocks to slove VIO idle fail problem
dkl [Tue, 10 Feb 2015 03:01:25 +0000 (11:01 +0800)]
dts: rk3126\rk3126b: modify VIO clocks to slove VIO idle fail problem

In rk3126, when aclk_vio0\aclk_vio1\hclk_vio were reparented from the
default parent gpll_div2 to gpll in clk_init, the temporary rates
are too high and may lead to failture in VIO idle_request later.
To slove this problem, VIO clocks are modified to auto select parent
and consider the order of reparent and set_div when set_rate.

Signed-off-by: dkl <dkl@rock-chips.com>
9 years agoadd usb charge config
ywj [Tue, 10 Feb 2015 01:23:33 +0000 (09:23 +0800)]
add usb charge config

9 years agork3288 hdmi: If audio source if spdif, sclk/fs should be 128x.
Zheng Yang [Mon, 9 Feb 2015 02:42:19 +0000 (10:42 +0800)]
rk3288 hdmi: If audio source if spdif, sclk/fs should be 128x.

Signed-off-by: Zheng Yang <zhengyang@rock-chips.com>
9 years agoHDMI: fix filter feature SUPPORT_TMDS_600M error:
Zheng Yang [Mon, 9 Feb 2015 02:40:40 +0000 (10:40 +0800)]
HDMI: fix filter feature SUPPORT_TMDS_600M error:
If soc is not support feature SUPPORT_TMDS_600M,
or current EDID information is not support the
feature, we should not show the corresponding
option, such as 3840x2160p-60.

Signed-off-by: Zheng Yang <zhengyang@rock-chips.com>
9 years agoi2c: fix retry_count to return error when i2c bus checkidle was low
David Wu [Sun, 8 Feb 2015 13:38:22 +0000 (21:38 +0800)]
i2c: fix retry_count to return error when i2c bus checkidle was low

Signed-off-by: David Wu <wdc@rock-chips.com>
9 years agork3368: rename pmu_grf or pmu to pmugrf
Huang, Tao [Fri, 6 Feb 2015 13:43:58 +0000 (21:43 +0800)]
rk3368: rename pmu_grf or pmu to pmugrf

Signed-off-by: Huang, Tao <huangtao@rock-chips.com>
9 years agopower: reset: rockchip-reboot: add rk3368 reboot driver
Huang, Tao [Fri, 6 Feb 2015 13:37:06 +0000 (21:37 +0800)]
power: reset: rockchip-reboot: add rk3368 reboot driver

Signed-off-by: Huang, Tao <huangtao@rock-chips.com>
9 years agork3368: cpufreq: fix compile warning
Xiao Feng [Fri, 6 Feb 2015 07:48:17 +0000 (15:48 +0800)]
rk3368: cpufreq: fix compile warning

Signed-off-by: Xiao Feng <xf@rock-chips.com>
9 years agorfkill-wlan.c: solve null point panic when wifi_chip_type is not define in dts
hwg [Thu, 5 Feb 2015 02:51:07 +0000 (10:51 +0800)]
rfkill-wlan.c: solve null point panic when wifi_chip_type is not define in dts

9 years agowifi->esp8089:
li bing [Tue, 3 Feb 2015 07:31:46 +0000 (15:31 +0800)]
wifi->esp8089:
       ESP8089 driver update to V1.9.1(30/01/2015);
       Update the V2.4 esp_prealloc program.

9 years agohdmi:
Zheng Yang [Tue, 3 Feb 2015 07:51:18 +0000 (15:51 +0800)]
hdmi:
1. fix 3288 hdmi audio source select error.
2. For mid, it need to call rk_fb_get_display_policy
   to reset overscan after swichting vop timing.

Signed-off-by: Zheng Yang <zhengyang@rock-chips.com>
9 years agork3288: modify to ensure pairwise call of clk_enable\disable
dkl [Tue, 3 Feb 2015 06:15:27 +0000 (14:15 +0800)]
rk3288: modify to ensure pairwise call of clk_enable\disable
        in rk3288_pll_early_suspend_notifier_call

Signed-off-by: dkl <dkl@rock-chips.com>
9 years agohdmi: depends on DRM_ROCKCHIP and fix document error.
Zheng Yang [Mon, 2 Feb 2015 07:04:21 +0000 (15:04 +0800)]
hdmi: depends on DRM_ROCKCHIP and fix document error.

Signed-off-by: Zheng Yang <zhengyang@rock-chips.com>
9 years agodts: fix compile err
lintao [Mon, 2 Feb 2015 03:26:48 +0000 (11:26 +0800)]
dts: fix compile err

Signed-off-by: lintao <lintao@rock-chips.com>
9 years agohdmi: update driver to v2.0:
Zheng Yang [Mon, 2 Feb 2015 03:06:04 +0000 (11:06 +0800)]
hdmi: update driver to v2.0:
1. Rename rk3036 hdmi to rockchip_hdmiv1, support hdmi v1.4;
2. Rename rk3288 hdmi to rockchip_hdmiv2, support hdmi v2.0;
3. Support transmmit 3D picture.
4. 3288 hdmi support HDCP, CEC and TMDSCLK 600M.
5. HDMI video source default is LCDC0, it can be modified in dts by
   follow:
    rockchip,hdmi_video_source = <DISPLAY_SOURCE_LCDC1>;
   HDCP and CEC function default is disabled , it can be enabled in
   dts file by follow:
    rockchip,hdcp_enable = <1>;
    rockchip,cec_enable = <1>;
   More information please see
Documentation/devicetree/bindings/video/rockchip_hdmi.txt

9 years agodts: rk312x: default enable emmc
lintao [Mon, 2 Feb 2015 02:21:25 +0000 (10:21 +0800)]
dts: rk312x: default enable emmc

Signed-off-by: lintao <lintao@rock-chips.com>
9 years agommc: add more waiting for erase and status op
lintao [Mon, 26 Jan 2015 01:57:11 +0000 (09:57 +0800)]
mmc: add more waiting for erase and status op

9 years agork3288 hdmi: add cec clk and pinctrl.
Zheng Yang [Sun, 1 Feb 2015 08:28:03 +0000 (16:28 +0800)]
rk3288 hdmi: add cec clk and pinctrl.

Signed-off-by: Zheng Yang <zhengyang@rock-chips.com>
9 years agork3288 hdmi:
Zheng Yang [Sun, 1 Feb 2015 08:24:58 +0000 (16:24 +0800)]
rk3288 hdmi:
To improve stability of reading EDID, we need to
disable HDMI ddc GPIO internal pull up.

Signed-off-by: Zheng Yang <zhengyang@rock-chips.com>
9 years agocamera: oneframe v0.1.e
zyc [Fri, 30 Jan 2015 01:42:23 +0000 (09:42 +0800)]
camera: oneframe v0.1.e

9 years agosolve rfkill-wlan driver kernel panic when rfkill-bt driver probe fail
hwg [Thu, 29 Jan 2015 09:29:03 +0000 (17:29 +0800)]
solve rfkill-wlan driver kernel panic when rfkill-bt driver probe fail

9 years agoWifi->rtl8812au: add chip name /sys/class/rkwifi/chip for RTL8812BU
li bing [Thu, 29 Jan 2015 07:01:37 +0000 (15:01 +0800)]
Wifi->rtl8812au: add chip name /sys/class/rkwifi/chip for RTL8812BU

9 years agoWifi->rtl8723au: update dirver to version 4.00(4.1.11_12622.20141215).
li bing [Thu, 29 Jan 2015 06:09:41 +0000 (14:09 +0800)]
Wifi->rtl8723au: update dirver to version 4.00(4.1.11_12622.20141215).

9 years agork312x codec: fix rk312x codec switch state error
smj [Thu, 29 Jan 2015 00:51:26 +0000 (08:51 +0800)]
rk312x codec: fix rk312x codec switch state error

Signed-off-by: lxt <lxt@rock-chips.com>
9 years agomodify display-sys.c and display-sys.h code style.
Zheng Yang [Wed, 28 Jan 2015 10:13:37 +0000 (18:13 +0800)]
modify display-sys.c and display-sys.h code style.

Signed-off-by: Zheng Yang <zhengyang@rock-chips.com>
9 years agork3128: hdmi: add disable clock when system shutdown
zwl [Wed, 28 Jan 2015 07:50:05 +0000 (15:50 +0800)]
rk3128: hdmi: add disable clock when system shutdown

disable clock will call disable power domain.
hdmi and lcdc share the power domain, so they must disable
the power domain when system shutdown.

Signed-off-by: zwl <zwl@rockchips.com>
9 years agorockchip: iommu: skip rk312x vop mmu stall operation,mask rk312x vop mmu interrupt
Simon [Wed, 28 Jan 2015 07:30:26 +0000 (15:30 +0800)]
rockchip: iommu: skip rk312x vop mmu stall operation,mask rk312x vop mmu interrupt

Video stress test failed, may have something relationship to vop mmu stall operation
skip it as a workaround

Reboot stress test failed, error showed a large number of vop/vop mmu interrupt,mask
vop mmu interrupt to avoid reboot stress test failed in rk312x

Signed-off-by: Simon <xxm@rock-chips.com>
9 years agocamera: camsys_drv:v0.0x1b.0 oneframe:v0.1.0xd
zyc [Wed, 28 Jan 2015 03:24:21 +0000 (11:24 +0800)]
camera: camsys_drv:v0.0x1b.0 oneframe:v0.1.0xd

9 years agork312x: fix usb otg camera issues
dalon.zhang [Wed, 28 Jan 2015 02:12:32 +0000 (10:12 +0800)]
rk312x: fix usb otg camera issues

9 years agomali_400_driver :
chenzhen [Mon, 26 Jan 2015 08:10:22 +0000 (16:10 +0800)]
mali_400_driver :
use mod_timer in mali_control_timer_callback_chain.
upgrade rk_ko_ver to 3.

9 years agork312x, mali_400_driver : ammend rk_ko_ver.txt.
chenzhen [Wed, 7 Jan 2015 06:30:56 +0000 (14:30 +0800)]
rk312x, mali_400_driver : ammend rk_ko_ver.txt.

9 years ago Support 1.5GB and 3GB with 2CS on the DDR1 channel
hcy [Mon, 26 Jan 2015 01:13:52 +0000 (09:13 +0800)]
Support 1.5GB and 3GB with 2CS on the DDR1 channel

9 years agoMerge branch 'linux-linaro-lsk' into linux-linaro-lsk-android
Mark Brown [Sat, 24 Jan 2015 11:54:15 +0000 (11:54 +0000)]
Merge branch 'linux-linaro-lsk' into linux-linaro-lsk-android

9 years agoMerge remote-tracking branch 'lsk/v3.10/topic/arm64-misc' into linux-linaro-lsk
Mark Brown [Fri, 23 Jan 2015 20:36:05 +0000 (20:36 +0000)]
Merge remote-tracking branch 'lsk/v3.10/topic/arm64-misc' into linux-linaro-lsk

Conflicts:
arch/arm64/include/asm/proc-fns.h
arch/arm64/kernel/debug-monitors.c
arch/arm64/kernel/psci.c

9 years agoarm64: add atomic pool for non-coherent and CMA allocations
Laura Abbott [Thu, 9 Oct 2014 22:26:44 +0000 (15:26 -0700)]
arm64: add atomic pool for non-coherent and CMA allocations

Neither CMA nor noncoherent allocations support atomic allocations.
Add a dedicated atomic pool to support this.

Reviewed-by: Catalin Marinas <catalin.marinas@arm.com>
Signed-off-by: Laura Abbott <lauraa@codeaurora.org>
Cc: Arnd Bergmann <arnd@arndb.de>
Cc: David Riley <davidriley@chromium.org>
Cc: Olof Johansson <olof@lixom.net>
Cc: Ritesh Harjain <ritesh.harjani@gmail.com>
Cc: Russell King <linux@arm.linux.org.uk>
Cc: Thierry Reding <thierry.reding@gmail.com>
Cc: Will Deacon <will.deacon@arm.com>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
(cherry picked from commit d4932f9e81ae7a7bf3c3967e48373909b9c98ee5)
Signed-off-by: Mark Brown <broonie@kernel.org>
9 years agoMerge remote-tracking branch 'lsk/v3.10/topic/dma-mapping' into lsk-v3.10-arm64-misc
Mark Brown [Fri, 23 Jan 2015 20:27:25 +0000 (20:27 +0000)]
Merge remote-tracking branch 'lsk/v3.10/topic/dma-mapping' into lsk-v3.10-arm64-misc

9 years agoRevert "arm64: vdso: move to _install_special_mapping and remove arch_vma_name"
Mark Brown [Fri, 23 Jan 2015 20:15:32 +0000 (20:15 +0000)]
Revert "arm64: vdso: move to _install_special_mapping and remove arch_vma_name"

This reverts commit 95c91bdd8eafdc74337049c45d74c903b7dac49c.

Signed-off-by: Mark Brown <broonie@kernel.org>
9 years agoRevert "arm64: vdso: move data page before code pages"
Mark Brown [Fri, 23 Jan 2015 20:15:15 +0000 (20:15 +0000)]
Revert "arm64: vdso: move data page before code pages"

This reverts commit 82a95d0521cb6258559d18dca736da8272ba05a7.

Signed-off-by: Mark Brown <broonie@kernel.org>
9 years agoMerge remote-tracking branch 'lsk/v3.10/topic/coresight' into linux-linaro-lsk
Mark Brown [Fri, 23 Jan 2015 12:09:02 +0000 (12:09 +0000)]
Merge remote-tracking branch 'lsk/v3.10/topic/coresight' into linux-linaro-lsk

9 years agoARM: Revert "coresight: adding basic support for Vexpress TC2"
Mark Brown [Fri, 23 Jan 2015 12:04:03 +0000 (12:04 +0000)]
ARM: Revert "coresight: adding basic support for Vexpress TC2"

This reverts commit 63041eff2297676a345478c2b1cc6f76c63102db.  For some
reason this is causing failures before the serial console comes up on
TC2 when booted using UEFI, revert pending investigation.

Signed-off-by: Mark Brown <broonie@kernel.org>
9 years agoMerge branch 'linux-linaro-lsk' into linux-linaro-lsk-android
Mark Brown [Fri, 23 Jan 2015 11:59:22 +0000 (11:59 +0000)]
Merge branch 'linux-linaro-lsk' into linux-linaro-lsk-android

9 years agoMerge remote-tracking branch 'lsk/linux-linaro-lsk' into linux-linaro-lsk
Mark Brown [Fri, 23 Jan 2015 11:59:17 +0000 (11:59 +0000)]
Merge remote-tracking branch 'lsk/linux-linaro-lsk' into linux-linaro-lsk

9 years agoMerge branch 'linux-linaro-lsk' into linux-linaro-lsk-android
Mark Brown [Fri, 23 Jan 2015 11:33:35 +0000 (11:33 +0000)]
Merge branch 'linux-linaro-lsk' into linux-linaro-lsk-android

9 years agoconfigs: add kernel internel boot testing configuration
Alex Shi [Fri, 23 Jan 2015 11:14:19 +0000 (19:14 +0800)]
configs: add kernel internel boot testing configuration

The usage likes following:
$scripts/kconfig/merge_config.sh linaro/configs/linaro-base.conf
linaro/configs/booting-test.conf ...

It was tested on lsk-3.10 pandaboard ES.

Signed-off-by: Alex Shi <alex.shi@linaro.org>
9 years agousb: dwc_otg: handle data toggle error in right way
lyz [Fri, 23 Jan 2015 09:05:14 +0000 (17:05 +0800)]
usb: dwc_otg: handle data toggle error in right way

data toggle error without a ChannelHalt status is not a real data
toggle err, it is a transfer error state so just clear the
interrupt bit rather than resubmit this request

Signed-off-by: lyz <lyz@rock-chips.com>
9 years agousb: dwc_otg: fix issue with race condition of competition
lyz [Mon, 19 Jan 2015 10:55:56 +0000 (18:55 +0800)]
usb: dwc_otg: fix issue with race condition of competition
between hcd_reinit() and cil_interrupt handler.

hcd_reinit() should get core_if->lock before modify this
lock, so that can prevent competition between cil_interrupt
handler and hcd_reinit(), hcd_reinit() be scheduled while
cil_interrupt handler holding core_if->lock, hcd_reinit() modify
the lock then previous core_if->lock will never be unlocked.

Signed-off-by: lyz <lyz@rock-chips.com>
9 years agousb: dwc_otg: double check disconnect state when otg state
lyz [Mon, 19 Jan 2015 11:17:37 +0000 (19:17 +0800)]
usb: dwc_otg: double check disconnect state when otg state
changed

When otg stop host mode and before change to device mode hcd_stop
function should do something to double check all usb device is
disconnect because the disconnect interrupt might be lost.
1.kill all active urbs attached to this hcd
2.set hcd->flags to notify usb core to disconnect all usb devices

Signed-off-by: lyz <lyz@rock-chips.com>
9 years agoMerge remote-tracking branch 'lsk/v3.10/topic/dma-mapping' into linux-linaro-lsk
Mark Brown [Fri, 23 Jan 2015 01:32:22 +0000 (01:32 +0000)]
Merge remote-tracking branch 'lsk/v3.10/topic/dma-mapping' into linux-linaro-lsk

9 years agoMerge remote-tracking branch 'lsk/v3.10/topic/arm64-perf' into linux-linaro-lsk
Mark Brown [Fri, 23 Jan 2015 01:31:57 +0000 (01:31 +0000)]
Merge remote-tracking branch 'lsk/v3.10/topic/arm64-perf' into linux-linaro-lsk

9 years agoarm64: Add brackets around user_stack_pointer()
Catalin Marinas [Fri, 29 Aug 2014 15:08:02 +0000 (16:08 +0100)]
arm64: Add brackets around user_stack_pointer()

Commit 5f888a1d33 (ARM64: perf: support dwarf unwinding in compat mode)
changes user_stack_pointer() to return the compat SP for 32-bit tasks
but without brackets around the whole definition, with possible issues
on the call sites (noticed with a subsequent fix for KSTK_ESP).

Fixes: 5f888a1d33c4 (ARM64: perf: support dwarf unwinding in compat mode)
Reported-by: Sudeep Holla <sudeep.holla@arm.com>
Cc: <stable@vger.kernel.org>
Signed-off-by: Catalin Marinas <catalin.marinas@arm.com>
Signed-off-by: Will Deacon <will.deacon@arm.com>
(cherry picked from commit 2520d039728b2a3c5ae7f79fe2a0e9d182855b12)
Signed-off-by: Mark Brown <broonie@kernel.org>
9 years agocommon: dma-mapping: introduce common remapping functions
Laura Abbott [Thu, 9 Oct 2014 22:26:40 +0000 (15:26 -0700)]
common: dma-mapping: introduce common remapping functions

For architectures without coherent DMA, memory for DMA may need to be
remapped with coherent attributes.  Factor out the the remapping code from
arm and put it in a common location to reduce code duplication.

As part of this, the arm APIs are now migrated away from
ioremap_page_range to the common APIs which use map_vm_area for remapping.
 This should be an equivalent change and using map_vm_area is more correct
as ioremap_page_range is intended to bring in io addresses into the cpu
space and not regular kernel managed memory.

Signed-off-by: Laura Abbott <lauraa@codeaurora.org>
Reviewed-by: Catalin Marinas <catalin.marinas@arm.com>
Cc: Arnd Bergmann <arnd@arndb.de>
Cc: David Riley <davidriley@chromium.org>
Cc: Olof Johansson <olof@lixom.net>
Cc: Ritesh Harjain <ritesh.harjani@gmail.com>
Cc: Russell King <linux@arm.linux.org.uk>
Cc: Thierry Reding <thierry.reding@gmail.com>
Cc: Will Deacon <will.deacon@arm.com>
Cc: James Hogan <james.hogan@imgtec.com>
Cc: Laura Abbott <lauraa@codeaurora.org>
Cc: Mitchel Humpherys <mitchelh@codeaurora.org>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
(cherry picked from commit 513510ddba9650fc7da456eefeb0ead7632324f6)
Signed-off-by: Mark Brown <broonie@kernel.org>
9 years agolib/genalloc.c: add genpool range check function
Laura Abbott [Thu, 9 Oct 2014 22:26:38 +0000 (15:26 -0700)]
lib/genalloc.c: add genpool range check function

After allocating an address from a particular genpool, there is no good
way to verify if that address actually belongs to a genpool.  Introduce
addr_in_gen_pool which will return if an address plus size falls
completely within the genpool range.

Signed-off-by: Laura Abbott <lauraa@codeaurora.org>
Acked-by: Will Deacon <will.deacon@arm.com>
Reviewed-by: Olof Johansson <olof@lixom.net>
Reviewed-by: Catalin Marinas <catalin.marinas@arm.com>
Cc: Arnd Bergmann <arnd@arndb.de>
Cc: David Riley <davidriley@chromium.org>
Cc: Ritesh Harjain <ritesh.harjani@gmail.com>
Cc: Russell King <linux@arm.linux.org.uk>
Cc: Thierry Reding <thierry.reding@gmail.com>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
(cherry picked from commit 9efb3a421d55d30b65fb0dbee05108d15c6c55f7)
Signed-off-by: Mark Brown <broonie@kernel.org>
9 years agolib/genalloc.c: add power aligned algorithm
Laura Abbott [Thu, 9 Oct 2014 22:26:35 +0000 (15:26 -0700)]
lib/genalloc.c: add power aligned algorithm

One of the more common algorithms used for allocation is to align the
start address of the allocation to the order of size requested.  Add this
as an algorithm option for genalloc.

Signed-off-by: Laura Abbott <lauraa@codeaurora.org>
Acked-by: Will Deacon <will.deacon@arm.com>
Acked-by: Olof Johansson <olof@lixom.net>
Reviewed-by: Catalin Marinas <catalin.marinas@arm.com>
Cc: Arnd Bergmann <arnd@arndb.de>
Cc: David Riley <davidriley@chromium.org>
Cc: Ritesh Harjain <ritesh.harjani@gmail.com>
Cc: Russell King <linux@arm.linux.org.uk>
Cc: Thierry Reding <thierry.reding@gmail.com>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
(cherry picked from commit 505e3be6c082489a32a88e042f930d047b6415bc)
Signed-off-by: Mark Brown <broonie@kernel.org>
9 years agoarm64: LLVMLinux: Use global stack register variable for aarch64
Mark Charlebois [Wed, 27 Aug 2014 04:29:33 +0000 (05:29 +0100)]
arm64: LLVMLinux: Use global stack register variable for aarch64

To support both Clang and GCC, use the global stack register variable vs
a local register variable.

Author: Mark Charlebois <charlebm@gmail.com>
Signed-off-by: Mark Charlebois <charlebm@gmail.com>
Signed-off-by: Behan Webster <behanw@converseincode.com>
Signed-off-by: Will Deacon <will.deacon@arm.com>
(cherry picked from commit 34ccf8f455f1ae7761810a74308f82daca67ced1)
Signed-off-by: Mark Brown <broonie@kernel.org>
9 years agoarm64: LLVMLinux: Use current_stack_pointer in kernel/traps.c
Behan Webster [Wed, 27 Aug 2014 04:29:32 +0000 (05:29 +0100)]
arm64: LLVMLinux: Use current_stack_pointer in kernel/traps.c

Use the global current_stack_pointer to get the value of the stack pointer.
This change supports being able to compile the kernel with both gcc and clang.

Signed-off-by: Behan Webster <behanw@converseincode.com>
Signed-off-by: Mark Charlebois <charlebm@gmail.com>
Reviewed-by: Olof Johansson <olof@lixom.net>
Acked-by: Will Deacon <will.deacon@arm.com>
Signed-off-by: Will Deacon <will.deacon@arm.com>
(cherry picked from commit 2128df143d840a20e12818290eb6e40b95cc4ac0)
Signed-off-by: Mark Brown <broonie@kernel.org>
9 years agoarm64: LLVMLinux: Calculate current_thread_info from current_stack_pointer
Behan Webster [Wed, 27 Aug 2014 04:29:31 +0000 (05:29 +0100)]
arm64: LLVMLinux: Calculate current_thread_info from current_stack_pointer

Use the global current_stack_pointer to get the value of the stack pointer.
This change supports being able to compile the kernel with both gcc and clang.

Signed-off-by: Behan Webster <behanw@converseincode.com>
Signed-off-by: Mark Charlebois <charlebm@gmail.com>
Reviewed-by: Jan-Simon Möller <dl9pf@gmx.de>
Reviewed-by: Olof Johansson <olof@lixom.net>
Acked-by: Will Deacon <will.deacon@arm.com>
Signed-off-by: Will Deacon <will.deacon@arm.com>
(cherry picked from commit 786248705ecf5290f26534e8eef62ba6dd63b806)
Signed-off-by: Mark Brown <broonie@kernel.org>
9 years agoarm64: LLVMLinux: Use current_stack_pointer in save_stack_trace_tsk
Behan Webster [Wed, 27 Aug 2014 04:29:30 +0000 (05:29 +0100)]
arm64: LLVMLinux: Use current_stack_pointer in save_stack_trace_tsk

Use the global current_stack_pointer to get the value of the stack pointer.
This change supports being able to compile the kernel with both gcc and clang.

Signed-off-by: Behan Webster <behanw@converseincode.com>
Signed-off-by: Mark Charlebois <charlebm@gmail.com>
Reviewed-by: Jan-Simon Möller <dl9pf@gmx.de>
Reviewed-by: Olof Johansson <olof@lixom.net>
Acked-by: Will Deacon <will.deacon@arm.com>
Signed-off-by: Will Deacon <will.deacon@arm.com>
(cherry picked from commit bb28cec4ea2f5151c08e061c6de825a8c853bbd6)
Signed-off-by: Mark Brown <broonie@kernel.org>
9 years agoarm64: LLVMLinux: Add current_stack_pointer() for arm64
Behan Webster [Wed, 27 Aug 2014 04:29:29 +0000 (05:29 +0100)]
arm64: LLVMLinux: Add current_stack_pointer() for arm64

Define a global named register for current_stack_pointer. The use of this new
variable guarantees that both gcc and clang can access this register in C code.

Signed-off-by: Behan Webster <behanw@converseincode.com>
Reviewed-by: Jan-Simon Möller <dl9pf@gmx.de>
Reviewed-by: Mark Charlebois <charlebm@gmail.com>
Reviewed-by: Olof Johansson <olof@lixom.net>
Acked-by: Will Deacon <will.deacon@arm.com>
Signed-off-by: Will Deacon <will.deacon@arm.com>
(cherry picked from commit 3337a10e0d0cbc9225cefc23aa7a604b698367ed)
Signed-off-by: Mark Brown <broonie@kernel.org>
9 years agoarm64: Add CONFIG_DEBUG_SET_MODULE_RONX support
Laura Abbott [Tue, 19 Aug 2014 19:41:43 +0000 (20:41 +0100)]
arm64: Add CONFIG_DEBUG_SET_MODULE_RONX support

In a similar fashion to other architecture, add the infrastructure
and Kconfig to enable DEBUG_SET_MODULE_RONX support. When
enabled, module ranges will be marked read-only/no-execute as
appropriate.

Signed-off-by: Laura Abbott <lauraa@codeaurora.org>
[will: fixed off-by-one in module end check]
Signed-off-by: Will Deacon <will.deacon@arm.com>
(cherry picked from commit 11d91a770f1fff44dafdf88d6089a3451f99c9b6)
Signed-off-by: Mark Brown <broonie@kernel.org>
Conflicts:
arch/arm64/Kconfig.debug

9 years agoarm64: Introduce {set,clear}_pte_bit
Laura Abbott [Tue, 19 Aug 2014 19:41:42 +0000 (20:41 +0100)]
arm64: Introduce {set,clear}_pte_bit

It's useful to be able to change individual bits in ptes at times.
Introduce functions for this and update existing pte_mk* functions
to use these primatives.

Acked-by: Will Deacon <will.deacon@arm.com>
Signed-off-by: Laura Abbott <lauraa@codeaurora.org>
[will: added missing inline keyword for new header functions]
Signed-off-by: Will Deacon <will.deacon@arm.com>
(cherry picked from commit b6d4f2800b7bad654caf00654f4bff21594ef838)
Signed-off-by: Mark Brown <broonie@kernel.org>
9 years agoarm64: convert part of soft_restart() to assembly
Arun Chandran [Mon, 18 Aug 2014 09:06:58 +0000 (10:06 +0100)]
arm64: convert part of soft_restart() to assembly

The current soft_restart() and setup_restart implementations incorrectly
assume that compiler will not spill/fill values to/from stack. However
this assumption seems to be wrong, revealed by the disassembly of the
currently existing code (v3.16) built with Linaro GCC 4.9-2014.05.

ffffffc000085224 <soft_restart>:
ffffffc000085224:  a9be7bfd  stp    x29, x30, [sp,#-32]!
ffffffc000085228:  910003fd  mov    x29, sp
ffffffc00008522c:  f9000fa0  str    x0, [x29,#24]
ffffffc000085230:  94003d21  bl     ffffffc0000946b4 <setup_mm_for_reboot>
ffffffc000085234:  94003b33  bl     ffffffc000093f00 <flush_cache_all>
ffffffc000085238:  94003dfa  bl     ffffffc000094a20 <cpu_cache_off>
ffffffc00008523c:  94003b31  bl     ffffffc000093f00 <flush_cache_all>
ffffffc000085240:  b0003321  adrp   x1, ffffffc0006ea000 <reset_devices>

ffffffc000085244:  f9400fa0  ldr    x0, [x29,#24] ----> spilled addr
ffffffc000085248:  f942fc22  ldr    x2, [x1,#1528] ----> global memstart_addr

ffffffc00008524c:  f0000061  adrp   x1, ffffffc000094000 <__inval_cache_range+0x40>
ffffffc000085250:  91290021  add    x1, x1, #0xa40
ffffffc000085254:  8b010041  add    x1, x2, x1
ffffffc000085258:  d2c00802  mov    x2, #0x4000000000           // #274877906944
ffffffc00008525c:  8b020021  add    x1, x1, x2
ffffffc000085260:  d63f0020  blr    x1
...

Here the compiler generates memory accesses after the cache is disabled,
loading stale values for the spilled value and global variable. As we cannot
control when the compiler will access memory we must rewrite the
functions in assembly to stash values we need in registers prior to
disabling the cache, avoiding the use of memory.

Reviewed-by: Mark Rutland <mark.rutland@arm.com>
Signed-off-by: Arun Chandran <achandran@mvista.com>
Signed-off-by: Will Deacon <will.deacon@arm.com>
(cherry picked from commit 5e051531447259e5df95c44bccb69979537c19e4)
Signed-off-by: Mark Brown <broonie@kernel.org>
Conflicts:
arch/arm64/include/asm/proc-fns.h

9 years agoMerge branch 'linux-linaro-lsk' into linux-linaro-lsk-android
Mark Brown [Thu, 22 Jan 2015 21:29:45 +0000 (21:29 +0000)]
Merge branch 'linux-linaro-lsk' into linux-linaro-lsk-android

9 years agoarm64: use irq_set_affinity with force=false when migrating irqs
Sudeep Holla [Tue, 2 Sep 2014 10:35:24 +0000 (11:35 +0100)]
arm64: use irq_set_affinity with force=false when migrating irqs

The arm64 interrupt migration code on cpu offline calls
irqchip.irq_set_affinity() with the argument force=true. Originally
this argument had no effect because it was not used by any interrupt
chip driver and there was no semantics defined.

This changed with commit 01f8fa4f01d8 ("genirq: Allow forcing cpu
affinity of interrupts") which made the force argument useful to route
interrupts to not yet online cpus without checking the target cpu
against the cpu online mask. The following commit ffde1de64012
("irqchip: gic: Support forced affinity setting") implemented this for
the GIC interrupt controller.

As a consequence the cpu offline irq migration fails if CPU0 is
offlined, because CPU0 is still set in the affinity mask and the
validation against cpu online mask is skipped to the force argument
being true. The following first_cpu(mask) selection always selects
CPU0 as the target.

Commit 601c942176d8("arm64: use cpu_online_mask when using forced
irq_set_affinity") intended to fix the above mentioned issue but
introduced another issue where affinity can be migrated to a wrong
CPU due to unconditional copy of cpu_online_mask.

As with for arm, solve the issue by calling irq_set_affinity() with
force=false from the CPU offline irq migration code so the GIC driver
validates the affinity mask against CPU online mask and therefore
removes CPU0 from the possible target candidates. Also revert the
changes done in the commit 601c942176d8 as it's no longer needed.

Tested on Juno platform.

Fixes: 601c942176d8("arm64: use cpu_online_mask when using forced
irq_set_affinity")
Signed-off-by: Sudeep Holla <sudeep.holla@arm.com>
Acked-by: Mark Rutland <mark.rutland@arm.com>
Cc: Catalin Marinas <catalin.marinas@arm.com>
Cc: Will Deacon <will.deacon@arm.com>
Cc: <stable@vger.kernel.org> # 3.10.x
Signed-off-by: Will Deacon <will.deacon@arm.com>
(cherry picked from commit 3d8afe3099ebc602848aa7f09235cce3a9a023ce)
Signed-off-by: Mark Brown <broonie@kernel.org>
9 years agoarm64: report correct stack pointer in KSTK_ESP for compat tasks
Will Deacon [Fri, 29 Aug 2014 15:11:10 +0000 (16:11 +0100)]
arm64: report correct stack pointer in KSTK_ESP for compat tasks

The KSTK_ESP macro is used to determine the user stack pointer for a
given task. In particular, this is used to to report the '[stack]' VMA
in /proc/self/maps, which is used by Android to determine the stack
location for children of the main thread.

This patch fixes the macro to use user_stack_pointer instead of directly
returning sp. This means that we report w13 instead of sp, since the
former is used as the stack pointer when executing in AArch32 state.

Cc: <stable@vger.kernel.org>
Reported-by: Serban Constantinescu <Serban.Constantinescu@arm.com>
Signed-off-by: Will Deacon <will.deacon@arm.com>
(cherry picked from commit 3168a743461ecf86adf3e7dcfcd79271828fb263)
Signed-off-by: Mark Brown <broonie@kernel.org>
9 years agoarm64: ptrace: fix compat reg getter/setter return values
Will Deacon [Fri, 22 Aug 2014 13:20:24 +0000 (14:20 +0100)]
arm64: ptrace: fix compat reg getter/setter return values

copy_{to,from}_user return the number of bytes remaining on failure, not
an error code.

This patch returns -EFAULT when the copy operation didn't complete,
rather than expose the number of bytes not copied directly to userspace.

Signed-off-by: Will Deacon <will.deacon@arm.com>
(cherry picked from commit 85487edd252fa04718dcd735bc0f41213bbb9546)
Signed-off-by: Mark Brown <broonie@kernel.org>
9 years agoarm64: ptrace: fix compat hardware watchpoint reporting
Will Deacon [Fri, 22 Aug 2014 13:13:24 +0000 (14:13 +0100)]
arm64: ptrace: fix compat hardware watchpoint reporting

I'm not sure what I was on when I wrote this, but when iterating over
the hardware watchpoint array (hbp_watch_array), our index is off by
ARM_MAX_BRP, so we walk off the end of our thread_struct...

... except, a dodgy condition in the loop means that it never executes
at all (bp cannot be NULL).

This patch fixes the code so that we remove the bp check and use the
correct index for accessing the watchpoint structures.

Cc: <stable@vger.kernel.org>
Signed-off-by: Will Deacon <will.deacon@arm.com>
(cherry picked from commit 27d7ff273c2aad37b28f6ff0cab2cfa35b51e648)
Signed-off-by: Mark Brown <broonie@kernel.org>
9 years agoarm64: Remove unused variable in head.S
Geoff Levand [Fri, 22 Aug 2014 19:49:16 +0000 (20:49 +0100)]
arm64: Remove unused variable in head.S

Remove an unused local variable from head.S.  It seems this was never
used even from the initial commit
9703d9d7f77ce129621f7d80a844822e2daa7008 (arm64: Kernel booting and
initialisation), and is a left over from a previous implementation
of __calc_phys_offset.

Signed-off-by: Geoff Levand <geoff@infradead.org>
Signed-off-by: Will Deacon <will.deacon@arm.com>
(cherry picked from commit 5843be2279d7a91ef48c20ac31715d1eb9607a84)
Signed-off-by: Mark Brown <broonie@kernel.org>
9 years agoarm64: mm: update max pa bits to 48
Ganapatrao Kulkarni [Thu, 14 Aug 2014 15:19:46 +0000 (20:49 +0530)]
arm64: mm: update max pa bits to 48

Now that we support 48-bit physical addressing, update MAX_PHYSMEM_BITS
accordingly.

Acked-by: Catalin Marinas <catalin.marinas@arm.com>
Signed-off-by: Ganapatrao Kulkarni <ganapatrao.kulkarni@caviumnetworks.com>
Signed-off-by: Will Deacon <will.deacon@arm.com>
(cherry picked from commit 07a15dd55a3d65f81b4b09eab293f4afc720b082)
Signed-off-by: Mark Brown <broonie@kernel.org>
9 years agoarm64: align randomized TEXT_OFFSET on 4 kB boundary
Ard Biesheuvel [Wed, 13 Aug 2014 17:53:03 +0000 (18:53 +0100)]
arm64: align randomized TEXT_OFFSET on 4 kB boundary

When booting via UEFI, the kernel Image is loaded at a 4 kB boundary and
the embedded EFI stub is executed in place. The EFI stub relocates the
Image to reside TEXT_OFFSET bytes above a 2 MB boundary, and jumps into
the kernel proper.

In AArch64, PC relative symbol references are emitted using adrp/add or
adrp/ldr pairs, where the offset into a 4 kB page is resolved using a
separate :lo12: relocation. This implicitly assumes that the code will
always be executed at the same relative offset with respect to a 4 kB
boundary, or the references will point to the wrong address.

This means we should link the kernel at a 4 kB aligned base address in
order to remain compatible with the base address the UEFI loader uses
when doing the initial load of Image. So update the code that generates
TEXT_OFFSET to choose a multiple of 4 kB.

At the same time, update the code so it chooses from the interval [0..2MB)
as the author originally intended.

Reviewed-by: Mark Rutland <mark.rutland@arm.com>
Signed-off-by: Ard Biesheuvel <ard.biesheuvel@linaro.org>
Signed-off-by: Will Deacon <will.deacon@arm.com>
(cherry picked from commit 4190312beb2acfb7bfb1bb971e24a759aa96b0e8)
Signed-off-by: Mark Brown <broonie@kernel.org>
Conflicts:
arch/arm64/Makefile
arch/arm64/kernel/head.S

9 years agoarm64: Limit the CMA buffer to 32-bit if ZONE_DMA
Catalin Marinas [Fri, 13 Jun 2014 12:41:20 +0000 (13:41 +0100)]
arm64: Limit the CMA buffer to 32-bit if ZONE_DMA

When the CMA buffer is allocated, it is too early to know whether
devices will require ZONE_DMA memory. This patch limits the CMA buffer
to (DMA_BIT_MASK(32) + 1) if CONFIG_ZONE_DMA is enabled.

In addition, it computes the dma_to_phys(DMA_BIT_MASK(32)) before the
increment (no current functional change).

Signed-off-by: Catalin Marinas <catalin.marinas@arm.com>
(cherry picked from commit 2d5a5612bceda8edd25b29f363c4e2c6cda28bab)
Signed-off-by: Mark Brown <broonie@kernel.org>
Conflicts:
arch/arm64/mm/init.c

9 years agoarm64: kernel: initialize broadcast hrtimer based clock event device
Lorenzo Pieralisi [Thu, 29 May 2014 17:16:54 +0000 (18:16 +0100)]
arm64: kernel: initialize broadcast hrtimer based clock event device

On platforms implementing CPU power management, the CPUidle subsystem
can allow CPUs to enter idle states where local timers logic is lost on power
down. To keep the software timers functional the kernel relies on an
always-on broadcast timer to be present in the platform to relay the
interrupt signalling the timer expiries.

For platforms implementing CPU core gating that do not implement an always-on
HW timer or implement it in a broken way, this patch adds code to initialize
the kernel hrtimer based clock event device upon boot (which can be chosen as
tick broadcast device by the kernel).
It relies on a dynamically chosen CPU to be always powered-up. This CPU then
relays the timer interrupt to CPUs in deep-idle states through its HW local
timer device.

Having a CPU always-on has implications on power management platform
capabilities and makes CPUidle suboptimal, since at least a CPU is kept
always in a shallow idle state by the kernel to relay timer interrupts,
but at least leaves the kernel with a functional system with some working
power management capabilities.

The hrtimer based clock event device is unconditionally registered, but
has the lowest possible rating such that any broadcast-capable HW clock
event device present will be chosen in preference as the tick broadcast
device.

Reviewed-by: Preeti U Murthy <preeti@linux.vnet.ibm.com>
Acked-by: Will Deacon <will.deacon@arm.com>
Acked-by: Mark Rutland <mark.rutland@arm.com>
Signed-off-by: Lorenzo Pieralisi <lorenzo.pieralisi@arm.com>
Signed-off-by: Will Deacon <will.deacon@arm.com>
(cherry picked from commit 9358d755bd5cba8965ea79f2a446e689323409f9,
 again after temporary revert)
Signed-off-by: Mark Brown <broonie@kernel.org>
9 years agoMerge branch 'linux-linaro-lsk' into linux-linaro-lsk-android
Mark Brown [Thu, 22 Jan 2015 11:00:04 +0000 (11:00 +0000)]
Merge branch 'linux-linaro-lsk' into linux-linaro-lsk-android

9 years agork fb: new display framework for dual display mode
zwl [Thu, 22 Jan 2015 06:14:43 +0000 (14:14 +0800)]
rk fb: new display framework for dual display mode

move extend display(HDMI) configuration to hareware composer lib
and support dual different display.
Need update: hareware composer lib.

Signed-off-by: xzj <xzj@rockchips.com>
Signed-off-by: zwl <zwl@rockchips.com>
9 years agoarm64: don't call break hooks for BRK exceptions from EL0
Will Deacon [Thu, 31 Jul 2014 10:36:08 +0000 (11:36 +0100)]
arm64: don't call break hooks for BRK exceptions from EL0

Our break hooks are used to handle brk exceptions from kgdb (and potentially
kprobes if that code ever resurfaces), so don't bother calling them if
the BRK exception comes from userspace.

This prevents userspace from trapping to a kdb shell on systems where
kgdb is enabled and active.

Cc: <stable@vger.kernel.org>
Reported-by: Omar Sandoval <osandov@osandov.com>
Signed-off-by: Will Deacon <will.deacon@arm.com>
(cherry picked from commit c878e0cff5c5e56b216951cbe75f7a3dd500a736)
Signed-off-by: Mark Brown <broonie@kernel.org>
Conflicts:
arch/arm64/kernel/debug-monitors.c

9 years agoarm64: vdso: fix build error when switching from LE to BE
Arun Chandran [Thu, 26 Jun 2014 09:46:03 +0000 (15:16 +0530)]
arm64: vdso: fix build error when switching from LE to BE

Building a kernel with CPU_BIG_ENDIAN fails if there are stale objects
from a !CPU_BIG_ENDIAN build. Due to a missing FORCE prerequisite on an
if_changed rule in the VDSO Makefile, we attempt to link a stale LE
object into the new BE kernel.

According to Documentation/kbuild/makefiles.txt, FORCE is required for
if_changed rules and forgetting it is a common mistake, so fix it by
'Forcing' the build of vdso. This patch fixes build errors like these:

arch/arm64/kernel/vdso/note.o: compiled for a little endian system and target is big endian
failed to merge target specific data of file arch/arm64/kernel/vdso/note.o

arch/arm64/kernel/vdso/sigreturn.o: compiled for a little endian system and target is big endian
failed to merge target specific data of file arch/arm64/kernel/vdso/sigreturn.o

Tested-by: Mark Rutland <mark.rutland@arm.com>
Signed-off-by: Arun Chandran <achandran@mvista.com>
Signed-off-by: Will Deacon <will.deacon@arm.com>
(cherry picked from commit 1915e2ad1cf548217c963121e4076b3d44dd0169)
Signed-off-by: Mark Brown <broonie@kernel.org>
9 years agoarm64: fix soft lockup due to large tlb flush range
Mark Salter [Thu, 24 Jul 2014 14:56:15 +0000 (15:56 +0100)]
arm64: fix soft lockup due to large tlb flush range

Under certain loads, this soft lockup has been observed:

   BUG: soft lockup - CPU#2 stuck for 22s! [ip6tables:1016]
   Modules linked in: ip6t_rpfilter ip6t_REJECT cfg80211 rfkill xt_conntrack ebtable_nat ebtable_broute bridge stp llc ebtable_filter ebtables ip6table_nat nf_conntrack_ipv6 nf_defrag_ipv6 nf_nat_ipv6 ip6table_mangle ip6table_security ip6table_raw ip6table_filter ip6_tables iptable_nat nf_conntrack_ipv4 nf_defrag_ipv4 nf_nat_ipv4 nf_nat nf_conntrack iptable_mangle iptable_security iptable_raw vfat fat efivarfs xfs libcrc32c

   CPU: 2 PID: 1016 Comm: ip6tables Not tainted 3.13.0-0.rc7.30.sa2.aarch64 #1
   task: fffffe03e81d1400 ti: fffffe03f01f8000 task.ti: fffffe03f01f8000
   PC is at __cpu_flush_kern_tlb_range+0xc/0x40
   LR is at __purge_vmap_area_lazy+0x28c/0x3ac
   pc : [<fffffe000009c5cc>] lr : [<fffffe0000182710>] pstate: 80000145
   sp : fffffe03f01fbb70
   x29: fffffe03f01fbb70 x28: fffffe03f01f8000
   x27: fffffe0000b19000 x26: 00000000000000d0
   x25: 000000000000001c x24: fffffe03f01fbc50
   x23: fffffe03f01fbc58 x22: fffffe03f01fbc10
   x21: fffffe0000b2a3f8 x20: 0000000000000802
   x19: fffffe0000b2a3c8 x18: 000003fffdf52710
   x17: 000003ff9d8bb910 x16: fffffe000050fbfc
   x15: 0000000000005735 x14: 000003ff9d7e1a5c
   x13: 0000000000000000 x12: 000003ff9d7e1a5c
   x11: 0000000000000007 x10: fffffe0000c09af0
   x9 : fffffe0000ad1000 x8 : 000000000000005c
   x7 : fffffe03e8624000 x6 : 0000000000000000
   x5 : 0000000000000000 x4 : 0000000000000000
   x3 : fffffe0000c09cc8 x2 : 0000000000000000
   x1 : 000fffffdfffca80 x0 : 000fffffcd742150

The __cpu_flush_kern_tlb_range() function looks like:

  ENTRY(__cpu_flush_kern_tlb_range)
dsb sy
lsr x0, x0, #12
lsr x1, x1, #12
  1: tlbi vaae1is, x0
add x0, x0, #1
cmp x0, x1
b.lo 1b
dsb sy
isb
ret
  ENDPROC(__cpu_flush_kern_tlb_range)

The above soft lockup shows the PC at tlbi insn with:

  x0 = 0x000fffffcd742150
  x1 = 0x000fffffdfffca80

So __cpu_flush_kern_tlb_range has 0x128ba930 tlbi flushes left
after it has already been looping for 23 seconds!.

Looking up one frame at __purge_vmap_area_lazy(), there is:

...
list_for_each_entry_rcu(va, &vmap_area_list, list) {
if (va->flags & VM_LAZY_FREE) {
if (va->va_start < *start)
*start = va->va_start;
if (va->va_end > *end)
*end = va->va_end;
nr += (va->va_end - va->va_start) >> PAGE_SHIFT;
list_add_tail(&va->purge_list, &valist);
va->flags |= VM_LAZY_FREEING;
va->flags &= ~VM_LAZY_FREE;
}
}
...
if (nr || force_flush)
flush_tlb_kernel_range(*start, *end);

So if two areas are being freed, the range passed to
flush_tlb_kernel_range() may be as large as the vmalloc
space. For arm64, this is ~240GB for 4k pagesize and ~2TB
for 64kpage size.

This patch works around this problem by adding a loop limit.
If the range is larger than the limit, use flush_tlb_all()
rather than flushing based on individual pages. The limit
chosen is arbitrary as the TLB size is implementation
specific and not accessible in an architected way. The aim
of the arbitrary limit is to avoid soft lockup.

Signed-off-by: Mark Salter <msalter@redhat.com>
[catalin.marinas@arm.com: commit log update]
[catalin.marinas@arm.com: marginal optimisation]
[catalin.marinas@arm.com: changed to MAX_TLB_RANGE and added comment]
Signed-off-by: Catalin Marinas <catalin.marinas@arm.com>
(cherry picked from commit 05ac65305437e8ef63d2d19cac704138a2a05aa5)
Signed-off-by: Mark Brown <broonie@kernel.org>
9 years agoMerge remote-tracking branch 'lsk/v3.10/topic/arm64-ptrace' into lsk-v3.10-arm64...
Mark Brown [Wed, 21 Jan 2015 23:22:06 +0000 (23:22 +0000)]
Merge remote-tracking branch 'lsk/v3.10/topic/arm64-ptrace' into lsk-v3.10-arm64-misc

9 years agoarm64: Do not initialise the fixmap page tables in head.S
Catalin Marinas [Wed, 16 Jul 2014 11:07:17 +0000 (12:07 +0100)]
arm64: Do not initialise the fixmap page tables in head.S

The early_ioremap_init() function already handles fixmap pte
initialisation, so upgrade this to cover all of pud/pmd/pte and remove
one page from swapper_pg_dir.

Signed-off-by: Catalin Marinas <catalin.marinas@arm.com>
Tested-by: Jungseok Lee <jungseoklee85@gmail.com>
(cherry picked from commit 7edd88ad7e59c2b7b49da0e00f251884fb785d4f)
Signed-off-by: Mark Brown <broonie@kernel.org>
9 years agoarm64: Create non-empty ZONE_DMA when DRAM starts above 4GB
Catalin Marinas [Fri, 18 Jul 2014 10:54:37 +0000 (11:54 +0100)]
arm64: Create non-empty ZONE_DMA when DRAM starts above 4GB

ZONE_DMA is created to allow 32-bit only devices to access memory in the
absence of an IOMMU. On systems where the memory starts above 4GB, it is
expected that some devices have a DMA offset hardwired to be able to
access the bottom of the memory. Linux currently supports DT bindings
for the DMA offsets but they are not (easily) available early during
boot.

This patch tries to guess a DMA offset and assumes that ZONE_DMA
corresponds to the 32-bit mask above the start of DRAM.

Fixes: 2d5a5612bc (arm64: Limit the CMA buffer to 32-bit if ZONE_DMA)
Signed-off-by: Catalin Marinas <catalin.marinas@arm.com>
Reported-by: Mark Salter <msalter@redhat.com>
Tested-by: Mark Salter <msalter@redhat.com>
Tested-by: Anup Patel <anup.patel@linaro.org>
(cherry picked from commit d50314a6b0702c630c35b88148c1acb76d2e4ede)
Signed-off-by: Mark Brown <broonie@kernel.org>
Conflicts:
arch/arm64/mm/init.c

9 years agoarm64: add MIDR_EL1 field accessors
Mark Rutland [Wed, 16 Jul 2014 15:32:43 +0000 (16:32 +0100)]
arm64: add MIDR_EL1 field accessors

The MIDR_EL1 register is composed of a number of bitfields, and uses of
the fields has so far involved open-coding of the shifts and masks
required.

This patch adds shifts and masks for each of the MIDR_EL1 subfields, and
also provides accessors built atop of these. Existing uses within
cputype.h are updated to use these accessors.

The read_cpuid_part_number macro is modified to return the extracted
bitfield rather than returning the value in-place with all other fields
(including revision) masked out, to better match the other accessors.
As the value is only used in comparison with the *_CPU_PART_* macros
which are similarly updated, and these values are never exposed to
userspace, this change should not affect any functionality.

Signed-off-by: Mark Rutland <mark.rutland@arm.com>
Acked-by: Will Deacon <will.deacon@arm.com>
Reviewed-by: Will Deacon <will.deacon@arm.com>
Reviewed-by: Catalin Marinas <catalin.marinas@arm.com>
Signed-off-by: Catalin Marinas <catalin.marinas@arm.com>
(cherry picked from commit 89c4a306e7631bcb71cc537c8a029172af6047fe)
Signed-off-by: Mark Brown <broonie@kernel.org>
9 years agoarm64: kernel: add __init marker to PSCI init functions
Lorenzo Pieralisi [Thu, 17 Jul 2014 17:19:19 +0000 (18:19 +0100)]
arm64: kernel: add __init marker to PSCI init functions

PSCI init functions must be marked as __init so that they are freed
by the kernel upon boot.

This patch marks the PSCI init functions as such since they need not
be persistent in the kernel address space after the kernel has booted.

Signed-off-by: Lorenzo Pieralisi <lorenzo.pieralisi@arm.com>
Signed-off-by: Catalin Marinas <catalin.marinas@arm.com>
(cherry picked from commit b9e97ef93c630404f305350d88d09391d1a55648)
Signed-off-by: Mark Brown <broonie@kernel.org>
9 years agoarm64: kernel: enable PSCI cpu operations on UP systems
Lorenzo Pieralisi [Thu, 17 Jul 2014 17:19:18 +0000 (18:19 +0100)]
arm64: kernel: enable PSCI cpu operations on UP systems

PSCI CPU operations have to be enabled on UP kernels so that calls
like eg cpu_suspend can be made functional on UP too.

This patch reworks the PSCI CPU operations so that they can be
enabled on UP systems.

Acked-by: Mark Rutland <mark.rutland@arm.com>
Signed-off-by: Lorenzo Pieralisi <lorenzo.pieralisi@arm.com>
Signed-off-by: Catalin Marinas <catalin.marinas@arm.com>
(cherry picked from commit 756854d9b99a735f86bc3b86df5c19be12e8746e)
Signed-off-by: Mark Brown <broonie@kernel.org>
9 years agoarm64: vdso: move data page before code pages
Will Deacon [Wed, 9 Jul 2014 18:22:13 +0000 (19:22 +0100)]
arm64: vdso: move data page before code pages

Andy pointed out that binutils generates additional sections in the vdso
image (e.g. section string table) which, if our .text section gets big
enough, could cross a page boundary and end up screwing up the location
where the kernel expects to put the data page.

This patch solves the issue in the same manner as x86_32, by moving the
data page before the code pages.

Cc: Andy Lutomirski <luto@amacapital.net>
Signed-off-by: Will Deacon <will.deacon@arm.com>
Signed-off-by: Catalin Marinas <catalin.marinas@arm.com>
(cherry picked from commit 601255ae3c98fdeeee3a8bb4696425e4f868b4f1)
Signed-off-by: Mark Brown <broonie@kernel.org>
9 years agoarm64: vdso: move to _install_special_mapping and remove arch_vma_name
Will Deacon [Wed, 9 Jul 2014 18:22:12 +0000 (19:22 +0100)]
arm64: vdso: move to _install_special_mapping and remove arch_vma_name

_install_special_mapping replaces install_special_mapping and removes
the need to detect special VMA in arch_vma_name.

This patch moves the vdso and compat vectors page code over to the new
API.

Cc: Andy Lutomirski <luto@amacapital.net>
Signed-off-by: Will Deacon <will.deacon@arm.com>
Signed-off-by: Catalin Marinas <catalin.marinas@arm.com>
(cherry picked from commit 2fea7f6c98f5957e539eb8aa0ce849729b900342)
Signed-off-by: Mark Brown <broonie@kernel.org>
9 years agoarm64: Use pr_* instead of printk
Jungseok Lee [Mon, 12 May 2014 09:40:30 +0000 (10:40 +0100)]
arm64: Use pr_* instead of printk

This patch fixed the following checkpatch complaint as using pr_*
instead of printk.

WARNING: printk() should include KERN_ facility level

Signed-off-by: Jungseok Lee <jays.lee@samsung.com>
Reviewed-by: Sungjinn Chung <sungjinn.chung@samsung.com>
Acked-by: Kukjin Kim <kgene.kim@samsung.com>
Signed-off-by: Catalin Marinas <catalin.marinas@arm.com>
(cherry picked from commit ac7b406c1a9d50ddbf5e5cbce8ca4d68d36ac2db)
Signed-off-by: Mark Brown <broonie@kernel.org>
9 years agoMerge remote-tracking branch 'lsk/v3.10/topic/hrtimer' into linux-linaro-lsk
Mark Brown [Wed, 21 Jan 2015 22:27:49 +0000 (22:27 +0000)]
Merge remote-tracking branch 'lsk/v3.10/topic/hrtimer' into linux-linaro-lsk

Conflicts:
kernel/time/clockevents.c
kernel/time/tick-broadcast.c
kernel/time/tick-common.c
kernel/time/tick-internal.h

9 years agotick: Fixup more fallout from hrtimer broadcast mode
Preeti U Murthy [Sun, 9 Feb 2014 06:02:22 +0000 (11:32 +0530)]
tick: Fixup more fallout from hrtimer broadcast mode

The hrtimer mode of broadcast is supported only when
GENERIC_CLOCKEVENTS_BROADCAST and TICK_ONESHOT config options
are enabled. Hence compile in the functions for hrtimer mode
of broadcast only when these options are selected.
Also fix max_delta_ticks value for the pseudo clock device.

Reported-by: Fengguang Wu <fengguang.wu@intel.com>
Reported-by: Ingo Molnar <mingo@kernel.org>
Signed-off-by: Preeti U Murthy <preeti@linux.vnet.ibm.com>
Link: http://lkml.kernel.org/r/52F719EE.9010304@linux.vnet.ibm.com
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
(cherry picked from commit 849401b66d305f3feb75b6db7459b95ad190552a)
Signed-off-by: Mark Brown <broonie@kernel.org>
Conflicts:
kernel/time/Makefile