android_kernel_xiaomi_sm8350/drivers/soc/qcom/pil-q6v5.h
Lijuan Gao 40e8fe993c soc: qcom: pil: Proxy vote for QPIC clock during modem boot
On MDM targets, QPIC clock need to be enabled during modem boot.
On cold boot, RPM sets the proxy vote for modem. But during a SSR,
HLOS needs to proxy vote. Put in a proxy vote from HLOS PIL which
is removed once the modem boots up.

Change-Id: I02d5ad5c68e922683d53f38070df672200c0d933
Signed-off-by: Arun KS <arunks@codeaurora.org>
Signed-off-by: Lijuan Gao <lijuang@codeaurora.org>
2021-05-21 18:07:17 +08:00

86 lines
2.2 KiB
C

/* SPDX-License-Identifier: GPL-2.0-only */
/*
* Copyright (c) 2012-2021, The Linux Foundation. All rights reserved.
*/
#ifndef __MSM_PIL_Q6V5_H
#define __MSM_PIL_Q6V5_H
#include "peripheral-loader.h"
struct regulator;
struct clk;
struct pil_device;
struct platform_device;
struct q6v5_data {
void __iomem *reg_base;
void __iomem *rmb_base;
void __iomem *cxrail_bhs; /* External BHS register */
struct clk *xo; /* XO clock source */
struct clk *pnoc_clk; /* PNOC bus clock source */
struct clk *ahb_clk; /* PIL access to registers */
struct clk *axi_clk; /* CPU access to memory */
struct clk *core_clk; /* CPU core */
struct clk *reg_clk; /* CPU access registers */
struct clk *gpll0_mss_clk; /* GPLL0 to MSS connection */
struct clk *rom_clk; /* Boot ROM */
struct clk *snoc_axi_clk;
struct clk *mnoc_axi_clk;
struct clk *qdss_clk;
struct clk *prng_clk;
struct clk *axis2_clk;
struct clk *qpic_clk;
void __iomem *axi_halt_base; /* Halt base of q6, mss,
* nc are in same 4K page
*/
void __iomem *axi_halt_q6;
void __iomem *axi_halt_mss;
void __iomem *axi_halt_nc;
void __iomem *restart_reg;
void __iomem *pdc_sync;
void __iomem *alt_reset;
struct regulator *vreg;
struct regulator *vreg_cx;
struct regulator *vreg_mx;
struct regulator *vreg_pll;
bool is_booted;
struct pil_desc desc;
bool self_auth;
phys_addr_t mba_dp_phys;
void *mba_dp_virt;
size_t mba_dp_size;
size_t dp_size;
bool qdsp6v55;
bool qdsp6v5_2_0;
bool qdsp6v56;
bool qdsp6v56_1_3;
bool qdsp6v56_1_5;
bool qdsp6v56_1_8;
bool qdsp6v56_1_8_inrush_current;
bool qdsp6v56_1_10;
bool qdsp6v61_1_1;
bool qdsp6v62_1_2;
bool qdsp6v62_1_4;
bool qdsp6v62_1_5;
bool qdsp6v65_1_0;
bool non_elf_image;
bool restart_reg_sec;
bool override_acc;
int override_acc_1;
int mss_pdc_offset;
int smem_id;
bool ahb_clk_vote;
bool mx_spike_wa;
bool reset_clk;
};
int pil_q6v5_make_proxy_votes(struct pil_desc *pil);
void pil_q6v5_remove_proxy_votes(struct pil_desc *pil);
void pil_q6v5_halt_axi_port(struct pil_desc *pil, void __iomem *halt_base);
void pil_q6v5_shutdown(struct pil_desc *pil);
int pil_q6v5_reset(struct pil_desc *pil);
void assert_clamps(struct pil_desc *pil);
struct q6v5_data *pil_q6v5_init(struct platform_device *pdev);
#endif