59 lines
2.1 KiB
Diff
59 lines
2.1 KiB
Diff
From 44cbfbc637028698b73628a2a635b5466eb341d5 Mon Sep 17 00:00:00 2001
|
|
From: XiaoDong Huang <derrick.huang@rock-chips.com>
|
|
Date: Wed, 2 Dec 2020 18:03:43 +0800
|
|
Subject: [PATCH] irqchip/gic-v3-its: force to config its tables as
|
|
no-inner-cache in rk356x
|
|
|
|
Change-Id: Idebfe94622cbb8169f4d464a3152c7828683c72c
|
|
Signed-off-by: XiaoDong Huang <derrick.huang@rock-chips.com>
|
|
---
|
|
drivers/irqchip/irq-gic-v3-its.c | 16 ++++++++++++++++
|
|
1 file changed, 16 insertions(+)
|
|
|
|
--- a/drivers/irqchip/irq-gic-v3-its.c
|
|
+++ b/drivers/irqchip/irq-gic-v3-its.c
|
|
@@ -2384,6 +2384,10 @@ retry_baser:
|
|
its_write_baser(its, baser, val);
|
|
tmp = baser->val;
|
|
|
|
+ if (of_machine_is_compatible("rockchip,rk3568") ||
|
|
+ of_machine_is_compatible("rockchip,rk3566"))
|
|
+ tmp &= ~GITS_BASER_SHAREABILITY_MASK;
|
|
+
|
|
if ((val ^ tmp) & GITS_BASER_SHAREABILITY_MASK) {
|
|
/*
|
|
* Shareability didn't stick. Just use
|
|
@@ -3125,6 +3129,10 @@ static void its_cpu_init_lpis(void)
|
|
gicr_write_propbaser(val, rbase + GICR_PROPBASER);
|
|
tmp = gicr_read_propbaser(rbase + GICR_PROPBASER);
|
|
|
|
+ if (of_machine_is_compatible("rockchip,rk3568") ||
|
|
+ of_machine_is_compatible("rockchip,rk3566"))
|
|
+ tmp &= ~GICR_PROPBASER_SHAREABILITY_MASK;
|
|
+
|
|
if ((tmp ^ val) & GICR_PROPBASER_SHAREABILITY_MASK) {
|
|
if (!(tmp & GICR_PROPBASER_SHAREABILITY_MASK)) {
|
|
/*
|
|
@@ -3149,6 +3157,10 @@ static void its_cpu_init_lpis(void)
|
|
gicr_write_pendbaser(val, rbase + GICR_PENDBASER);
|
|
tmp = gicr_read_pendbaser(rbase + GICR_PENDBASER);
|
|
|
|
+ if (of_machine_is_compatible("rockchip,rk3568") ||
|
|
+ of_machine_is_compatible("rockchip,rk3566"))
|
|
+ tmp &= ~GICR_PENDBASER_SHAREABILITY_MASK;
|
|
+
|
|
if (!(tmp & GICR_PENDBASER_SHAREABILITY_MASK)) {
|
|
/*
|
|
* The HW reports non-shareable, we must remove the
|
|
@@ -5109,6 +5121,10 @@ static int __init its_probe_one(struct r
|
|
gits_write_cbaser(baser, its->base + GITS_CBASER);
|
|
tmp = gits_read_cbaser(its->base + GITS_CBASER);
|
|
|
|
+ if (of_machine_is_compatible("rockchip,rk3568") ||
|
|
+ of_machine_is_compatible("rockchip,rk3566"))
|
|
+ tmp &= ~GITS_CBASER_SHAREABILITY_MASK;
|
|
+
|
|
if ((tmp ^ baser) & GITS_CBASER_SHAREABILITY_MASK) {
|
|
if (!(tmp & GITS_CBASER_SHAREABILITY_MASK)) {
|
|
/*
|