haven: ctrl: add nohypuart commandline parameter

Add kernel commandline parameter capability to disable
hypervisor UART in debug builds. Customers are capable
of selecting a different instance of UART for console
instead a standard console. In this case hypervisor
touching the UART instance which does not have clocks
enabled. This lead to NOC errors.

Change-Id: I655b68870923194b65119b00b4d300dccf12057c
Signed-off-by: Murali Nalajala <[email protected]>
This commit is contained in:
Murali Nalajala 2020-07-20 00:11:33 -07:00
commit 0c5085d230

View file

@ -48,14 +48,27 @@
static bool qc_hyp_calls;
static struct hh_hcall_hyp_identify_resp haven_api;
static bool disable_uart;
#if !defined(CONFIG_HH_DISABLE_UART)
static int __init setup_nohyp_uart(char *arg)
{
disable_uart = true;
return 0;
}
early_param("nohyp_uart", setup_nohyp_uart);
#endif
#if defined(CONFIG_HH_DISABLE_UART)
static void hh_disable_uart(void)
{
if (qc_hyp_calls)
arm_smccc_1_1_smc(QC_HYP_SMCCC_UART_DISABLE, NULL);
}
#if defined(CONFIG_HH_DISABLE_UART)
disable_uart = true;
#endif
if (disable_uart) {
pr_info("Haven: disabling HYP UART\n");
arm_smccc_1_1_smc(QC_HYP_SMCCC_UART_DISABLE, NULL);
}
}
static ssize_t type_show(struct kobject *kobj, struct kobj_attribute *attr,
char *buffer)
@ -190,17 +203,18 @@ static int __init hh_ctrl_init(void)
(res.a2 == QC_HYP_UID2) && (res.a3 == QC_HYP_UID3))
qc_hyp_calls = true;
#if defined(CONFIG_HH_DISABLE_UART)
hh_disable_uart();
#endif
if (qc_hyp_calls) {
hh_disable_uart();
ret = hh_sysfs_register();
if (ret)
return ret;
ret = hh_sysfs_register();
if (ret)
return ret;
ret = hh_dbgfs_register();
if (ret)
pr_warn("failed to register dbgfs: %d\n", ret);
ret = hh_dbgfs_register();
if (ret)
pr_warn("failed to register dbgfs: %d\n", ret);
} else {
pr_info("Haven: no QC HYP interface detected\n");
}
return 0;
}