From mboxrd@z Thu Jan 1 00:00:00 1970 From: Tony Lindgren Subject: Re: [RFC] io.c for OMAP3430 Date: Mon, 4 Jun 2007 03:02:36 -0700 Message-ID: <20070604100235.GB27034@atomide.com> References: <9C23CDD79DA20A479D4615857B2E2C4701062E30@dlee13.ent.ti.com> <9C23CDD79DA20A479D4615857B2E2C4701062ED3@dlee13.ent.ti.com> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Return-path: Content-Disposition: inline In-Reply-To: <9C23CDD79DA20A479D4615857B2E2C4701062ED3@dlee13.ent.ti.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: linux-omap-open-source-bounces@linux.omap.com Errors-To: linux-omap-open-source-bounces@linux.omap.com To: "Syed Mohammed, Khasim" Cc: Linux OMAP List-Id: linux-omap@vger.kernel.org Hi, * Syed Mohammed, Khasim [070530 20:38]: > Hi all: > > > > >> if (cpu_is_omap242x()) { > >> iotable_init(omap242x_io_desc, > >>ARRAY_SIZE(omap242x_io_desc)); > >> } else if (cpu_is_omap243x()) { > >> iotable_init(omap243x_io_desc, > >>ARRAY_SIZE(omap243x_io_desc)); > >> } > >We cannot put this kind of check in common_io function. I was trying to > >validate 2420 / 2430 platforms and I found that "cpu_is_" function calls > >returning "0" (when "1" was expected). > > Please let me know your views on the following approach for io.c. > > ========================================================================= > > /* > * linux/arch/arm/mach-omap2/io.c > * > * OMAP2 I/O mapping code > * > * Copyright (C) 2005 Nokia Corporation > * Copyright (C) 2007 Texas Instruments > * > * Author: > * Juha Yrjola > * Syed Khasim > * > * 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. > */ > > #include > #include > #include > > #include > #include > > #include > > #include > #include > > extern void omap_sram_init(void); > extern int omap2_clk_init(void); > extern void omap2_check_revision(void); > extern void omap2_init_memory(void); > extern void gpmc_init(void); > extern void omapfb_reserve_sdram(void); > > /* > * The machine specific code may provide the extra mapping besides the > * default mapping provided here. > */ > > #ifdef CONFIG_ARCH_OMAP24XX > static struct map_desc omap24xx_io_desc[] __initdata = { > { > .virtual = L3_24XX_VIRT, > .pfn = __phys_to_pfn(L3_24XX_PHYS), > .length = L3_24XX_SIZE, > .type = MT_DEVICE > }, > { > .virtual = L4_24XX_VIRT, > .pfn = __phys_to_pfn(L4_24XX_PHYS), > .length = L4_24XX_SIZE, > .type = MT_DEVICE > }, > }; > > #ifdef CONFIG_ARCH_OMAP2420 > static struct map_desc omap242x_io_desc[] __initdata = { > { > .virtual = DSP_MEM_24XX_VIRT, > .pfn = __phys_to_pfn(DSP_MEM_24XX_PHYS), > .length = DSP_MEM_24XX_SIZE, > .type = MT_DEVICE > }, > { > .virtual = DSP_IPI_24XX_VIRT, > .pfn = __phys_to_pfn(DSP_IPI_24XX_PHYS), > .length = DSP_IPI_24XX_SIZE, > .type = MT_DEVICE > }, > { > .virtual = DSP_MMU_24XX_VIRT, > .pfn = __phys_to_pfn(DSP_MMU_24XX_PHYS), > .length = DSP_MMU_24XX_SIZE, > .type = MT_DEVICE > }, > }; > > #endif > > #ifdef CONFIG_ARCH_OMAP2430 > static struct map_desc omap243x_io_desc[] __initdata = { > { > .virtual = L4_WK_243X_VIRT, > .pfn = __phys_to_pfn(L4_WK_243X_PHYS), > .length = L4_WK_243X_SIZE, > .type = MT_DEVICE > }, > { > .virtual = OMAP243X_GPMC_VIRT, > .pfn = __phys_to_pfn(OMAP243X_GPMC_PHYS), > .length = OMAP243X_GPMC_SIZE, > .type = MT_DEVICE > }, > { > .virtual = OMAP243X_SDRC_VIRT, > .pfn = __phys_to_pfn(OMAP243X_SDRC_PHYS), > .length = OMAP243X_SDRC_SIZE, > .type = MT_DEVICE > }, > { > .virtual = OMAP243X_SMS_VIRT, > .pfn = __phys_to_pfn(OMAP243X_SMS_PHYS), > .length = OMAP243X_SMS_SIZE, > .type = MT_DEVICE > }, > }; > #endif > #endif > > #ifdef CONFIG_ARCH_OMAP34XX > static struct map_desc omap34xx_io_desc[] __initdata = { > { > .virtual = L3_34XX_VIRT, > .pfn = __phys_to_pfn(L3_34XX_PHYS), > .length = L3_34XX_SIZE, > .type = MT_DEVICE > }, > { > .virtual = L4_34XX_VIRT, > .pfn = __phys_to_pfn(L4_34XX_PHYS), > .length = L4_34XX_SIZE, > .type = MT_DEVICE > }, > { > .virtual = L4_WK_34XX_VIRT, > .pfn = __phys_to_pfn(L4_WK_34XX_PHYS), > .length = L4_WK_34XX_SIZE, > .type = MT_DEVICE > }, > { > .virtual = OMAP34XX_GPMC_VIRT, > .pfn = __phys_to_pfn(OMAP34XX_GPMC_PHYS), > .length = OMAP34XX_GPMC_SIZE, > .type = MT_DEVICE > }, > { > .virtual = OMAP343X_SMS_VIRT, > .pfn = __phys_to_pfn(OMAP343X_SMS_PHYS), > .length = OMAP343X_SMS_SIZE, > .type = MT_DEVICE > }, > { > .virtual = OMAP343X_SDRC_VIRT, > .pfn = __phys_to_pfn(OMAP343X_SDRC_PHYS), > .length = OMAP343X_SDRC_SIZE, > .type = MT_DEVICE > }, > { > .virtual = L4_PER_34XX_VIRT, > .pfn = __phys_to_pfn(L4_PER_34XX_PHYS), > .length = L4_PER_34XX_SIZE, > .type = MT_DEVICE > }, > { > .virtual = L4_EMU_34XX_VIRT, > .pfn = __phys_to_pfn(L4_EMU_34XX_PHYS), > .length = L4_EMU_34XX_SIZE, > .type = MT_DEVICE > }, > }; > #endif > > void __init omap2_map_common_io(void) > { > #if defined(CONFIG_ARCH_OMAP2420) > iotable_init(omap24xx_io_desc, ARRAY_SIZE(omap24xx_io_desc)); > iotable_init(omap242x_io_desc, ARRAY_SIZE(omap242x_io_desc)); > #elif defined(CONFIG_ARCH_OMAP2430) > iotable_init(omap24xx_io_desc, ARRAY_SIZE(omap24xx_io_desc)); > iotable_init(omap243x_io_desc, ARRAY_SIZE(omap243x_io_desc)); > #elif defined(CONFIG_ARCH_OMAP34XX) > iotable_init(omap34xx_io_desc, ARRAY_SIZE(omap34xx_io_desc)); > #endif > /* Normally devicemaps_init() would flush caches and tlb after > * mdesc->map_io(), but we must also do it here because of the CPU > * revision check below. > */ > local_flush_tlb_all(); > flush_cache_all(); > > omap2_check_revision(); > omap_sram_init(); > omapfb_reserve_sdram(); > } > > void __init omap2_init_common_hw(void) > { > omap2_mux_init(); > omap2_clk_init(); > omap2_init_memory(); > gpmc_init(); > } > Looks good to me. We can improve it further once the hardware based detection issues are solved. Tony