From aa5f821ee3313b869784eec25fab5da265225738 Mon Sep 17 00:00:00 2001 From: Xiang Wang Date: Mon, 27 Aug 2018 13:32:32 +0800 Subject: soc/sifive/fu540: add CLINT support MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Change-Id: Ibc3a8644dcb83d5697d9d6e551c7682377285116 Signed-off-by: Xiang Wang Reviewed-on: https://review.coreboot.org/28355 Tested-by: build bot (Jenkins) Reviewed-by: Jonathan Neuschäfer --- src/soc/sifive/fu540/Makefile.inc | 2 +- src/soc/sifive/fu540/clint.c | 32 +++++++++++++++++++++++++++ src/soc/sifive/fu540/include/soc/addressmap.h | 1 + src/soc/sifive/fu540/include/soc/clint.h | 24 ++++++++++++++++++++ src/soc/sifive/fu540/mtime.c | 22 ------------------ 5 files changed, 58 insertions(+), 23 deletions(-) create mode 100644 src/soc/sifive/fu540/clint.c create mode 100644 src/soc/sifive/fu540/include/soc/clint.h delete mode 100644 src/soc/sifive/fu540/mtime.c diff --git a/src/soc/sifive/fu540/Makefile.inc b/src/soc/sifive/fu540/Makefile.inc index abd3458b28..677731a8af 100644 --- a/src/soc/sifive/fu540/Makefile.inc +++ b/src/soc/sifive/fu540/Makefile.inc @@ -14,7 +14,7 @@ ifeq ($(CONFIG_SOC_SIFIVE_FU540),y) bootblock-y += uart.c -bootblock-y += mtime.c +bootblock-y += clint.c bootblock-y += media.c bootblock-y += bootblock.c diff --git a/src/soc/sifive/fu540/clint.c b/src/soc/sifive/fu540/clint.c new file mode 100644 index 0000000000..00aec1ab37 --- /dev/null +++ b/src/soc/sifive/fu540/clint.c @@ -0,0 +1,32 @@ +/* + * This file is part of the coreboot project. + * + * Copyright (C) 2018 HardenedLinux + * + * 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; version 2 of the License. + * + * 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. + */ + +#include +#include +#include +#include + +void mtime_init(void) +{ + long hart_id = read_csr(mhartid); + HLS()->time = (uint64_t *)(FU540_CLINT + 0xbff8); + HLS()->timecmp = (uint64_t *)(FU540_CLINT + 0x4000 + 8 * hart_id); +} + +void set_msip(int hartid, int val) +{ + long hart_id = read_csr(mhartid); + write32((void *)(FU540_CLINT + 4 * hart_id), !!val); +} diff --git a/src/soc/sifive/fu540/include/soc/addressmap.h b/src/soc/sifive/fu540/include/soc/addressmap.h index 904c8b6589..0de1423ae2 100644 --- a/src/soc/sifive/fu540/include/soc/addressmap.h +++ b/src/soc/sifive/fu540/include/soc/addressmap.h @@ -15,6 +15,7 @@ #define FU540_MSEL 0x00001000 #define FU540_DTIM 0x01000000 +#define FU540_CLINT 0x02000000 #define FU540_L2LIM 0x08000000 #define FU540_UART0 0x10010000 #define FU540_UART(x) (FU540_UART0 + 0x1000 * (x)) diff --git a/src/soc/sifive/fu540/include/soc/clint.h b/src/soc/sifive/fu540/include/soc/clint.h new file mode 100644 index 0000000000..d2399c220a --- /dev/null +++ b/src/soc/sifive/fu540/include/soc/clint.h @@ -0,0 +1,24 @@ +/* + * This file is part of the coreboot project. + * + * Copyright (C) 2018 HardenedLinux + * + * 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; version 2 of the License. + * + * 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. + */ + +#ifndef __SOC_SIFIVE_FU540_CLINT_H +#define __SOC_SIFIVE_FU540_CLINT_H + +/* This function is used to set MSIP. + * It can be used to send an IPI (inter-processor interrupt) to + * another hart*/ +void set_msip(int hartid, int val); + +#endif diff --git a/src/soc/sifive/fu540/mtime.c b/src/soc/sifive/fu540/mtime.c deleted file mode 100644 index f8c2717563..0000000000 --- a/src/soc/sifive/fu540/mtime.c +++ /dev/null @@ -1,22 +0,0 @@ -/* - * This file is part of the coreboot project. - * - * Copyright (C) 2018 HardenedLinux - * - * 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; version 2 of the License. - * - * 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. - */ - -#include - -/* FIXME: This is an empty implementation, please improve */ -/* This function is used to initialize HLS()->time/HLS()->timecmp */ -void mtime_init(void) -{ -} -- cgit v1.2.3