OSDN Git Service

usb: dwc2: Changes in registers backup/restore functions
authorVardan Mikayelyan <mvardan@synopsys.com>
Fri, 16 Feb 2018 10:09:19 +0000 (14:09 +0400)
committerFelipe Balbi <felipe.balbi@linux.intel.com>
Tue, 13 Mar 2018 08:47:55 +0000 (10:47 +0200)
Move hptxfsiz to host register's backup/restore functions, not
needed to have it in global register's backup/restore functions.

Add backup for glpmcfg, and read/write for gi2cctl and pcgcctl.
As requires programming guide.

Affected functions:
dwc2_backup_host_registers()
dwc2_restore_host_registers()
dwc2_backup_global_registers()
dwc2_restore_global_registers()

Signed-off-by: Vardan Mikayelyan <mvardan@synopsys.com>
Signed-off-by: John Youn <johnyoun@synopsys.com>
Signed-off-by: Grigor Tovmasyan <tovmasya@synopsys.com>
Signed-off-by: Felipe Balbi <felipe.balbi@linux.intel.com>
drivers/usb/dwc2/core.c
drivers/usb/dwc2/core.h
drivers/usb/dwc2/hcd.c

index bb17a45..69c1970 100644 (file)
@@ -79,9 +79,11 @@ static int dwc2_backup_global_registers(struct dwc2_hsotg *hsotg)
        gr->gusbcfg = dwc2_readl(hsotg->regs + GUSBCFG);
        gr->grxfsiz = dwc2_readl(hsotg->regs + GRXFSIZ);
        gr->gnptxfsiz = dwc2_readl(hsotg->regs + GNPTXFSIZ);
-       gr->hptxfsiz = dwc2_readl(hsotg->regs + HPTXFSIZ);
        gr->gdfifocfg = dwc2_readl(hsotg->regs + GDFIFOCFG);
        gr->pcgcctl1 = dwc2_readl(hsotg->regs + PCGCCTL1);
+       gr->glpmcfg = dwc2_readl(hsotg->regs + GLPMCFG);
+       gr->gi2cctl = dwc2_readl(hsotg->regs + GI2CCTL);
+       gr->pcgcctl = dwc2_readl(hsotg->regs + PCGCTL);
 
        gr->valid = true;
        return 0;
@@ -116,9 +118,11 @@ static int dwc2_restore_global_registers(struct dwc2_hsotg *hsotg)
        dwc2_writel(gr->gahbcfg, hsotg->regs + GAHBCFG);
        dwc2_writel(gr->grxfsiz, hsotg->regs + GRXFSIZ);
        dwc2_writel(gr->gnptxfsiz, hsotg->regs + GNPTXFSIZ);
-       dwc2_writel(gr->hptxfsiz, hsotg->regs + HPTXFSIZ);
        dwc2_writel(gr->gdfifocfg, hsotg->regs + GDFIFOCFG);
        dwc2_writel(gr->pcgcctl1, hsotg->regs + PCGCCTL1);
+       dwc2_writel(gr->glpmcfg, hsotg->regs + GLPMCFG);
+       dwc2_writel(gr->pcgcctl, hsotg->regs + PCGCTL);
+       dwc2_writel(gr->gi2cctl, hsotg->regs + GI2CCTL);
 
        return 0;
 }
index 3c9dcf3..73287ee 100644 (file)
@@ -640,7 +640,7 @@ struct dwc2_hw_params {
  * @grxfsiz:           Backup of GRXFSIZ register
  * @gnptxfsiz:         Backup of GNPTXFSIZ register
  * @gi2cctl:           Backup of GI2CCTL register
- * @hptxfsiz:          Backup of HPTXFSIZ register
+ * @glpmcfg:           Backup of GLPMCFG register
  * @gdfifocfg:         Backup of GDFIFOCFG register
  * @gpwrdn:            Backup of GPWRDN register
  */
@@ -652,7 +652,7 @@ struct dwc2_gregs_backup {
        u32 grxfsiz;
        u32 gnptxfsiz;
        u32 gi2cctl;
-       u32 hptxfsiz;
+       u32 glpmcfg;
        u32 pcgcctl;
        u32 pcgcctl1;
        u32 gdfifocfg;
@@ -700,6 +700,7 @@ struct dwc2_dregs_backup {
  * @hcintmsk:          Backup of HCINTMSK register
  * @hptr0:             Backup of HPTR0 register
  * @hfir:              Backup of HFIR register
+ * @hptxfsiz:          Backup of HPTXFSIZ register
  */
 struct dwc2_hregs_backup {
        u32 hcfg;
@@ -707,6 +708,7 @@ struct dwc2_hregs_backup {
        u32 hcintmsk[MAX_EPS_CHANNELS];
        u32 hprt0;
        u32 hfir;
+       u32 hptxfsiz;
        bool valid;
 };
 
index ee4654b..44dbcac 100644 (file)
@@ -5318,6 +5318,7 @@ int dwc2_backup_host_registers(struct dwc2_hsotg *hsotg)
 
        hr->hprt0 = dwc2_read_hprt0(hsotg);
        hr->hfir = dwc2_readl(hsotg->regs + HFIR);
+       hr->hptxfsiz = dwc2_readl(hsotg->regs + HPTXFSIZ);
        hr->valid = true;
 
        return 0;
@@ -5354,6 +5355,7 @@ int dwc2_restore_host_registers(struct dwc2_hsotg *hsotg)
 
        dwc2_writel(hr->hprt0, hsotg->regs + HPRT0);
        dwc2_writel(hr->hfir, hsotg->regs + HFIR);
+       dwc2_writel(hr->hptxfsiz, hsotg->regs + HPTXFSIZ);
        hsotg->frame_number = 0;
 
        return 0;