Skip to content

Commit

Permalink
MIPS: xilfpga: Add mipsfpga platform code
Browse files Browse the repository at this point in the history
The xilfpga platform will be DT only.

Add required platform code.
DT files have already been added separately.

Signed-off-by: Zubair Lutfullah Kakakhel <Zubair.Kakakhel@imgtec.com>
Cc: robh+dt@kernel.org
Cc: linux-mips@linux-mips.org
Cc: linux-kernel@vger.kernel.org
Cc: devicetree@vger.kernel.org
Patchwork: https://patchwork.linux-mips.org/patch/11364/
Signed-off-by: Ralf Baechle <ralf@linux-mips.org>
  • Loading branch information
Zubair Lutfullah Kakakhel authored and Ralf Baechle committed Nov 11, 2015
1 parent 552b8b3 commit 9937f5f
Show file tree
Hide file tree
Showing 9 changed files with 184 additions and 0 deletions.
1 change: 1 addition & 0 deletions arch/mips/Kbuild.platforms
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,7 @@ platforms += sibyte
platforms += sni
platforms += txx9
platforms += vr41xx
platforms += xilfpga

# include the platform specific files
include $(patsubst %, $(srctree)/arch/mips/%/Platform, $(platforms))
23 changes: 23 additions & 0 deletions arch/mips/Kconfig
Original file line number Diff line number Diff line change
Expand Up @@ -404,6 +404,28 @@ config MACH_PISTACHIO
help
This enables support for the IMG Pistachio SoC platform.

config MACH_XILFPGA
bool "MIPSfpga Xilinx based boards"
select ARCH_REQUIRE_GPIOLIB
select BOOT_ELF32
select BOOT_RAW
select BUILTIN_DTB
select CEVT_R4K
select COMMON_CLK
select CSRC_R4K
select IRQ_MIPS_CPU
select LIBFDT
select MIPS_CPU_SCACHE
select SYS_HAS_EARLY_PRINTK
select SYS_HAS_CPU_MIPS32_R2
select SYS_SUPPORTS_32BIT_KERNEL
select SYS_SUPPORTS_LITTLE_ENDIAN
select SYS_SUPPORTS_ZBOOT_UART16550
select USE_OF
select USE_GENERIC_EARLY_PRINTK_8250
help
This enables support for the IMG University Program MIPSfpga platform.

config MIPS_MALTA
bool "MIPS Malta board"
select ARCH_MAY_HAVE_PC_FDC
Expand Down Expand Up @@ -970,6 +992,7 @@ source "arch/mips/loongson32/Kconfig"
source "arch/mips/loongson64/Kconfig"
source "arch/mips/netlogic/Kconfig"
source "arch/mips/paravirt/Kconfig"
source "arch/mips/xilfpga/Kconfig"

endmenu

Expand Down
18 changes: 18 additions & 0 deletions arch/mips/include/asm/mach-xilfpga/irq.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
/*
* Copyright (C) 2015 Imagination Technologies
* Author: Zubair Lutfullah Kakakhel <Zubair.Kakakhel@imgtec.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.
*/

#ifndef __MIPS_ASM_MACH_XILFPGA_IRQ_H__
#define __MIPS_ASM_MACH_XILFPGA_IRQ_H__

#define NR_IRQS 32

#include_next <irq.h>

#endif /* __MIPS_ASM_MACH_XILFPGA_IRQ_H__ */
9 changes: 9 additions & 0 deletions arch/mips/xilfpga/Kconfig
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
choice
prompt "Machine type"
depends on MACH_XILFPGA
default XILFPGA_NEXYS4DDR

config XILFPGA_NEXYS4DDR
bool "Nexys4DDR by Digilent"

endchoice
7 changes: 7 additions & 0 deletions arch/mips/xilfpga/Makefile
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
#
# Makefile for the Xilfpga
#

