コード例 #1
0
static int shutdown_q6_untrusted(struct pil_device *pil)
{
	u32 reg;

	/* Put Q6 into reset */
	reg = __raw_readl(LCC_Q6_FUNC);
	reg |= Q6SS_SS_ARES | Q6SS_ISDB_ARES | Q6SS_ETM_ARES | STOP_CORE |
		CORE_ARES;
	reg &= ~CORE_GFM4_CLK_EN;
	__raw_writel(reg, LCC_Q6_FUNC);

	/* Wait 8 AHB cycles for Q6 to be fully reset (AHB = 1.5Mhz) */
	usleep_range(20, 30);

	/* Turn off Q6 memory */
	reg &= ~(CORE_L1_MEM_CORE_EN | CORE_TCM_MEM_CORE_EN |
		CORE_TCM_MEM_PERPH_EN);
	__raw_writel(reg, LCC_Q6_FUNC);

	reg |= CLAMP_IO;
	__raw_writel(reg, LCC_Q6_FUNC);

	remove_q6_proxy_votes_now();

	return 0;
}
コード例 #2
0
ファイル: peripheral-reset.c プロジェクト: raiy/dagkernel
static int shutdown_q6_trusted(void)
{
	int ret;

	ret = shutdown_trusted(PAS_Q6);
	if (ret)
		return ret;

	remove_q6_proxy_votes_now();

	return 0;
}
コード例 #3
0
static int shutdown_q6_trusted(struct pil_device *pil)
{
	int ret;

	ret = pas_shutdown(PAS_Q6);
	if (ret)
		return ret;

	remove_q6_proxy_votes_now();

	return 0;
}
コード例 #4
0
ファイル: peripheral-reset.c プロジェクト: raiy/dagkernel
static int shutdown_q6_untrusted(void)
{
	u32 reg;

	reg = readl(LCC_Q6_FUNC);
	/* Halt clocks and turn off memory */
	reg &= ~(CORE_L1_MEM_CORE_EN | CORE_TCM_MEM_CORE_EN |
		CORE_TCM_MEM_PERPH_EN);
	reg |= CLAMP_IO | CORE_GFM4_CLK_EN;
	writel(reg, LCC_Q6_FUNC);

	remove_q6_proxy_votes_now();

	return 0;
}