Skip to content

Commit

Permalink
MIPS: Loongson: Split the implementation of prom and setup parts
Browse files Browse the repository at this point in the history
This patch split the old initilization and setup implementation to
several file, one file one logic function.

the other main changes include:

	1. as the script/checkpatch.pl suggests, use strict_strtol instead
	of simple_strtol in arch/mips/lemote/lm2e/cmdline.c

	2. use the existed macros in asm/mips-boards/bonito64.h as the
	arguments of set_io_port_base() and remove the un-needed ones in
	asm/mach-lemote/pci.h

Signed-off-by: Wu Zhangjin <wuzj@lemote.com>
Signed-off-by: Ralf Baechle <ralf@linux-mips.org>
  • Loading branch information
Wu Zhangjin authored and Ralf Baechle committed Sep 17, 2009
1 parent f54a40e commit bd92aa0
Show file tree
Hide file tree
Showing 9 changed files with 168 additions and 86 deletions.
1 change: 0 additions & 1 deletion arch/mips/include/asm/mach-lemote/pci.h
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,5 @@
#define LOONGSON2E_PCI_MEM_START 0x14000000UL
#define LOONGSON2E_PCI_MEM_END 0x1fffffffUL
#define LOONGSON2E_PCI_IO_START 0x00004000UL
#define LOONGSON2E_IO_PORT_BASE 0x1fd00000UL

#endif /* !_LEMOTE_PCI_H_ */
3 changes: 2 additions & 1 deletion arch/mips/lemote/lm2e/Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,8 @@
# Makefile for Lemote Fulong mini-PC board.
#

obj-y += setup.o prom.o reset.o irq.o pci.o bonito-irq.o mem.o
obj-y += setup.o init.o reset.o irq.o pci.o bonito-irq.o mem.o \
env.o cmdline.o time.o machtype.o

#
# Early printk support
Expand Down
64 changes: 13 additions & 51 deletions arch/mips/lemote/lm2e/prom.c → arch/mips/lemote/lm2e/cmdline.c
Original file line number Diff line number Diff line change
Expand Up @@ -9,83 +9,45 @@
* Copyright (C) 2007 Lemote Inc. & Insititute of Computing Technology
* Author: Fuxin Zhang, zhangfx@lemote.com
*
* Copyright (C) 2009 Lemote Inc. & Insititute of Computing Technology
* Author: Wu Zhangjin, wuzj@lemote.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.
*/
#include <linux/io.h>
#include <linux/init.h>
#include <linux/bootmem.h>
#include <asm/bootinfo.h>

extern unsigned long bus_clock;
extern unsigned long cpu_clock_freq;
extern unsigned int memsize, highmemsize;
#include <asm/bootinfo.h>

static int argc;
int prom_argc;
/* pmon passes arguments in 32bit pointers */
static int *arg;
static int *env;

const char *get_system_type(void)
{
return "lemote-fulong";
}
int *_prom_argv;

