[PATCH 2/2] OMAP3: beagle xm: enable upto 800MHz OPP
Nishanth Menon
nm at ti.com
Thu Jan 6 07:24:34 EST 2011
Kevin Hilman wrote, on 01/05/2011 05:28 PM:
> Nishanth Menon<nm at ti.com> writes:
>
>> Beagle XM uses 3730 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.
>
> Isn't this common to any board using 3730 (or 3630?)
no it is not. only certain boards are capable of higher frequencies -
there is a procedure called PDN analysis and vmin search that needs to
be performed to guarentee this.
>
> IOW, what is Beagle specific about this?
beagle is one of the boards capable of higher frequencies.
>
> Kevin
>
>> 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>
>> ---
>> 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..0b99b80 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);
>> + r = -EINVAL;
>> + } else {
>> + /* 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);
>> + }
>> + }
>> +}
>> +
>> 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")
--
Regards,
Nishanth Menon
More information about the linux-arm-kernel
mailing list