[PATCH 2/2] Add MIPS arch support to barebox

Sascha Hauer s.hauer at pengutronix.de
Tue Jun 28 03:21:47 EDT 2011


On Mon, Jun 27, 2011 at 09:13:54PM +0400, Antony Pavlov wrote:
> Only supported board is qemu malta:
>   * barebox works in uncached memory;
>   * no peripherals support, but serial port.
> 
> Signed-off-by: Antony Pavlov <antonynpavlov at gmail.com>

Looks mostly good, some comments inline.

> ---
>  arch/architecture.dox                       |    1 +
>  arch/mips/Kconfig                           |   55 ++
>  arch/mips/Makefile                          |   51 ++
>  arch/mips/boards/malta/Makefile             |    1 +
>  arch/mips/boards/malta/config.h             |   19 +
>  arch/mips/boards/malta/serial.c             |   64 ++
>  arch/mips/boot/Makefile                     |    4 +
>  arch/mips/boot/entry.c                      |   80 +++
>  arch/mips/boot/head.S                       |  233 +++++++
>  arch/mips/configs/malta_defconfig           |  219 ++++++
>  arch/mips/include/asm/barebox.h             |   24 +
>  arch/mips/include/asm/bitops.h              |   32 +
>  arch/mips/include/asm/byteorder.h           |   30 +
>  arch/mips/include/asm/common.h              |   29 +
>  arch/mips/include/asm/elf.h                 |   30 +
>  arch/mips/include/asm/io.h                  |   73 ++
>  arch/mips/include/asm/mipsregs.h            |  988 +++++++++++++++++++++++++++
>  arch/mips/include/asm/module.h              |   36 +
>  arch/mips/include/asm/posix_types.h         |   48 ++
>  arch/mips/include/asm/regdef.h              |  100 +++
>  arch/mips/include/asm/sections.h            |    1 +
>  arch/mips/include/asm/sgidefs.h             |   44 ++
>  arch/mips/include/asm/string.h              |   31 +
>  arch/mips/include/asm/swab.h                |   59 ++
>  arch/mips/include/asm/types.h               |   44 ++
>  arch/mips/include/mach/debug_ll.h           |   35 +
>  arch/mips/lib/.gitignore                    |    1 +
>  arch/mips/lib/Makefile                      |    5 +
>  arch/mips/lib/ashldi3.c                     |   27 +
>  arch/mips/lib/ashrdi3.c                     |   29 +
>  arch/mips/lib/barebox.lds.S                 |   76 ++
>  arch/mips/lib/libgcc.h                      |   25 +
>  arch/mips/lib/lshrdi3.c                     |   27 +
>  arch/mips/lib/memory.c                      |   34 +
>  arch/mips/mach-mips.dox                     |    9 +
>  arch/mips/mach-qemu/Kconfig                 |   12 +
>  arch/mips/mach-qemu/Makefile                |    4 +
>  arch/mips/mach-qemu/csrc-r4k.c              |   50 ++
>  arch/mips/mach-qemu/include/mach/hardware.h |   28 +
>  arch/mips/mach-qemu/reset.c                 |   34 +
>  40 files changed, 2692 insertions(+), 0 deletions(-)
>  create mode 100644 arch/mips/Kconfig
>  create mode 100644 arch/mips/Makefile
>  create mode 100644 arch/mips/boards/malta/Makefile
>  create mode 100644 arch/mips/boards/malta/config.h
>  create mode 100644 arch/mips/boards/malta/serial.c
>  create mode 100644 arch/mips/boot/Kconfig
>  create mode 100644 arch/mips/boot/Makefile
>  create mode 100644 arch/mips/boot/entry.c
>  create mode 100644 arch/mips/boot/head.S
>  create mode 100644 arch/mips/configs/malta_defconfig
>  create mode 100644 arch/mips/include/asm/barebox.h
>  create mode 100644 arch/mips/include/asm/bitops.h
>  create mode 100644 arch/mips/include/asm/byteorder.h
>  create mode 100644 arch/mips/include/asm/common.h
>  create mode 100644 arch/mips/include/asm/elf.h
>  create mode 100644 arch/mips/include/asm/io.h
>  create mode 100644 arch/mips/include/asm/mipsregs.h
>  create mode 100644 arch/mips/include/asm/module.h
>  create mode 100644 arch/mips/include/asm/posix_types.h
>  create mode 100644 arch/mips/include/asm/regdef.h
>  create mode 100644 arch/mips/include/asm/sections.h
>  create mode 100644 arch/mips/include/asm/sgidefs.h
>  create mode 100644 arch/mips/include/asm/string.h
>  create mode 100644 arch/mips/include/asm/swab.h
>  create mode 100644 arch/mips/include/asm/types.h
>  create mode 100644 arch/mips/include/mach/debug_ll.h
>  create mode 100644 arch/mips/lib/.gitignore
>  create mode 100644 arch/mips/lib/Makefile
>  create mode 100644 arch/mips/lib/ashldi3.c
>  create mode 100644 arch/mips/lib/ashrdi3.c
>  create mode 100644 arch/mips/lib/barebox.lds.S
>  create mode 100644 arch/mips/lib/libgcc.h
>  create mode 100644 arch/mips/lib/lshrdi3.c
>  create mode 100644 arch/mips/lib/memory.c
>  create mode 100644 arch/mips/mach-mips.dox
>  create mode 100644 arch/mips/mach-qemu/Kconfig
>  create mode 100644 arch/mips/mach-qemu/Makefile
>  create mode 100644 arch/mips/mach-qemu/csrc-r4k.c
>  create mode 100644 arch/mips/mach-qemu/include/mach/hardware.h
>  create mode 100644 arch/mips/mach-qemu/reset.c
> 
> diff --git a/arch/mips/boards/malta/serial.c b/arch/mips/boards/malta/serial.c
> new file mode 100644
> index 0000000..b3ade0c
> --- /dev/null
> +++ b/arch/mips/boards/malta/serial.c
> @@ -0,0 +1,64 @@
> +/*
> + * Copyright (C) 2011 Antony Pavlov <antonynpavlov at gmail.com>
> + *
> + * 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.
> + *
> + * 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., 59 Temple Place, Suite 330, Boston,
> + * MA 02111-1307 USA
> + *
> + */
> +
> +#include <common.h>
> +#include <types.h>
> +#include <driver.h>
> +#include <init.h>
> +#include <ns16550.h>
> +#include <mach/hardware.h>
> +#include <asm/io.h>
> +
> +#ifdef CONFIG_DRIVER_SERIAL_NS16550
> +/** to work with the 8250 UART driver implementation we need this function */
> +unsigned int malta_uart_read(unsigned long base, unsigned char reg_idx)
> +{
> +	return readb(base + reg_idx);
> +}
> +
> +/** to work with the 8250 UART driver implementation we need this function */
> +void malta_uart_write(unsigned int val, unsigned long base, unsigned char reg_idx)
> +{
> +	writeb(val, base + reg_idx);
> +}
> +
> +static struct NS16550_plat serial_plat = {
> +       .clock = 1843200, /* no matter */
> +       .f_caps = CONSOLE_STDIN | CONSOLE_STDOUT | CONSOLE_STDERR,
> +       .reg_read = malta_uart_read,
> +       .reg_write = malta_uart_write,
> +};
> +
> +/* we are expecting always one serial interface */
> +static struct device_d generic_malta_serial_device = {
> +       .name = "serial_ns16550",
> +       .map_base = DEBUG_LL_UART_ADDR,
> +       .size = 8,
> +       .platform_data = (void *)&serial_plat,
> +};
> +
> +static int malta_console_init(void)
> +{
> +       /* Register the serial port */
> +       return register_device(&generic_malta_serial_device);
> +}
> +console_initcall(malta_console_init);
> +
> +#endif

