Merge "msm: ipa3: Following HPG sequence for HOLB enabling"
This commit is contained in:
commit
c19fb2d8ce
@ -17,8 +17,6 @@
|
|||||||
|
|
||||||
#define IPA_USB_DEV_READY_TIMEOUT_MSEC 10000
|
#define IPA_USB_DEV_READY_TIMEOUT_MSEC 10000
|
||||||
|
|
||||||
#define IPA_HOLB_TMR_EN 0x1
|
|
||||||
|
|
||||||
/* GSI channels weights */
|
/* GSI channels weights */
|
||||||
#define IPA_USB_DL_CHAN_LOW_WEIGHT 0x5
|
#define IPA_USB_DL_CHAN_LOW_WEIGHT 0x5
|
||||||
#define IPA_USB_UL_CHAN_LOW_WEIGHT 0x4
|
#define IPA_USB_UL_CHAN_LOW_WEIGHT 0x4
|
||||||
|
@ -14,8 +14,6 @@
|
|||||||
* These values were determined empirically and shows good E2E bi-
|
* These values were determined empirically and shows good E2E bi-
|
||||||
* directional throughputs
|
* directional throughputs
|
||||||
*/
|
*/
|
||||||
#define IPA_HOLB_TMR_EN 0x1
|
|
||||||
#define IPA_HOLB_TMR_DIS 0x0
|
|
||||||
#define IPA_POLL_AGGR_STATE_RETRIES_NUM 3
|
#define IPA_POLL_AGGR_STATE_RETRIES_NUM 3
|
||||||
#define IPA_POLL_AGGR_STATE_SLEEP_MSEC 1
|
#define IPA_POLL_AGGR_STATE_SLEEP_MSEC 1
|
||||||
|
|
||||||
|
@ -63,6 +63,8 @@
|
|||||||
#define IPA_UC_WAIT_MIN_SLEEP 1000
|
#define IPA_UC_WAIT_MIN_SLEEP 1000
|
||||||
#define IPA_UC_WAII_MAX_SLEEP 1200
|
#define IPA_UC_WAII_MAX_SLEEP 1200
|
||||||
#define IPA_HOLB_TMR_VAL_4_5 31
|
#define IPA_HOLB_TMR_VAL_4_5 31
|
||||||
|
#define IPA_HOLB_TMR_DIS 0x0
|
||||||
|
#define IPA_HOLB_TMR_EN 0x1
|
||||||
/*
|
/*
|
||||||
* The transport descriptor size was changed to GSI_CHAN_RE_SIZE_16B, but
|
* The transport descriptor size was changed to GSI_CHAN_RE_SIZE_16B, but
|
||||||
* IPA users still use sps_iovec size as FIFO element size.
|
* IPA users still use sps_iovec size as FIFO element size.
|
||||||
|
@ -65,8 +65,6 @@
|
|||||||
#define TETH_AGGR_BYTE_LIMIT 24
|
#define TETH_AGGR_BYTE_LIMIT 24
|
||||||
#define TETH_AGGR_DL_BYTE_LIMIT 16
|
#define TETH_AGGR_DL_BYTE_LIMIT 16
|
||||||
#define TRE_BUFF_SIZE 32768
|
#define TRE_BUFF_SIZE 32768
|
||||||
#define IPA_HOLB_TMR_EN 0x1
|
|
||||||
#define IPA_HOLB_TMR_DIS 0x0
|
|
||||||
#define RNDIS_IPA_DFLT_RT_HDL 0
|
#define RNDIS_IPA_DFLT_RT_HDL 0
|
||||||
#define IPA_POLL_FOR_EMPTINESS_NUM 50
|
#define IPA_POLL_FOR_EMPTINESS_NUM 50
|
||||||
#define IPA_POLL_FOR_EMPTINESS_SLEEP_USEC 20
|
#define IPA_POLL_FOR_EMPTINESS_SLEEP_USEC 20
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
// SPDX-License-Identifier: GPL-2.0-only
|
// SPDX-License-Identifier: GPL-2.0-only
|
||||||
/*
|
/*
|
||||||
* Copyright (c) 2012-2019, The Linux Foundation. All rights reserved.
|
* Copyright (c) 2012-2020, The Linux Foundation. All rights reserved.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "ipa_i.h"
|
#include "ipa_i.h"
|
||||||
@ -9,8 +9,6 @@
|
|||||||
#include <linux/mm.h>
|
#include <linux/mm.h>
|
||||||
#include "ipa_qmi_service.h"
|
#include "ipa_qmi_service.h"
|
||||||
|
|
||||||
#define IPA_HOLB_TMR_DIS 0x0
|
|
||||||
|
|
||||||
#define IPA_HW_INTERFACE_WDI_VERSION 0x0001
|
#define IPA_HW_INTERFACE_WDI_VERSION 0x0001
|
||||||
#define IPA_HW_WDI_RX_MBOX_START_INDEX 48
|
#define IPA_HW_WDI_RX_MBOX_START_INDEX 48
|
||||||
#define IPA_HW_WDI_TX_MBOX_START_INDEX 50
|
#define IPA_HW_WDI_TX_MBOX_START_INDEX 50
|
||||||
|
@ -6095,19 +6095,23 @@ int ipa3_cfg_ep_holb(u32 clnt_hdl, const struct ipa_ep_cfg_holb *ep_holb)
|
|||||||
|
|
||||||
IPA_ACTIVE_CLIENTS_INC_EP(ipa3_get_client_mapping(clnt_hdl));
|
IPA_ACTIVE_CLIENTS_INC_EP(ipa3_get_client_mapping(clnt_hdl));
|
||||||
|
|
||||||
ipahal_write_reg_n_fields(IPA_ENDP_INIT_HOL_BLOCK_EN_n, clnt_hdl,
|
if (ep_holb->en == IPA_HOLB_TMR_DIS) {
|
||||||
ep_holb);
|
|
||||||
|
|
||||||
/* IPA4.5 issue requires HOLB_EN to be written twice */
|
|
||||||
if (ipa3_ctx->ipa_hw_type >= IPA_HW_v4_5)
|
|
||||||
ipahal_write_reg_n_fields(IPA_ENDP_INIT_HOL_BLOCK_EN_n,
|
ipahal_write_reg_n_fields(IPA_ENDP_INIT_HOL_BLOCK_EN_n,
|
||||||
clnt_hdl, ep_holb);
|
clnt_hdl, ep_holb);
|
||||||
|
goto success;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Follow HPG sequence to DIS_HOLB, Configure Timer, and HOLB_EN */
|
||||||
|
if (ipa3_ctx->ipa_hw_type >= IPA_HW_v4_5) {
|
||||||
|
ipa3_ctx->ep[clnt_hdl].holb.en = IPA_HOLB_TMR_DIS;
|
||||||
|
ipahal_write_reg_n_fields(IPA_ENDP_INIT_HOL_BLOCK_EN_n,
|
||||||
|
clnt_hdl, ep_holb);
|
||||||
|
}
|
||||||
|
|
||||||
/* Configure timer */
|
/* Configure timer */
|
||||||
if (ipa3_ctx->ipa_hw_type == IPA_HW_v4_2) {
|
if (ipa3_ctx->ipa_hw_type == IPA_HW_v4_2) {
|
||||||
ipa3_cal_ep_holb_scale_base_val(ep_holb->tmr_val,
|
ipa3_cal_ep_holb_scale_base_val(ep_holb->tmr_val,
|
||||||
&ipa3_ctx->ep[clnt_hdl].holb);
|
&ipa3_ctx->ep[clnt_hdl].holb);
|
||||||
goto success;
|
|
||||||
}
|
}
|
||||||
if (ipa3_ctx->ipa_hw_type >= IPA_HW_v4_5) {
|
if (ipa3_ctx->ipa_hw_type >= IPA_HW_v4_5) {
|
||||||
int res;
|
int res;
|
||||||
@ -6123,9 +6127,19 @@ int ipa3_cfg_ep_holb(u32 clnt_hdl, const struct ipa_ep_cfg_holb *ep_holb)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
success:
|
|
||||||
ipahal_write_reg_n_fields(IPA_ENDP_INIT_HOL_BLOCK_TIMER_n,
|
ipahal_write_reg_n_fields(IPA_ENDP_INIT_HOL_BLOCK_TIMER_n,
|
||||||
clnt_hdl, &ipa3_ctx->ep[clnt_hdl].holb);
|
clnt_hdl, &ipa3_ctx->ep[clnt_hdl].holb);
|
||||||
|
|
||||||
|
/* Enable HOLB */
|
||||||
|
ipa3_ctx->ep[clnt_hdl].holb.en = IPA_HOLB_TMR_EN;
|
||||||
|
ipahal_write_reg_n_fields(IPA_ENDP_INIT_HOL_BLOCK_EN_n,
|
||||||
|
clnt_hdl, ep_holb);
|
||||||
|
/* IPA4.5 issue requires HOLB_EN to be written twice */
|
||||||
|
if (ipa3_ctx->ipa_hw_type >= IPA_HW_v4_5)
|
||||||
|
ipahal_write_reg_n_fields(IPA_ENDP_INIT_HOL_BLOCK_EN_n,
|
||||||
|
clnt_hdl, ep_holb);
|
||||||
|
|
||||||
|
success:
|
||||||
IPA_ACTIVE_CLIENTS_DEC_EP(ipa3_get_client_mapping(clnt_hdl));
|
IPA_ACTIVE_CLIENTS_DEC_EP(ipa3_get_client_mapping(clnt_hdl));
|
||||||
IPADBG("cfg holb %u ep=%d tmr=%d\n", ep_holb->en, clnt_hdl,
|
IPADBG("cfg holb %u ep=%d tmr=%d\n", ep_holb->en, clnt_hdl,
|
||||||
ep_holb->tmr_val);
|
ep_holb->tmr_val);
|
||||||
|
Loading…
Reference in New Issue
Block a user