usb: chipidea: move malloced regmap directly into struct hw_bank
authorMarc Kleine-Budde <mkl@pengutronix.de>
Mon, 6 Jan 2014 02:10:38 +0000 (10:10 +0800)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Wed, 8 Jan 2014 00:21:06 +0000 (16:21 -0800)
Without this patch a seperate chunk of memory is allocated for the regmap
array. As the regmap is always used it makes no sense to allocate a seperate
memory block for it, this patch moves the regmap array directly into the struct
hw_bank.

Signed-off-by: Marc Kleine-Budde <mkl@pengutronix.de>
Signed-off-by: Peter Chen <peter.chen@freescale.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
drivers/usb/chipidea/ci.h
drivers/usb/chipidea/core.c

index 1c94fc5257f4ef215e5600ba7e39b585e533d29b..a71dc1c89aa2eb0b4c978aeb0e7a9a7c73c508a0 100644 (file)
 #define CI_HDRC_PAGE_SIZE  4096ul /* page size for TD's */
 #define ENDPT_MAX          32
 
+/******************************************************************************
+ * REGISTERS
+ *****************************************************************************/
+/* register indices */
+enum ci_hw_regs {
+       CAP_CAPLENGTH,
+       CAP_HCCPARAMS,
+       CAP_DCCPARAMS,
+       CAP_TESTMODE,
+       CAP_LAST = CAP_TESTMODE,
+       OP_USBCMD,
+       OP_USBSTS,
+       OP_USBINTR,
+       OP_DEVICEADDR,
+       OP_ENDPTLISTADDR,
+       OP_PORTSC,
+       OP_DEVLC,
+       OP_OTGSC,
+       OP_USBMODE,
+       OP_ENDPTSETUPSTAT,
+       OP_ENDPTPRIME,
+       OP_ENDPTFLUSH,
+       OP_ENDPTSTAT,
+       OP_ENDPTCOMPLETE,
+       OP_ENDPTCTRL,
+       /* endptctrl1..15 follow */
+       OP_LAST = OP_ENDPTCTRL + ENDPT_MAX / 2,
+};
+
 /******************************************************************************
  * STRUCTURES
  *****************************************************************************/
@@ -98,7 +127,7 @@ struct hw_bank {
        void __iomem    *cap;
        void __iomem    *op;
        size_t          size;
-       void __iomem    **regmap;
+       void __iomem    *regmap[OP_LAST + 1];
 };
 
 /**
@@ -209,38 +238,6 @@ static inline void ci_role_stop(struct ci_hdrc *ci)
        ci->roles[role]->stop(ci);
 }
 
-/******************************************************************************
- * REGISTERS
- *****************************************************************************/
-/* register size */
-#define REG_BITS   (32)
-
-/* register indices */
-enum ci_hw_regs {
-       CAP_CAPLENGTH,
-       CAP_HCCPARAMS,
-       CAP_DCCPARAMS,
-       CAP_TESTMODE,
-       CAP_LAST = CAP_TESTMODE,
-       OP_USBCMD,
-       OP_USBSTS,
-       OP_USBINTR,
-       OP_DEVICEADDR,
-       OP_ENDPTLISTADDR,
-       OP_PORTSC,
-       OP_DEVLC,
-       OP_OTGSC,
-       OP_USBMODE,
-       OP_ENDPTSETUPSTAT,
-       OP_ENDPTPRIME,
-       OP_ENDPTFLUSH,
-       OP_ENDPTSTAT,
-       OP_ENDPTCOMPLETE,
-       OP_ENDPTCTRL,
-       /* endptctrl1..15 follow */
-       OP_LAST = OP_ENDPTCTRL + ENDPT_MAX / 2,
-};
-
 /**
  * hw_read: reads from a hw register
  * @reg:  register index
index 9a5ef205cffd3fe429f103b889fb4356bbce244a..b9385c1034acb88ed1b9dc1fae2af400b4ea4f23 100644 (file)
@@ -123,13 +123,6 @@ static int hw_alloc_regmap(struct ci_hdrc *ci, bool is_lpm)
 {
        int i;
 
-       kfree(ci->hw_bank.regmap);
-
-       ci->hw_bank.regmap = kzalloc((OP_LAST + 1) * sizeof(void *),
-                                    GFP_KERNEL);
-       if (!ci->hw_bank.regmap)
-               return -ENOMEM;
-
        for (i = 0; i < OP_ENDPTCTRL; i++)
                ci->hw_bank.regmap[i] =
                        (i <= CAP_LAST ? ci->hw_bank.cap : ci->hw_bank.op) +
@@ -681,7 +674,6 @@ static int ci_hdrc_remove(struct platform_device *pdev)
        ci_role_destroy(ci);
        ci_hdrc_enter_lpm(ci, true);
        ci_usb_phy_destroy(ci);
-       kfree(ci->hw_bank.regmap);
 
        return 0;
 }