diff mbox series

[v3,4/9] mhi: pci_generic: Enable burst mode for hardware channels

Message ID 1606404547-10737-5-git-send-email-loic.poulain@linaro.org
State Superseded
Headers show
Series mhi: pci_generic: Misc improvements | expand

Commit Message

Loic Poulain Nov. 26, 2020, 3:29 p.m. UTC
Hardware channels have a feature called burst mode that allows to
queue transfer ring element(s) (TRE) to a channel without ringing
the device doorbell. In that mode, the device is polling the channel
context for new elements. This reduces the frequency of host initiated
doorbells and increase throughput.

Create a new dedicated macro for hardware channels with burst enabled.

Signed-off-by: Loic Poulain <loic.poulain@linaro.org>

---
 drivers/bus/mhi/pci_generic.c | 34 ++++++++++++++++++++++++++++++++--
 1 file changed, 32 insertions(+), 2 deletions(-)

-- 
2.7.4

Comments

Manivannan Sadhasivam Nov. 28, 2020, 5:45 a.m. UTC | #1
On Thu, Nov 26, 2020 at 04:29:02PM +0100, Loic Poulain wrote:
> Hardware channels have a feature called burst mode that allows to

> queue transfer ring element(s) (TRE) to a channel without ringing

> the device doorbell. In that mode, the device is polling the channel

> context for new elements. This reduces the frequency of host initiated

> doorbells and increase throughput.

> 

> Create a new dedicated macro for hardware channels with burst enabled.

> 


We might need to move these macros to mhi.h at some point...

> Signed-off-by: Loic Poulain <loic.poulain@linaro.org>


Reviewed-by: Manivannan Sadhasivam <manivannan.sadhasivam@linaro.org>


Thanks,
Mani

> ---

>  drivers/bus/mhi/pci_generic.c | 34 ++++++++++++++++++++++++++++++++--

>  1 file changed, 32 insertions(+), 2 deletions(-)

> 

> diff --git a/drivers/bus/mhi/pci_generic.c b/drivers/bus/mhi/pci_generic.c

> index 4363676..6b6e5bf 100644

> --- a/drivers/bus/mhi/pci_generic.c

> +++ b/drivers/bus/mhi/pci_generic.c

> @@ -78,6 +78,36 @@ struct mhi_pci_dev_info {

>  		.offload_channel = false,	\

>  	}

>  

> +#define MHI_CHANNEL_CONFIG_HW_UL(ch_num, ch_name, el_count, ev_ring) \

> +	{						\

> +		.num = ch_num,				\

> +		.name = ch_name,			\

> +		.num_elements = el_count,		\

> +		.event_ring = ev_ring,			\

> +		.dir = DMA_TO_DEVICE,			\

> +		.ee_mask = BIT(MHI_EE_AMSS),		\

> +		.pollcfg = 0,				\

> +		.doorbell = MHI_DB_BRST_ENABLE,	\

> +		.lpm_notify = false,			\

> +		.offload_channel = false,		\

> +		.doorbell_mode_switch = true,		\

> +	}						\

> +

> +#define MHI_CHANNEL_CONFIG_HW_DL(ch_num, ch_name, el_count, ev_ring) \

> +	{						\

> +		.num = ch_num,				\

> +		.name = ch_name,			\

> +		.num_elements = el_count,		\

> +		.event_ring = ev_ring,			\

> +		.dir = DMA_FROM_DEVICE,			\

> +		.ee_mask = BIT(MHI_EE_AMSS),		\

> +		.pollcfg = 0,				\

> +		.doorbell = MHI_DB_BRST_ENABLE,	\

> +		.lpm_notify = false,			\

> +		.offload_channel = false,		\

> +		.doorbell_mode_switch = true,		\

> +	}

> +

>  #define MHI_EVENT_CONFIG_DATA(ev_ring)		\

>  	{					\

>  		.num_elements = 128,		\

> @@ -112,8 +142,8 @@ static const struct mhi_channel_config modem_qcom_v1_mhi_channels[] = {

>  	MHI_CHANNEL_CONFIG_DL(15, "QMI", 4, 0),

>  	MHI_CHANNEL_CONFIG_UL(20, "IPCR", 8, 0),

>  	MHI_CHANNEL_CONFIG_DL(21, "IPCR", 8, 0),

> -	MHI_CHANNEL_CONFIG_UL(100, "IP_HW0", 128, 1),

> -	MHI_CHANNEL_CONFIG_DL(101, "IP_HW0", 128, 2),

> +	MHI_CHANNEL_CONFIG_HW_UL(100, "IP_HW0", 128, 1),

> +	MHI_CHANNEL_CONFIG_HW_DL(101, "IP_HW0", 128, 2),

>  };

>  

>  static const struct mhi_event_config modem_qcom_v1_mhi_events[] = {

> -- 

> 2.7.4

>
diff mbox series

Patch

diff --git a/drivers/bus/mhi/pci_generic.c b/drivers/bus/mhi/pci_generic.c
index 4363676..6b6e5bf 100644
--- a/drivers/bus/mhi/pci_generic.c
+++ b/drivers/bus/mhi/pci_generic.c
@@ -78,6 +78,36 @@  struct mhi_pci_dev_info {
 		.offload_channel = false,	\
 	}
 
+#define MHI_CHANNEL_CONFIG_HW_UL(ch_num, ch_name, el_count, ev_ring) \
+	{						\
+		.num = ch_num,				\
+		.name = ch_name,			\
+		.num_elements = el_count,		\
+		.event_ring = ev_ring,			\
+		.dir = DMA_TO_DEVICE,			\
+		.ee_mask = BIT(MHI_EE_AMSS),		\
+		.pollcfg = 0,				\
+		.doorbell = MHI_DB_BRST_ENABLE,	\
+		.lpm_notify = false,			\
+		.offload_channel = false,		\
+		.doorbell_mode_switch = true,		\
+	}						\
+
+#define MHI_CHANNEL_CONFIG_HW_DL(ch_num, ch_name, el_count, ev_ring) \
+	{						\
+		.num = ch_num,				\
+		.name = ch_name,			\
+		.num_elements = el_count,		\
+		.event_ring = ev_ring,			\
+		.dir = DMA_FROM_DEVICE,			\
+		.ee_mask = BIT(MHI_EE_AMSS),		\
+		.pollcfg = 0,				\
+		.doorbell = MHI_DB_BRST_ENABLE,	\
+		.lpm_notify = false,			\
+		.offload_channel = false,		\
+		.doorbell_mode_switch = true,		\
+	}
+
 #define MHI_EVENT_CONFIG_DATA(ev_ring)		\
 	{					\
 		.num_elements = 128,		\
@@ -112,8 +142,8 @@  static const struct mhi_channel_config modem_qcom_v1_mhi_channels[] = {
 	MHI_CHANNEL_CONFIG_DL(15, "QMI", 4, 0),
 	MHI_CHANNEL_CONFIG_UL(20, "IPCR", 8, 0),
 	MHI_CHANNEL_CONFIG_DL(21, "IPCR", 8, 0),
-	MHI_CHANNEL_CONFIG_UL(100, "IP_HW0", 128, 1),
-	MHI_CHANNEL_CONFIG_DL(101, "IP_HW0", 128, 2),
+	MHI_CHANNEL_CONFIG_HW_UL(100, "IP_HW0", 128, 1),
+	MHI_CHANNEL_CONFIG_HW_DL(101, "IP_HW0", 128, 2),
 };
 
 static const struct mhi_event_config modem_qcom_v1_mhi_events[] = {