What's new
DroidForums.net | Android Forum & News

This is a sample guest message. Register a free account today to become a member! Once signed in, you'll be able to participate on this site by adding your own topics and posts, as well as connect with other members through your own private inbox!

unlocking the bootloader?

i mean while the bounty would be nice, this is not my main concern. I just want cm7 to work well. So we need to be able to flash kernels... That is it. CM7 is friggin awesome and would be the best thing for our phones it possible.
 
i mean while the bounty would be nice, this is not my main concern. I just want cm7 to work well. So we need to be able to flash kernels... That is it. CM7 is friggin awesome and would be the best thing for our phones it possible.

+1

Sent from my DROID BIONIC using Tapatalk
 
omg this def just got over my head, unless i can find in the source where this value is set in a function (which i am going to search high and low for) i am at a stand still. Maybe you might be able to help here prime. I just dissasembled the function call and its just wayyy over my head i have no idea what i am looking at. I can read C but this is rediculous.
omap_dev_type.elf: file format elf32-littlearm


Disassembly of section .data:

c0028f60 <_binary_omap_dev_type_start>:
c0028f60: 4f544f4d svcmi 0x00544f4d
c0028f64: 4e495250 mcrmi 2, 2, r5, cr9, cr0, {2}
c0028f68: 70612e54 rsbvc r2, r1, r4, asr lr
c0028f6c: 0000006b andeq r0, r0, fp, rrx
c0028f70: 000001d3 ldrdeq r0, [r0], -r3
c0028f74: 01080010 tsteq r8, r0, lsl r0
c0028f78: 2e6b7453 mcrcs 4, 3, r7, cr11, cr3, {2}
c0028f7c: 7865646f stmdavc r5!, {r0, r1, r2, r3, r5, r6, sl, sp, lr}^
c0028f80: 0000016a andeq r0, r0, sl, ror #2
c0028f84: 0113001c tsteq r3, ip, lsl r0
c0028f88: 61636f4c cmnvs r3, ip, asr #30
c0028f8c: 6e6f6974 mcrvs 9, 3, r6, cr15, cr4, {3}
c0028f90: 736e6f43 cmnvc lr, #268 ; 0x10c
c0028f94: 2e746e65 cdpcs 14, 7, cr6, cr4, cr5, {3}
c0028f98: 006b7061 rsbeq r7, fp, r1, rrx
c0028f9c: 0000134a andeq r1, r0, sl, asr #6
c0028fa0: 010d0018 tsteq sp, r8, lsl r0
c0028fa4: 72756c42 rsbsvc r6, r5, #16896 ; 0x4200
c0028fa8: 6e6f6850 mcrvs 8, 3, r6, cr15, cr0, {2}
c0028fac: 70612e65 rsbvc r2, r1, r5, ror #28
c0028fb0: 0000006b andeq r0, r0, fp, rrx
c0028fb4: 00000c05 andeq r0, r0, r5, lsl #24
c0028fb8: 010a0014 tsteq sl, r4, lsl r0
c0028fbc: 646e694b strbtvs r6, [lr], #-2379 ; 0xfffff6b5
c0028fc0: 612e656c teqvs lr, ip, ror #10
c0028fc4: 00006b70 andeq r6, r0, r0, ror fp
c0028fc8: 00001338 andeq r1, r0, r8, lsr r3
c0028fcc: 01190024 tsteq r9, r4, lsr #32
c0028fd0: 72756c42 rsbsvc r6, r5, #16896 ; 0x4200
c0028fd4: 656c6143 strbvs r6, [ip, #-323]! ; 0xfffffebd
c0028fd8: 7261646e rsbvc r6, r1, #1845493760 ; 0x6e000000
c0028fdc: 766f7250 ; <UNDEFINED> instruction: 0x766f7250
c0028fe0: 72656469 rsbvc r6, r5, #1761607680 ; 0x69000000
c0028fe4: 65646f2e strbvs r6, [r4, #-3886]! ; 0xfffff0d2
c0028fe8: 00000078 andeq r0, r0, r8, ror r0
c0028fec: 00000193 muleq r0, r3, r1
c0028ff0: 0113001c tsteq r3, ip, lsl r0
c0028ff4: 50414d4f subpl r4, r1, pc, asr #26
c0028ff8: 69766f72 ldmdbvs r6!, {r1, r4, r5, r6, r8, r9, sl, fp, sp, lr}^
c0028ffc: 6e6f6973 mcrvs 9, 3, r6, cr15, cr3, {3}
c0029000: 2e676e69 cdpcs 14, 6, cr6, cr7, cr9, {3}
c0029004: 006b7061 rsbeq r7, fp, r1, rrx

Any thoughts?
 
bingo found the function! Basically it calls another function omap_type and gets a value of 1 or 2 from it which then sets the string in proc. so we need to hijack at the point of omap_type and return 2 instead of 1

edit: im going to work on this more tomorrow. Im tired.
 
Last edited:
Goodluck man!This is the only way we can go back to its orig kernel..wish we can unlock the bootloader...unlocking it...we can do more:)....and a lot lot more.:biggrin:
 
bingo found the function! Basically it calls another function omap_type and gets a value of 1 or 2 from it which then sets the string in proc. so we need to hijack at the point of omap_type and return 2 instead of 1

edit: im going to work on this more tomorrow. Im tired.

Thanks again for all ur hard work. See they got overclock working ovrr at rootz? Running 1.5ghz... smushing rzr rezound AND Overclocked sgIIs... no problem :)

