All of lore.kernel.org
 help / color / mirror / Atom feed
From: Pragnesh Patel <pragnesh.patel@sifive.com>
To: u-boot@lists.denx.de
Subject: [PATCH 2/3] riscv: Add FU540 specific includes
Date: Tue, 31 Dec 2019 12:00:54 +0530	[thread overview]
Message-ID: <20191231063055.19412-3-pragnesh.patel@sifive.com> (raw)
In-Reply-To: <20191231063055.19412-1-pragnesh.patel@sifive.com>

Added headers needed by upcoming SPL support of FU540.

This headers are leveraged from FSBL
(https://github.com/sifive/freedom-u540-c000-bootloader.git)

Signed-off-by: Pragnesh Patel <pragnesh.patel@sifive.com>
---
 arch/riscv/include/asm/arch-fu540/cache.h | 43 ++++++++++++
 arch/riscv/include/asm/arch-fu540/clint.h | 20 ++++++
 arch/riscv/include/asm/arch-fu540/i2c.h   | 48 +++++++++++++
 arch/riscv/include/asm/arch-fu540/otp.h   | 80 +++++++++++++++++++++
 arch/riscv/include/asm/arch-fu540/spi.h   | 86 +++++++++++++++++++++++
 arch/riscv/include/asm/arch-fu540/uart.h  | 35 +++++++++
 6 files changed, 312 insertions(+)
 create mode 100644 arch/riscv/include/asm/arch-fu540/cache.h
 create mode 100644 arch/riscv/include/asm/arch-fu540/clint.h
 create mode 100644 arch/riscv/include/asm/arch-fu540/i2c.h
 create mode 100644 arch/riscv/include/asm/arch-fu540/otp.h
 create mode 100644 arch/riscv/include/asm/arch-fu540/spi.h
 create mode 100644 arch/riscv/include/asm/arch-fu540/uart.h

diff --git a/arch/riscv/include/asm/arch-fu540/cache.h b/arch/riscv/include/asm/arch-fu540/cache.h
new file mode 100644
index 0000000000..9043779650
--- /dev/null
+++ b/arch/riscv/include/asm/arch-fu540/cache.h
@@ -0,0 +1,43 @@
+/* SPDX-License-Identifier: GPL-2.0+ */
+/*
+ * Copyright (C) 2019 SiFive, Inc.
+ *
+ * Authors:
+ *   Pragnesh Patel <pragnesh.patel@sifive.com>
+ *   Troy Benjegerdes <troy.benjegerdes@sifive.com>
+ */
+
+#ifndef _CACHE_FU540_H
+#define _CACHE_FU540_H
+
+/* Register offsets */
+#define CCACHE_INFO         0x000
+#define CCACHE_ENABLE       0x008
+#define CCACHE_INJECT       0x040
+#define CCACHE_META_FIX     0x100
+#define CCACHE_DATA_FIX     0x140
+#define CCACHE_DATA_FAIL    0x160
+#define CCACHE_FLUSH64      0x200
+#define CCACHE_FLUSH32      0x240
+#define CCACHE_WAYS         0x800
+
+/* Bytes inside the INFO field */
+#define CCACHE_INFO_BANKS           0
+#define CCACHE_INFO_WAYS            1
+#define CCACHE_INFO_LG_SETS         2
+#define CCACHE_INFO_LG_BLOCKBYTES   3
+
+/* INJECT types */
+#define CCACHE_ECC_TOGGLE_DATA  0x00000
+#define CCACHE_ECC_TOGGLE_META  0x10000
+
+/* Offsets per FIX/FAIL */
+#define CCACHE_ECC_ADDR     0x0
+#define CCACHE_ECC_COUNT    0x8
+
+/* Interrupt Number offsets from Base */
+#define CCACHE_INT_META_FIX     0
+#define CCACHE_INT_DATA_FIX     1
+#define CCACHE_INT_DATA_FAIL    2
+
+#endif /* _CACHE_FU540_H */
diff --git a/arch/riscv/include/asm/arch-fu540/clint.h b/arch/riscv/include/asm/arch-fu540/clint.h
new file mode 100644
index 0000000000..f740f30f2d
--- /dev/null
+++ b/arch/riscv/include/asm/arch-fu540/clint.h
@@ -0,0 +1,20 @@
+/* SPDX-License-Identifier: GPL-2.0+ */
+/*
+ * Copyright (C) 2019 SiFive, Inc.
+ *
+ * Authors:
+ *   Pragnesh Patel <pragnesh.patel@sifive.com>
+ *   Troy Benjegerdes <troy.benjegerdes@sifive.com>
+ */
+
+#ifndef _CLINT_FU540_H
+#define _CLINT_FU540_H
+
+#define CLINT_MSIP 0x0000
+#define CLINT_MSIP_size   0x4
+#define CLINT_MTIMECMP 0x4000
+#define CLINT_MTIMECMP_size 0x8
+#define CLINT_MTIME 0xBFF8
+#define CLINT_MTIME_size 0x8
+
+#endif /* _CLINT_FU540_H */
diff --git a/arch/riscv/include/asm/arch-fu540/i2c.h b/arch/riscv/include/asm/arch-fu540/i2c.h
new file mode 100644
index 0000000000..66cc3edd94
--- /dev/null
+++ b/arch/riscv/include/asm/arch-fu540/i2c.h
@@ -0,0 +1,48 @@
+/* SPDX-License-Identifier: GPL-2.0+ */
+/*
+ * Copyright (C) 2019 SiFive, Inc.
+ *
+ * Authors:
+ *   Pragnesh Patel <pragnesh.patel@sifive.com>
+ *   Troy Benjegerdes <troy.benjegerdes@sifive.com>
+ */
+
+#ifndef _I2C_FU540_H
+#define _I2C_FU540_H
+
+// CHECK: word vs byte alignment
+// OC I2C Linux driver defines registers w/o alignment:
+// http://lxr.free-electrons.com/source/drivers/i2c/busses/i2c-ocores.c?v=4.6#L46
+//
+// However, register accessor functions use reg_shift value
+// http://lxr.free-electrons.com/source/drivers/i2c/busses/i2c-ocores.c?v=4.6#L80
+// which is platform specific:
+// http://lxr.free-electrons.com/source/drivers/i2c/busses/i2c-ocores.c?v=4.6#L346
+
+#define I2C_PRESCALER_LO  (0x00)
+#define I2C_PRESCALER_HI  (0x04)
+#define I2C_CONTROL       (0x08)
+#define I2C_DATA          (0x0C)
+#define I2C_CMD           (0x10) /* write only */
+#define I2C_STATUS        (0x10) /* read only, same address as I2C_CMD */
+
+// I2C_CONTROL register
+#define I2C_CONTROL_CORE_EN(x)  (((x) & 0x1) << 7)
+#define I2C_CONTROL_INT_EN(x)   (((x) & 0x1) << 6)
+
+// I2C_CMD register
+#define I2C_CMD_START(x)              (((x) & 0x1) << 7)
+#define I2C_CMD_STOP(x)               (((x) & 0x1) << 6)
+#define I2C_CMD_READ(x)               (((x) & 0x1) << 5)
+#define I2C_CMD_WRITE(x)              (((x) & 0x1) << 4)
+#define I2C_CMD_NACK(x)               (((x) & 0x1) << 3)
+#define I2C_CMD_IRQ_ACK(x)            (((x) & 0x1))
+
+// I2C_STATUS register
+#define I2C_STATUS_RECEIVED_NACK(x)   (((x) & 0x80) >> 7)
+#define I2C_STATUS_BUSY(x)            (((x) & 0x40) >> 6)
+#define I2C_STATUS_ARB_LOST(x)        (((x) & 0x20) >> 5)
+#define I2C_STATUS_TRS_INPROGRESS(x)  (((x) & 0x02) >> 1)
+#define I2C_STATUS_IRQ_FLAG(x)        (((x) & 0x01))
+
+#endif /* _I2C_FU540_H */
diff --git a/arch/riscv/include/asm/arch-fu540/otp.h b/arch/riscv/include/asm/arch-fu540/otp.h
new file mode 100644
index 0000000000..588e525765
--- /dev/null
+++ b/arch/riscv/include/asm/arch-fu540/otp.h
@@ -0,0 +1,80 @@
+/* SPDX-License-Identifier: GPL-2.0+ */
+/*
+ * Copyright (C) 2019 SiFive, Inc.
+ *
+ * Authors:
+ *   Pragnesh Patel <pragnesh.patel@sifive.com>
+ *   Troy Benjegerdes <troy.benjegerdes@sifive.com>
+ */
+
+#ifndef _OTP_FU540_H
+#define _OTP_FU540_H
+
+/* Register offsets */
+
+#define EMEMORYOTP_PA                 0x00
+#define EMEMORYOTP_PAIO               0x04
+#define EMEMORYOTP_PAS                0x08
+#define EMEMORYOTP_PCE                0x0C
+#define EMEMORYOTP_PCLK               0x10
+#define EMEMORYOTP_PDIN               0x14
+#define EMEMORYOTP_PDOUT              0x18
+#define EMEMORYOTP_PDSTB              0x1C
+#define EMEMORYOTP_PPROG              0x20
+#define EMEMORYOTP_PTC                0x24
+#define EMEMORYOTP_PTM                0x28
+#define EMEMORYOTP_PTM_REP            0x2C
+#define EMEMORYOTP_PTR                0x30
+#define EMEMORYOTP_PTRIM              0x34
+#define EMEMORYOTP_PWE                0x38
+
+/* Timing delays (in us)
+ * MIN indicates that there is no maximum.
+ * TYP indicates that there is a maximum
+ * that should not be exceeded.
+ * When the minimums are < 1us, I just put 1us.
+ */
+
+#define EMEMORYOTP_MIN_TVDS      1
+#define EMEMORYOTP_MIN_TSAS      2
+#define EMEMORYOTP_MIN_TTAS      50
+#define EMEMORYOTP_MIN_TTAH      1
+#define EMEMORYOTP_MIN_TASH      1
+#define EMEMORYOTP_MIN_TMS       1
+#define EMEMORYOTP_MIN_TCS       10
+#define EMEMORYOTP_MIN_TMH       1
+#define EMEMORYOTP_MIN_TAS       50
+
+#define EMEMORYOTP_MAX_TCD       1
+#define EMEMORYOTP_MIN_TKH       1
+
+// Note: This has an upper limit of 100.
+#define EMEMORYOTP_MIN_TCSP      10
+#define EMEMORYOTP_TYP_TCSP      11
+
+// This has an upper limit of 20.
+#define EMEMORYOTP_MIN_TPPS      5
+#define EMEMORYOTP_TYP_TPPS      6
+
+// This has an upper limit of 20.
+#define EMEMORYOTP_MIN_TPPH      1
+#define EMEMORYOTP_TYP_TPPH      2
+
+// This has upper limit of 100.
+#define EMEMORYOTP_MIN_TPPR      5
+#define EMEMORYOTP_TYP_TPPR      6
+
+// This has upper limit of 20
+#define EMEMORYOTP_MIN_TPW       10
+#define EMEMORYOTP_TYP_TPW       11
+
+#define EMEMORYOTP_MIN_TASP      1
+#define EMEMORYOTP_MIN_TDSP      1
+
+#define EMEMORYOTP_MIN_TAHP      1
+#define EMEMORYOTP_MIN_TDHP      1
+// This has a max of 5!
+#define EMEMORYOTP_MIN_TPWI      1
+#define EMEMORYOTP_TYP_TPWI      2
+
+#endif /* _OTP_FU540_H */
diff --git a/arch/riscv/include/asm/arch-fu540/spi.h b/arch/riscv/include/asm/arch-fu540/spi.h
new file mode 100644
index 0000000000..ea3f5344b7
--- /dev/null
+++ b/arch/riscv/include/asm/arch-fu540/spi.h
@@ -0,0 +1,86 @@
+/* SPDX-License-Identifier: GPL-2.0+ */
+/*
+ * Copyright (C) 2019 SiFive, Inc.
+ *
+ * Authors:
+ *   Pragnesh Patel <pragnesh.patel@sifive.com>
+ *   Troy Benjegerdes <troy.benjegerdes@sifive.com>
+ */
+
+#ifndef _SPI_FU540_H
+#define _SPI_FU540_H
+
+/* Register offsets */
+
+#define SPI_REG_SCKDIV          0x00
+#define SPI_REG_SCKMODE         0x04
+#define SPI_REG_CSID            0x10
+#define SPI_REG_CSDEF           0x14
+#define SPI_REG_CSMODE          0x18
+
+#define SPI_REG_DCSSCK          0x28
+#define SPI_REG_DSCKCS          0x2a
+#define SPI_REG_DINTERCS        0x2c
+#define SPI_REG_DINTERXFR       0x2e
+
+#define SPI_REG_FMT             0x40
+#define SPI_REG_TXFIFO          0x48
+#define SPI_REG_RXFIFO          0x4c
+#define SPI_REG_TXCTRL          0x50
+#define SPI_REG_RXCTRL          0x54
+
+#define SPI_REG_FCTRL           0x60
+#define SPI_REG_FFMT            0x64
+
+#define SPI_REG_IE              0x70
+#define SPI_REG_IP              0x74
+
+/* Fields */
+
+#define SPI_SCK_PHA             0x1
+#define SPI_SCK_POL             0x2
+
+#define SPI_FMT_PROTO(x)        ((x) & 0x3)
+#define SPI_FMT_ENDIAN(x)       (((x) & 0x1) << 2)
+#define SPI_FMT_DIR(x)          (((x) & 0x1) << 3)
+#define SPI_FMT_LEN(x)          (((x) & 0xf) << 16)
+
+/* TXCTRL register */
+#define SPI_TXWM(x)             ((x) & 0xffff)
+/* RXCTRL register */
+#define SPI_RXWM(x)             ((x) & 0xffff)
+
+#define SPI_IP_TXWM             0x1
+#define SPI_IP_RXWM             0x2
+
+#define SPI_FCTRL_EN            0x1
+
+#define SPI_INSN_CMD_EN         0x1
+#define SPI_INSN_ADDR_LEN(x)    (((x) & 0x7) << 1)
+#define SPI_INSN_PAD_CNT(x)     (((x) & 0xf) << 4)
+#define SPI_INSN_CMD_PROTO(x)   (((x) & 0x3) << 8)
+#define SPI_INSN_ADDR_PROTO(x)  (((x) & 0x3) << 10)
+#define SPI_INSN_DATA_PROTO(x)  (((x) & 0x3) << 12)
+#define SPI_INSN_CMD_CODE(x)    (((x) & 0xff) << 16)
+#define SPI_INSN_PAD_CODE(x)    (((x) & 0xff) << 24)
+
+#define SPI_TXFIFO_FULL  BIT(31)
+#define SPI_RXFIFO_EMPTY BIT(31)
+
+/* Values */
+
+#define SPI_CSMODE_AUTO         0
+#define SPI_CSMODE_HOLD         2
+#define SPI_CSMODE_OFF          3
+
+#define SPI_DIR_RX              0
+#define SPI_DIR_TX              1
+
+#define SPI_PROTO_S             0
+#define SPI_PROTO_D             1
+#define SPI_PROTO_Q             2
+
+#define SPI_ENDIAN_MSB          0
+#define SPI_ENDIAN_LSB          1
+
+#endif /* _SPI_FU540_H */
diff --git a/arch/riscv/include/asm/arch-fu540/uart.h b/arch/riscv/include/asm/arch-fu540/uart.h
new file mode 100644
index 0000000000..31ae079a18
--- /dev/null
+++ b/arch/riscv/include/asm/arch-fu540/uart.h
@@ -0,0 +1,35 @@
+/* SPDX-License-Identifier: GPL-2.0+ */
+/*
+ * Copyright (C) 2019 SiFive, Inc.
+ *
+ * Authors:
+ *   Pragnesh Patel <pragnesh.patel@sifive.com>
+ *   Troy Benjegerdes <troy.benjegerdes@sifive.com>
+ */
+
+#ifndef _UART_FU540_H
+#define _UART_FU540_H
+
+/* Register offsets */
+#define UART_REG_TXFIFO         0x00
+#define UART_REG_RXFIFO         0x04
+#define UART_REG_TXCTRL         0x08
+#define UART_REG_RXCTRL         0x0c
+#define UART_REG_IE             0x10
+#define UART_REG_IP             0x14
+#define UART_REG_DIV            0x18
+
+/* TXCTRL register */
+#define UART_TXEN               0x1
+#define UART_TXNSTOP            0x2
+#define UART_TXWM(x)            (((x) & 0xffff) << 16)
+
+/* RXCTRL register */
+#define UART_RXEN               0x1
+#define UART_RXWM(x)            (((x) & 0xffff) << 16)
+
+/* IP register */
+#define UART_IP_TXWM            0x1
+#define UART_IP_RXWM            0x2
+
+#endif /* _UART_FU540_H */
-- 
2.17.1

  parent reply	other threads:[~2019-12-31  6:30 UTC|newest]

Thread overview: 19+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2019-12-31  6:30 [PATCH 0/3] RISC-V SiFive FU540 support SPL Pragnesh Patel
2019-12-31  6:30 ` [PATCH 1/3] riscv: Add place-holder for FU540 clk and gpio Pragnesh Patel
2020-01-03 14:47   ` Bin Meng
2020-01-06  9:07     ` Pragnesh Patel
2019-12-31  6:30 ` Pragnesh Patel [this message]
2020-01-03 14:51   ` [PATCH 2/3] riscv: Add FU540 specific includes Bin Meng
2020-01-06  9:41     ` Pragnesh Patel
2019-12-31  6:30 ` [PATCH 3/3] riscv: sifive: fu540: add SPL configuration Pragnesh Patel
2019-12-31 17:18   ` Amit Tomer
2020-01-13 13:36     ` Pragnesh Patel
2020-01-02  4:58   ` Jagan Teki
2020-01-06 10:08     ` Pragnesh Patel
2020-01-13 14:32       ` Pragnesh Patel
2020-01-13 22:31         ` Lukas Auer
2020-01-15  5:12           ` Troy Benjegerdes
2020-01-15 17:41             ` Lukas Auer
2020-01-03 15:34   ` Bin Meng
2020-01-13 14:54     ` Pragnesh Patel
2020-01-14  5:10 ` [PATCH 0/3] RISC-V SiFive FU540 support SPL Anup Patel

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20191231063055.19412-3-pragnesh.patel@sifive.com \
    --to=pragnesh.patel@sifive.com \
    --cc=u-boot@lists.denx.de \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.