summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLinux Build Service Account <lnxbuild@localhost>2016-07-27 06:32:34 -0700
committerGerrit - the friendly Code Review server <code-review@localhost>2016-07-27 06:32:33 -0700
commitc97e71cae5ffde0e599944f59171e3a398bf1335 (patch)
tree83a8015527765b54106091a2a849cf8975c2aa0e
parent3d3db56d8a884abcee8dfda1124a68a19d18c345 (diff)
parenta5dd060414a6697135c0b22f5155e592cc96c455 (diff)
Merge "msm: ipa3: changes to IPA USB APIs to support SMMU"
-rw-r--r--drivers/platform/msm/ipa/ipa_clients/ipa_usb.c6
-rw-r--r--drivers/usb/gadget/function/f_gsi.c8
-rw-r--r--include/linux/ipa_usb.h13
3 files changed, 18 insertions, 9 deletions
diff --git a/drivers/platform/msm/ipa/ipa_clients/ipa_usb.c b/drivers/platform/msm/ipa/ipa_clients/ipa_usb.c
index d7a987335dda..11daafe43d7d 100644
--- a/drivers/platform/msm/ipa/ipa_clients/ipa_usb.c
+++ b/drivers/platform/msm/ipa/ipa_clients/ipa_usb.c
@@ -1061,8 +1061,8 @@ static bool ipa3_usb_check_chan_params(struct ipa_usb_xdci_chan_params *params)
IPA_USB_DBG_LOW("xfer_ring_len = %d\n", params->xfer_ring_len);
IPA_USB_DBG_LOW("xfer_ring_base_addr = %llx\n",
params->xfer_ring_base_addr);
- IPA_USB_DBG_LOW("last_trb_addr = %x\n",
- params->xfer_scratch.last_trb_addr);
+ IPA_USB_DBG_LOW("last_trb_addr_iova = %x\n",
+ params->xfer_scratch.last_trb_addr_iova);
IPA_USB_DBG_LOW("const_buffer_size = %d\n",
params->xfer_scratch.const_buffer_size);
IPA_USB_DBG_LOW("depcmd_low_addr = %x\n",
@@ -1227,7 +1227,7 @@ static int ipa3_usb_request_xdci_channel(
chan_params.chan_params.err_cb = ipa3_usb_gsi_chan_err_cb;
chan_params.chan_params.chan_user_data = NULL;
chan_params.chan_scratch.xdci.last_trb_addr =
- params->xfer_scratch.last_trb_addr;
+ params->xfer_scratch.last_trb_addr_iova;
/* xferrscidx will be updated later */
chan_params.chan_scratch.xdci.xferrscidx = 0;
chan_params.chan_scratch.xdci.const_buffer_size =
diff --git a/drivers/usb/gadget/function/f_gsi.c b/drivers/usb/gadget/function/f_gsi.c
index 468a7bcd8dbd..58b847a4a5f4 100644
--- a/drivers/usb/gadget/function/f_gsi.c
+++ b/drivers/usb/gadget/function/f_gsi.c
@@ -256,7 +256,7 @@ static int ipa_connect_channels(struct gsi_data_port *d_port)
in_params->dir = GSI_CHAN_DIR_FROM_GSI;
in_params->xfer_ring_len = gsi_channel_info.xfer_ring_len;
in_params->xfer_ring_base_addr = gsi_channel_info.xfer_ring_base_addr;
- in_params->xfer_scratch.last_trb_addr =
+ in_params->xfer_scratch.last_trb_addr_iova =
d_port->in_last_trb_addr = gsi_channel_info.last_trb_addr;
in_params->xfer_scratch.const_buffer_size =
gsi_channel_info.const_buffer_size;
@@ -290,7 +290,7 @@ static int ipa_connect_channels(struct gsi_data_port *d_port)
gsi_channel_info.xfer_ring_len;
out_params->xfer_ring_base_addr =
gsi_channel_info.xfer_ring_base_addr;
- out_params->xfer_scratch.last_trb_addr =
+ out_params->xfer_scratch.last_trb_addr_iova =
gsi_channel_info.last_trb_addr;
out_params->xfer_scratch.const_buffer_size =
gsi_channel_info.const_buffer_size;
@@ -2787,7 +2787,7 @@ static ssize_t gsi_info_show(struct config_item *item, char *page)
ipa_chnl_params->xfer_scratch.depcmd_low_addr);
len += scnprintf(buf + len, PAGE_SIZE - len,
"%25s %10x\n", "IN LastTRB Addr Off: ",
- ipa_chnl_params->xfer_scratch.last_trb_addr);
+ ipa_chnl_params->xfer_scratch.last_trb_addr_iova);
len += scnprintf(buf + len, PAGE_SIZE - len,
"%25s %10u\n", "IN Buffer Size: ",
ipa_chnl_params->xfer_scratch.const_buffer_size);
@@ -2821,7 +2821,7 @@ static ssize_t gsi_info_show(struct config_item *item, char *page)
ipa_chnl_params->xfer_scratch.depcmd_low_addr);
len += scnprintf(buf + len, PAGE_SIZE - len,
"%25s %10x\n", "OUT LastTRB Addr Off: ",
- ipa_chnl_params->xfer_scratch.last_trb_addr);
+ ipa_chnl_params->xfer_scratch.last_trb_addr_iova);
len += scnprintf(buf + len, PAGE_SIZE - len,
"%25s %10u\n", "OUT Buffer Size: ",
ipa_chnl_params->xfer_scratch.const_buffer_size);
diff --git a/include/linux/ipa_usb.h b/include/linux/ipa_usb.h
index c3885c72e5ea..0fe0e36c551f 100644
--- a/include/linux/ipa_usb.h
+++ b/include/linux/ipa_usb.h
@@ -94,7 +94,7 @@ struct ipa_usb_xdci_connect_params {
* ipa_usb_xdci_chan_scratch - xDCI protocol SW config area of
* channel scratch
*
- * @last_trb_addr: Address (LSB - based on alignment restrictions) of
+ * @last_trb_addr_iova: Address (iova LSB - based on alignment restrictions) of
* last TRB in queue. Used to identify roll over case
* @const_buffer_size: TRB buffer size in KB (similar to IPA aggregation
* configuration). Must be aligned to max USB Packet Size.
@@ -103,7 +103,7 @@ struct ipa_usb_xdci_connect_params {
* @depcmd_hi_addr: Used to generate "Update Transfer" command.
*/
struct ipa_usb_xdci_chan_scratch {
- u16 last_trb_addr;
+ u16 last_trb_addr_iova;
u8 const_buffer_size;
u32 depcmd_low_addr;
u8 depcmd_hi_addr;
@@ -124,6 +124,11 @@ struct ipa_usb_xdci_chan_scratch {
* @xfer_ring_base_addr: physical base address of transfer ring. Address must be
* aligned to xfer_ring_len rounded to power of two
* @xfer_scratch: parameters for xDCI channel scratch
+ * @xfer_ring_base_addr_iova: IO virtual address mapped to xfer_ring_base_addr
+ * @data_buff_base_len: length of data buffer allocated by USB driver
+ * @data_buff_base_addr: physical base address for the data buffer (where TRBs
+ * points)
+ * @data_buff_base_addr_iova: IO virtual address mapped to data_buff_base_addr
*
*/
struct ipa_usb_xdci_chan_params {
@@ -140,6 +145,10 @@ struct ipa_usb_xdci_chan_params {
u16 xfer_ring_len;
u64 xfer_ring_base_addr;
struct ipa_usb_xdci_chan_scratch xfer_scratch;
+ u64 xfer_ring_base_addr_iova;
+ u32 data_buff_base_len;
+ u64 data_buff_base_addr;
+ u64 data_buff_base_addr_iova;
};
/**