Re: [PATCH 10/12] OMAP OPP: remove "initial terminators" from OPP lists

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Paul Walmsley <paul@xxxxxxxxx> writes:

> Now that the SRF and Smartreflex code uses accessor functions to interact
> with OPPs, the "initial terminators" can be removed.

Nice.

With the initial terminators gone, some assumptions in SRF have to be
changed too where SRF is directly indexing into the OPP table.

I'll fix that up in an updated version of my 'hide OPP details' series.

Kevin


> ---
>  arch/arm/plat-omap/opp.c |   36 ++++++++----------------------------
>  1 files changed, 8 insertions(+), 28 deletions(-)
>
> diff --git a/arch/arm/plat-omap/opp.c b/arch/arm/plat-omap/opp.c
> index 596e3ee..f651912 100644
> --- a/arch/arm/plat-omap/opp.c
> +++ b/arch/arm/plat-omap/opp.c
> @@ -53,15 +53,15 @@ unsigned long opp_get_freq(const struct omap_opp *opp)
>  struct omap_opp * __deprecated opp_find_by_opp_id(struct omap_opp *opps,
>  						  u8 opp_id)
>  {
> -	int i = 1;
> +	int i = 0;
>  
>  	if (!opps || !opp_id)
>  		return NULL;
>  
> -	/* The first entry is a dummy one, loop till we hit terminator */
>  	while (!OPP_TERM(&opps[i])) {
>  		if (opps[i].enabled && (opps[i].opp_id == opp_id))
>  			return &opps[i];
> +
>  		i++;
>  	}
>  
> @@ -76,7 +76,6 @@ int opp_get_opp_count(struct omap_opp *oppl)
>  		pr_err("%s: Invalid parameters being passed\n", __func__);
>  		return -EINVAL;
>  	}
> -	oppl++;			/* skip initial terminator */
>  	while (!OPP_TERM(oppl)) {
>  		if (oppl->enabled)
>  			n++;
> @@ -92,9 +91,7 @@ struct omap_opp *opp_find_freq_exact(struct omap_opp *oppl,
>  		pr_err("%s: Invalid parameters being passed\n", __func__);
>  		return ERR_PTR(-EINVAL);
>  	}
> -	/* skip initial terminator */
> -	if (OPP_TERM(oppl))
> -		oppl++;
> +
>  	while (!OPP_TERM(oppl)) {
>  		if ((oppl->rate == freq) && (oppl->enabled == enabled))
>  			break;
> @@ -111,10 +108,6 @@ struct omap_opp *opp_find_freq_ceil(struct omap_opp *oppl, unsigned long *freq)
>  		return ERR_PTR(-EINVAL);
>  	}
>  
> -	/* skip initial terminator */
> -	if (OPP_TERM(oppl))
> -		oppl++;
> -
>  	while (!OPP_TERM(oppl)) {
>  		if (oppl->enabled && oppl->rate >= *freq)
>  			break;
> @@ -139,10 +132,6 @@ struct omap_opp *opp_find_freq_floor(struct omap_opp *oppl, unsigned long *freq)
>  		return ERR_PTR(-EINVAL);
>  	}
>  
> -	/* skip initial terminator */
> -	if (OPP_TERM(oppl))
> -		oppl++;
> -
>  	while (!OPP_TERM(oppl)) {
>  		if (oppl->enabled) {
>  			if (oppl->rate > *freq)
> @@ -181,20 +170,16 @@ struct omap_opp *opp_add(struct omap_opp *oppl,
>  		pr_err("%s: Invalid params being passed\n", __func__);
>  		return ERR_PTR(-EINVAL);
>  	}
> -	/* need a start terminator.. */
> -	if (unlikely(!OPP_TERM(oppl))) {
> -		pr_err("%s: Expected a start terminator!!\n", __func__);
> -		return ERR_PTR(-EINVAL);
> -	}
> +
>  	n = 0;
>  	opp = oppl;
> -	opp++;
>  	while (!OPP_TERM(opp)) {
>  		n++;
>  		opp++;
>  	}
> +
>  	/* lets now reallocate memory */
> -	oppr = kmalloc(sizeof(struct omap_opp) * (n + 3), GFP_KERNEL);
> +	oppr = kmalloc(sizeof(struct omap_opp) * (n + 2), GFP_KERNEL);
>  	if (!oppr) {
>  		pr_err("%s: No memory for new opp array\n", __func__);
>  		return ERR_PTR(-ENOMEM);
> @@ -204,7 +189,7 @@ struct omap_opp *opp_add(struct omap_opp *oppl,
>  	opp = oppl;
>  	oppt = oppr;
>  	ins = 0;
> -	i = 0;
> +	i = 1;
>  	do {
>  		if (ins || opp->rate < opp_def->freq) {
>  			memcpy(oppt, opp, sizeof(struct omap_opp));
> @@ -249,17 +234,12 @@ struct omap_opp __init *opp_init_list(const struct omap_opp_def *opp_defs)
>  		t++;
>  	}
>  
> -	oppl = kmalloc(sizeof(struct omap_opp) * (n + 2), GFP_KERNEL);
> +	oppl = kmalloc(sizeof(struct omap_opp) * (n + 1), GFP_KERNEL);
>  	if (!oppl) {
>  		pr_err("%s: No memory for opp array\n", __func__);
>  		return ERR_PTR(-ENOMEM);
>  	}
>  	opp = oppl;
> -	/* Setup start terminator - SRF depends on this for indexing :( */
> -	opp->rate = 0;
> -	opp->enabled = 0;
> -	opp->u_volt = 0;
> -	opp++;
>  	while (n) {
>  		omap_opp_populate(opp, opp_defs);
>  		opp->opp_id = i;
>
>
> --
> 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

[Index of Archives]     [Linux Arm (vger)]     [ARM Kernel]     [ARM MSM]     [Linux Tegra]     [Linux WPAN Networking]     [Linux Wireless Networking]     [Maemo Users]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Yosemite Trails]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux