173680c23SYann Gautier /* 273680c23SYann Gautier * Copyright (c) 2016-2019, STMicroelectronics - All Rights Reserved 373680c23SYann Gautier * 473680c23SYann Gautier * SPDX-License-Identifier: BSD-3-Clause 573680c23SYann Gautier */ 673680c23SYann Gautier 773680c23SYann Gautier #include <errno.h> 873680c23SYann Gautier 973680c23SYann Gautier #include <platform_def.h> 1073680c23SYann Gautier 1173680c23SYann Gautier #include <common/debug.h> 1273680c23SYann Gautier #include <drivers/st/bsec.h> 1373680c23SYann Gautier #include <drivers/st/stm32mp1_rcc.h> 1473680c23SYann Gautier #include <lib/mmio.h> 1573680c23SYann Gautier #include <lib/utils_def.h> 1673680c23SYann Gautier 1773680c23SYann Gautier #include <stm32mp1_dbgmcu.h> 1873680c23SYann Gautier 19*dec286ddSYann Gautier #define DBGMCU_IDC U(0x00) 2073680c23SYann Gautier #define DBGMCU_APB4FZ1 U(0x2C) 21*dec286ddSYann Gautier 22*dec286ddSYann Gautier #define DBGMCU_IDC_DEV_ID_MASK GENMASK(11, 0) 23*dec286ddSYann Gautier #define DBGMCU_IDC_REV_ID_MASK GENMASK(31, 16) 24*dec286ddSYann Gautier #define DBGMCU_IDC_REV_ID_SHIFT 16 25*dec286ddSYann Gautier 2673680c23SYann Gautier #define DBGMCU_APB4FZ1_IWDG2 BIT(2) 2773680c23SYann Gautier 2873680c23SYann Gautier static uintptr_t get_rcc_base(void) 2973680c23SYann Gautier { 3073680c23SYann Gautier /* This is called before stm32mp_rcc_base() is available */ 3173680c23SYann Gautier return RCC_BASE; 3273680c23SYann Gautier } 3373680c23SYann Gautier 3473680c23SYann Gautier static int stm32mp1_dbgmcu_init(void) 3573680c23SYann Gautier { 3673680c23SYann Gautier uint32_t dbg_conf; 3773680c23SYann Gautier uintptr_t rcc_base = get_rcc_base(); 3873680c23SYann Gautier 3973680c23SYann Gautier dbg_conf = bsec_read_debug_conf(); 4073680c23SYann Gautier 4173680c23SYann Gautier if ((dbg_conf & BSEC_DBGSWGEN) == 0U) { 4273680c23SYann Gautier uint32_t result = bsec_write_debug_conf(dbg_conf | 4373680c23SYann Gautier BSEC_DBGSWGEN); 4473680c23SYann Gautier 4573680c23SYann Gautier if (result != BSEC_OK) { 4673680c23SYann Gautier ERROR("Error enabling DBGSWGEN\n"); 4773680c23SYann Gautier return -1; 4873680c23SYann Gautier } 4973680c23SYann Gautier } 5073680c23SYann Gautier 5173680c23SYann Gautier mmio_setbits_32(rcc_base + RCC_DBGCFGR, RCC_DBGCFGR_DBGCKEN); 5273680c23SYann Gautier 5373680c23SYann Gautier return 0; 5473680c23SYann Gautier } 5573680c23SYann Gautier 56*dec286ddSYann Gautier int stm32mp1_dbgmcu_get_chip_version(uint32_t *chip_version) 57*dec286ddSYann Gautier { 58*dec286ddSYann Gautier if (stm32mp1_dbgmcu_init() != 0) { 59*dec286ddSYann Gautier return -EPERM; 60*dec286ddSYann Gautier } 61*dec286ddSYann Gautier 62*dec286ddSYann Gautier *chip_version = (mmio_read_32(DBGMCU_BASE + DBGMCU_IDC) & 63*dec286ddSYann Gautier DBGMCU_IDC_REV_ID_MASK) >> DBGMCU_IDC_REV_ID_SHIFT; 64*dec286ddSYann Gautier 65*dec286ddSYann Gautier return 0; 66*dec286ddSYann Gautier } 67*dec286ddSYann Gautier 68*dec286ddSYann Gautier int stm32mp1_dbgmcu_get_chip_dev_id(uint32_t *chip_dev_id) 69*dec286ddSYann Gautier { 70*dec286ddSYann Gautier if (stm32mp1_dbgmcu_init() != 0) { 71*dec286ddSYann Gautier return -EPERM; 72*dec286ddSYann Gautier } 73*dec286ddSYann Gautier 74*dec286ddSYann Gautier *chip_dev_id = mmio_read_32(DBGMCU_BASE + DBGMCU_IDC) & 75*dec286ddSYann Gautier DBGMCU_IDC_DEV_ID_MASK; 76*dec286ddSYann Gautier 77*dec286ddSYann Gautier return 0; 78*dec286ddSYann Gautier } 79*dec286ddSYann Gautier 8073680c23SYann Gautier int stm32mp1_dbgmcu_freeze_iwdg2(void) 8173680c23SYann Gautier { 8273680c23SYann Gautier uint32_t dbg_conf; 8373680c23SYann Gautier 8473680c23SYann Gautier if (stm32mp1_dbgmcu_init() != 0) { 8573680c23SYann Gautier return -EPERM; 8673680c23SYann Gautier } 8773680c23SYann Gautier 8873680c23SYann Gautier dbg_conf = bsec_read_debug_conf(); 8973680c23SYann Gautier 9073680c23SYann Gautier if ((dbg_conf & (BSEC_SPIDEN | BSEC_SPINDEN)) != 0U) { 9173680c23SYann Gautier mmio_setbits_32(DBGMCU_BASE + DBGMCU_APB4FZ1, 9273680c23SYann Gautier DBGMCU_APB4FZ1_IWDG2); 9373680c23SYann Gautier } 9473680c23SYann Gautier 9573680c23SYann Gautier return 0; 9673680c23SYann Gautier } 97