[PATCH 5/7 v2] Basic IO mappings for mach-tcc8k

Russell King - ARM Linux linux at arm.linux.org.uk
Thu Mar 25 16:37:58 EDT 2010


On Thu, Mar 25, 2010 at 09:15:09PM +0100, Hans J. Koch wrote:
> +#include <linux/kernel.h>
> +#include <linux/init.h>
> +
> +#include <asm/tlb.h>

You don't need asm/tlb.h in this file.

> +#include <asm/mach/map.h>
> +#include <asm/io.h>

linux/io.h

> +
> +#include <mach/tcc8k-regs.h>
> +
> +/*
> + * The machine specific code may provide the extra mapping besides the
> + * default mapping provided here.
> + */
> +static struct map_desc tcc8k_io_desc[] __initdata = {
> +	{
> +		.virtual	= CS1_BASE_VIRT,	/* CS1 (CS8900) */
> +		.pfn		= __phys_to_pfn(CS1_BASE),
> +		.length		= CS1_SIZE,
> +		.type		= MT_DEVICE
> +	},
> +	{

	}, {

is more conventional and avoids using up valuable vertical screen
realestate.

> +		.virtual	= AHB_PERI_BASE_VIRT,	/* AHB peripherals */
> +		.pfn		= __phys_to_pfn(AHB_PERI_BASE),
> +		.length		= AHB_PERI_SIZE,
> +		.type		= MT_DEVICE
> +	},
> +	{
> +		.virtual	= APB0_PERI_BASE_VIRT,	/* APB peripherals */
> +		.pfn		= __phys_to_pfn(APB0_PERI_BASE),
> +		.length		= APB0_PERI_SIZE,
> +		.type		= MT_DEVICE
> +	},
> +	{
> +		.virtual	= APB1_PERI_BASE_VIRT,	/* APB peripherals */
> +		.pfn		= __phys_to_pfn(APB1_PERI_BASE),
> +		.length		= APB1_PERI_SIZE,
> +		.type		= MT_DEVICE
> +	},
> +	{
> +		.virtual	= EXT_MEM_CTRL_BASE_VIRT, /* Ext. mem.contr. */
> +		.pfn		= __phys_to_pfn(EXT_MEM_CTRL_BASE),
> +		.length		= EXT_MEM_CTRL_SIZE,
> +		.type		= MT_DEVICE
> +	},
> +};
> +
> +/*
> + * Maps common IO regions for tcc8k.
> + *
> + */
> +void __init tcc8k_map_common_io(void)
> +{
> +	iotable_init(tcc8k_io_desc, ARRAY_SIZE(tcc8k_io_desc));
> +}
> +
> diff --git a/arch/arm/plat-tcc/include/mach/io.h b/arch/arm/plat-tcc/include/mach/io.h
> new file mode 100644
> index 0000000..7d84370
> --- /dev/null
> +++ b/arch/arm/plat-tcc/include/mach/io.h
> @@ -0,0 +1,53 @@
> +/*
> + * Based on:    linux/include/asm-arm/arch-sa1100/io.h
> + * Author : <linux at telechips.com>
> + * Created: June 10, 2008
> + * Description: IO definitions for TCC8300 processors and boards
> + *
> + * Copyright (C) 1997-1999 Russell King
> + * Copyright (C) 2008-2009 Telechips
> + *
> + * Modifications for mainline (C) 2009 Hans J. Koch <hjk at linutronix.de>
> + *
> + * Licensed under the terms of the GNU Public License version 2.
> + */
> +
> +#ifndef __ASM_ARM_ARCH_IO_H
> +#define __ASM_ARM_ARCH_IO_H
> +
> +#define IO_SPACE_LIMIT 0xffffffff
> +
> +/*
> + * We don't actually have real ISA nor PCI buses, but there is so many
> + * drivers out there that might just work if we fake them...
> + */
> +#define __io(a)			((void __iomem *)(PCIO_BASE + (a)))

#define __io(a)		__typesafe_io(a)

please.

> +#define __mem_pci(a)		(a)
> +
> +/*
> + * ----------------------------------------------------------------------------
> + * I/O mapping
> + * ----------------------------------------------------------------------------
> + */
> +
> +#define PCIO_BASE	0
> +
> +/* Address Map of Internal Peripherials (Base 0x80000000) */
> +#define IO_PHYS_A			0x80000000
> +#define IO_OFFSET_A			0x70000000 /* Virtual IO = 0xF0000000 */
> +#define IO_SIZE_A			0x100000
> +#define IO_VIRT_A			(IO_PHYS + IO_OFFSET)
> +#define IO_ADDRESS_A(pa)	((pa) + IO_OFFSET)
> +#define IO_P2V_A(pa)		((pa) + IO_OFFSET)
> +#define IO_V2P_A(va)		((va) - IO_OFFSET)

Where is IO_OFFSET defined?

> +
> +/* Address Map of Internal Peripherials (Base 0x90000000) */
> +#define IO_PHYS_B			0x90000000
> +#define IO_OFFSET_B			0x61000000 /* Virtual IO = 0xF1000000 */
> +#define IO_SIZE_B			0x100000
> +#define IO_VIRT_B			(IO_PHYS + IO_OFFSET)
> +#define IO_ADDRESS_B(pa)	((pa) + IO_OFFSET)
> +#define IO_P2V_B(pa)		((pa) + IO_OFFSET)
> +#define IO_V2P_B(va)		((va) - IO_OFFSET)

Ditto.  Would also be useful if they were typesafe.



More information about the linux-arm-kernel mailing list