Sent from my DROID BIONIC using Tapatalk
 
update: i gotta install debian on my pc here so thats going to take a little time that way i can go through the source code for the kernel (its where the functions i need to hijack are) once i can get the platform built and dissasembled i can go from there. bear with me guys im trying. as of right now i am just working on the OC then i will start on the unlocked bootloader. if anyone wants to try to do what i am doing here follow milestone overclock wiki dissasembly instructions. the function is different on our phones so it is going to take a little longer and anyone with C++ knowledge should be able to break apart the coding for the bionic.
Edit: also with tday tomorro and im getting a tat today dont hold your breath just yet. pm me if you think you can understand what they are saying in the dissasembly and ill let you know how far i have gotten.

Tat on my painted brother, lol

Sent from my DROID BIONIC using Tapatalk
 
Thanks again for all ur hard work. See they got overclock working ovrr at rootz? Running 1.5ghz... smushing rzr rezound AND Overclocked sgIIs... no problem :)

Sent from my DROID BIONIC using Tapatalk[/QUOT


Hey ex0rcist, can you post a link to rootz, that I might further my knowledge base : grinnin:


Sent from my DROID BIONIC using Tapatalk
 
Good work on the disassembly, I do not see the call in what you posted. The numbers to the left are memory addresses, the next are 'jumps' to other locations, finally there are the instructions on memory manipulation of the location.

I didn't know there was a binary to omap_dev_type but being there is the source is where the answer lies. I have the sources but have yet to decompress all of it.
 
ok so if you have not gotten it uncompressed and instead of you finding it yourself ill just post it here
/*
* Copyright (C) 2009 Motorola, Inc.
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*
* Adds ability to program periodic interrupts from user space that
* can wake the phone out of low power modes.
*
*/

#include <linux/module.h>
#include <linux/types.h>
#include <linux/kernel.h>
#include <linux/miscdevice.h>
#include <linux/init.h>
#include <linux/platform_device.h>
#include <linux/fs.h>
#include <plat/cpu.h>
#include <linux/proc_fs.h>
#include <linux/semaphore.h>
#include <linux/omap_dev_type.h>

#define OMAP_DEVICE_TYPE_HS_STRING "HS"
#define OMAP_DEVICE_TYPE_NS_STRING "NS"

static struct semaphore proc_read_lock;

static int omap_device_type_ioctl(struct inode *inode, struct file *filp,
unsigned int cmd, unsigned long arg)
{
int ret;
int dev_type;
switch (cmd) {
case OMAP_GET_DEVICE_TYPE_IOCTL:
dev_type = omap_type();
printk(KERN_INFO "Device Type : %d\n", dev_type);
ret = dev_type;
break;
default:
printk(KERN_ERR"Invalid IOCTL Command\n");
ret = -EINVAL;
}
return ret;
}

static int omap_device_type_open(struct inode *inode, struct file *file)
{
return 0;
}

static int omap_device_type_release(struct inode *inode, struct file *file)
{
return 0;
}

static struct file_operations omap_device_type_fops = {
.owner = THIS_MODULE,
.ioctl = omap_device_type_ioctl,
.open = omap_device_type_open,
.release = omap_device_type_release,
};

static struct miscdevice omap_device_type_miscdrv = {
.minor = MISC_DYNAMIC_MINOR,
.name = "omap_dev_type",
.fops = &omap_device_type_fops,
};

int omap_device_type_proc_read(char *buf, char **start, off_t offset, int count,
int *eof, void *data)
{
int len = 0;
int type = 0;
char *dev_type = NULL;

if (down_interruptible(&proc_read_lock))
return -ERESTARTSYS;

switch (omap_type()) {
case OMAP_DEVICE_TYPE_HS:
dev_type = OMAP_DEVICE_TYPE_HS_STRING;
break;
case OMAP_DEVICE_TYPE_NS:
dev_type = OMAP_DEVICE_TYPE_NS_STRING;
break;
default:
dev_type = "Unknown";
}

len += sprintf(buf, "OMAP Device Type :%s\n", dev_type);
up(&proc_read_lock);

return len;
}

static int __init omap_device_type_init(void)
{
int ret;
struct proc_dir_entry *entry;

ret = misc_register(&omap_device_type_miscdrv);
if (ret < 0) {
printk(KERN_ERR"Error registering omap_dev_type driver\n");
goto error;
}

entry = create_proc_read_entry("omap_dev_type", 0 , NULL,
omap_device_type_proc_read, NULL);

if (!entry) {
printk(KERN_ERR"Error creating omep_dev_type proc entry\n");
ret = -1;
goto unregister_driver;
}

sema_init(&proc_read_lock, 1);
return 0;

unregister_driver:
misc_deregister(&omap_device_type_miscdrv);
error:
return ret;
}


static void __exit omap_device_type_exit(void)
{
remove_proc_entry("omap_dev_type", NULL);
misc_deregister(&omap_device_type_miscdrv);
}

module_init(omap_device_type_init);
module_exit(omap_device_type_exit);

MODULE_AUTHOR("Motorola");
MODULE_LICENSE("GPL")
MODULE_DESCRIPTION("Motorola OMAP Device Type");

/*
* Copyright (C) 2009 Motorola, Inc.
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License version 2 as
* published by the Free Software Foundation.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
* 02111-1307, USA
*/

#ifndef __LINUX_OMAP_DEVICE_TYPE_H__
#define __LINUX_OMAP_DEVICE_TYPE_H__

#define OMAP_DEVICE_TYPE_DRV_NAME "omap_dev_type"

/* below enum values are defined based on the return value of
* omap_type function
*/
enum {
OMAP_DEVICE_TYPE_NS = 1,
OMAP_DEVICE_TYPE_HS = 2,
OMAP_DEVICE_TYPE_INVALID,
};

#define OMAP_GET_DEVICE_TYPE_IOCTL 0x0001

#endif
and last but not least the place where omap_type originates
/*
* arch/arm/plat-omap/include/mach/cpu.h
*
* OMAP cpu type detection
*
* Copyright (C) 2004, 2008 Nokia Corporation
*
* Copyright (C) 2009 Texas Instruments.
*
* Written by Tony Lindgren <[email protected]>
*
* Added OMAP4 specific defines - Santosh Shilimkar<[email protected]>
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*
*/

#ifndef __ASM_ARCH_OMAP_CPU_H
#define __ASM_ARCH_OMAP_CPU_H

#include <linux/bitops.h>
#include <plat/multi.h>

/*
* Omap device type i.e. EMU/HS/TST/GP/BAD
*/
#define OMAP2_DEVICE_TYPE_TEST 0
#define OMAP2_DEVICE_TYPE_EMU 1
#define OMAP2_DEVICE_TYPE_SEC 2
#define OMAP2_DEVICE_TYPE_GP 3
#define OMAP2_DEVICE_TYPE_BAD 4

int omap_type(void);

struct omap_chip_id {
u16 oc;
u8 type;
};

#define OMAP_CHIP_INIT(x) { .oc = x }

/*
* omap_rev bits:
* CPU id bits (0730, 1510, 1710, 2422...) [31:16]
* CPU revision (See _REV_ defined in cpu.h) [15:08]
* CPU class bits (15xx, 16xx, 24xx, 34xx...) [07:00]
*/
unsigned int omap_rev(void);

/*
* Define CPU revision bits
*
* Verbose meaning of the revision bits may be different for a silicon
* family. This difference can be handled separately.
*/
#define OMAP_REVBITS_00 0x00
#define OMAP_REVBITS_01 0x01
#define OMAP_REVBITS_02 0x02
#define OMAP_REVBITS_10 0x10
#define OMAP_REVBITS_20 0x20
#define OMAP_REVBITS_30 0x30
#define OMAP_REVBITS_40 0x40

/*
* Get the CPU revision for OMAP devices
*/
#define GET_OMAP_REVISION() ((omap_rev() >> 8) & 0xff)

/*
* Macros to group OMAP into cpu classes.
* These can be used in most places.
* cpu_is_omap7xx(): True for OMAP730, OMAP850
* cpu_is_omap15xx(): True for OMAP1510, OMAP5910 and OMAP310
* cpu_is_omap16xx(): True for OMAP1610, OMAP5912 and OMAP1710
* cpu_is_omap24xx(): True for OMAP2420, OMAP2422, OMAP2423, OMAP2430
* cpu_is_omap242x(): True for OMAP2420, OMAP2422, OMAP2423
* cpu_is_omap243x(): True for OMAP2430
* cpu_is_omap343x(): True for OMAP3430
* cpu_is_omap443x(): True for OMAP4430
*/
#define GET_OMAP_CLASS (omap_rev() & 0xff)

#define IS_OMAP_CLASS(class, id) \
static inline int is_omap ##class (void) \
{ \
return (GET_OMAP_CLASS == (id)) ? 1 : 0; \
}

#define GET_OMAP_SUBCLASS ((omap_rev() >> 20) & 0x0fff)

#define IS_OMAP_SUBCLASS(subclass, id) \
static inline int is_omap ##subclass (void) \
{ \
return (GET_OMAP_SUBCLASS == (id)) ? 1 : 0; \
}

IS_OMAP_CLASS(7xx, 0x07)
IS_OMAP_CLASS(15xx, 0x15)
IS_OMAP_CLASS(16xx, 0x16)
IS_OMAP_CLASS(24xx, 0x24)
IS_OMAP_CLASS(34xx, 0x34)
IS_OMAP_CLASS(44xx, 0x44)

IS_OMAP_SUBCLASS(242x, 0x242)
IS_OMAP_SUBCLASS(243x, 0x243)
IS_OMAP_SUBCLASS(343x, 0x343)
IS_OMAP_SUBCLASS(363x, 0x363)
IS_OMAP_SUBCLASS(443x, 0x443)

#define cpu_is_omap7xx() 0
#define cpu_is_omap15xx() 0
#define cpu_is_omap16xx() 0
#define cpu_is_omap24xx() 0
#define cpu_is_omap242x() 0
#define cpu_is_omap243x() 0
#define cpu_is_omap34xx() 0
#define cpu_is_omap343x() 0
#define cpu_is_omap44xx() 0
#define cpu_is_omap443x() 0

#if defined(MULTI_OMAP1)
# if defined(CONFIG_ARCH_OMAP730)
# undef cpu_is_omap7xx
# define cpu_is_omap7xx() is_omap7xx()
# endif
# if defined(CONFIG_ARCH_OMAP850)
# undef cpu_is_omap7xx
# define cpu_is_omap7xx() is_omap7xx()
# endif
# if defined(CONFIG_ARCH_OMAP15XX)
# undef cpu_is_omap15xx
# define cpu_is_omap15xx() is_omap15xx()
# endif
# if defined(CONFIG_ARCH_OMAP16XX)
# undef cpu_is_omap16xx
# define cpu_is_omap16xx() is_omap16xx()
# endif
#else
# if defined(CONFIG_ARCH_OMAP730)
# undef cpu_is_omap7xx
# define cpu_is_omap7xx() 1
# endif
# if defined(CONFIG_ARCH_OMAP850)
# undef cpu_is_omap7xx
# define cpu_is_omap7xx() 1
# endif
# if defined(CONFIG_ARCH_OMAP15XX)
# undef cpu_is_omap15xx
# define cpu_is_omap15xx() 1
# endif
# if defined(CONFIG_ARCH_OMAP16XX)
# undef cpu_is_omap16xx
# define cpu_is_omap16xx() 1
# endif
#endif

#if defined(MULTI_OMAP2)
# if defined(CONFIG_ARCH_OMAP2)
# undef cpu_is_omap24xx
# define cpu_is_omap24xx() is_omap24xx()
# endif
# if defined (CONFIG_ARCH_OMAP2420)
# undef cpu_is_omap242x
# define cpu_is_omap242x() is_omap242x()
# endif
# if defined (CONFIG_ARCH_OMAP2430)
# undef cpu_is_omap243x
# define cpu_is_omap243x() is_omap243x()
# endif
# if defined(CONFIG_ARCH_OMAP3)
# undef cpu_is_omap34xx
# undef cpu_is_omap343x
# define cpu_is_omap34xx() is_omap34xx()
# define cpu_is_omap343x() is_omap343x()
# endif
#else
# if defined(CONFIG_ARCH_OMAP2)
# undef cpu_is_omap24xx
# define cpu_is_omap24xx() 1
# endif
# if defined(CONFIG_ARCH_OMAP2420)
# undef cpu_is_omap242x
# define cpu_is_omap242x() 1
# endif
# if defined(CONFIG_ARCH_OMAP2430)
# undef cpu_is_omap243x
# define cpu_is_omap243x() 1
# endif
# if defined(CONFIG_ARCH_OMAP3)
# undef cpu_is_omap34xx
# define cpu_is_omap34xx() 1
# endif
# if defined(CONFIG_ARCH_OMAP3430)
# undef cpu_is_omap343x
# define cpu_is_omap343x() 1
# endif
#endif

/*
* Macros to detect individual cpu types.
* These are only rarely needed.
* cpu_is_omap330(): True for OMAP330
* cpu_is_omap730(): True for OMAP730
* cpu_is_omap850(): True for OMAP850
* cpu_is_omap1510(): True for OMAP1510
* cpu_is_omap1610(): True for OMAP1610
* cpu_is_omap1611(): True for OMAP1611
* cpu_is_omap5912(): True for OMAP5912
* cpu_is_omap1621(): True for OMAP1621
* cpu_is_omap1710(): True for OMAP1710
* cpu_is_omap2420(): True for OMAP2420
* cpu_is_omap2422(): True for OMAP2422
* cpu_is_omap2423(): True for OMAP2423
* cpu_is_omap2430(): True for OMAP2430
* cpu_is_omap3430(): True for OMAP3430
* cpu_is_omap4430(): True for OMAP4430
* cpu_is_omap3505(): True for OMAP3505
* cpu_is_omap3517(): True for OMAP3517
*/
#define GET_OMAP_TYPE ((omap_rev() >> 16) & 0xffff)

#define IS_OMAP_TYPE(type, id) \
static inline int is_omap ##type (void) \
{ \
return (GET_OMAP_TYPE == (id)) ? 1 : 0; \
}

IS_OMAP_TYPE(310, 0x0310)
IS_OMAP_TYPE(730, 0x0730)
IS_OMAP_TYPE(850, 0x0850)
IS_OMAP_TYPE(1510, 0x1510)
IS_OMAP_TYPE(1610, 0x1610)
IS_OMAP_TYPE(1611, 0x1611)
IS_OMAP_TYPE(5912, 0x1611)
IS_OMAP_TYPE(1621, 0x1621)
IS_OMAP_TYPE(1710, 0x1710)
IS_OMAP_TYPE(2420, 0x2420)
IS_OMAP_TYPE(2422, 0x2422)
IS_OMAP_TYPE(2423, 0x2423)
IS_OMAP_TYPE(2430, 0x2430)
IS_OMAP_TYPE(3430, 0x3430)
IS_OMAP_TYPE(3505, 0x3505)
IS_OMAP_TYPE(3517, 0x3517)

#define cpu_is_omap310() 0
#define cpu_is_omap730() 0
#define cpu_is_omap850() 0
#define cpu_is_omap1510() 0
#define cpu_is_omap1610() 0
#define cpu_is_omap5912() 0
#define cpu_is_omap1611() 0
#define cpu_is_omap1621() 0
#define cpu_is_omap1710() 0
#define cpu_is_omap2420() 0
#define cpu_is_omap2422() 0
#define cpu_is_omap2423() 0
#define cpu_is_omap2430() 0
#define cpu_is_omap3503() 0
#define cpu_is_omap3515() 0
#define cpu_is_omap3525() 0
#define cpu_is_omap3530() 0
#define cpu_is_omap3505() 0
#define cpu_is_omap3517() 0
#define cpu_is_omap3430() 0
#define cpu_is_omap4430() 0
#define cpu_is_omap3630() 0

/*
* Whether we have MULTI_OMAP1 or not, we still need to distinguish
* between 730 vs 850, 330 vs. 1510 and 1611B/5912 vs. 1710.
*/

#if defined(CONFIG_ARCH_OMAP730)
# undef cpu_is_omap730
# define cpu_is_omap730() is_omap730()
#endif

#if defined(CONFIG_ARCH_OMAP850)
# undef cpu_is_omap850
# define cpu_is_omap850() is_omap850()
#endif

#if defined(CONFIG_ARCH_OMAP15XX)
# undef cpu_is_omap310
# undef cpu_is_omap1510
# define cpu_is_omap310() is_omap310()
# define cpu_is_omap1510() is_omap1510()
#endif

#if defined(CONFIG_ARCH_OMAP16XX)
# undef cpu_is_omap1610
# undef cpu_is_omap1611
# undef cpu_is_omap5912
# undef cpu_is_omap1621
# undef cpu_is_omap1710
# define cpu_is_omap1610() is_omap1610()
# define cpu_is_omap1611() is_omap1611()
# define cpu_is_omap5912() is_omap5912()
# define cpu_is_omap1621() is_omap1621()
# define cpu_is_omap1710() is_omap1710()
#endif

#if defined(CONFIG_ARCH_OMAP2)
# undef cpu_is_omap2420
# undef cpu_is_omap2422
# undef cpu_is_omap2423
# undef cpu_is_omap2430
# define cpu_is_omap2420() is_omap2420()
# define cpu_is_omap2422() is_omap2422()
# define cpu_is_omap2423() is_omap2423()
# define cpu_is_omap2430() is_omap2430()
#endif

#if defined(CONFIG_ARCH_OMAP3)
# undef cpu_is_omap3430
# undef cpu_is_omap3503
# undef cpu_is_omap3515
# undef cpu_is_omap3525
# undef cpu_is_omap3530
# undef cpu_is_omap3505
# undef cpu_is_omap3517
# define cpu_is_omap3430() is_omap3430()
# define cpu_is_omap3503() (cpu_is_omap3430() && \
(!omap3_has_iva()) && \
(!omap3_has_sgx()))
# define cpu_is_omap3515() (cpu_is_omap3430() && \
(!omap3_has_iva()) && \
(omap3_has_sgx()))
# define cpu_is_omap3525() (cpu_is_omap3430() && \
(!omap3_has_sgx()) && \
(omap3_has_iva()))
# define cpu_is_omap3530() (cpu_is_omap3430())
# define cpu_is_omap3505() is_omap3505()
# define cpu_is_omap3517() is_omap3517()
# undef cpu_is_omap3630
# define cpu_is_omap3630() is_omap363x()
#endif

