diff options
| author | Linus Torvalds <torvalds@linux-foundation.org> | 2014-02-18 18:49:58 -0500 |
|---|---|---|
| committer | Linus Torvalds <torvalds@linux-foundation.org> | 2014-02-18 18:49:58 -0500 |
| commit | 91c6c8dcc7c30ed2d5861c670621a23f3b37e293 (patch) | |
| tree | 7cb57402cfae69601e2b432690f547c828889b89 | |
| parent | 341bbdc512633592198e6b434ca99a29bab7e02a (diff) | |
| parent | 39544ac9df20f73e49fc6b9ac19ff533388c82c0 (diff) | |
Merge branch 'fixes' of git://ftp.arm.linux.org.uk/~rmk/linux-arm
Pull ARM fixes from Russell King:
"A range of ARM fixes. Biggest change is the stage-2 attributes used
for for hyp mode which were wrong. I've killed some bits in a couple
of DT files which turned out not to be required, and a few other
fixes.
One fix touches code outside of arch/arm, which is related to sorting
out the DMA masks correctly. There is a long standing issue with the
conversion from PFNs to addresses where people assume that shifting an
unsigned long left by PAGE_SHIFT results in a correct address. This
is not the case with C: the integer promotion happens at assignment
after evaluation. This fixes the recently introduced dma_max_pfn()
function, but there's a number of other places where we try this
directly on an unsigned long in the mm code"
* 'fixes' of git://ftp.arm.linux.org.uk/~rmk/linux-arm:
ARM: 7957/1: add DSB after icache flush in __flush_icache_all()
Fix uses of dma_max_pfn() when converting to a limiting address
ARM: 7955/1: spinlock: ensure we have a compiler barrier before sev
ARM: 7953/1: mm: ensure TLB invalidation is complete before enabling MMU
ARM: 7952/1: mm: Fix the memblock allocation for LPAE machines
ARM: 7950/1: mm: Fix stage-2 device memory attributes
ARM: dts: fix spdif pinmux configuration
| -rw-r--r-- | arch/arm/boot/dts/imx6dl-hummingboard.dts | 10 | ||||
| -rw-r--r-- | arch/arm/boot/dts/imx6qdl-cubox-i.dtsi | 10 | ||||
| -rw-r--r-- | arch/arm/include/asm/cacheflush.h | 1 | ||||
| -rw-r--r-- | arch/arm/include/asm/pgtable-3level.h | 15 | ||||
| -rw-r--r-- | arch/arm/include/asm/spinlock.h | 15 | ||||
| -rw-r--r-- | arch/arm/kernel/setup.c | 2 | ||||
| -rw-r--r-- | arch/arm/mm/mm.h | 1 | ||||
| -rw-r--r-- | arch/arm/mm/mmu.c | 7 | ||||
| -rw-r--r-- | arch/arm/mm/proc-v6.S | 3 | ||||
| -rw-r--r-- | arch/arm/mm/proc-v7.S | 2 | ||||
| -rw-r--r-- | drivers/mmc/card/queue.c | 2 | ||||
| -rw-r--r-- | drivers/scsi/scsi_lib.c | 2 |
12 files changed, 32 insertions, 38 deletions
diff --git a/arch/arm/boot/dts/imx6dl-hummingboard.dts b/arch/arm/boot/dts/imx6dl-hummingboard.dts index fd8fc7cd53f3..5bfae54fb780 100644 --- a/arch/arm/boot/dts/imx6dl-hummingboard.dts +++ b/arch/arm/boot/dts/imx6dl-hummingboard.dts | |||
| @@ -52,12 +52,6 @@ | |||
| 52 | }; | 52 | }; |
| 53 | }; | 53 | }; |
| 54 | 54 | ||
| 55 | codec: spdif-transmitter { | ||
| 56 | compatible = "linux,spdif-dit"; | ||
| 57 | pinctrl-names = "default"; | ||
| 58 | pinctrl-0 = <&pinctrl_hummingboard_spdif>; | ||
| 59 | }; | ||
| 60 | |||
| 61 | sound-spdif { | 55 | sound-spdif { |
| 62 | compatible = "fsl,imx-audio-spdif"; | 56 | compatible = "fsl,imx-audio-spdif"; |
| 63 | model = "imx-spdif"; | 57 | model = "imx-spdif"; |
| @@ -111,7 +105,7 @@ | |||
| 111 | }; | 105 | }; |
| 112 | 106 | ||
| 113 | pinctrl_hummingboard_spdif: hummingboard-spdif { | 107 | pinctrl_hummingboard_spdif: hummingboard-spdif { |
| 114 | fsl,pins = <MX6QDL_PAD_GPIO_17__SPDIF_OUT 0x1b0b0>; | 108 | fsl,pins = <MX6QDL_PAD_GPIO_17__SPDIF_OUT 0x13091>; |
| 115 | }; | 109 | }; |
| 116 | 110 | ||
| 117 | pinctrl_hummingboard_usbh1_vbus: hummingboard-usbh1-vbus { | 111 | pinctrl_hummingboard_usbh1_vbus: hummingboard-usbh1-vbus { |
| @@ -142,6 +136,8 @@ | |||
| 142 | }; | 136 | }; |
| 143 | 137 | ||
| 144 | &spdif { | 138 | &spdif { |
| 139 | pinctrl-names = "default"; | ||
| 140 | pinctrl-0 = <&pinctrl_hummingboard_spdif>; | ||
| 145 | status = "okay"; | 141 | status = "okay"; |
| 146 | }; | 142 | }; |
| 147 | 143 | ||
diff --git a/arch/arm/boot/dts/imx6qdl-cubox-i.dtsi b/arch/arm/boot/dts/imx6qdl-cubox-i.dtsi index 64daa3b311f6..c2a24888a276 100644 --- a/arch/arm/boot/dts/imx6qdl-cubox-i.dtsi +++ b/arch/arm/boot/dts/imx6qdl-cubox-i.dtsi | |||
| @@ -46,12 +46,6 @@ | |||
| 46 | }; | 46 | }; |
| 47 | }; | 47 | }; |
| 48 | 48 | ||
| 49 | codec: spdif-transmitter { | ||
| 50 | compatible = "linux,spdif-dit"; | ||
| 51 | pinctrl-names = "default"; | ||
| 52 | pinctrl-0 = <&pinctrl_cubox_i_spdif>; | ||
| 53 | }; | ||
| 54 | |||
| 55 | sound-spdif { | 49 | sound-spdif { |
| 56 | compatible = "fsl,imx-audio-spdif"; | 50 | compatible = "fsl,imx-audio-spdif"; |
| 57 | model = "imx-spdif"; | 51 | model = "imx-spdif"; |
| @@ -89,7 +83,7 @@ | |||
| 89 | }; | 83 | }; |
| 90 | 84 | ||
| 91 | pinctrl_cubox_i_spdif: cubox-i-spdif { | 85 | pinctrl_cubox_i_spdif: cubox-i-spdif { |
| 92 | fsl,pins = <MX6QDL_PAD_GPIO_17__SPDIF_OUT 0x1b0b0>; | 86 | fsl,pins = <MX6QDL_PAD_GPIO_17__SPDIF_OUT 0x13091>; |
| 93 | }; | 87 | }; |
| 94 | 88 | ||
| 95 | pinctrl_cubox_i_usbh1_vbus: cubox-i-usbh1-vbus { | 89 | pinctrl_cubox_i_usbh1_vbus: cubox-i-usbh1-vbus { |
| @@ -121,6 +115,8 @@ | |||
| 121 | }; | 115 | }; |
| 122 | 116 | ||
| 123 | &spdif { | 117 | &spdif { |
| 118 | pinctrl-names = "default"; | ||
| 119 | pinctrl-0 = <&pinctrl_cubox_i_spdif>; | ||
| 124 | status = "okay"; | 120 | status = "okay"; |
| 125 | }; | 121 | }; |
| 126 | 122 | ||
diff --git a/arch/arm/include/asm/cacheflush.h b/arch/arm/include/asm/cacheflush.h index e9a49fe0284e..8b8b61685a34 100644 --- a/arch/arm/include/asm/cacheflush.h +++ b/arch/arm/include/asm/cacheflush.h | |||
| @@ -212,6 +212,7 @@ extern void copy_to_user_page(struct vm_area_struct *, struct page *, | |||
| 212 | static inline void __flush_icache_all(void) | 212 | static inline void __flush_icache_all(void) |
| 213 | { | 213 | { |
| 214 | __flush_icache_preferred(); | 214 | __flush_icache_preferred(); |
| 215 | dsb(); | ||
| 215 | } | 216 | } |
| 216 | 217 | ||
| 217 | /* | 218 | /* |
diff --git a/arch/arm/include/asm/pgtable-3level.h b/arch/arm/include/asm/pgtable-3level.h index 03243f7eeddf..85c60adc8b60 100644 --- a/arch/arm/include/asm/pgtable-3level.h +++ b/arch/arm/include/asm/pgtable-3level.h | |||
| @@ -120,13 +120,16 @@ | |||
| 120 | /* | 120 | /* |
| 121 | * 2nd stage PTE definitions for LPAE. | 121 | * 2nd stage PTE definitions for LPAE. |
| 122 | */ | 122 | */ |
| 123 | #define L_PTE_S2_MT_UNCACHED (_AT(pteval_t, 0x5) << 2) /* MemAttr[3:0] */ | 123 | #define L_PTE_S2_MT_UNCACHED (_AT(pteval_t, 0x0) << 2) /* strongly ordered */ |
| 124 | #define L_PTE_S2_MT_WRITETHROUGH (_AT(pteval_t, 0xa) << 2) /* MemAttr[3:0] */ | 124 | #define L_PTE_S2_MT_WRITETHROUGH (_AT(pteval_t, 0xa) << 2) /* normal inner write-through */ |
| 125 | #define L_PTE_S2_MT_WRITEBACK (_AT(pteval_t, 0xf) << 2) /* MemAttr[3:0] */ | 125 | #define L_PTE_S2_MT_WRITEBACK (_AT(pteval_t, 0xf) << 2) /* normal inner write-back */ |
| 126 | #define L_PTE_S2_RDONLY (_AT(pteval_t, 1) << 6) /* HAP[1] */ | 126 | #define L_PTE_S2_MT_DEV_SHARED (_AT(pteval_t, 0x1) << 2) /* device */ |
| 127 | #define L_PTE_S2_RDWR (_AT(pteval_t, 3) << 6) /* HAP[2:1] */ | 127 | #define L_PTE_S2_MT_MASK (_AT(pteval_t, 0xf) << 2) |
| 128 | 128 | ||
| 129 | #define L_PMD_S2_RDWR (_AT(pmdval_t, 3) << 6) /* HAP[2:1] */ | 129 | #define L_PTE_S2_RDONLY (_AT(pteval_t, 1) << 6) /* HAP[1] */ |
| 130 | #define L_PTE_S2_RDWR (_AT(pteval_t, 3) << 6) /* HAP[2:1] */ | ||
| 131 | |||
| 132 | #define L_PMD_S2_RDWR (_AT(pmdval_t, 3) << 6) /* HAP[2:1] */ | ||
| 130 | 133 | ||
| 131 | /* | 134 | /* |
| 132 | * Hyp-mode PL2 PTE definitions for LPAE. | 135 | * Hyp-mode PL2 PTE definitions for LPAE. |
diff --git a/arch/arm/include/asm/spinlock.h b/arch/arm/include/asm/spinlock.h index ef3c6072aa45..ac4bfae26702 100644 --- a/arch/arm/include/asm/spinlock.h +++ b/arch/arm/include/asm/spinlock.h | |||
| @@ -37,18 +37,9 @@ | |||
| 37 | 37 | ||
| 38 | static inline void dsb_sev(void) | 38 | static inline void dsb_sev(void) |
| 39 | { | 39 | { |
| 40 | #if __LINUX_ARM_ARCH__ >= 7 | 40 | |
| 41 | __asm__ __volatile__ ( | 41 | dsb(ishst); |
| 42 | "dsb ishst\n" | 42 | __asm__(SEV); |
| 43 | SEV | ||
| 44 | ); | ||
| 45 | #else | ||
| 46 | __asm__ __volatile__ ( | ||
| 47 | "mcr p15, 0, %0, c7, c10, 4\n" | ||
| 48 | SEV | ||
| 49 | : : "r" (0) | ||
| 50 | ); | ||
| 51 | #endif | ||
| 52 | } | 43 | } |
| 53 | 44 | ||
| 54 | /* | 45 | /* |
diff --git a/arch/arm/kernel/setup.c b/arch/arm/kernel/setup.c index b0df9761de6d..1e8b030dbefd 100644 --- a/arch/arm/kernel/setup.c +++ b/arch/arm/kernel/setup.c | |||
| @@ -731,7 +731,7 @@ static void __init request_standard_resources(const struct machine_desc *mdesc) | |||
| 731 | kernel_data.end = virt_to_phys(_end - 1); | 731 | kernel_data.end = virt_to_phys(_end - 1); |
| 732 | 732 | ||
| 733 | for_each_memblock(memory, region) { | 733 | for_each_memblock(memory, region) { |
| 734 | res = memblock_virt_alloc_low(sizeof(*res), 0); | 734 | res = memblock_virt_alloc(sizeof(*res), 0); |
| 735 | res->name = "System RAM"; | 735 | res->name = "System RAM"; |
| 736 | res->start = __pfn_to_phys(memblock_region_memory_base_pfn(region)); | 736 | res->start = __pfn_to_phys(memblock_region_memory_base_pfn(region)); |
| 737 | res->end = __pfn_to_phys(memblock_region_memory_end_pfn(region)) - 1; | 737 | res->end = __pfn_to_phys(memblock_region_memory_end_pfn(region)) - 1; |
diff --git a/arch/arm/mm/mm.h b/arch/arm/mm/mm.h index d5a982d15a88..7ea641b7aa7d 100644 --- a/arch/arm/mm/mm.h +++ b/arch/arm/mm/mm.h | |||
| @@ -38,6 +38,7 @@ static inline pmd_t *pmd_off_k(unsigned long virt) | |||
| 38 | 38 | ||
| 39 | struct mem_type { | 39 | struct mem_type { |
| 40 | pteval_t prot_pte; | 40 | |
