static int modem_shutdown_trusted(struct pil_desc *pil) { int ret; struct modem_data *drv = dev_get_drvdata(pil->dev); ret = pas_shutdown(PAS_MODEM); if (ret) return ret; remove_modem_proxy_votes_now(drv); return 0; }
static int shutdown_modem_trusted(struct pil_desc *pil) { int ret; ret = pas_shutdown(PAS_MODEM); if (ret) return ret; remove_modem_proxy_votes_now(); return 0; }
static int reset_modem_trusted(struct pil_desc *pil) { int ret; make_modem_proxy_votes(); ret = pas_auth_and_reset(PAS_MODEM); if (ret) remove_modem_proxy_votes_now(); return ret; }
static int reset_modem_trusted(void) { int ret; make_modem_proxy_votes(); ret = auth_and_reset_trusted(PAS_MODEM); if (ret) remove_modem_proxy_votes_now(); return ret; }
static int modem_reset_trusted(struct pil_desc *pil) { int ret; struct modem_data *drv = dev_get_drvdata(pil->dev); make_modem_proxy_votes(pil->dev); ret = pas_auth_and_reset(PAS_MODEM); if (ret) remove_modem_proxy_votes_now(drv); return ret; }
static int shutdown_trusted(int id) { int ret; struct pas_shutdown_req request; struct pas_shutdown_resp resp = {0}; remove_modem_proxy_votes_now(); request.proc = id; ret = scm_call(SCM_SVC_PIL, PAS_SHUTDOWN_CMD, &request, sizeof(request), &resp, sizeof(resp)); if (ret) return ret; return resp.success; }
static int modem_shutdown(struct pil_desc *pil) { u32 reg; struct modem_data *drv = dev_get_drvdata(pil->dev); /* Put modem into reset */ writel_relaxed(0x1, MARM_RESET); mb(); /* Put modem AHB0,1,2 clocks into reset */ writel_relaxed(BIT(0) | BIT(1), MAHB0_SFAB_PORT_RESET); writel_relaxed(BIT(7), MAHB1_CLK_CTL); writel_relaxed(BIT(7), MAHB2_CLK_CTL); mb(); /* * Disable all of the marm_clk branches, cxo sourced marm branches, * and sleep clock branches */ writel_relaxed(0x0, MARM_CLK_CTL); writel_relaxed(0x0, MAHB0_CLK_CTL); writel_relaxed(0x0, SFAB_MSS_S_HCLK_CTL); writel_relaxed(0x0, MSS_MODEM_CXO_CLK_CTL); writel_relaxed(0x0, MSS_SLP_CLK_CTL); writel_relaxed(0x0, MSS_MARM_SYS_REF_CLK_CTL); /* Disable marm_clk */ reg = readl_relaxed(MARM_CLK_SRC_CTL); reg &= ~0x2; writel_relaxed(reg, MARM_CLK_SRC_CTL); /* Clear modem's votes for ahb clocks */ writel_relaxed(0x0, MARM_CLK_BRANCH_ENA_VOTE); /* Clear modem's votes for PLLs */ writel_relaxed(0x0, PLL_ENA_MARM); remove_modem_proxy_votes_now(drv); return 0; }
static int shutdown_modem_untrusted(struct pil_desc *pil) { u32 reg; /* Put modem into reset */ __raw_writel(0x1, MARM_RESET); mb(); /* Put modem AHB0,1,2 clocks into reset */ __raw_writel(BIT(0) | BIT(1), MAHB0_SFAB_PORT_RESET); __raw_writel(BIT(7), MAHB1_CLK_CTL); __raw_writel(BIT(7), MAHB2_CLK_CTL); mb(); /* * Disable all of the marm_clk branches, cxo sourced marm branches, * and sleep clock branches */ __raw_writel(0x0, MARM_CLK_CTL); __raw_writel(0x0, MAHB0_CLK_CTL); __raw_writel(0x0, SFAB_MSS_S_HCLK_CTL); __raw_writel(0x0, MSS_MODEM_CXO_CLK_CTL); __raw_writel(0x0, MSS_SLP_CLK_CTL); __raw_writel(0x0, MSS_MARM_SYS_REF_CLK_CTL); /* Disable marm_clk */ reg = __raw_readl(MARM_CLK_SRC_CTL); reg &= ~0x2; __raw_writel(reg, MARM_CLK_SRC_CTL); /* Clear modem's votes for ahb clocks */ __raw_writel(0x0, MARM_CLK_BRANCH_ENA_VOTE); /* Clear modem's votes for PLLs */ __raw_writel(0x0, PLL_ENA_MARM); remove_modem_proxy_votes_now(); return 0; }
static int shutdown_modem_trusted(void) { remove_modem_proxy_votes_now(); return shutdown_trusted(PAS_MODEM); }