Skip to content

Commit 2a9af86

Browse files
authored
Merge pull request #124 from zandrey/5.4-1.0.0-imx
Update 5.4-1.0.0-imx to v5.4.63 from stable
2 parents 530e2b3 + 7560624 commit 2a9af86

File tree

22 files changed

+328
-91
lines changed

22 files changed

+328
-91
lines changed

Documentation/devicetree/bindings/mmc/nvidia,tegra20-sdhci.txt

Lines changed: 29 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -15,8 +15,15 @@ Required properties:
1515
- "nvidia,tegra210-sdhci": for Tegra210
1616
- "nvidia,tegra186-sdhci": for Tegra186
1717
- "nvidia,tegra194-sdhci": for Tegra194
18-
- clocks : Must contain one entry, for the module clock.
19-
See ../clocks/clock-bindings.txt for details.
18+
- clocks: For Tegra210, Tegra186 and Tegra194 must contain two entries.
19+
One for the module clock and one for the timeout clock.
20+
For all other Tegra devices, must contain a single entry for
21+
the module clock. See ../clocks/clock-bindings.txt for details.
22+
- clock-names: For Tegra210, Tegra186 and Tegra194 must contain the
23+
strings 'sdhci' and 'tmclk' to represent the module and
24+
the timeout clocks, respectively.
25+
For all other Tegra devices must contain the string 'sdhci'
26+
to represent the module clock.
2027
- resets : Must contain an entry for each entry in reset-names.
2128
See ../reset/reset.txt for details.
2229
- reset-names : Must include the following entries:
@@ -99,7 +106,7 @@ Optional properties for Tegra210, Tegra186 and Tegra194:
99106

