From 63ef97004c4d9263005ac60723a093aec261dc14 Mon Sep 17 00:00:00 2001 From: Pradeep P V K Date: Tue, 13 Jul 2021 09:31:34 +0530 Subject: [PATCH] mtd: msm_qpic_nand: register msm_nand to panic_notifier Register msm_nand to panic notifiers list to dump apss qpic bam registers information during any subsytem failures. Change-Id: If717d063b41dc8e75b707574e4f703ea4b41da65 Signed-off-by: Pradeep P V K --- drivers/mtd/devices/msm_qpic_nand.c | 37 ++++++++++++++++++++++++++++- 1 file changed, 36 insertions(+), 1 deletion(-) diff --git a/drivers/mtd/devices/msm_qpic_nand.c b/drivers/mtd/devices/msm_qpic_nand.c index e93965cd1ee8..54842b377292 100644 --- a/drivers/mtd/devices/msm_qpic_nand.c +++ b/drivers/mtd/devices/msm_qpic_nand.c @@ -1,7 +1,7 @@ // SPDX-License-Identifier: GPL-2.0-only /* * Copyright (C) 2007 Google, Inc. - * Copyright (c) 2012-2020 The Linux Foundation. All rights reserved. + * Copyright (c) 2012-2021 The Linux Foundation. All rights reserved. */ #include "msm_qpic_nand.h" @@ -19,6 +19,38 @@ #define SMEM_APPS 0 #define ONE_CODEWORD_SIZE 516 +static struct device *dev_node; +static int msm_nand_bam_panic_notifier(struct notifier_block *this, + unsigned long event, void *ptr) +{ + struct msm_nand_info *info = dev_get_drvdata(dev_node); + + pr_info("Dumping APSS bam pipes register dumps\n"); + sps_get_bam_debug_info(info->sps.bam_handle, 93, + (SPS_BAM_PIPE(0) | + SPS_BAM_PIPE(1) | + SPS_BAM_PIPE(2) | + SPS_BAM_PIPE(3)), + 0, 2); + return NOTIFY_DONE; +} + +static struct notifier_block msm_nand_bam_panic_blk = { + .notifier_call = msm_nand_bam_panic_notifier, +}; + +void msm_nand_bam_register_panic_handler(void) +{ + atomic_notifier_chain_register(&panic_notifier_list, + &msm_nand_bam_panic_blk); +} + +void msm_nand_bam_unregister_panic_handler(void) +{ + atomic_notifier_chain_unregister(&panic_notifier_list, + &msm_nand_bam_panic_blk); +} + /* * Get the DMA memory for requested amount of size. It returns the pointer * to free memory available from the allocated pool. Returns NULL if there @@ -4555,6 +4587,8 @@ static int msm_nand_probe(struct platform_device *pdev) pr_info("Allocated DMA buffer at virt_addr 0x%pK, phys_addr 0x%x\n", info->nand_chip.dma_virt_addr, info->nand_chip.dma_phys_addr); pr_info("Host capabilities:0x%08x\n", info->nand_chip.caps); + dev_node = dev; + msm_nand_bam_register_panic_handler(); goto out; free_bam: msm_nand_bam_free(info); @@ -4576,6 +4610,7 @@ static int msm_nand_remove(struct platform_device *pdev) { struct msm_nand_info *info = dev_get_drvdata(&pdev->dev); + msm_nand_bam_unregister_panic_handler(); if (pm_runtime_suspended(&(pdev)->dev)) pm_runtime_resume(&(pdev)->dev);