Read in and set the host DMA-related device properties. This is used to
control the DMA mode as a host.

Signed-off-by: John Youn <[email protected]>
---
 drivers/usb/dwc2/core.h   |  10 +++--
 drivers/usb/dwc2/params.c | 103 +++++++++++++++-------------------------------
 2 files changed, 40 insertions(+), 73 deletions(-)

diff --git a/drivers/usb/dwc2/core.h b/drivers/usb/dwc2/core.h
index ba26cb6..333e9f4 100644
--- a/drivers/usb/dwc2/core.h
+++ b/drivers/usb/dwc2/core.h
@@ -451,9 +451,6 @@ struct dwc2_core_params {
 #define DWC2_CAP_PARAM_NO_HNP_SRP_CAPABLE      2
 
        int otg_ver;
-       int host_dma;
-       int host_dma_desc;
-       int host_dma_desc_fs;
        int speed;
 #define DWC2_SPEED_PARAM_HIGH  0
 #define DWC2_SPEED_PARAM_FULL  1
@@ -491,10 +488,17 @@ struct dwc2_core_params {
        int external_id_pin_ctl;
        int hibernation;
 
+       /* Host parameters */
+       u8 host_dma;
+       u8 host_dma_desc;
+       u8 host_dma_desc_fs;
+
        /*
         * The following parameters are *only* set via device
         * properties and cannot be set directly in this structure.
         */
+
+       /* Gadget parameters */
        bool g_dma;
        u16 g_rx_fifo_size;
        u16 g_np_tx_fifo_size;
diff --git a/drivers/usb/dwc2/params.c b/drivers/usb/dwc2/params.c
index 107fd79..3db3657 100644
--- a/drivers/usb/dwc2/params.c
+++ b/drivers/usb/dwc2/params.c
@@ -388,6 +388,18 @@ static void dwc2_set_param(struct dwc2_hsotg *hsotg,
        dwc2_set_core_param(param, size, value);
 }
 
+/**
+ * dwc2_set_param_u8() - Set a u8 parameter
+ *
+ * See dwc2_set_param().
+ */
+static void dwc2_set_param_u8(struct dwc2_hsotg *hsotg,
+                             u8 *param, char *name, u8 value,
+                             u8 def, u8 min, u8 max)
+{
+       dwc2_set_param(hsotg, param, name, value, def, min, max, 1);
+}
+
 /**
  * dwc2_set_param_u16() - Set a u16 parameter
  *
@@ -473,73 +485,6 @@ static void dwc2_set_param_otg_cap(struct dwc2_hsotg 
*hsotg, int val)
        hsotg->params.otg_cap = val;
 }
 
-static void dwc2_set_param_host_dma(struct dwc2_hsotg *hsotg, int val)
-{
-       int valid = 1;
-
-       if (val > 0 && hsotg->hw_params.arch == GHWCFG2_SLAVE_ONLY_ARCH)
-               valid = 0;
-       if (val < 0)
-               valid = 0;
-
-       if (!valid) {
-               if (val >= 0)
-                       dev_err(hsotg->dev,
-                               "%d invalid for host_dma parameter. Check HW 
configuration.\n",
-                               val);
-               val = hsotg->hw_params.arch != GHWCFG2_SLAVE_ONLY_ARCH;
-               dev_dbg(hsotg->dev, "Setting host_dma to %d\n", val);
-       }
-
-       hsotg->params.host_dma = val;
-}
-
-static void dwc2_set_param_host_dma_desc(struct dwc2_hsotg *hsotg, int val)
-{
-       int valid = 1;
-
-       if (val > 0 && (hsotg->params.host_dma <= 0 ||
-                       !hsotg->hw_params.dma_desc_enable))
-               valid = 0;
-       if (val < 0)
-               valid = 0;
-
-       if (!valid) {
-               if (val >= 0)
-                       dev_err(hsotg->dev,
-                               "%d invalid for host_dma_desc parameter. Check 
HW configuration.\n",
-                               val);
-               val = (hsotg->params.host_dma > 0 &&
-                       hsotg->hw_params.dma_desc_enable);
-               dev_dbg(hsotg->dev, "Setting host_dma_desc to %d\n", val);
-       }
-
-       hsotg->params.host_dma_desc = val;
-}
-
-static void dwc2_set_param_host_dma_desc_fs(struct dwc2_hsotg *hsotg, int val)
-{
-       int valid = 1;
-
-       if (val > 0 && (hsotg->params.host_dma <= 0 ||
-                       !hsotg->hw_params.dma_desc_enable))
-               valid = 0;
-       if (val < 0)
-               valid = 0;
-
-       if (!valid) {
-               if (val >= 0)
-                       dev_err(hsotg->dev,
-                               "%d invalid for host_dma_desc_fs parameter. 
Check HW configuration.\n",
-                               val);
-               val = (hsotg->params.host_dma > 0 &&
-                       hsotg->hw_params.dma_desc_enable);
-       }
-
-       hsotg->params.host_dma_desc_fs = val;
-       dev_dbg(hsotg->dev, "Setting host_dma_desc_fs to %d\n", val);
-}
-
 static void
 dwc2_set_param_host_support_fs_ls_low_power(struct dwc2_hsotg *hsotg,
                                            int val)
@@ -1115,9 +1060,27 @@ static void dwc2_set_parameters(struct dwc2_hsotg *hsotg,
        dev_dbg(hsotg->dev, "%s()\n", __func__);
 
        dwc2_set_param_otg_cap(hsotg, params->otg_cap);
-       dwc2_set_param_host_dma(hsotg, params->host_dma);
-       dwc2_set_param_host_dma_desc(hsotg, params->host_dma_desc);
-       dwc2_set_param_host_dma_desc_fs(hsotg, params->host_dma_desc_fs);
+
+       if ((hsotg->dr_mode == USB_DR_MODE_HOST) ||
+           (hsotg->dr_mode == USB_DR_MODE_OTG)) {
+               bool slave_only = (hw->arch == GHWCFG2_SLAVE_ONLY_ARCH);
+
+               dev_dbg(hsotg->dev, "Setting HOST parameters\n");
+
+               dwc2_set_param_u8(hsotg, &p->host_dma,
+                                 "host-dma", params->host_dma,
+                                 slave_only ? 0 : 1,
+                                 0, slave_only ? 0 : 1);
+
+               dwc2_set_param_u8(hsotg, &p->host_dma_desc,
+                                 "host-dma-desc", params->host_dma_desc,
+                                 0, 0, hw->dma_desc_enable ? 0 : 1);
+
+               dwc2_set_param_u8(hsotg, &p->host_dma_desc_fs,
+                                 "host-dma-desc-fs", params->host_dma_desc_fs,
+                                 0, 0, hw->dma_desc_enable ? 0 : 1);
+       }
+
        dwc2_set_param_host_support_fs_ls_low_power(hsotg,
                        params->host_support_fs_ls_low_power);
        dwc2_set_param_enable_dynamic_fifo(hsotg,
-- 
2.10.0

--
To unsubscribe from this list: send the line "unsubscribe linux-usb" in
the body of a message to [email protected]
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to