100107
Example:
101108
sdhci@700b0000 {
102-
compatible = "nvidia,tegra210-sdhci", "nvidia,tegra124-sdhci";
109+
compatible = "nvidia,tegra124-sdhci";
103110
reg = <0x0 0x700b0000 0x0 0x200>;
104111
interrupts = <GIC_SPI 14 IRQ_TYPE_LEVEL_HIGH>;
105112
clocks = <&tegra_car TEGRA210_CLK_SDMMC1>;
@@ -115,3 +122,22 @@ sdhci@700b0000 {
115122
nvidia,pad-autocal-pull-down-offset-1v8 = <0x7b>;
116123
status = "disabled";
117124
};
125+
126+
sdhci@700b0000 {
127+
compatible = "nvidia,tegra210-sdhci";
128+
reg = <0x0 0x700b0000 0x0 0x200>;
129+
interrupts = <GIC_SPI 14 IRQ_TYPE_LEVEL_HIGH>;
130+
clocks = <&tegra_car TEGRA210_CLK_SDMMC1>,
131+
<&tegra_car TEGRA210_CLK_SDMMC_LEGACY>;
132+
clock-names = "sdhci", "tmclk";
133+
resets = <&tegra_car 14>;
134+
reset-names = "sdhci";
135+
pinctrl-names = "sdmmc-3v3", "sdmmc-1v8";
136+
pinctrl-0 = <&sdmmc1_3v3>;
137+
pinctrl-1 = <&sdmmc1_1v8>;
138+
nvidia,pad-autocal-pull-up-offset-3v3 = <0x00>;
139+
nvidia,pad-autocal-pull-down-offset-3v3 = <0x7d>;
140+
nvidia,pad-autocal-pull-up-offset-1v8 = <0x7b>;
141+
nvidia,pad-autocal-pull-down-offset-1v8 = <0x7b>;
142+
status = "disabled";
143+
};

Makefile

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
# SPDX-License-Identifier: GPL-2.0
22
VERSION = 5
33
PATCHLEVEL = 4
4-
SUBLEVEL = 62
4+
SUBLEVEL = 63
55
EXTRAVERSION =
66
NAME = Kleptomaniac Octopus
77

arch/arm64/boot/dts/nvidia/tegra186.dtsi

Lines changed: 12 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -309,8 +309,9 @@
309309
compatible = "nvidia,tegra186-sdhci";
310310
reg = <0x0 0x03400000 0x0 0x10000>;
311311
interrupts = <GIC_SPI 62 IRQ_TYPE_LEVEL_HIGH>;
312-
clocks = <&bpmp TEGRA186_CLK_SDMMC1>;
313-
clock-names = "sdhci";
312+
clocks = <&bpmp TEGRA186_CLK_SDMMC1>,
313+
<&bpmp TEGRA186_CLK_SDMMC_LEGACY_TM>;
314+
clock-names = "sdhci", "tmclk";
314315
resets = <&bpmp TEGRA186_RESET_SDMMC1>;
315316
reset-names = "sdhci";
316317
iommus = <&smmu TEGRA186_SID_SDMMC1>;
@@ -335,8 +336,9 @@
335336
compatible = "nvidia,tegra186-sdhci";
336337
reg = <0x0 0x03420000 0x0 0x10000>;
337338
interrupts = <GIC_SPI 63 IRQ_TYPE_LEVEL_HIGH>;
338-
clocks = <&bpmp TEGRA186_CLK_SDMMC2>;
339-
clock-names = "sdhci";
339+
clocks = <&bpmp TEGRA186_CLK_SDMMC2>,
340+
<&bpmp TEGRA186_CLK_SDMMC_LEGACY_TM>;
341+
clock-names = "sdhci", "tmclk";
340342
resets = <&bpmp TEGRA186_RESET_SDMMC2>;
341343
reset-names = "sdhci";
342344
iommus = <&smmu TEGRA186_SID_SDMMC2>;
@@ -356,8 +358,9 @@
356358
compatible = "nvidia,tegra186-sdhci";
357359
reg = <0x0 0x03440000 0x0 0x10000>;
358360
interrupts = <GIC_SPI 64 IRQ_TYPE_LEVEL_HIGH>;
359-
clocks = <&bpmp TEGRA186_CLK_SDMMC3>;
360-
clock-names = "sdhci";
361+
clocks = <&bpmp TEGRA186_CLK_SDMMC3>,
362+
<&bpmp TEGRA186_CLK_SDMMC_LEGACY_TM>;
363+
clock-names = "sdhci", "tmclk";
361364
resets = <&bpmp TEGRA186_RESET_SDMMC3>;
362365
reset-names = "sdhci";
363366
iommus = <&smmu TEGRA186_SID_SDMMC3>;
@@ -379,8 +382,9 @@
379382
compatible = "nvidia,tegra186-sdhci";
380383
reg = <0x0 0x03460000 0x0 0x10000>;
381384
interrupts = <GIC_SPI 65 IRQ_TYPE_LEVEL_HIGH>;
382-
clocks = <&bpmp TEGRA186_CLK_SDMMC4>;
383-
clock-names = "sdhci";
385+
clocks = <&bpmp TEGRA186_CLK_SDMMC4>,
386+
<&bpmp TEGRA186_CLK_SDMMC_LEGACY_TM>;
387+
clock-names = "sdhci", "tmclk";
384388
assigned-clocks = <&bpmp TEGRA186_CLK_SDMMC4>,
385389
<&bpmp TEGRA186_CLK_PLLC4_VCO>;
386390
assigned-clock-parents = <&bpmp TEGRA186_CLK_PLLC4_VCO>;

arch/arm64/boot/dts/nvidia/tegra194.dtsi

Lines changed: 9 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -403,8 +403,9 @@
403403
compatible = "nvidia,tegra194-sdhci", "nvidia,tegra186-sdhci";
404404
reg = <0x03400000 0x10000>;
405405
interrupts = <GIC_SPI 62 IRQ_TYPE_LEVEL_HIGH>;
406-
clocks = <&bpmp TEGRA194_CLK_SDMMC1>;
407-
clock-names = "sdhci";
406+
clocks = <&bpmp TEGRA194_CLK_SDMMC1>,
407+
<&bpmp TEGRA194_CLK_SDMMC_LEGACY_TM>;
408+
clock-names = "sdhci", "tmclk";
408409
resets = <&bpmp TEGRA194_RESET_SDMMC1>;
409410
reset-names = "sdhci";
410411
nvidia,pad-autocal-pull-up-offset-3v3-timeout =
@@ -425,8 +426,9 @@
425426
compatible = "nvidia,tegra194-sdhci", "nvidia,tegra186-sdhci";
426427
reg = <0x03440000 0x10000>;
427428
interrupts = <GIC_SPI 64 IRQ_TYPE_LEVEL_HIGH>;
428-
clocks = <&bpmp TEGRA194_CLK_SDMMC3>;
429-
clock-names = "sdhci";
429+
clocks = <&bpmp TEGRA194_CLK_SDMMC3>,
430+
<&bpmp TEGRA194_CLK_SDMMC_LEGACY_TM>;
431+
clock-names = "sdhci", "tmclk";
430432
resets = <&bpmp TEGRA194_RESET_SDMMC3>;
431433
reset-names = "sdhci";
432434
nvidia,pad-autocal-pull-up-offset-1v8 = <0x00>;
@@ -448,8 +450,9 @@
448450
compatible = "nvidia,tegra194-sdhci", "nvidia,tegra186-sdhci";
449451
reg = <0x03460000 0x10000>;
450452
interrupts = <GIC_SPI 65 IRQ_TYPE_LEVEL_HIGH>;
451-
clocks = <&bpmp TEGRA194_CLK_SDMMC4>;
452-
clock-names = "sdhci";
453+
clocks = <&bpmp TEGRA194_CLK_SDMMC4>,
454+
<&bpmp TEGRA194_CLK_SDMMC_LEGACY_TM>;
455+
clock-names = "sdhci", "tmclk";
453456
assigned-clocks = <&bpmp TEGRA194_CLK_SDMMC4>,
454457
<&bpmp TEGRA194_CLK_PLLC4>;
455458
assigned-clock-parents =

arch/arm64/boot/dts/nvidia/tegra210.dtsi

Lines changed: 12 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1116,8 +1116,9 @@
11161116
compatible = "nvidia,tegra210-sdhci", "nvidia,tegra124-sdhci";
11171117
reg = <0x0 0x700b0000 0x0 0x200>;
11181118
interrupts = <GIC_SPI 14 IRQ_TYPE_LEVEL_HIGH>;
1119-
clocks = <&tegra_car TEGRA210_CLK_SDMMC1>;
1120-
clock-names = "sdhci";
1119+
clocks = <&tegra_car TEGRA210_CLK_SDMMC1>,
1120+
<&tegra_car TEGRA210_CLK_SDMMC_LEGACY>;
1121+
clock-names = "sdhci", "tmclk";
11211122
resets = <&tegra_car 14>;
11221123
reset-names = "sdhci";
11231124
pinctrl-names = "sdmmc-3v3", "sdmmc-1v8",
@@ -1144,8 +1145,9 @@
11441145
compatible = "nvidia,tegra210-sdhci", "nvidia,tegra124-sdhci";
11451146
reg = <0x0 0x700b0200 0x0 0x200>;
11461147
interrupts = <GIC_SPI 15 IRQ_TYPE_LEVEL_HIGH>;
1147-
clocks = <&tegra_car TEGRA210_CLK_SDMMC2>;
1148-
clock-names = "sdhci";
1148+
clocks = <&tegra_car TEGRA210_CLK_SDMMC2>,
1149+
<&tegra_car TEGRA210_CLK_SDMMC_LEGACY>;
1150+
clock-names = "sdhci", "tmclk";
11491151
resets = <&tegra_car 9>;
11501152
reset-names = "sdhci";
11511153
pinctrl-names = "sdmmc-1v8-drv";
@@ -1161,8 +1163,9 @@
11611163
compatible = "nvidia,tegra210-sdhci", "nvidia,tegra124-sdhci";
11621164
reg = <0x0 0x700b0400 0x0 0x200>;
11631165
interrupts = <GIC_SPI 19 IRQ_TYPE_LEVEL_HIGH>;
1164-
clocks = <&tegra_car TEGRA210_CLK_SDMMC3>;
1165-
clock-names = "sdhci";
1166+
clocks = <&tegra_car TEGRA210_CLK_SDMMC3>,
1167+
<&tegra_car TEGRA210_CLK_SDMMC_LEGACY>;
1168+
clock-names = "sdhci", "tmclk";
11661169
resets = <&tegra_car 69>;
11671170
reset-names = "sdhci";
11681171
pinctrl-names = "sdmmc-3v3", "sdmmc-1v8",
@@ -1184,8 +1187,9 @@
11841187
compatible = "nvidia,tegra210-sdhci", "nvidia,tegra124-sdhci";
11851188
reg = <0x0 0x700b0600 0x0 0x200>;
11861189
interrupts = <GIC_SPI 31 IRQ_TYPE_LEVEL_HIGH>;
1187-
clocks = <&tegra_car TEGRA210_CLK_SDMMC4>;
1188-
clock-names = "sdhci";
1190+
clocks = <&tegra_car TEGRA210_CLK_SDMMC4>,
1191+
<&tegra_car TEGRA210_CLK_SDMMC_LEGACY>;
1192+
clock-names = "sdhci", "tmclk";
11891193
resets = <&tegra_car 15>;
11901194
reset-names = "sdhci";
11911195
pinctrl-names = "sdmmc-3v3-drv", "sdmmc-1v8-drv";

arch/arm64/include/asm/kvm_arm.h

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -72,11 +72,12 @@
7272
* IMO: Override CPSR.I and enable signaling with VI
7373
* FMO: Override CPSR.F and enable signaling with VF
7474
* SWIO: Turn set/way invalidates into set/way clean+invalidate
75+
* PTW: Take a stage2 fault if a stage1 walk steps in device memory
7576
*/
7677
#define HCR_GUEST_FLAGS (HCR_TSC | HCR_TSW | HCR_TWE | HCR_TWI | HCR_VM | \
7778
HCR_TVM | HCR_BSU_IS | HCR_FB | HCR_TAC | \
7879
HCR_AMO | HCR_SWIO | HCR_TIDCP | HCR_RW | HCR_TLOR | \
79-
HCR_FMO | HCR_IMO)
80+
HCR_FMO | HCR_IMO | HCR_PTW )
8081
#define HCR_VIRT_EXCP_MASK (HCR_VSE | HCR_VI | HCR_VF)
8182
#define HCR_HOST_NVHE_FLAGS (HCR_RW | HCR_API | HCR_APK)
8283
#define HCR_HOST_VHE_FLAGS (HCR_RW | HCR_TGE | HCR_E2H)

