From: Paul Butler <paul.but...@windriver.com> - Added the RapidIO management options - Added the rio device to the axm55xx - Created the rio architecture support for arm - Added a file to support the RAPIDIO Bus registration
Signed-off-by: Paul Butler <paul.but...@windriver.com> --- arch/arm/Kconfig | 18 +++++++++ arch/arm/boot/dts/axm55xx.dts | 16 ++++++++ arch/arm/include/asm/axxia-rio.h | 82 ++++++++++++++++++++++++++++++++++++++ arch/arm/include/asm/rio.h | 33 +++++++++++++++ arch/arm/mach-axxia/Makefile | 1 + arch/arm/mach-axxia/clock.c | 5 +++ arch/arm/mach-axxia/rapidio.c | 44 ++++++++++++++++++++ 7 files changed, 199 insertions(+) create mode 100644 arch/arm/include/asm/axxia-rio.h create mode 100644 arch/arm/include/asm/rio.h create mode 100644 arch/arm/mach-axxia/rapidio.c diff --git a/arch/arm/Kconfig b/arch/arm/Kconfig index 0b98e83..370eca8 100644 --- a/arch/arm/Kconfig +++ b/arch/arm/Kconfig @@ -344,6 +344,7 @@ config ARCH_AXXIA select PCI select PCI_DOMAINS if PCI select ARCH_SUPPORTS_MSI if PCI + select HAS_RAPIDIO if (!PREEMPT_RTB) help This enables support for the LSI Axxia boards. @@ -2358,3 +2359,20 @@ source "security/Kconfig" source "crypto/Kconfig" source "lib/Kconfig" + +menu "RapidIO management options" + +config HAS_RAPIDIO + bool + default n + +config RAPIDIO + bool "RapidIO support" + depends on HAS_RAPIDIO || PCI + help + If you say Y here, the kernel will include drivers and + infrastructure code to support RapidIO interconnect devices. + +source "drivers/rapidio/Kconfig" + +endmenu diff --git a/arch/arm/boot/dts/axm55xx.dts b/arch/arm/boot/dts/axm55xx.dts index aac791d..7ecb177 100644 --- a/arch/arm/boot/dts/axm55xx.dts +++ b/arch/arm/boot/dts/axm55xx.dts @@ -35,6 +35,7 @@ serial0 = &axxia_serial0; timer = &axxia_timers; ethernet0 = &axxia_femac0; + rapidio0 = &rio0; }; cpus { @@ -423,6 +424,21 @@ reg = <0x20 0x10098000 0 0x3000>; interrupts = <0 45 4>; }; + + rio0: rapidio { + index = <0>; + status = "disabled"; + #address-cells = <2>; + #size-cells = <2>; + compatible = "axxia,rapidio-delta"; + device_type = "rapidio"; + reg = <0x0020 0x20142000 0x0 0x1000>; /* SRIO Conf 0 region */ + ranges = <0x0 0x0 0x0031 0x00000000 0x0 0x40000000>; + linkdown-reset = <0x0200 0x100 0x0020 0x10000000 0x0 0x000010000>; + interrupts = <0 89 4>; + outb-dmes = <2 0x00000003 1 0x00000000>; + }; + }; /* diff --git a/arch/arm/include/asm/axxia-rio.h b/arch/arm/include/asm/axxia-rio.h new file mode 100644 index 0000000..f244c85 --- /dev/null +++ b/arch/arm/include/asm/axxia-rio.h @@ -0,0 +1,82 @@ +/* + * RapidIO support for LSI Axxia parts + * + */ +#ifndef __ASM_AXXIA_RIO_H__ +#define __ASM_AXXIA_RIO_H__ + +/* Constants, Macros, etc. */ + +#define AXXIA_RIO_SMALL_SYSTEM + +#define AXXIA_RIO_SYSMEM_BARRIER() + +#define AXXIA_RIO_DISABLE_MACHINE_CHECK() +#define AXXIA_RIO_ENABLE_MACHINE_CHECK() +#define AXXIA_RIO_IF_MACHINE_CHECK(mcsr) (mcsr = 0) + +#define IN_SRIO8(a, v, ec) {v = inb((long unsigned int)a); ec = 0;} +#define IN_SRIO16(a, v, ec) {v = inw((long unsigned int)a); ec = 0;} +#define IN_SRIO32(a, v, ec) {v = inl((long unsigned int)a); ec = 0;} + +#define OUT_SRIO8(a, v) outb_p(v, (long unsigned int) a) +#define OUT_SRIO16(a, v) outw_p(v, (long unsigned int) a) +#define OUT_SRIO32(a, v) outl_p(v, (long unsigned int) a) + +#define _SWAP32(x) ((((x) & 0x000000FF) << 24) | (((x) & 0x0000FF00) << 8) | (((x) & 0x00FF0000) >> 8) | (((x) & 0xFF000000) >> 24)) +#define CORRECT_GRIO(a) _SWAP32(a) +#define CORRECT_RAB(a) (a) + +/* ACP RIO board-specific stuff */ + +extern int axxia_rio_apio_enable(struct rio_mport *mport, u32 mask, u32 bits); +extern int axxia_rio_apio_disable(struct rio_mport *mport); +extern int axxia_rio_rpio_enable(struct rio_mport *mport, u32 mask, u32 bits); +extern int axxia_rio_rpio_disable(struct rio_mport *mport); + +extern int axxia_rapidio_board_init(void); + + +/*****************************/ +/* ACP RIO operational stuff */ +/*****************************/ + +/** + * CNTLZW - Count leading zeros word + * @val: value from which count number of leading zeros + * + * Return: number of zeros + */ +static inline u32 CNTLZW(u32 val) +{ + int n = 0; + if (val == 0) + return 32; + if ((val & 0xFFFF0000) == 0) + n += 16; val = val << 16; + /* 1111 1111 1111 1111 0000 0000 0000 0000 + // 16 bits from left are zero! so we omit 16 left bits */ + if ((val & 0xFF000000) == 0) + n = n + 8; val = val << 8; + /* 8 left bits are 0 */ + if ((val & 0xF0000000) == 0) + n = n + 4; val = val << 4; + /* 4 left bits are 0 */ + if ((val & 0xC0000000) == 0) + n = n + 2, val = val << 2; + /* 110000....0 2 left bits are zero */ + if ((val & 0x80000000) == 0) + n = n + 1, val = val << 1; + /* first left bit is zero */ + return n; +} + +static inline unsigned long get_tb(void) +{ + unsigned int value; + /* Read CCNT Register (cyclecount) */ + asm volatile ("MRC p15, 0, %0, c9, c13, 0\t\n" : "=r"(value)); + return value; +} + +#endif /* __ASM_AXXIA_RIO_H__ */ diff --git a/arch/arm/include/asm/rio.h b/arch/arm/include/asm/rio.h new file mode 100644 index 0000000..10da207 --- /dev/null +++ b/arch/arm/include/asm/rio.h @@ -0,0 +1,33 @@ +/* + * RapidIO architecture support + * + * Copyright 2005 MontaVista Software, Inc. + * Matt Porter <mpor...@kernel.crashing.org> + * + * 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. + */ + +#ifndef ASM_ARM_RIO_H +#define ASM_ARM_RIO_H + +#include <asm/io.h> + +extern void platform_rio_init(void); + +#if defined(CONFIG_AXXIA_RIO) + +#define rio_in_8(src, dst) ({ insb((long unsigned int)src, dst, 8); 0; }) +#define rio_in_be16(src, dst) ({ insw((long unsigned int)src, dst, 16); 0; }) +#define rio_in_be32(src, dst) ({ insl((long unsigned int)src, dst, 32); 0; }) + +#define out_8(dst, val) outb_p(val, (long unsigned int)(dst)) +#define out_be16(dst, val) outw_p(val, (long unsigned int)(dst)) + +#endif + +#define iosync() + +#endif diff --git a/arch/arm/mach-axxia/Makefile b/arch/arm/mach-axxia/Makefile index 0459a1f..2e9ddf7 100644 --- a/arch/arm/mach-axxia/Makefile +++ b/arch/arm/mach-axxia/Makefile @@ -9,6 +9,7 @@ obj-y += timers.o obj-y += pci.o obj-y += ddr_retention.o obj-$(CONFIG_I2C) += i2c.o +obj-$(CONFIG_AXXIA_RIO) += rapidio.o obj-$(CONFIG_SMP) += platsmp.o headsmp.o obj-$(CONFIG_ARCH_AXXIA_GIC) += axxia-gic.o obj-$(CONFIG_HOTPLUG_CPU) += hotplug.o diff --git a/arch/arm/mach-axxia/clock.c b/arch/arm/mach-axxia/clock.c index 49ca80b..4232277 100644 --- a/arch/arm/mach-axxia/clock.c +++ b/arch/arm/mach-axxia/clock.c @@ -64,6 +64,11 @@ axxia_init_clocks(void) clk_register_clkdev(clk, NULL, "2010082000.uart"); /* PL011 UART3 */ clk_register_clkdev(clk, NULL, "2010083000.uart"); + /* I2C */ + clk_register_clkdev(clk, NULL, "2010084000.i2c"); + clk_register_clkdev(clk, NULL, "2010085000.i2c"); + clk_register_clkdev(clk, NULL, "2010086000.i2c"); + clk_register_clkdev(clk, NULL, "2010087000.i2c"); /* PL022 SSP */ clk_register_clkdev(clk, NULL, "ssp"); diff --git a/arch/arm/mach-axxia/rapidio.c b/arch/arm/mach-axxia/rapidio.c new file mode 100644 index 0000000..a9da46b --- /dev/null +++ b/arch/arm/mach-axxia/rapidio.c @@ -0,0 +1,44 @@ +/* + * linux/arch/arm/mach-axxia/rapidio.c + * + * Helper module for board specific RAPIDIO bus registration + * + * Copyright (C) 2013 LSI Corporation. + * + * 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., 51 Franklin St, Fifth Floor, Boston, MA + * 02110-1301 USA + * + */ + +#include <linux/kernel.h> +#include <linux/platform_device.h> +#include <linux/of_address.h> +#include <linux/of_irq.h> +#include <linux/slab.h> +#include <linux/err.h> +#include <linux/clk.h> +#include <linux/delay.h> + + +/** + * axxia_rapidio_board_init - + * Perform board-specific initialization to support use of RapidIO busses + * + * Returns 0 on success or an error code. + */ +int +axxia_rapidio_board_init(void) +{ + return 0; +} -- 1.7.9.5 -- _______________________________________________ linux-yocto mailing list linux-yocto@yoctoproject.org https://lists.yoctoproject.org/listinfo/linux-yocto