All of lore.kernel.org
 help / color / mirror / Atom feed
From: Tony Lindgren <tony@atomide.com>
To: "Syed Mohammed, Khasim" <x0khasim@ti.com>
Cc: Linux OMAP <linux-omap-open-source@linux.omap.com>
Subject: Re: [RFC] io.c for OMAP3430
Date: Mon, 4 Jun 2007 03:02:36 -0700	[thread overview]
Message-ID: <20070604100235.GB27034@atomide.com> (raw)
In-Reply-To: <9C23CDD79DA20A479D4615857B2E2C4701062ED3@dlee13.ent.ti.com>

Hi,

* Syed Mohammed, Khasim <x0khasim@ti.com> [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 <juha.yrjola@nokia.com>
>  *	Syed Khasim <x0khasim@ti.com>
>  *
>  * 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 <linux/module.h>
> #include <linux/kernel.h>
> #include <linux/init.h>
> 
> #include <asm/tlb.h>
> #include <asm/io.h>
> 
> #include <asm/mach/map.h>
> 
> #include <asm/arch/mux.h>
> #include <asm/arch/omapfb.h>
> 
> 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

      reply	other threads:[~2007-06-04 10:02 UTC|newest]

Thread overview: 6+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2007-05-30  4:12 [RFC] io.c for OMAP3430 Syed Mohammed, Khasim
2007-05-30 13:41 ` Tony Lindgren
2007-05-30 17:17   ` Syed Mohammed, Khasim
2007-05-30 22:32     ` Syed Mohammed, Khasim
2007-05-31  3:38       ` Syed Mohammed, Khasim
2007-06-04 10:02         ` Tony Lindgren [this message]

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20070604100235.GB27034@atomide.com \
    --to=tony@atomide.com \
    --cc=linux-omap-open-source@linux.omap.com \
    --cc=x0khasim@ti.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.