1/* 2 * Copyright (C) 2011 The Android Open Source Project 3 * All rights reserved. 4 * 5 * Redistribution and use in source and binary forms, with or without 6 * modification, are permitted provided that the following conditions 7 * are met: 8 * * Redistributions of source code must retain the above copyright 9 * notice, this list of conditions and the following disclaimer. 10 * * Redistributions in binary form must reproduce the above copyright 11 * notice, this list of conditions and the following disclaimer in 12 * the documentation and/or other materials provided with the 13 * distribution. 14 * 15 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 16 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 17 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS 18 * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE 19 * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, 20 * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, 21 * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS 22 * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED 23 * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, 24 * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT 25 * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 26 * SUCH DAMAGE. 27 */ 28 29/* omap44xx ID detection and reporting */ 30 31#include <aboot/aboot.h> 32#include <aboot/io.h> 33 34#define CONTORL_ID_CODE (0x4A002204) 35 36struct omap_id { 37 omap_rev rev_num; 38 u32 rev_reg_val; 39}; 40 41static struct omap_id map[] = { 42 { OMAP_4430_ES1_DOT_0, 0x0B85202F }, 43 { OMAP_4430_ES2_DOT_0, 0x1B85202F }, 44 { OMAP_4430_ES2_DOT_1, 0x3B95C02F }, 45 { OMAP_4430_ES2_DOT_2, 0x4B95C02F }, 46 { OMAP_4430_ES2_DOT_3, 0x6B95C02F }, 47 { OMAP_4460_ES1_DOT_0, 0x0B94E02F }, 48 { OMAP_4460_ES1_DOT_1, 0x2B94E02F }, 49 { OMAP_REV_INVALID, 0x00000000 }, 50}; 51 52omap_rev get_omap_rev(void) 53{ 54 u8 i; 55 u32 id_code; 56 57 id_code = readl(CONTORL_ID_CODE); 58 59 for (i = 0; map[i].rev_num != OMAP_REV_INVALID; i++) { 60 if (map[i].rev_reg_val == id_code) { 61 return map[i].rev_num; 62 } 63 } 64 65 return OMAP_REV_INVALID; 66} 67