summaryrefslogtreecommitdiff
path: root/drivers/dma/pxp
diff options
context:
space:
mode:
authorRobby Cai <robby.cai@nxp.com>2021-08-09 18:19:36 +0800
committerDong Aisheng <aisheng.dong@nxp.com>2021-11-02 17:09:48 +0800
commitab3a05c22c75f9dd09b6b1cb7245832cabdfcc82 (patch)
treec3c1c1a4f3da3a891cd397adea78a49f6c7b5b36 /drivers/dma/pxp
parenteb7d479dcf42aab45586a8f7bc3edac87c16ec24 (diff)
LF-4342 dma: pxp: set register for LUT cleanup is not available on mx8ulp
set register (offset 4) for LUT cleanup can't be accessed on mx8ulp (different from other SoCs), otherwise generate APB bus error. reproduce step: run '/unit_tests/Display/mxc_epdc_v2_fb_test.out' ... *** Try again at 1,1 *** [ 153.808422] SError Interrupt on CPU1, code 0xbf000002 -- SError [ 153.808431] CPU: 1 PID: 124 Comm: pxp_dispatch Not tainted 5.10.52-02305-gd72ff8b018b0-dirty #7 [ 153.808435] Hardware name: NXP i.MX8ULP EVK (DT) [ 153.808441] pstate: 60000085 (nZCv daIf -PAN -UAO -TCO BTYPE=--) [ 153.808445] pc : pxp_wfe_a_process+0xec/0x28c [ 153.808449] lr : pxp_dispatch_thread+0x1758/0x2430 [ 153.808453] sp : ffff80001247bd40 [ 153.808457] x29: ffff80001247bd40 x28: ffff000008a8c080 [ 153.808471] x27: ffff0000054f8080 x26: ffff000008a8c000 [ 153.808480] x25: ffff800011cd2000 x24: ffff800011cd2028 [ 153.808490] x23: ffff0000054f80a4 x22: fffffffffffffffc [ 153.808499] x21: 0000000000000040 x20: ffff0000054f8080 [ 153.808509] x19: ffff0000054f9480 x18: 0000000000001b90 [ 153.808518] x17: 0000000000001b80 x16: 0000000000001c60 [ 153.808528] x15: 0000000000001c50 x14: 0000000000001c40 [ 153.808537] x13: 0000000000001c30 x12: 0000000000001c20 [ 153.808546] x11: 0000000000001c10 x10: 0000000000001400 [ 153.808556] x9 : 0000000000001bf0 x8 : 0000000000000000 [ 153.808565] x7 : 0000000000000400 x6 : 0000000000000000 [ 153.808574] x5 : ffff800012750ca0 x4 : 0000000000000000 [ 153.808584] x3 : 00000000000002f5 x2 : 00000000000002f6 [ 153.808593] x1 : ffff800012750000 x0 : 00000000000003ff [ 153.808604] Kernel panic - not syncing: Asynchronous SError Interrupt [ 153.808610] CPU: 1 PID: 124 Comm: pxp_dispatch Not tainted 5.10.52-02305-gd72ff8b018b0-dirty #7 [ 153.808614] Hardware name: NXP i.MX8ULP EVK (DT) [ 153.808618] Call trace: [ 153.808622] dump_backtrace+0x0/0x1a0 [ 153.808626] show_stack+0x18/0x70 [ 153.808630] dump_stack+0xd0/0x12c [ 153.808633] panic+0x16c/0x334 [ 153.808637] nmi_panic+0x8c/0x90 [ 153.808641] arm64_serror_panic+0x78/0x84 [ 153.808644] do_serror+0x64/0x6c [ 153.808648] el1_error+0x90/0x110 [ 153.808652] pxp_wfe_a_process+0xec/0x28c [ 153.808656] pxp_dispatch_thread+0x1758/0x2430 [ 153.808660] kthread+0x154/0x160 [ 153.808664] ret_from_fork+0x10/0x30 [ 153.808697] SMP: stopping secondary CPUs [ 153.808701] Kernel Offset: disabled [ 153.808705] CPU features: 0x0240002,20002008 [ 153.808709] Memory Limit: none Signed-off-by: Robby Cai <robby.cai@nxp.com> Reviewed-by: G.n. Zhou <guoniu.zhou@nxp.com>
Diffstat (limited to 'drivers/dma/pxp')
-rw-r--r--drivers/dma/pxp/pxp_dma_v3.c10
1 files changed, 8 insertions, 2 deletions
diff --git a/drivers/dma/pxp/pxp_dma_v3.c b/drivers/dma/pxp/pxp_dma_v3.c
index 9e46621cc37a..7617f38886f1 100644
--- a/drivers/dma/pxp/pxp_dma_v3.c
+++ b/drivers/dma/pxp/pxp_dma_v3.c
@@ -6405,10 +6405,16 @@ static void pxp_lut_cleanup_multiple(struct pxps *pxp, u64 lut, bool set)
struct pxp_config_data *pxp_conf = &pxp->pxp_conf_state;
struct pxp_proc_data *proc_data = &pxp_conf->proc_data;
+ u32 val;
+
if (proc_data->lut_cleanup == 1) {
if (set) {
- __raw_writel((u32)lut, pxp->base + HW_PXP_WFE_A_STG1_8X1_OUT1_0 + 0x4);
- __raw_writel((u32)(lut>>32), pxp->base + HW_PXP_WFE_A_STG1_8X1_OUT1_1 + 0x4);
+ val = __raw_readl(pxp->base + HW_PXP_WFE_A_STG1_8X1_OUT1_0);
+ val |= (u32)lut;
+ __raw_writel(val, pxp->base + HW_PXP_WFE_A_STG1_8X1_OUT1_0);
+ val = __raw_readl(pxp->base + HW_PXP_WFE_A_STG1_8X1_OUT1_1);
+ val |= (u32)(lut >> 32);
+ __raw_writel(val, pxp->base + HW_PXP_WFE_A_STG1_8X1_OUT1_1);
} else {
pxp_luts_deactivate(pxp, lut);
__raw_writel(0, pxp->base + HW_PXP_WFE_A_STG1_8X1_OUT1_0);