mirror of
https://github.com/BobTheBlinker/android_kernel_motorola_sm6375.git
synced 2026-10-09 05:39:54 -04:00
Merge "msm: ipa: Update WDI3.0 specific GSI interface for Lahaina"
This commit is contained in:
commit
fa519ac504
4 changed files with 82 additions and 22 deletions
|
|
@ -1420,10 +1420,18 @@ static void gsi_program_evt_ring_ctx(struct gsi_evt_ring_props *props,
|
|||
gsi_writel(val, gsi_ctx->base +
|
||||
GSI_EE_n_EV_CH_k_CNTXT_0_OFFS(evt_id, ee));
|
||||
|
||||
val = (props->ring_len & GSI_EE_n_EV_CH_k_CNTXT_1_R_LENGTH_BMSK) <<
|
||||
GSI_EE_n_EV_CH_k_CNTXT_1_R_LENGTH_SHFT;
|
||||
gsi_writel(val, gsi_ctx->base +
|
||||
GSI_EE_n_EV_CH_k_CNTXT_1_OFFS(evt_id, ee));
|
||||
if (gsi_ctx->per.ver >= GSI_VER_2_9) {
|
||||
val = (props->ring_len &
|
||||
GSI_V2_9_EE_n_EV_CH_k_CNTXT_1_R_LENGTH_BMSK)
|
||||
<< GSI_V2_9_EE_n_EV_CH_k_CNTXT_1_R_LENGTH_SHFT;
|
||||
gsi_writel(val, gsi_ctx->base +
|
||||
GSI_V2_9_EE_n_EV_CH_k_CNTXT_1_OFFS(evt_id, ee));
|
||||
} else {
|
||||
val = (props->ring_len & GSI_EE_n_EV_CH_k_CNTXT_1_R_LENGTH_BMSK)
|
||||
<< GSI_EE_n_EV_CH_k_CNTXT_1_R_LENGTH_SHFT;
|
||||
gsi_writel(val, gsi_ctx->base +
|
||||
GSI_EE_n_EV_CH_k_CNTXT_1_OFFS(evt_id, ee));
|
||||
}
|
||||
|
||||
val = (props->ring_base_addr &
|
||||
GSI_EE_n_EV_CH_k_CNTXT_2_R_BASE_ADDR_LSBS_BMSK) <<
|
||||
|
|
@ -1461,16 +1469,16 @@ static void gsi_program_evt_ring_ctx(struct gsi_evt_ring_props *props,
|
|||
GSI_EE_n_EV_CH_k_CNTXT_11_OFFS(evt_id, ee));
|
||||
|
||||
val = (props->rp_update_addr &
|
||||
GSI_EE_n_EV_CH_k_CNTXT_12_RP_UPDATE_ADDR_LSB_BMSK) <<
|
||||
GSI_EE_n_EV_CH_k_CNTXT_12_RP_UPDATE_ADDR_LSB_BMSK) <<
|
||||
GSI_EE_n_EV_CH_k_CNTXT_12_RP_UPDATE_ADDR_LSB_SHFT;
|
||||
gsi_writel(val, gsi_ctx->base +
|
||||
GSI_EE_n_EV_CH_k_CNTXT_12_OFFS(evt_id, ee));
|
||||
GSI_EE_n_EV_CH_k_CNTXT_12_OFFS(evt_id, ee));
|
||||
|
||||
val = ((props->rp_update_addr >> 32) &
|
||||
GSI_EE_n_EV_CH_k_CNTXT_13_RP_UPDATE_ADDR_MSB_BMSK) <<
|
||||
GSI_EE_n_EV_CH_k_CNTXT_13_RP_UPDATE_ADDR_MSB_SHFT;
|
||||
gsi_writel(val, gsi_ctx->base +
|
||||
GSI_EE_n_EV_CH_k_CNTXT_13_OFFS(evt_id, ee));
|
||||
GSI_EE_n_EV_CH_k_CNTXT_13_OFFS(evt_id, ee));
|
||||
}
|
||||
|
||||
static void gsi_init_evt_ring(struct gsi_evt_ring_props *props,
|
||||
|
|
@ -2217,10 +2225,21 @@ static void gsi_program_chan_ctx(struct gsi_chan_props *props, unsigned int ee,
|
|||
gsi_writel(val, gsi_ctx->base +
|
||||
GSI_EE_n_GSI_CH_k_CNTXT_0_OFFS(props->ch_id, ee));
|
||||
|
||||
val = (props->ring_len & GSI_EE_n_GSI_CH_k_CNTXT_1_R_LENGTH_BMSK) <<
|
||||
GSI_EE_n_GSI_CH_k_CNTXT_1_R_LENGTH_SHFT;
|
||||
gsi_writel(val, gsi_ctx->base +
|
||||
GSI_EE_n_GSI_CH_k_CNTXT_1_OFFS(props->ch_id, ee));
|
||||
if (gsi_ctx->per.ver >= GSI_VER_2_9) {
|
||||
val = (props->ring_len &
|
||||
GSI_V2_9_EE_n_GSI_CH_k_CNTXT_1_R_LENGTH_BMSK)
|
||||
<< GSI_V2_9_EE_n_GSI_CH_k_CNTXT_1_R_LENGTH_SHFT;
|
||||
gsi_writel(val, gsi_ctx->base +
|
||||
GSI_V2_9_EE_n_GSI_CH_k_CNTXT_1_OFFS(
|
||||
props->ch_id, ee));
|
||||
} else {
|
||||
val = (props->ring_len &
|
||||
GSI_EE_n_GSI_CH_k_CNTXT_1_R_LENGTH_BMSK)
|
||||
<< GSI_EE_n_GSI_CH_k_CNTXT_1_R_LENGTH_SHFT;
|
||||
gsi_writel(val, gsi_ctx->base +
|
||||
GSI_EE_n_GSI_CH_k_CNTXT_1_OFFS(props->ch_id,
|
||||
ee));
|
||||
}
|
||||
|
||||
val = (props->ring_base_addr &
|
||||
GSI_EE_n_GSI_CH_k_CNTXT_2_R_BASE_ADDR_LSBS_BMSK) <<
|
||||
|
|
@ -4321,11 +4340,23 @@ void gsi_wdi3_write_evt_ring_db(unsigned long evt_ring_hdl,
|
|||
return;
|
||||
}
|
||||
|
||||
gsi_writel(db_addr_low, gsi_ctx->base +
|
||||
GSI_EE_n_EV_CH_k_CNTXT_12_OFFS(evt_ring_hdl, gsi_ctx->per.ee));
|
||||
if (gsi_ctx->per.ver >= GSI_VER_2_9) {
|
||||
gsi_writel(db_addr_low, gsi_ctx->base +
|
||||
GSI_EE_n_EV_CH_k_CNTXT_10_OFFS(evt_ring_hdl,
|
||||
gsi_ctx->per.ee));
|
||||
|
||||
gsi_writel(db_addr_high, gsi_ctx->base +
|
||||
GSI_EE_n_EV_CH_k_CNTXT_13_OFFS(evt_ring_hdl, gsi_ctx->per.ee));
|
||||
gsi_writel(db_addr_high, gsi_ctx->base +
|
||||
GSI_EE_n_EV_CH_k_CNTXT_11_OFFS(evt_ring_hdl,
|
||||
gsi_ctx->per.ee));
|
||||
} else {
|
||||
gsi_writel(db_addr_low, gsi_ctx->base +
|
||||
GSI_EE_n_EV_CH_k_CNTXT_12_OFFS(evt_ring_hdl,
|
||||
gsi_ctx->per.ee));
|
||||
|
||||
gsi_writel(db_addr_high, gsi_ctx->base +
|
||||
GSI_EE_n_EV_CH_k_CNTXT_13_OFFS(evt_ring_hdl,
|
||||
gsi_ctx->per.ee));
|
||||
}
|
||||
}
|
||||
EXPORT_SYMBOL(gsi_wdi3_write_evt_ring_db);
|
||||
|
||||
|
|
|
|||
|
|
@ -477,6 +477,11 @@
|
|||
#define GSI_EE_n_GSI_CH_k_CNTXT_1_R_LENGTH_BMSK 0xffff
|
||||
#define GSI_EE_n_GSI_CH_k_CNTXT_1_R_LENGTH_SHFT 0x0
|
||||
|
||||
#define GSI_V2_9_EE_n_GSI_CH_k_CNTXT_1_OFFS(k, n) \
|
||||
(GSI_GSI_REG_BASE_OFFS + 0x0000f004 + 0x4000 * (n) + 0x80 * (k))
|
||||
#define GSI_V2_9_EE_n_GSI_CH_k_CNTXT_1_R_LENGTH_BMSK 0xfffff
|
||||
#define GSI_V2_9_EE_n_GSI_CH_k_CNTXT_1_R_LENGTH_SHFT 0x0
|
||||
|
||||
#define GSI_EE_n_GSI_CH_k_CNTXT_2_OFFS(k, n) \
|
||||
(GSI_GSI_REG_BASE_OFFS + 0x0000f008 + 0x4000 * (n) + 0x80 * (k))
|
||||
#define GSI_EE_n_GSI_CH_k_CNTXT_2_R_BASE_ADDR_LSBS_BMSK 0xffffffff
|
||||
|
|
@ -605,6 +610,11 @@
|
|||
#define GSI_EE_n_EV_CH_k_CNTXT_1_R_LENGTH_BMSK 0xffff
|
||||
#define GSI_EE_n_EV_CH_k_CNTXT_1_R_LENGTH_SHFT 0x0
|
||||
|
||||
#define GSI_V2_9_EE_n_EV_CH_k_CNTXT_1_OFFS(k, n) \
|
||||
(GSI_GSI_REG_BASE_OFFS + 0x00010004 + 0x4000 * (n) + 0x80 * (k))
|
||||
#define GSI_V2_9_EE_n_EV_CH_k_CNTXT_1_R_LENGTH_BMSK 0xfffff
|
||||
#define GSI_V2_9_EE_n_EV_CH_k_CNTXT_1_R_LENGTH_SHFT 0x0
|
||||
|
||||
#define GSI_EE_n_EV_CH_k_CNTXT_2_OFFS(k, n) \
|
||||
(GSI_GSI_REG_BASE_OFFS + 0x00010008 + 0x4000 * (n) + 0x80 * (k))
|
||||
#define GSI_EE_n_EV_CH_k_CNTXT_2_R_BASE_ADDR_LSBS_BMSK 0xffffffff
|
||||
|
|
|
|||
|
|
@ -83,12 +83,21 @@ static int ipa3_setup_wdi3_gsi_channel(u8 is_smmu_enabled,
|
|||
/* setup event ring */
|
||||
memset(&gsi_evt_ring_props, 0, sizeof(gsi_evt_ring_props));
|
||||
gsi_evt_ring_props.intf = GSI_EVT_CHTYPE_WDI3_EV;
|
||||
gsi_evt_ring_props.intr = GSI_INTR_IRQ;
|
||||
/* 16 (for Tx) and 8 (for Rx) */
|
||||
if (dir == IPA_WDI3_TX_DIR)
|
||||
gsi_evt_ring_props.re_size = GSI_EVT_RING_RE_SIZE_16B;
|
||||
else
|
||||
gsi_evt_ring_props.re_size = GSI_EVT_RING_RE_SIZE_8B;
|
||||
if (ipa3_ctx->ipa_hw_type >= IPA_HW_v4_9) {
|
||||
gsi_evt_ring_props.intr = GSI_INTR_MSI;
|
||||
/* 32 (for Tx) and 8 (for Rx) */
|
||||
if (dir == IPA_WDI3_TX_DIR)
|
||||
gsi_evt_ring_props.re_size = GSI_EVT_RING_RE_SIZE_32B;
|
||||
else
|
||||
gsi_evt_ring_props.re_size = GSI_EVT_RING_RE_SIZE_8B;
|
||||
} else {
|
||||
gsi_evt_ring_props.intr = GSI_INTR_IRQ;
|
||||
/* 16 (for Tx) and 8 (for Rx) */
|
||||
if (dir == IPA_WDI3_TX_DIR)
|
||||
gsi_evt_ring_props.re_size = GSI_EVT_RING_RE_SIZE_16B;
|
||||
else
|
||||
gsi_evt_ring_props.re_size = GSI_EVT_RING_RE_SIZE_8B;
|
||||
}
|
||||
if (!is_smmu_enabled) {
|
||||
gsi_evt_ring_props.ring_len = info->event_ring_size;
|
||||
gsi_evt_ring_props.ring_base_addr =
|
||||
|
|
@ -153,7 +162,15 @@ static int ipa3_setup_wdi3_gsi_channel(u8 is_smmu_enabled,
|
|||
|
||||
gsi_channel_props.db_in_bytes = 0;
|
||||
gsi_channel_props.evt_ring_hdl = ep->gsi_evt_ring_hdl;
|
||||
gsi_channel_props.re_size = GSI_CHAN_RE_SIZE_16B;
|
||||
if (ipa3_ctx->ipa_hw_type >= IPA_HW_v4_9) {
|
||||
/* 32 (for Tx) and 64 (for Rx) */
|
||||
if (dir == IPA_WDI3_TX_DIR)
|
||||
gsi_channel_props.re_size = GSI_CHAN_RE_SIZE_32B;
|
||||
else
|
||||
gsi_channel_props.re_size = GSI_CHAN_RE_SIZE_64B;
|
||||
} else
|
||||
gsi_channel_props.re_size = GSI_CHAN_RE_SIZE_16B;
|
||||
|
||||
gsi_channel_props.use_db_eng = GSI_CHAN_DB_MODE;
|
||||
gsi_channel_props.max_prefetch = GSI_ONE_PREFETCH_SEG;
|
||||
gsi_channel_props.prefetch_mode =
|
||||
|
|
|
|||
|
|
@ -162,6 +162,7 @@ enum gsi_evt_ring_elem_size {
|
|||
GSI_EVT_RING_RE_SIZE_4B = 4,
|
||||
GSI_EVT_RING_RE_SIZE_8B = 8,
|
||||
GSI_EVT_RING_RE_SIZE_16B = 16,
|
||||
GSI_EVT_RING_RE_SIZE_32B = 32,
|
||||
};
|
||||
|
||||
/**
|
||||
|
|
@ -335,6 +336,7 @@ enum gsi_chan_ring_elem_size {
|
|||
GSI_CHAN_RE_SIZE_8B = 8,
|
||||
GSI_CHAN_RE_SIZE_16B = 16,
|
||||
GSI_CHAN_RE_SIZE_32B = 32,
|
||||
GSI_CHAN_RE_SIZE_64B = 64,
|
||||
};
|
||||
|
||||
enum gsi_chan_use_db_eng {
|
||||
|
|
|
|||
Loading…
Reference in a new issue