# if defined(CONFIG_ARCH_OMAP4)
# undef cpu_is_omap44xx
# undef cpu_is_omap443x
# define cpu_is_omap44xx() is_omap44xx()
# define cpu_is_omap443x() is_omap443x()
# endif

/* Macros to detect if we have OMAP1 or OMAP2 */
#define cpu_class_is_omap1() (cpu_is_omap7xx() || cpu_is_omap15xx() || \
cpu_is_omap16xx())
#define cpu_class_is_omap2() (cpu_is_omap24xx() || cpu_is_omap34xx() || \
cpu_is_omap44xx())

/* Various silicon revisions for omap2 */
#define OMAP242X_CLASS 0x24200024
#define OMAP2420_REV_ES1_0 0x24200024
#define OMAP2420_REV_ES2_0 0x24201024

#define OMAP243X_CLASS 0x24300024
#define OMAP2430_REV_ES1_0 0x24300024

#define OMAP343X_CLASS 0x34300034
#define OMAP3430_REV_ES1_0 0x34300034
#define OMAP3430_REV_ES2_0 0x34301034
#define OMAP3430_REV_ES2_1 0x34302034
#define OMAP3430_REV_ES3_0 0x34303034
#define OMAP3430_REV_ES3_1 0x34304034
#define OMAP3430_REV_ES3_1_1 0x34305034
#define OMAP3430_REV_ES3_1_2 0x34305034

