Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 0c5085d2 authored by Murali Nalajala's avatar Murali Nalajala
Browse files

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: default avatarMurali Nalajala <mnalajal@codeaurora.org>
parent ba6dd9aa
Loading
Loading
Loading
Loading
+28 −14
Original line number Diff line number Diff line
@@ -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)
#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);
	}
#endif
}

static ssize_t type_show(struct kobject *kobj, struct kobj_attribute *attr,
			 char *buffer)
@@ -190,10 +203,8 @@ 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)
	if (qc_hyp_calls) {
		hh_disable_uart();
#endif

		ret = hh_sysfs_register();
		if (ret)
			return ret;
@@ -201,6 +212,9 @@ static int __init hh_ctrl_init(void)
		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;
}