arch/arm64/include/asm/kvm_asm.h

Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -88,6 +88,34 @@ extern u32 __kvm_get_mdcr_el2(void);
8888
*__hyp_this_cpu_ptr(sym); \
8989
})
9090

91+
#define __KVM_EXTABLE(from, to) \
92+
" .pushsection __kvm_ex_table, \"a\"\n" \
93+
" .align 3\n" \
94+
" .long (" #from " - .), (" #to " - .)\n" \
95+
" .popsection\n"
96+
97+
98+
#define __kvm_at(at_op, addr) \
99+
( { \
100+
int __kvm_at_err = 0; \
101+
u64 spsr, elr; \
102+
asm volatile( \
103+
" mrs %1, spsr_el2\n" \
104+
" mrs %2, elr_el2\n" \
105+
"1: at "at_op", %3\n" \
106+
" isb\n" \
107+
" b 9f\n" \
108+
"2: msr spsr_el2, %1\n" \
109+
" msr elr_el2, %2\n" \
110+
" mov %w0, %4\n" \
111+
"9:\n" \
112+
__KVM_EXTABLE(1b, 2b) \
113+
: "+r" (__kvm_at_err), "=&r" (spsr), "=&r" (elr) \
114+
: "r" (addr), "i" (-EFAULT)); \
115+
__kvm_at_err; \
116+
} )
117+
118+
91119
#else /* __ASSEMBLY__ */
92120