#define OMAP3630_REV_ES1_0 0x36300034
#define OMAP3630_REV_ES1_1 0x36300134
#define OMAP3630_REV_ES1_2 0x36300234

#define OMAP35XX_CLASS 0x35000034
#define OMAP3503_REV(v) (OMAP35XX_CLASS | (0x3503 << 16) | (v << 8))
#define OMAP3515_REV(v) (OMAP35XX_CLASS | (0x3515 << 16) | (v << 8))
#define OMAP3525_REV(v) (OMAP35XX_CLASS | (0x3525 << 16) | (v << 8))
#define OMAP3530_REV(v) (OMAP35XX_CLASS | (0x3530 << 16) | (v << 8))
#define OMAP3505_REV(v) (OMAP35XX_CLASS | (0x3505 << 16) | (v << 8))
#define OMAP3517_REV(v) (OMAP35XX_CLASS | (0x3517 << 16) | (v << 8))

#define OMAP443X_CLASS 0x44300044
#define OMAP4430_REV_ES1_0 0x44300044
#define OMAP4430_REV_ES2_0 0x44301044
#define OMAP4430_REV_ES2_1 0x44302044
#define OMAP4430_REV_ES2_2 0x44303044
#define OMAP4430_REV_ES2_3 0x44304044

/*
* omap_chip bits
*
* CHIP_IS_OMAP{2420,2430,3430} indicate that a particular structure is
* valid on all chips of that type. CHIP_IS_OMAP3430ES{1,2} indicates
* something that is only valid on that particular ES revision.
*
* These bits may be ORed together to indicate structures that are
* available on multiple chip types.
*
* To test whether a particular structure matches the current OMAP chip type,
* use omap_chip_is().
*
*/
#define CHIP_IS_OMAP2420 (1 << 0)
#define CHIP_IS_OMAP2430 (1 << 1)
#define CHIP_IS_OMAP3430 (1 << 2)
#define CHIP_IS_OMAP3430ES1 (1 << 3)
#define CHIP_IS_OMAP3430ES2 (1 << 4)
#define CHIP_IS_OMAP3430ES3_0 (1 << 5)
#define CHIP_IS_OMAP3430ES3_1 (1 << 6)
#define CHIP_IS_OMAP3430ES3_1_1 (1 << 7)
#define CHIP_IS_OMAP3630ES1 (1 << 8)
#define CHIP_IS_OMAP3630ES1_1 (1 << 9)
#define CHIP_IS_OMAP3630ES1_2 (1 << 10)
#define CHIP_IS_OMAP4430ES1 (1 << 11)
#define CHIP_IS_OMAP4430ES2 (1 << 12)
#define CHIP_IS_OMAP4430ES2_1 (1 << 13)
#define CHIP_IS_OMAP4430ES2_2 (1 << 14)
#define CHIP_IS_OMAP4430ES2_3 (1 << 15)

