On Thu, Dec 05, 2013 at 12:32:56PM +0100, Marc Kleine-Budde wrote: > 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@xxxxxxxxxxxxxx> > --- > drivers/usb/chipidea/ci.h | 66 ++++++++++++++++++++++----------------------- > drivers/usb/chipidea/core.c | 8 ------ > 2 files changed, 33 insertions(+), 41 deletions(-) > > diff --git a/drivers/usb/chipidea/ci.h b/drivers/usb/chipidea/ci.h > index 1c94fc5..ef99d91 100644 > --- a/drivers/usb/chipidea/ci.h > +++ b/drivers/usb/chipidea/ci.h > @@ -26,6 +26,38 @@ > #define ENDPT_MAX 32 > > /****************************************************************************** > + * 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, > +}; > + > +/****************************************************************************** > * STRUCTURES > *****************************************************************************/ > /** > @@ -98,7 +130,7 @@ struct hw_bank { > void __iomem *cap; > void __iomem *op; > size_t size; > - void __iomem **regmap; > + void __iomem *regmap[OP_LAST]; OP_LAST + 1? > }; > > /** > @@ -209,38 +241,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, > -}; > - Have you changed enum ci_hw_regs? If not, please delete above diff. Meanwhile, you can help delete "#define REG_BITS (32) which" seems no one uses it. Peter > /** > * hw_read: reads from a hw register > * @reg: register index > diff --git a/drivers/usb/chipidea/core.c b/drivers/usb/chipidea/core.c > index 5075407..02929ee 100644 > --- a/drivers/usb/chipidea/core.c > +++ b/drivers/usb/chipidea/core.c > @@ -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) + > @@ -677,7 +670,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; > } > -- > 1.8.4.3 > > -- > To unsubscribe from this list: send the line "unsubscribe linux-usb" in > the body of a message to majordomo@xxxxxxxxxxxxxxx > More majordomo info at http://vger.kernel.org/majordomo-info.html > -- Best Regards, Peter Chen -- To unsubscribe from this list: send the line "unsubscribe linux-usb" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html