Hikey: enable CPU debug module
authorLeo Yan <leo.yan@linaro.org>
Thu, 7 Sep 2017 06:56:32 +0000 (14:56 +0800)
committerLeo Yan <leo.yan@linaro.org>
Thu, 7 Sep 2017 08:57:31 +0000 (16:57 +0800)
Every CPU has its own debug module and this module is used by JTAG
debugging and coresight tracing. If without enabling it, it's easily to
introduce lockup issue when we enable debugging features.

This patch is to enable CPU debug module when power on CPU; this allows
connecting to all cores through JTAG and used by kernel coresight
driver.

Signed-off-by: Matthias Welwarsky <maw@sysgo.com>
Signed-off-by: Leo Yan <leo.yan@linaro.org>
plat/hisilicon/hikey/hikey_pm.c
plat/hisilicon/hikey/hisi_pwrc.c
plat/hisilicon/hikey/include/hisi_pwrc.h

index c796e8a5466731f862debc97bfed203330077759..d4dd683e0121cec03b39ca8ea418bd6f61900020 100644 (file)
@@ -40,7 +40,9 @@ static int hikey_pwr_domain_on(u_register_t mpidr)
                hisi_ipc_cluster_on(cpu, cluster);
 
        hisi_pwrc_set_core_bx_addr(cpu, cluster, hikey_sec_entrypoint);
+       hisi_pwrc_enable_debug(cpu, cluster);
        hisi_ipc_cpu_on(cpu, cluster);
+
        return 0;
 }
 
index 8e9d1fc44dfe6a63f851223d986284d0f96d384a..b635fb16faec07017b398a6909ebbe262f540acb 100644 (file)
@@ -51,6 +51,21 @@ void hisi_pwrc_set_cluster_wfi(unsigned int cluster)
        }
 }
 
+void hisi_pwrc_enable_debug(unsigned int core, unsigned int cluster)
+{
+       unsigned int val, enable;
+
+       enable = 1U << (core + PDBGUP_CLUSTER1_SHIFT * cluster);
+
+       /* Enable debug module */
+       val = mmio_read_32(ACPU_SC_PDBGUP_MBIST);
+       mmio_write_32(ACPU_SC_PDBGUP_MBIST, val | enable);
+       do {
+               /* RAW barrier */
+               val = mmio_read_32(ACPU_SC_PDBGUP_MBIST);
+       } while (!(val & enable));
+}
+
 int hisi_pwrc_setup(void)
 {
        unsigned int reg, sec_entrypoint;
index 3a87e72bee36f2b5161a90a490f5819ee9ca7f94..cffe70e3b31e27906afb9572814fe744cbbc65a6 100644 (file)
@@ -13,6 +13,8 @@ void hisi_pwrc_set_cluster_wfi(unsigned int id);
 void hisi_pwrc_set_core_bx_addr(unsigned int core,
                                unsigned int cluster,
                                uintptr_t entry_point);
+void hisi_pwrc_enable_debug(unsigned int core,
+                           unsigned int cluster);
 int hisi_pwrc_setup(void);
 
 #endif /*__ASSEMBLY__*/