#define CHIP_IS_OMAP24XX (CHIP_IS_OMAP2420 | CHIP_IS_OMAP2430)

#define CHIP_IS_OMAP4430 (CHIP_IS_OMAP4430ES1 | \
CHIP_IS_OMAP4430ES2 |\
CHIP_IS_OMAP4430ES2_1 |\
CHIP_IS_OMAP4430ES2_2 |\
CHIP_IS_OMAP4430ES2_3)

/*
* "GE" here represents "greater than or equal to" in terms of ES
* levels. So CHIP_GE_OMAP3430ES2 is intended to match all OMAP3430
* chips at ES2 and beyond, but not, for example, any OMAP lines after
* OMAP3.
*/
#define CHIP_GE_OMAP3430ES2 (CHIP_IS_OMAP3430ES2 | \
CHIP_IS_OMAP3430ES3_0 | \
CHIP_IS_OMAP3430ES3_1 | \
CHIP_IS_OMAP3430ES3_1_1 |\
CHIP_IS_OMAP3630ES1)
#define CHIP_GE_OMAP3430ES3_1 (CHIP_IS_OMAP3430ES3_1 | \
CHIP_IS_OMAP3430ES3_1_1 | \
CHIP_IS_OMAP3630ES1 | \
CHIP_IS_OMAP3630ES1_1 | \
CHIP_IS_OMAP3630ES1_2)