void __init prom_init_cmdline(void)
{
int i;
long l;

/* firmware arguments are initialized in head.S */
prom_argc = fw_arg0;
_prom_argv = (int *)fw_arg1;

/* arg[0] is "g", the rest is boot parameters */
arcs_cmdline[0] = '\0';
for (i = 1; i < argc; i++) {
l = (long)arg[i];
for (i = 1; i < prom_argc; i++) {
l = (long)_prom_argv[i];
if (strlen(arcs_cmdline) + strlen(((char *)l) + 1)
>= sizeof(arcs_cmdline))
break;
strcat(arcs_cmdline, ((char *)l));
strcat(arcs_cmdline, " ");
}
}

void __init prom_init(void)
{
long l;
argc = fw_arg0;
arg = (int *)fw_arg1;
env = (int *)fw_arg2;

prom_init_cmdline();

if ((strstr(arcs_cmdline, "console=")) == NULL)
strcat(arcs_cmdline, " console=ttyS0,115200");
if ((strstr(arcs_cmdline, "root=")) == NULL)
strcat(arcs_cmdline, " root=/dev/hda1");

#define parse_even_earlier(res, option, p) \
do { \
if (strncmp(option, (char *)p, strlen(option)) == 0) \
res = simple_strtol((char *)p + strlen(option"="), \
NULL, 10); \
} while (0)

l = (long)*env;
while (l != 0) {
parse_even_earlier(bus_clock, "busclock", l);
parse_even_earlier(cpu_clock_freq, "cpuclock", l);
parse_even_earlier(memsize, "memsize", l);
parse_even_earlier(highmemsize, "highmemsize", l);
env++;
l = (long)*env;
}
if (memsize == 0)
memsize = 256;

pr_info("busclock=%ld, cpuclock=%ld,memsize=%d,highmemsize=%d\n",
bus_clock, cpu_clock_freq, memsize, highmemsize);
}

void __init prom_free_prom_memory(void)
{
}
60 changes: 60 additions & 0 deletions arch/mips/lemote/lm2e/env.c
Original file line number Diff line number Diff line change
@@ -0,0 +1,60 @@
/*
* Based on Ocelot Linux port, which is
* Copyright 2001 MontaVista Software Inc.
* Author: jsun@mvista.com or jsun@junsun.net
*
* Copyright 2003 ICT CAS
* Author: Michael Guo <guoyi@ict.ac.cn>
*
* Copyright (C) 2007 Lemote Inc. & Insititute of Computing Technology
* Author: Fuxin Zhang, zhangfx@lemote.com
*
* Copyright (C) 2009 Lemote Inc. & Insititute of Computing Technology
* Author: Wu Zhangjin, wuzj@lemote.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.
*/

#include <linux/io.h>
#include <linux/init.h>

#include <asm/bootinfo.h>

unsigned long bus_clock, cpu_clock_freq;
unsigned long memsize, highmemsize;

/* pmon passes arguments in 32bit pointers */
int *_prom_envp;

#define parse_even_earlier(res, option, p) \
do { \
if (strncmp(option, (char *)p, strlen(option)) == 0) \
strict_strtol((char *)p + strlen(option"="), \
10, &res); \
} while (0)

void __init prom_init_env(void)
{
long l;

/* firmware arguments are initialized in head.S */
_prom_envp = (int *)fw_arg2;

l = (long)*_prom_envp;
while (l != 0) {
parse_even_earlier(bus_clock, "busclock", l);
parse_even_earlier(cpu_clock_freq, "cpuclock", l);
parse_even_earlier(memsize, "memsize", l);
parse_even_earlier(highmemsize, "highmemsize", l);
_prom_envp++;
l = (long)*_prom_envp;
}
if (memsize == 0)
memsize = 256;

pr_info("busclock=%ld, cpuclock=%ld, memsize=%ld, highmemsize=%ld\n",
bus_clock, cpu_clock_freq, memsize, highmemsize);
}
34 changes: 34 additions & 0 deletions arch/mips/lemote/lm2e/init.c
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
/*
* Copyright (C) 2009 Lemote Inc. & Insititute of Computing Technology
* Author: Wu Zhangjin, wuzj@lemote.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.
*/

#include <linux/init.h>
#include <linux/bootmem.h>

#include <asm/bootinfo.h>
#include <asm/mips-boards/bonito64.h>

extern void __init prom_init_cmdline(void);
extern void __init prom_init_env(void);
extern void __init prom_init_memory(void);

void __init prom_init(void)
{
/* init base address of io space */
set_io_port_base((unsigned long)
ioremap(BONITO_PCIIO_BASE, BONITO_PCIIO_SIZE));

prom_init_cmdline();
prom_init_env();
prom_init_memory();
}

void __init prom_free_prom_memory(void)
{
}
15 changes: 15 additions & 0 deletions arch/mips/lemote/lm2e/machtype.c
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
/*
* Copyright (C) 2009 Lemote Inc. & Insititute of Computing Technology
* Author: Wu Zhangjin, wuzj@lemote.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.
*/

const char *get_system_type(void)
{
return "lemote-fulong";
}

13 changes: 13 additions & 0 deletions arch/mips/lemote/lm2e/mem.c
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,19 @@
#include <linux/fcntl.h>
#include <linux/mm.h>

#include <asm/bootinfo.h>

extern unsigned long memsize, highmemsize;

void __init prom_init_memory(void)
{
add_memory_region(0x0, (memsize << 20), BOOT_MEM_RAM);
#ifdef CONFIG_64BIT
if (highmemsize > 0)
add_memory_region(0x20000000, highmemsize << 20, BOOT_MEM_RAM);
#endif /* CONFIG_64BIT */
}

/* override of arch/mips/mm/cache.c: __uncached_access */
int __uncached_access(struct file *file, unsigned long addr)
{
Expand Down
34 changes: 1 addition & 33 deletions arch/mips/lemote/lm2e/setup.c
Original file line number Diff line number Diff line change
Expand Up @@ -26,37 +26,16 @@
* 675 Mass Ave, Cambridge, MA 02139, USA.
*
*/
#include <linux/bootmem.h>
#include <linux/init.h>
#include <linux/irq.h>
#include <linux/module.h>

#include <asm/bootinfo.h>
#include <asm/mc146818-time.h>
#include <asm/time.h>
#include <asm/wbflush.h>
#include <asm/mach-lemote/pci.h>

#ifdef CONFIG_VT
#include <linux/console.h>
#include <linux/screen_info.h>
#endif

unsigned long cpu_clock_freq;
unsigned long bus_clock;
unsigned int memsize;
unsigned int highmemsize = 0;

void __init plat_time_init(void)
{
/* setup mips r4k timer */
mips_hpt_frequency = cpu_clock_freq / 2;
}

unsigned long read_persistent_clock(void)
{
return mc146818_get_cmos_time();
}

void (*__wbflush)(void);
EXPORT_SYMBOL(__wbflush);

Expand All @@ -73,18 +52,8 @@ static void wbflush_loongson2e(void)

void __init plat_mem_setup(void)
{
set_io_port_base((unsigned long)ioremap(LOONGSON2E_IO_PORT_BASE,
IO_SPACE_LIMIT - LOONGSON2E_PCI_IO_START + 1));

__wbflush = wbflush_loongson2e;

add_memory_region(0x0, (memsize << 20), BOOT_MEM_RAM);
#ifdef CONFIG_64BIT
if (highmemsize > 0) {
add_memory_region(0x20000000, highmemsize << 20, BOOT_MEM_RAM);
}
#endif

#ifdef CONFIG_VT
#if defined(CONFIG_VGA_CONSOLE)
conswitchp = &vga_con;
Expand All @@ -104,5 +73,4 @@ void __init plat_mem_setup(void)
conswitchp = &dummy_con;
#endif
#endif

}
30 changes: 30 additions & 0 deletions arch/mips/lemote/lm2e/time.c
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
/*
* Copyright (C) 2007 Lemote, Inc. & Institute of Computing Technology
* Author: Fuxin Zhang, zhangfx@lemote.com
*
* Copyright (C) 2009 Lemote Inc. & Insititute of Computing Technology
* Author: Wu Zhangjin, wuzj@lemote.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.
*/

#include <linux/init.h>

#include <asm/mc146818-time.h>
#include <asm/time.h>

extern unsigned long cpu_clock_freq;

void __init plat_time_init(void)
{
/* setup mips r4k timer */
mips_hpt_frequency = cpu_clock_freq / 2;
}

unsigned long read_persistent_clock(void)
{
return mc146818_get_cmos_time();
}

0 comments on commit bd92aa0

Please sign in to comment.