[PATCH v2 2/2] OMAP3: beagle xm: enable upto 800MHz OPP

Kevin Hilman khilman at ti.com
Tue Feb 1 17:01:22 EST 2011


Nishanth Menon <nm at ti.com> writes:

> OMP3630 silicon can enable higher frequencies only depending on the board
> characteristics meeting the recommended standards, and has to be selectively
> toggled.
>
> Beagle XM uses 3730 variant and the board design allows enabling 800MHz and
> 1GHz OPPs. However, We need Smart reflex class 1.5 and ABB to enable 1GHz
> safely.  For the moment, we tweak the default table to allow for 800Mhz OPP
> usage.
>
> Reported-by: Koen Kooi <koen at beagleboard.org>
> Tested-by: Koen Kooi <koen at beagleboard.org>
>
> Signed-off-by: Nishanth Menon <nm at ti.com>

Thanks, queuing for 2.6.39 (branch: for_2.6.39/pm-misc)

Kevin

> ---
> v2: fixed issue when !mh || !dh, updated commit message to point on rationale
>     for board specific tweaking
> v1: http://marc.info/?t=129426060900008&r=1&w=2
>  arch/arm/mach-omap2/board-omap3beagle.c |   50 +++++++++++++++++++++++++++++++
>  1 files changed, 50 insertions(+), 0 deletions(-)
>
> diff --git a/arch/arm/mach-omap2/board-omap3beagle.c b/arch/arm/mach-omap2/board-omap3beagle.c
> index 6c12760..7dc0397 100644
> --- a/arch/arm/mach-omap2/board-omap3beagle.c
> +++ b/arch/arm/mach-omap2/board-omap3beagle.c
> @@ -23,6 +23,7 @@
>  #include <linux/gpio.h>
>  #include <linux/input.h>
>  #include <linux/gpio_keys.h>
> +#include <linux/opp.h>
>  
>  #include <linux/mtd/mtd.h>
>  #include <linux/mtd/partitions.h>
> @@ -44,10 +45,12 @@
>  #include <plat/gpmc.h>
>  #include <plat/nand.h>
>  #include <plat/usb.h>
> +#include <plat/omap_device.h>
>  
>  #include "mux.h"
>  #include "hsmmc.h"
>  #include "timer-gp.h"
> +#include "pm.h"
>  
>  #define NAND_BLOCK_SIZE		SZ_128K
>  
> @@ -556,6 +559,52 @@ static struct omap_musb_board_data musb_board_data = {
>  	.power			= 100,
>  };
>  
> +static void __init beagle_opp_init(void)
> +{
> +	int r = 0;
> +
> +	/* Initialize the omap3 opp table */
> +	if (omap3_opp_init()) {
> +		pr_err("%s: opp default init failed\n", __func__);
> +		return;
> +	}
> +
> +	/* Custom OPP enabled for XM */
> +	if (omap3_beagle_get_rev() == OMAP3BEAGLE_BOARD_XM) {
> +		struct omap_hwmod *mh = omap_hwmod_lookup("mpu");
> +		struct omap_hwmod *dh = omap_hwmod_lookup("iva");
> +		struct device *dev;
> +
> +		if (!mh || !dh) {
> +			pr_err("%s: Aiee.. no mpu/dsp devices? %p %p\n",
> +				__func__, mh, dh);
> +			return;
> +		}
> +		/* Enable MPU 1GHz and lower opps */
> +		dev = &mh->od->pdev.dev;
> +		r = opp_enable(dev, 800000000);
> +		/* TODO: MPU 1GHz needs SR and ABB */
> +
> +		/* Enable IVA 800MHz and lower opps */
> +		dev = &dh->od->pdev.dev;
> +		r |= opp_enable(dev, 660000000);
> +		/* TODO: DSP 800MHz needs SR and ABB */
> +		if (r) {
> +			pr_err("%s: failed to enable higher opp %d\n",
> +				__func__, r);
> +			/*
> +			 * Cleanup - disable the higher freqs - we dont care
> +			 * about the results
> +			 */
> +			dev = &mh->od->pdev.dev;
> +			opp_disable(dev, 800000000);
> +			dev = &dh->od->pdev.dev;
> +			opp_disable(dev, 660000000);
> +		}
> +	}
> +	return;
> +}
> +
>  static void __init omap3_beagle_init(void)
>  {
>  	omap3_mux_init(board_mux, OMAP_PACKAGE_CBB);
> @@ -579,6 +628,7 @@ static void __init omap3_beagle_init(void)
>  	omap_mux_init_signal("sdrc_cke1", OMAP_PIN_OUTPUT);
>  
>  	beagle_display_init();
> +	beagle_opp_init();
>  }
>  
>  MACHINE_START(OMAP3_BEAGLE, "OMAP3 Beagle Board")



More information about the linux-arm-kernel mailing list