/*
* Macro to detect omap revision number (for SW tiering
*/
#define OMAP_3420 0x3420
#define OMAP_3430 0x3430
#define OMAP_3440 0x3440
#define OMAP_3630 0x3630
#define OMAP_3630_0800 0x36300800
#define OMAP_3630_1000 0x36301000
#define OMAP_3630_1200 0x36301200

int omap_chip_is(struct omap_chip_id oci);
void omap2_check_revision(void);
void get_omap3630_revision_id(void);
void check_omap4430_trim_chip(void);

/*
* Runtime detection of OMAP3 features
*/
extern u32 omap3_features;

#define OMAP3_HAS_L2CACHE BIT(0)
#define OMAP3_HAS_IVA BIT(1)
#define OMAP3_HAS_SGX BIT(2)
#define OMAP3_HAS_NEON BIT(3)
#define OMAP3_HAS_ISP BIT(4)
#define OMAP3_HAS_192MHZ_CLK BIT(5)

#define OMAP3_HAS_FEATURE(feat,flag) \
static inline unsigned int omap3_has_ ##feat(void) \
{ \
return (omap3_features & OMAP3_HAS_ ##flag); \
} \

OMAP3_HAS_FEATURE(l2cache, L2CACHE)
OMAP3_HAS_FEATURE(sgx, SGX)
OMAP3_HAS_FEATURE(iva, IVA)
OMAP3_HAS_FEATURE(neon, NEON)
OMAP3_HAS_FEATURE(isp, ISP)
OMAP3_HAS_FEATURE(192mhz_clk, 192MHZ_CLK)

#endif

boy isnt eclipse wonderful all i had to do is load the kernel source into it and search for the function with it and boom pops up everywhere those things are.
 
we would need a kernel module to run over this changing the value after its been set. And we would need to do it in stock recovery. Then install an update and cross fingers.
 
Back
Top