From 3e1f68e991bbd6edbdaac9fc9a7a2b74ccffea28 Mon Sep 17 00:00:00 2001 From: Pradeep P V K Date: Wed, 15 Dec 2021 21:03:30 +0530 Subject: [PATCH] mtd: msm_qpic_nand: Enable clocks while accessing BAM registers A NOC was seen while dumping BAM registers information. To avoid this, always enable qpic clocks before accessing BAM registers. Change-Id: I7a8799d742dc1fcc066512aba1537d7d48797a73 Signed-off-by: Pradeep P V K --- drivers/mtd/devices/msm_qpic_nand.c | 70 ++++++++++++++++------------- 1 file changed, 40 insertions(+), 30 deletions(-) diff --git a/drivers/mtd/devices/msm_qpic_nand.c b/drivers/mtd/devices/msm_qpic_nand.c index 54842b377292..78517b27c309 100644 --- a/drivers/mtd/devices/msm_qpic_nand.c +++ b/drivers/mtd/devices/msm_qpic_nand.c @@ -20,36 +20,6 @@ #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 @@ -4370,6 +4340,46 @@ out: return -EINVAL; } +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); + struct msm_nand_chip *chip = &info->nand_chip; + int err; + + err = msm_nand_get_device(chip->dev); + if (err) + goto out; + 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); + err = msm_nand_put_device(chip->dev); +out: + if (err) + pr_err("Failed to get/put the device.\n"); + 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); +} + #define BOOT_DEV_MASK 0x1E #define BOOT_DEV_NAND 0x4