* Paul Walmsley <paul@xxxxxxxxx> [080718 11:22]: > > struct clockdomain contains a struct powerdomain *pwrdm and const char > *pwrdm_name. The pwrdm_name is only used at initialization to look up > the appropriate pwrdm pointer. Combining these into a union saves > about 100 bytes on 3430SDP. This patch should not cause any change in > kernel function. > > Boot-tested on 3430SDP ES2. Pushing today. Tony > Signed-off-by: Paul Walmsley <paul@xxxxxxxxx> > > size: > text data bss dec hex filename > 3391587 157104 107136 3655827 37c893 vmlinux.3430sdp.orig > 3391555 157032 107136 3655723 37c82b vmlinux.3430sdp > --- > > arch/arm/mach-omap2/clockdomain.c | 58 ++++++++++++++----------------- > arch/arm/mach-omap2/clockdomains.h | 54 +++++++++++++++-------------- > include/asm-arm/arch-omap/clockdomain.h | 22 +++++++----- > 3 files changed, 67 insertions(+), 67 deletions(-) > > diff --git a/arch/arm/mach-omap2/clockdomain.c b/arch/arm/mach-omap2/clockdomain.c > index 6e5f892..caa7992 100644 > --- a/arch/arm/mach-omap2/clockdomain.c > +++ b/arch/arm/mach-omap2/clockdomain.c > @@ -71,14 +71,14 @@ static void _autodep_lookup(struct clkdm_pwrdm_autodep *autodep) > if (!omap_chip_is(autodep->omap_chip)) > return; > > - pwrdm = pwrdm_lookup(autodep->pwrdm_name); > + pwrdm = pwrdm_lookup(autodep->pwrdm.name); > if (!pwrdm) { > pr_debug("clockdomain: _autodep_lookup: powerdomain %s " > - "does not exist\n", autodep->pwrdm_name); > + "does not exist\n", autodep->pwrdm.name); > WARN_ON(1); > return; > } > - autodep->pwrdm = pwrdm; > + autodep->pwrdm.ptr = pwrdm; > > return; > } > @@ -95,16 +95,13 @@ static void _clkdm_add_autodeps(struct clockdomain *clkdm) > { > struct clkdm_pwrdm_autodep *autodep; > > - for (autodep = autodeps; autodep->pwrdm_name; autodep++) { > - if (!autodep->pwrdm) > - continue; > - > + for (autodep = autodeps; autodep->pwrdm.ptr; autodep++) { > pr_debug("clockdomain: adding %s sleepdep/wkdep for " > - "pwrdm %s\n", autodep->pwrdm_name, > - clkdm->pwrdm->name); > + "pwrdm %s\n", autodep->pwrdm.ptr->name, > + clkdm->pwrdm.ptr->name); > > - pwrdm_add_sleepdep(clkdm->pwrdm, autodep->pwrdm); > - pwrdm_add_wkdep(clkdm->pwrdm, autodep->pwrdm); > + pwrdm_add_sleepdep(clkdm->pwrdm.ptr, autodep->pwrdm.ptr); > + pwrdm_add_wkdep(clkdm->pwrdm.ptr, autodep->pwrdm.ptr); > } > } > > @@ -120,16 +117,13 @@ static void _clkdm_del_autodeps(struct clockdomain *clkdm) > { > struct clkdm_pwrdm_autodep *autodep; > > - for (autodep = autodeps; autodep->pwrdm_name; autodep++) { > - if (!autodep->pwrdm) > - continue; > - > + for (autodep = autodeps; autodep->pwrdm.ptr; autodep++) { > pr_debug("clockdomain: removing %s sleepdep/wkdep for " > - "pwrdm %s\n", autodep->pwrdm_name, > - clkdm->pwrdm->name); > + "pwrdm %s\n", autodep->pwrdm.ptr->name, > + clkdm->pwrdm.ptr->name); > > - pwrdm_del_sleepdep(clkdm->pwrdm, autodep->pwrdm); > - pwrdm_del_wkdep(clkdm->pwrdm, autodep->pwrdm); > + pwrdm_del_sleepdep(clkdm->pwrdm.ptr, autodep->pwrdm.ptr); > + pwrdm_del_wkdep(clkdm->pwrdm.ptr, autodep->pwrdm.ptr); > } > } > > @@ -179,7 +173,7 @@ void clkdm_init(struct clockdomain **clkdms, > > autodeps = init_autodeps; > if (autodeps) > - for (autodep = autodeps; autodep->pwrdm_name; autodep++) > + for (autodep = autodeps; autodep->pwrdm.ptr; autodep++) > _autodep_lookup(autodep); > } > > @@ -202,13 +196,13 @@ int clkdm_register(struct clockdomain *clkdm) > if (!omap_chip_is(clkdm->omap_chip)) > return -EINVAL; > > - pwrdm = pwrdm_lookup(clkdm->pwrdm_name); > + pwrdm = pwrdm_lookup(clkdm->pwrdm.name); > if (!pwrdm) { > pr_debug("clockdomain: clkdm_register %s: powerdomain %s " > - "does not exist\n", clkdm->name, clkdm->pwrdm_name); > + "does not exist\n", clkdm->name, clkdm->pwrdm.name); > return -EINVAL; > } > - clkdm->pwrdm = pwrdm; > + clkdm->pwrdm.ptr = pwrdm; > > mutex_lock(&clkdm_mutex); > /* Verify that the clockdomain is not already registered */ > @@ -242,7 +236,7 @@ int clkdm_unregister(struct clockdomain *clkdm) > if (!clkdm) > return -EINVAL; > > - pwrdm_del_clkdm(clkdm->pwrdm, clkdm); > + pwrdm_del_clkdm(clkdm->pwrdm.ptr, clkdm); > > mutex_lock(&clkdm_mutex); > list_del(&clkdm->node); > @@ -327,7 +321,7 @@ struct powerdomain *clkdm_get_pwrdm(struct clockdomain *clkdm) > if (!clkdm) > return NULL; > > - return clkdm->pwrdm; > + return clkdm->pwrdm.ptr; > } > > > @@ -348,7 +342,7 @@ static int omap2_clkdm_clktrctrl_read(struct clockdomain *clkdm) > if (!clkdm) > return -EINVAL; > > - v = cm_read_mod_reg(clkdm->pwrdm->prcm_offs, CM_CLKSTCTRL); > + v = cm_read_mod_reg(clkdm->pwrdm.ptr->prcm_offs, CM_CLKSTCTRL); > v &= clkdm->clktrctrl_mask; > v >>= __ffs(clkdm->clktrctrl_mask); > > @@ -380,7 +374,7 @@ int omap2_clkdm_sleep(struct clockdomain *clkdm) > if (cpu_is_omap24xx()) { > > cm_set_mod_reg_bits(OMAP24XX_FORCESTATE, > - clkdm->pwrdm->prcm_offs, PM_PWSTCTRL); > + clkdm->pwrdm.ptr->prcm_offs, PM_PWSTCTRL); > > } else if (cpu_is_omap34xx()) { > > @@ -388,7 +382,7 @@ int omap2_clkdm_sleep(struct clockdomain *clkdm) > __ffs(clkdm->clktrctrl_mask)); > > cm_rmw_mod_reg_bits(clkdm->clktrctrl_mask, v, > - clkdm->pwrdm->prcm_offs, CM_CLKSTCTRL); > + clkdm->pwrdm.ptr->prcm_offs, CM_CLKSTCTRL); > > } else { > BUG(); > @@ -422,7 +416,7 @@ int omap2_clkdm_wakeup(struct clockdomain *clkdm) > if (cpu_is_omap24xx()) { > > cm_clear_mod_reg_bits(OMAP24XX_FORCESTATE, > - clkdm->pwrdm->prcm_offs, PM_PWSTCTRL); > + clkdm->pwrdm.ptr->prcm_offs, PM_PWSTCTRL); > > } else if (cpu_is_omap34xx()) { > > @@ -430,7 +424,7 @@ int omap2_clkdm_wakeup(struct clockdomain *clkdm) > __ffs(clkdm->clktrctrl_mask)); > > cm_rmw_mod_reg_bits(clkdm->clktrctrl_mask, v, > - clkdm->pwrdm->prcm_offs, CM_CLKSTCTRL); > + clkdm->pwrdm.ptr->prcm_offs, CM_CLKSTCTRL); > > } else { > BUG(); > @@ -478,7 +472,7 @@ void omap2_clkdm_allow_idle(struct clockdomain *clkdm) > > cm_rmw_mod_reg_bits(clkdm->clktrctrl_mask, > v << __ffs(clkdm->clktrctrl_mask), > - clkdm->pwrdm->prcm_offs, > + clkdm->pwrdm.ptr->prcm_offs, > CM_CLKSTCTRL); > } > > @@ -516,7 +510,7 @@ void omap2_clkdm_deny_idle(struct clockdomain *clkdm) > > cm_rmw_mod_reg_bits(clkdm->clktrctrl_mask, > v << __ffs(clkdm->clktrctrl_mask), > - clkdm->pwrdm->prcm_offs, CM_CLKSTCTRL); > + clkdm->pwrdm.ptr->prcm_offs, CM_CLKSTCTRL); > > if (atomic_read(&clkdm->usecount) > 0) > _clkdm_del_autodeps(clkdm); > diff --git a/arch/arm/mach-omap2/clockdomains.h b/arch/arm/mach-omap2/clockdomains.h > index b5d3244..8559080 100644 > --- a/arch/arm/mach-omap2/clockdomains.h > +++ b/arch/arm/mach-omap2/clockdomains.h > @@ -19,7 +19,7 @@ > /* This is an implicit clockdomain - it is never defined as such in TRM */ > static struct clockdomain wkup_clkdm = { > .name = "wkup_clkdm", > - .pwrdm_name = "wkup_pwrdm", > + .pwrdm = { .name = "wkup_pwrdm" }, > .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP24XX | CHIP_IS_OMAP3430), > }; > > @@ -31,7 +31,7 @@ static struct clockdomain wkup_clkdm = { > > static struct clockdomain mpu_2420_clkdm = { > .name = "mpu_clkdm", > - .pwrdm_name = "mpu_pwrdm", > + .pwrdm = { .name = "mpu_pwrdm" }, > .flags = CLKDM_CAN_HWSUP, > .clktrctrl_mask = OMAP24XX_AUTOSTATE_MPU_MASK, > .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP2420), > @@ -39,7 +39,7 @@ static struct clockdomain mpu_2420_clkdm = { > > static struct clockdomain iva1_2420_clkdm = { > .name = "iva1_clkdm", > - .pwrdm_name = "dsp_pwrdm", > + .pwrdm = { .name = "dsp_pwrdm" }, > .flags = CLKDM_CAN_HWSUP_SWSUP, > .clktrctrl_mask = OMAP2420_AUTOSTATE_IVA_MASK, > .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP2420), > @@ -56,7 +56,7 @@ static struct clockdomain iva1_2420_clkdm = { > > static struct clockdomain mpu_2430_clkdm = { > .name = "mpu_clkdm", > - .pwrdm_name = "mpu_pwrdm", > + .pwrdm = { .name = "mpu_pwrdm" }, > .flags = CLKDM_CAN_HWSUP_SWSUP, > .clktrctrl_mask = OMAP24XX_AUTOSTATE_MPU_MASK, > .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP2430), > @@ -64,7 +64,7 @@ static struct clockdomain mpu_2430_clkdm = { > > static struct clockdomain mdm_clkdm = { > .name = "mdm_clkdm", > - .pwrdm_name = "mdm_pwrdm", > + .pwrdm = { .name = "mdm_pwrdm" }, > .flags = CLKDM_CAN_HWSUP_SWSUP, > .clktrctrl_mask = OMAP2430_AUTOSTATE_MDM_MASK, > .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP2430), > @@ -81,7 +81,7 @@ static struct clockdomain mdm_clkdm = { > > static struct clockdomain dsp_clkdm = { > .name = "dsp_clkdm", > - .pwrdm_name = "dsp_pwrdm", > + .pwrdm = { .name = "dsp_pwrdm" }, > .flags = CLKDM_CAN_HWSUP_SWSUP, > .clktrctrl_mask = OMAP24XX_AUTOSTATE_DSP_MASK, > .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP24XX), > @@ -89,7 +89,7 @@ static struct clockdomain dsp_clkdm = { > > static struct clockdomain gfx_24xx_clkdm = { > .name = "gfx_clkdm", > - .pwrdm_name = "gfx_pwrdm", > + .pwrdm = { .name = "gfx_pwrdm" }, > .flags = CLKDM_CAN_HWSUP_SWSUP, > .clktrctrl_mask = OMAP24XX_AUTOSTATE_GFX_MASK, > .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP24XX), > @@ -97,7 +97,7 @@ static struct clockdomain gfx_24xx_clkdm = { > > static struct clockdomain core_l3_24xx_clkdm = { > .name = "core_l3_clkdm", > - .pwrdm_name = "core_pwrdm", > + .pwrdm = { .name = "core_pwrdm" }, > .flags = CLKDM_CAN_HWSUP, > .clktrctrl_mask = OMAP24XX_AUTOSTATE_L3_MASK, > .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP24XX), > @@ -105,7 +105,7 @@ static struct clockdomain core_l3_24xx_clkdm = { > > static struct clockdomain core_l4_24xx_clkdm = { > .name = "core_l4_clkdm", > - .pwrdm_name = "core_pwrdm", > + .pwrdm = { .name = "core_pwrdm" }, > .flags = CLKDM_CAN_HWSUP, > .clktrctrl_mask = OMAP24XX_AUTOSTATE_L4_MASK, > .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP24XX), > @@ -113,7 +113,7 @@ static struct clockdomain core_l4_24xx_clkdm = { > > static struct clockdomain dss_24xx_clkdm = { > .name = "dss_clkdm", > - .pwrdm_name = "core_pwrdm", > + .pwrdm = { .name = "core_pwrdm" }, > .flags = CLKDM_CAN_HWSUP, > .clktrctrl_mask = OMAP24XX_AUTOSTATE_DSS_MASK, > .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP24XX), > @@ -130,7 +130,7 @@ static struct clockdomain dss_24xx_clkdm = { > > static struct clockdomain mpu_34xx_clkdm = { > .name = "mpu_clkdm", > - .pwrdm_name = "mpu_pwrdm", > + .pwrdm = { .name = "mpu_pwrdm" }, > .flags = CLKDM_CAN_HWSUP | CLKDM_CAN_FORCE_WAKEUP, > .clktrctrl_mask = OMAP3430_CLKTRCTRL_MPU_MASK, > .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP3430), > @@ -138,7 +138,7 @@ static struct clockdomain mpu_34xx_clkdm = { > > static struct clockdomain neon_clkdm = { > .name = "neon_clkdm", > - .pwrdm_name = "neon_pwrdm", > + .pwrdm = { .name = "neon_pwrdm" }, > .flags = CLKDM_CAN_HWSUP_SWSUP, > .clktrctrl_mask = OMAP3430_CLKTRCTRL_NEON_MASK, > .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP3430), > @@ -146,7 +146,7 @@ static struct clockdomain neon_clkdm = { > > static struct clockdomain iva2_clkdm = { > .name = "iva2_clkdm", > - .pwrdm_name = "iva2_pwrdm", > + .pwrdm = { .name = "iva2_pwrdm" }, > .flags = CLKDM_CAN_HWSUP_SWSUP, > .clktrctrl_mask = OMAP3430_CLKTRCTRL_IVA2_MASK, > .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP3430), > @@ -154,7 +154,7 @@ static struct clockdomain iva2_clkdm = { > > static struct clockdomain gfx_3430es1_clkdm = { > .name = "gfx_clkdm", > - .pwrdm_name = "gfx_pwrdm", > + .pwrdm = { .name = "gfx_pwrdm" }, > .flags = CLKDM_CAN_HWSUP_SWSUP, > .clktrctrl_mask = OMAP3430ES1_CLKTRCTRL_GFX_MASK, > .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP3430ES1), > @@ -162,7 +162,7 @@ static struct clockdomain gfx_3430es1_clkdm = { > > static struct clockdomain sgx_clkdm = { > .name = "sgx_clkdm", > - .pwrdm_name = "sgx_pwrdm", > + .pwrdm = { .name = "sgx_pwrdm" }, > .flags = CLKDM_CAN_HWSUP_SWSUP, > .clktrctrl_mask = OMAP3430ES2_CLKTRCTRL_SGX_MASK, > .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP3430ES2), > @@ -177,7 +177,7 @@ static struct clockdomain sgx_clkdm = { > */ > static struct clockdomain d2d_clkdm = { > .name = "d2d_clkdm", > - .pwrdm_name = "core_pwrdm", > + .pwrdm = { .name = "core_pwrdm" }, > .flags = CLKDM_CAN_HWSUP, > .clktrctrl_mask = OMAP3430ES1_CLKTRCTRL_D2D_MASK, > .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP3430), > @@ -185,7 +185,7 @@ static struct clockdomain d2d_clkdm = { > > static struct clockdomain core_l3_34xx_clkdm = { > .name = "core_l3_clkdm", > - .pwrdm_name = "core_pwrdm", > + .pwrdm = { .name = "core_pwrdm" }, > .flags = CLKDM_CAN_HWSUP, > .clktrctrl_mask = OMAP3430_CLKTRCTRL_L3_MASK, > .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP3430), > @@ -193,7 +193,7 @@ static struct clockdomain core_l3_34xx_clkdm = { > > static struct clockdomain core_l4_34xx_clkdm = { > .name = "core_l4_clkdm", > - .pwrdm_name = "core_pwrdm", > + .pwrdm = { .name = "core_pwrdm" }, > .flags = CLKDM_CAN_HWSUP, > .clktrctrl_mask = OMAP3430_CLKTRCTRL_L4_MASK, > .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP3430), > @@ -201,7 +201,7 @@ static struct clockdomain core_l4_34xx_clkdm = { > > static struct clockdomain dss_34xx_clkdm = { > .name = "dss_clkdm", > - .pwrdm_name = "dss_pwrdm", > + .pwrdm = { .name = "dss_pwrdm" }, > .flags = CLKDM_CAN_HWSUP_SWSUP, > .clktrctrl_mask = OMAP3430_CLKTRCTRL_DSS_MASK, > .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP3430), > @@ -209,7 +209,7 @@ static struct clockdomain dss_34xx_clkdm = { > > static struct clockdomain cam_clkdm = { > .name = "cam_clkdm", > - .pwrdm_name = "cam_pwrdm", > + .pwrdm = { .name = "cam_pwrdm" }, > .flags = CLKDM_CAN_HWSUP_SWSUP, > .clktrctrl_mask = OMAP3430_CLKTRCTRL_CAM_MASK, > .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP3430), > @@ -217,7 +217,7 @@ static struct clockdomain cam_clkdm = { > > static struct clockdomain usbhost_clkdm = { > .name = "usbhost_clkdm", > - .pwrdm_name = "usbhost_pwrdm", > + .pwrdm = { .name = "usbhost_pwrdm" }, > .flags = CLKDM_CAN_HWSUP_SWSUP, > .clktrctrl_mask = OMAP3430ES2_CLKTRCTRL_USBHOST_MASK, > .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP3430ES2), > @@ -225,7 +225,7 @@ static struct clockdomain usbhost_clkdm = { > > static struct clockdomain per_clkdm = { > .name = "per_clkdm", > - .pwrdm_name = "per_pwrdm", > + .pwrdm = { .name = "per_pwrdm" }, > .flags = CLKDM_CAN_HWSUP_SWSUP, > .clktrctrl_mask = OMAP3430_CLKTRCTRL_PER_MASK, > .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP3430), > @@ -233,7 +233,7 @@ static struct clockdomain per_clkdm = { > > static struct clockdomain emu_clkdm = { > .name = "emu_clkdm", > - .pwrdm_name = "emu_pwrdm", > + .pwrdm = { .name = "emu_pwrdm" }, > .flags = CLKDM_CAN_ENABLE_AUTO | CLKDM_CAN_SWSUP, > .clktrctrl_mask = OMAP3430_CLKTRCTRL_EMU_MASK, > .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP3430), > @@ -247,14 +247,16 @@ static struct clockdomain emu_clkdm = { > > static struct clkdm_pwrdm_autodep clkdm_pwrdm_autodeps[] = { > { > - .pwrdm_name = "mpu_pwrdm", > + .pwrdm = { .name = "mpu_pwrdm" }, > .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP3430) > }, > { > - .pwrdm_name = "iva2_pwrdm", > + .pwrdm = { .name = "iva2_pwrdm" }, > .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP3430) > }, > - { NULL } > + { > + .pwrdm = { .name = NULL }, > + } > }; > > /* > diff --git a/include/asm-arm/arch-omap/clockdomain.h b/include/asm-arm/arch-omap/clockdomain.h > index d2a4551..b58bb73 100644 > --- a/include/asm-arm/arch-omap/clockdomain.h > +++ b/include/asm-arm/arch-omap/clockdomain.h > @@ -48,11 +48,13 @@ > */ > struct clkdm_pwrdm_autodep { > > - /* Name of the powerdomain to add a wkdep/sleepdep on */ > - const char *pwrdm_name; > + union { > + /* Name of the powerdomain to add a wkdep/sleepdep on */ > + const char *name; > > - /* Powerdomain pointer (looked up at clkdm_init() time) */ > - struct powerdomain *pwrdm; > + /* Powerdomain pointer (looked up at clkdm_init() time) */ > + struct powerdomain *ptr; > + } pwrdm; > > /* OMAP chip types that this clockdomain dep is valid on */ > const struct omap_chip_id omap_chip; > @@ -64,8 +66,13 @@ struct clockdomain { > /* Clockdomain name */ > const char *name; > > - /* Powerdomain enclosing this clockdomain */ > - const char *pwrdm_name; > + union { > + /* Powerdomain enclosing this clockdomain */ > + const char *name; > + > + /* Powerdomain pointer assigned at clkdm_register() */ > + struct powerdomain *ptr; > + } pwrdm; > > /* CLKTRCTRL/AUTOSTATE field mask in CM_CLKSTCTRL reg */ > const u16 clktrctrl_mask; > @@ -79,9 +86,6 @@ struct clockdomain { > /* Usecount tracking */ > atomic_t usecount; > > - /* Powerdomain pointer assigned at clkdm_register() */ > - struct powerdomain *pwrdm; > - > struct list_head node; > > }; > -- > To unsubscribe from this list: send the line "unsubscribe linux-omap" in > the body of a message to majordomo@xxxxxxxxxxxxxxx > More majordomo info at http://vger.kernel.org/majordomo-info.html -- To unsubscribe from this list: send the line "unsubscribe linux-omap" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html