On Exynos 4, the 'DMC' and 'leftbus' buses feed the internal buses of the TV display subsystem and the Exynos Mixer hardware modules. When those buses are set below 160MHz, Exynos Mixer is not able to properly handle two XRGB display planes at FullHD-60MHz. DMA underrun happens, which in turn might result in reading data out of the configured buffer, what causes IOMMU page fault and kernel panic. This change fixes the following IOMMU fault, observed, when 2 Mixer planes were enabled: exynos-sysmmu 12e20000.sysmmu: 12c10000.mixer: PAGE FAULT occurred at 0x20fe9000 ------------[ cut here ]------------ kernel BUG at drivers/iommu/exynos-iommu.c:450! Internal error: Oops - BUG: 0 [#1] PREEMPT SMP ARM Modules linked in: CPU: 0 PID: 0 Comm: swapper/0 Not tainted 5.1.0-rc1-next-20190320-dirty #5628 Hardware name: SAMSUNG EXYNOS (Flattened Device Tree) PC is at exynos_sysmmu_irq+0x1c8/0x244 LR is at lock_is_held_type+0x80/0x100 ... Process swapper/0 (pid: 0, stack limit = 0xf4b67ceb) Stack: (0xc1001e18 to 0xc1002000) ... [<c0500248>] (exynos_sysmmu_irq) from [<c0190ff8>] (__handle_irq_event_percpu+0x98/0x470) [<c0190ff8>] (__handle_irq_event_percpu) from [<c01913ec>] (handle_irq_event_percpu+0x1c/0x58) [<c01913ec>] (handle_irq_event_percpu) from [<c0191460>] (handle_irq_event+0x38/0x5c) [<c0191460>] (handle_irq_event) from [<c01957d8>] (handle_level_irq+0xc0/0x134) [<c01957d8>] (handle_level_irq) from [<c0190590>] (generic_handle_irq+0x18/0x28) [<c0190590>] (generic_handle_irq) from [<c0472754>] (combiner_handle_cascade_irq+0x84/0xd4) [<c0472754>] (combiner_handle_cascade_irq) from [<c0190590>] (generic_handle_irq+0x18/0x28) [<c0190590>] (generic_handle_irq) from [<c01906ac>] (__handle_domain_irq+0x6c/0xe4) [<c01906ac>] (__handle_domain_irq) from [<c04733e4>] (gic_handle_irq+0x54/0xa0) [<c04733e4>] (gic_handle_irq) from [<c0101a70>] (__irq_svc+0x70/0xb0) Exception stack(0xc1001f28 to 0xc1001f70) ... [<c0101a70>] (__irq_svc) from [<c0109edc>] (arch_cpu_idle+0x20/0x44) [<c0109edc>] (arch_cpu_idle) from [<c015b834>] (do_idle+0x154/0x284) [<c015b834>] (do_idle) from [<c015bca4>] (cpu_startup_entry+0x18/0x1c) [<c015bca4>] (cpu_startup_entry) from [<c0f00e1c>] (start_kernel+0x408/0x490) Code: e7923103 e59f206c ebfdaa09 eaffffd8 (e7f001f2) ---[ end trace f8c3df0ee70697ef ]--- Kernel panic - not syncing: Fatal exception in interrupt Signed-off-by: Marek Szyprowski <m.szyprowski@xxxxxxxxxxx> --- arch/arm/boot/dts/exynos4412.dtsi | 16 ---------------- 1 file changed, 16 deletions(-) diff --git a/arch/arm/boot/dts/exynos4412.dtsi b/arch/arm/boot/dts/exynos4412.dtsi index e5c041ec0756..f01c57cc895e 100644 --- a/arch/arm/boot/dts/exynos4412.dtsi +++ b/arch/arm/boot/dts/exynos4412.dtsi @@ -413,14 +413,6 @@ compatible = "operating-points-v2"; opp-shared; - opp-100000000 { - opp-hz = /bits/ 64 <100000000>; - opp-microvolt = <900000>; - }; - opp-134000000 { - opp-hz = /bits/ 64 <134000000>; - opp-microvolt = <900000>; - }; opp-160000000 { opp-hz = /bits/ 64 <160000000>; opp-microvolt = <900000>; @@ -506,14 +498,6 @@ compatible = "operating-points-v2"; opp-shared; - opp-100000000 { - opp-hz = /bits/ 64 <100000000>; - opp-microvolt = <900000>; - }; - opp-134000000 { - opp-hz = /bits/ 64 <134000000>; - opp-microvolt = <925000>; - }; opp-160000000 { opp-hz = /bits/ 64 <160000000>; opp-microvolt = <950000>; -- 2.17.1