93121
.macro hyp_adr_this_cpu reg, sym, tmp
@@ -113,6 +141,21 @@ extern u32 __kvm_get_mdcr_el2(void);
113141
kern_hyp_va \vcpu
114142
.endm
115143

144+
/*
145+
* KVM extable for unexpected exceptions.
146+
* In the same format _asm_extable, but output to a different section so that
147+
* it can be mapped to EL2. The KVM version is not sorted. The caller must
148+
* ensure:
149+
* x18 has the hypervisor value to allow any Shadow-Call-Stack instrumented
150+
* code to write to it, and that SPSR_EL2 and ELR_EL2 are restored by the fixup.
151+
*/
152+
.macro _kvm_extable, from, to
153+
.pushsection __kvm_ex_table, "a"
154+
.align 3
155+
.long (\from - .), (\to - .)
156+
.popsection
157+
.endm
158+
116159
#endif
117160

118161
#endif /* __ARM_KVM_ASM_H__ */

arch/arm64/kernel/vmlinux.lds.S

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,13 @@ ENTRY(_text)
2424

2525
jiffies = jiffies_64;
2626

27+
28+
#define HYPERVISOR_EXTABLE \
29+
. = ALIGN(SZ_8); \
30+
__start___kvm_ex_table = .; \
31+
*(__kvm_ex_table) \
32+
__stop___kvm_ex_table = .;
33+
2734
#define HYPERVISOR_TEXT \
2835
/* \
2936
* Align to 4 KB so that \
@@ -39,6 +46,7 @@ jiffies = jiffies_64;
3946
__hyp_idmap_text_end = .; \
4047
__hyp_text_start = .; \
4148
*(.hyp.text) \
49+
HYPERVISOR_EXTABLE \
4250
__hyp_text_end = .;
4351

4452
#define IDMAP_TEXT \

arch/arm64/kvm/hyp/entry.S

Lines changed: 9 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -173,20 +173,23 @@ alternative_endif
173173
// This is our single instruction exception window. A pending
174174
// SError is guaranteed to occur at the earliest when we unmask
175175
// it, and at the latest just after the ISB.
176-
.global abort_guest_exit_start
177176
abort_guest_exit_start:
178177

179178
isb
180179

181-
.global abort_guest_exit_end
182180
abort_guest_exit_end:
183181

184182
msr daifset, #4 // Mask aborts
183+
ret
184+
185+
_kvm_extable abort_guest_exit_start, 9997f
186+
_kvm_extable abort_guest_exit_end, 9997f
187+
9997:
188+
msr daifset, #4 // Mask aborts
189+
mov x0, #(1 << ARM_EXIT_WITH_SERROR_BIT)
185190

186-
// If the exception took place, restore the EL1 exception
187-
// context so that we can report some information.
188-
// Merge the exception code with the SError pending bit.
189-
tbz x0, #ARM_EXIT_WITH_SERROR_BIT, 1f
191+
// restore the EL1 exception context so that we can report some
192+
// information. Merge the exception code with the SError pending bit.
190193
msr elr_el2, x2
191194
msr esr_el2, x3
192195
msr spsr_el2, x4

0 commit comments

Comments
 (0)