The whole file is inside CONFIG_DRIVER_SERIAL_NS16550, so you can do
a obj-$(CONFIG_DRIVER_SERIAL_NS16550) += serial.o in the Makefile
instead.

> diff --git a/arch/mips/boot/Kconfig b/arch/mips/boot/Kconfig
> new file mode 100644
> index 0000000..e69de29
> diff --git a/arch/mips/boot/Makefile b/arch/mips/boot/Makefile
> new file mode 100644
> index 0000000..fd7a745
> --- /dev/null
> +++ b/arch/mips/boot/Makefile
> @@ -0,0 +1,4 @@
> +CPPFLAGS += -D__MIPS__ -fno-strict-aliasing -g -O0 -march=mips64
> +
> +obj-y += head.o
> +obj-y += entry.o

> diff --git a/arch/mips/configs/malta_defconfig b/arch/mips/configs/malta_defconfig

Please generate your defconfig file with make savedefconfig

> diff --git a/arch/mips/include/asm/posix_types.h b/arch/mips/include/asm/posix_types.h
> new file mode 100644
> index 0000000..a7d0c25
> --- /dev/null
> +++ b/arch/mips/include/asm/posix_types.h
> @@ -0,0 +1,48 @@
> +/*
> + * 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.
> + *
> + * 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., 59 Temple Place, Suite 330, Boston,
> + * MA 02111-1307 USA
> + *
> + */
> +
> +/**
> + * @file
> + * @brief mips posix types
> + *
> + * Minimal set to make all the other header files copied from the Linxu kernel happy

s/Linxu/Linux/

> + */
> +
> +#ifndef _ASM_MIPS_POSIX_TYPES_H
> +#define _ASM_MIPS_POSIX_TYPES_H
> +
> +typedef unsigned long	__kernel_ino_t;
> +typedef unsigned short	__kernel_mode_t;
> +typedef unsigned short	__kernel_nlink_t;
> +typedef long		__kernel_off_t;
> +typedef int		__kernel_pid_t;
> +typedef unsigned int	__kernel_size_t;
> +typedef int		__kernel_ssize_t;
> +typedef int		__kernel_ptrdiff_t;
> +typedef long		__kernel_time_t;
> +typedef long		__kernel_suseconds_t;
> +typedef long		__kernel_clock_t;
> +typedef int		__kernel_daddr_t;
> +typedef char *		__kernel_caddr_t;
> +typedef unsigned short	__kernel_uid16_t;
> +typedef unsigned short	__kernel_gid16_t;
> +typedef unsigned int	__kernel_uid32_t;
> +typedef unsigned int	__kernel_gid32_t;
> +typedef long long	__kernel_loff_t;
> +
> +#endif /* _ASM_MIPS_POSIX_TYPES_H */
> diff --git a/arch/mips/mach-qemu/csrc-r4k.c b/arch/mips/mach-qemu/csrc-r4k.c
> new file mode 100644
> index 0000000..bb54700
> --- /dev/null
> diff --git a/arch/mips/mach-qemu/reset.c b/arch/mips/mach-qemu/reset.c
> new file mode 100644
> index 0000000..c5a2537
> --- /dev/null
> +++ b/arch/mips/mach-qemu/reset.c
> @@ -0,0 +1,34 @@
> +/*
> + * Copyright (C) 2009 Juergen Beisert, Pengutronix
> + *
> + * 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.
> + *
> + * 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., 59 Temple Place, Suite 330, Boston,
> + * MA 02111-1307 USA
> + *
> + */
> +
> +/**
> + * @file
> + * @brief Resetting an CPU
> + */
> +
> +#include <common.h>
> +
> +void reset_cpu(ulong addr)
> +{
> +	/** How to reset the machine? */

I don't know either. We should add some printf here until we know.

> +	while(1)
> +		;
> +}
> +EXPORT_SYMBOL(reset_cpu);
> -- 
> 1.7.5.4
> 
> 
> _______________________________________________
> barebox mailing list
> barebox at lists.infradead.org
> http://lists.infradead.org/mailman/listinfo/barebox
> 

-- 
Pengutronix e.K.                           |                             |
Industrial Linux Solutions                 | http://www.pengutronix.de/  |
Peiner Str. 6-8, 31137 Hildesheim, Germany | Phone: +49-5121-206917-0    |
Amtsgericht Hildesheim, HRA 2686           | Fax:   +49-5121-206917-5555 |



More information about the barebox mailing list