Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 2a4e669d authored by Max Filippov's avatar Max Filippov
Browse files

Merge branch 'xtensa-sim-params' into xtensa-fixes

parents 062b1c19 fbe22d28
Loading
Loading
Loading
Loading
+2 −3
Original line number Diff line number Diff line
@@ -317,8 +317,9 @@ static inline int mem_reserve(unsigned long start, unsigned long end)

void __init setup_arch(char **cmdline_p)
{
	strlcpy(boot_command_line, command_line, COMMAND_LINE_SIZE);
	*cmdline_p = command_line;
	platform_setup(cmdline_p);
	strlcpy(boot_command_line, *cmdline_p, COMMAND_LINE_SIZE);

	/* Reserve some memory regions */

@@ -382,8 +383,6 @@ void __init setup_arch(char **cmdline_p)

	unflatten_and_copy_device_tree();

	platform_setup(cmdline_p);

#ifdef CONFIG_SMP
	smp_init_cpus();
#endif
+20 −0
Original line number Diff line number Diff line
@@ -6,6 +6,7 @@
 * for more details.
 *
 * Copyright (C) 2001 Tensilica Inc.
 * Copyright (C) 2017 Cadence Design Systems Inc.
 */

#ifndef _XTENSA_PLATFORM_ISS_SIMCALL_H
@@ -49,6 +50,10 @@
#define SYS_bind        30
#define SYS_ioctl	31

#define SYS_iss_argc	1000	/* returns value of argc */
#define SYS_iss_argv_size 1001	/* bytes needed for argv & arg strings */
#define SYS_iss_set_argv 1002	/* saves argv & arg strings at given addr */

/*
 * SYS_select_one specifiers
 */
@@ -118,5 +123,20 @@ static inline int simc_lseek(int fd, uint32_t off, int whence)
	return __simc(SYS_lseek, fd, off, whence);
}

static inline int simc_argc(void)
{
	return __simc(SYS_iss_argc, 0, 0, 0);
}

static inline int simc_argv_size(void)
{
	return __simc(SYS_iss_argv_size, 0, 0, 0);
}

static inline void simc_argv(void *buf)
{
	__simc(SYS_iss_set_argv, (int)buf, 0, 0);
}

#endif /* _XTENSA_PLATFORM_ISS_SIMCALL_H */
+23 −20
Original line number Diff line number Diff line
@@ -8,6 +8,7 @@
 *          Joe Taylor <joe@tensilica.com>
 *
 * Copyright 2001 - 2005 Tensilica Inc.
 * Copyright 2017 Cadence Design Systems Inc.
 *
 * 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
@@ -15,6 +16,7 @@
 * option) any later version.
 *
 */
#include <linux/bootmem.h>
#include <linux/stddef.h>
#include <linux/kernel.h>
#include <linux/init.h>
@@ -31,13 +33,13 @@

#include <asm/platform.h>
#include <asm/bootparam.h>
#include <asm/setup.h>

#include <platform/simcall.h>


void __init platform_init(bp_tag_t* bootparam)
{

}

void platform_halt(void)
@@ -59,25 +61,9 @@ void platform_restart(void)
	/* control never gets here */
}

extern void iss_net_poll(void);

const char twirl[]="|/-\\|/-\\";

void platform_heartbeat(void)
{
#if 0
	static int i = 0, j = 0;

	if (--i < 0) {
		i = 99;
		printk("\r%c\r", twirl[j++]);
		if (j == 8)
			j = 0;
}
#endif
}



static int
iss_panic_event(struct notifier_block *this, unsigned long event, void *ptr)
@@ -87,12 +73,29 @@ iss_panic_event(struct notifier_block *this, unsigned long event, void *ptr)
}

static struct notifier_block iss_panic_block = {
	iss_panic_event,
	NULL,
	0
	.notifier_call = iss_panic_event,
};

void __init platform_setup(char **p_cmdline)
{
	int argc = simc_argc();
	int argv_size = simc_argv_size();

	if (argc > 1) {
		void **argv = alloc_bootmem(argv_size);
		char *cmdline = alloc_bootmem(argv_size);
		int i;

		cmdline[0] = 0;
		simc_argv((void *)argv);

		for (i = 1; i < argc; ++i) {
			if (i > 1)
				strcat(cmdline, " ");
			strcat(cmdline, argv[i]);
		}
		*p_cmdline = cmdline;
	}

	atomic_notifier_chain_register(&panic_notifier_list, &iss_panic_block);
}