obj-y += init.o
obj-y += intc.o
obj-y += time.o
3 changes: 3 additions & 0 deletions arch/mips/xilfpga/Platform
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
platform-$(CONFIG_MACH_XILFPGA) += xilfpga/
cflags-$(CONFIG_MACH_XILFPGA) += -I$(srctree)/arch/mips/include/asm/mach-xilfpga
load-$(CONFIG_MACH_XILFPGA) += 0xffffffff80100000
57 changes: 57 additions & 0 deletions arch/mips/xilfpga/init.c
Original file line number Diff line number Diff line change
@@ -0,0 +1,57 @@
/*
* Xilfpga platform setup
*
* Copyright (C) 2015 Imagination Technologies
* Author: Zubair Lutfullah Kakakhel <Zubair.Kakakhel@imgtec.com>
*
* This program is free software; you can redistribute it and/or modify it
* under the terms and conditions of the GNU General Public License,
* version 2, as published by the Free Software Foundation.
*/

#include <linux/of_fdt.h>
#include <linux/of_platform.h>

#include <asm/prom.h>

#define XILFPGA_UART_BASE 0xb0401000

const char *get_system_type(void)
{
return "MIPSfpga";
}

void __init plat_mem_setup(void)
{
__dt_setup_arch(__dtb_start);
strlcpy(arcs_cmdline, boot_command_line, COMMAND_LINE_SIZE);
}

void __init prom_init(void)
{
setup_8250_early_printk_port(XILFPGA_UART_BASE, 2, 50000);
}

void __init prom_free_prom_memory(void)
{
}

void __init device_tree_init(void)
{
if (!initial_boot_params)
return;

unflatten_and_copy_device_tree();
}

static int __init plat_of_setup(void)
{
if (!of_have_populated_dt())
panic("Device tree not present");

if (of_platform_populate(NULL, of_default_bus_match_table, NULL, NULL))
panic("Failed to populate DT");

return 0;
}
arch_initcall(plat_of_setup);
25 changes: 25 additions & 0 deletions arch/mips/xilfpga/intc.c
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
/*
* Xilfpga interrupt controller setup
*
* Copyright (C) 2015 Imagination Technologies
* Author: Zubair Lutfullah Kakakhel <Zubair.Kakakhel@imgtec.com>
*
* This program is free software; you can redistribute it and/or modify it
* under the terms and conditions of the GNU General Public License,
* version 2, as published by the Free Software Foundation.
*/

#include <linux/of.h>
#include <linux/of_irq.h>

#include <asm/irq_cpu.h>

static struct of_device_id of_irq_ids[] __initdata = {
{ .compatible = "mti,cpu-interrupt-controller", .data = mips_cpu_irq_of_init },
{},
};

void __init arch_init_irq(void)
{
of_irq_init(of_irq_ids);
}
41 changes: 41 additions & 0 deletions arch/mips/xilfpga/time.c
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
/*
* Xilfpga clocksource/timer setup
*
* Copyright (C) 2015 Imagination Technologies
* Author: Zubair Lutfullah Kakakhel <Zubair.Kakakhel@imgtec.com>
*
* This program is free software; you can redistribute it and/or modify it
* under the terms and conditions of the GNU General Public License,
* version 2, as published by the Free Software Foundation.
*/

#include <linux/clk.h>
#include <linux/clk-provider.h>
#include <linux/clocksource.h>
#include <linux/of.h>

#include <asm/time.h>

void __init plat_time_init(void)
{
struct device_node *np;
struct clk *clk;

of_clk_init(NULL);
clocksource_of_init();

np = of_get_cpu_node(0, NULL);
if (!np) {
pr_err("Failed to get CPU node\n");
return;
}

clk = of_clk_get(np, 0);
if (IS_ERR(clk)) {
pr_err("Failed to get CPU clock: %ld\n", PTR_ERR(clk));
return;
}

mips_hpt_frequency = clk_get_rate(clk) / 2;
clk_put(clk);
}

0 comments on commit 9937f5f

Please sign in to comment.