[coreboot-gerrit] New patch to review for coreboot: 9ea6535 pistachio: Change all SoC headers to <soc/headername.h> system
Patrick Georgi (pgeorgi@google.com)
gerrit at coreboot.org
Tue Apr 7 13:01:28 CEST 2015
Patrick Georgi (pgeorgi at google.com) just uploaded a new patch set to gerrit, which you can find at http://review.coreboot.org/9335
-gerrit
commit 9ea6535d63e3805bbcb4d53a9c5e9994ab6e30ec
Author: Julius Werner <jwerner at chromium.org>
Date: Mon Oct 20 13:22:00 2014 -0700
pistachio: Change all SoC headers to <soc/headername.h> system
This patch aligns pistachio to the new SoC header include scheme.
Also alphabetized headers in affected files since we touch them anyway.
BUG=None
TEST=Tested with whole series. Compiled Urara.
Change-Id: I0609b307695ba6a922384ac34dd604bffcb20692
Signed-off-by: Patrick Georgi <pgeorgi at chromium.org>
Original-Commit-Id: 0a577918babf26adf10baa0f56a7065f5659d285
Original-Change-Id: I3ed405a3efdeec28965538d19a22f2b5b8204f01
Original-Signed-off-by: Julius Werner <jwerner at chromium.org>
Original-Reviewed-on: https://chromium-review.googlesource.com/224503
Original-Reviewed-by: Aaron Durbin <adurbin at chromium.org>
---
src/mainboard/google/urara/memlayout.ld | 2 +-
src/soc/imgtec/pistachio/Makefile.inc | 2 +
src/soc/imgtec/pistachio/cpu.h | 24 --
src/soc/imgtec/pistachio/include/soc/cpu.h | 24 ++
src/soc/imgtec/pistachio/include/soc/memlayout.ld | 38 +++
src/soc/imgtec/pistachio/include/soc/spi.h | 358 ++++++++++++++++++++++
src/soc/imgtec/pistachio/memlayout.ld | 38 ---
src/soc/imgtec/pistachio/spi.c | 4 +-
src/soc/imgtec/pistachio/spi.h | 358 ----------------------
9 files changed, 425 insertions(+), 423 deletions(-)
diff --git a/src/mainboard/google/urara/memlayout.ld b/src/mainboard/google/urara/memlayout.ld
index ab0b4dd..ead7f47 100644
--- a/src/mainboard/google/urara/memlayout.ld
+++ b/src/mainboard/google/urara/memlayout.ld
@@ -1 +1 @@
-#include <soc/imgtec/pistachio/memlayout.ld>
+#include <soc/memlayout.ld>
diff --git a/src/soc/imgtec/pistachio/Makefile.inc b/src/soc/imgtec/pistachio/Makefile.inc
index d052c8f..e955968 100644
--- a/src/soc/imgtec/pistachio/Makefile.inc
+++ b/src/soc/imgtec/pistachio/Makefile.inc
@@ -42,6 +42,8 @@ romstage-y += romstage.c
romstage-y += monotonic_timer.c
romstage-y += timestamp.c
+CPPFLAGS_common += -Isrc/soc/imgtec/pistachio/include/
+
# Generate the actual coreboot bootblock code
$(objcbfs)/bootblock.raw: $(objcbfs)/bootblock.elf
@printf " OBJCOPY $(subst $(obj)/,,$(@))\n"
diff --git a/src/soc/imgtec/pistachio/cpu.h b/src/soc/imgtec/pistachio/cpu.h
deleted file mode 100644
index c61c58d..0000000
--- a/src/soc/imgtec/pistachio/cpu.h
+++ /dev/null
@@ -1,24 +0,0 @@
-/*
- * This file is part of the coreboot project.
- *
- * Copyright (C) 2014 Imagination Technologies
- *
- * 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_IMGTEC_DANUBE_CPU_H__
-#define __SOC_IMGTEC_DANUBE_CPU_H__
-
-#define IMG_SPIM0_BASE_ADDRESS 0xB8100F00
-#define IMG_SPIM1_BASE_ADDRESS 0xB8101000
-
-#endif
diff --git a/src/soc/imgtec/pistachio/include/soc/cpu.h b/src/soc/imgtec/pistachio/include/soc/cpu.h
new file mode 100644
index 0000000..c61c58d
--- /dev/null
+++ b/src/soc/imgtec/pistachio/include/soc/cpu.h
@@ -0,0 +1,24 @@
+/*
+ * This file is part of the coreboot project.
+ *
+ * Copyright (C) 2014 Imagination Technologies
+ *
+ * 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_IMGTEC_DANUBE_CPU_H__
+#define __SOC_IMGTEC_DANUBE_CPU_H__
+
+#define IMG_SPIM0_BASE_ADDRESS 0xB8100F00
+#define IMG_SPIM1_BASE_ADDRESS 0xB8101000
+
+#endif
diff --git a/src/soc/imgtec/pistachio/include/soc/memlayout.ld b/src/soc/imgtec/pistachio/include/soc/memlayout.ld
new file mode 100644
index 0000000..21c3d73
--- /dev/null
+++ b/src/soc/imgtec/pistachio/include/soc/memlayout.ld
@@ -0,0 +1,38 @@
+/*
+ * This file is part of the coreboot project.
+ *
+ * Copyright 2014 Google 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 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.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+ */
+
+#include <memlayout.h>
+
+#include <arch/header.ld>
+
+/* TODO: This should be revised by someone who understands the SoC better. */
+
+SECTIONS
+{
+ CBFS_CACHE(0x0, 0) /* TODO: fix this, it was already broken before!!! */
+
+ DRAM_START(0x80000000)
+ RAMSTAGE(0x80000000, 128K)
+
+ /* TODO: Does this SoC use SRAM? Add SRAM_START() and SRAM_END(). */
+ BOOTBLOCK(0x9B000000, 16K)
+ ROMSTAGE(0x9B004000, 40K)
+ STACK(0x9B00E000, 6K)
+ PRERAM_CBMEM_CONSOLE(0x9B00F800, 3K)
+}
diff --git a/src/soc/imgtec/pistachio/include/soc/spi.h b/src/soc/imgtec/pistachio/include/soc/spi.h
new file mode 100644
index 0000000..91d6d55
--- /dev/null
+++ b/src/soc/imgtec/pistachio/include/soc/spi.h
@@ -0,0 +1,358 @@
+/*
+ * This file is part of the coreboot project.
+ *
+ * Copyright (C) 2014 Imagination Technologies
+ *
+ * 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_IMGTEC_DANUBE_SPI_H__
+#define __SOC_IMGTEC_DANUBE_SPI_H__
+
+#include <arch/types.h>
+#include <arch/io.h>
+
+#define spi_read_reg_field(regval, field) \
+( \
+ ((field##_MASK) == 0xFFFFFFFF) ? \
+ (regval) : \
+ (((regval) & (field##_MASK)) >> (field##_SHIFT))\
+)
+
+#define spi_write_reg_field(regval, field, val) \
+( \
+ ((field##_MASK) == 0xFFFFFFFF) ? \
+ (val) : \
+ (((regval) & ~(field##_MASK)) | \
+ (((val) << (field##_SHIFT)) & (field##_MASK))) \
+)
+
+/*
+ * Parameter register
+ * Each of these corresponds to a single port (ie CS line) in the interface
+ * Fields Name Description
+ * ====== ==== ===========
+ * b31:24 CLK_RATE Bit Clock rate = (24.576 * value / 512) MHz
+ * b23:16 CS_SETUP Chip Select setup = (40 * value) ns
+ * b15:8 CS_HOLD Chip Select hold = (40 * value) ns
+ * b7:0 CS_DELAY Chip Select delay = (40 * value) ns
+ */
+
+#define SPIM_CLK_DIVIDE_MASK (0xFF000000)
+#define SPIM_CS_SETUP_MASK (0x00FF0000)
+#define SPIM_CS_HOLD_MASK (0x0000FF00)
+#define SPIM_CS_DELAY_MASK (0x000000FF)
+#define SPIM_CS_PARAM_MASK (SPIM_CS_SETUP_MASK \
+ | SPIM_CS_HOLD_MASK \
+ | SPIM_CS_DELAY_MASK)
+
+#define SPIM_CLK_DIVIDE_SHIFT (24)
+#define SPIM_CS_SETUP_SHIFT (16)
+#define SPIM_CS_HOLD_SHIFT (8)
+#define SPIM_CS_DELAY_SHIFT (0)
+#define SPIM_CS_PARAM_SHIFT (0)
+
+/* Control register */
+
+#define SPFI_DRIBBLE_COUNT_MASK (0x000e0000)
+#define SPFI_MEMORY_IF_MASK (0x00008000)
+#define SPIM_BYTE_DELAY_MASK (0x00004000)
+#define SPIM_CS_DEASSERT_MASK (0x00002000)
+#define SPIM_CONTINUE_MASK (0x00001000)
+#define SPIM_SOFT_RESET_MASK (0x00000800)
+#define SPIM_SEND_DMA_MASK (0x00000400)
+#define SPIM_GET_DMA_MASK (0x00000200)
+#define SPIM_EDGE_TX_RX_MASK (0x00000100)
+#define SPFI_TRNSFR_MODE_MASK (0x000000e0)
+#define SPFI_TRNSFR_MODE_DQ_MASK (0x0000001c)
+#define SPFI_TX_RX_MASK (0x00000002)
+#define SPFI_EN_MASK (0x00000001)
+
+#define SPFI_DRIBBLE_COUNT_SHIFT (17)
+#define SPFI_MEMORY_IF_SHIFT (15)
+#define SPIM_BYTE_DELAY_SHIFT (14)
+#define SPIM_CS_DEASSERT_SHIFT (13)
+#define SPIM_CONTINUE_SHIFT (12)
+#define SPIM_SOFT_RESET_SHIFT (11)
+#define SPIM_SEND_DMA_SHIFT (10)
+#define SPIM_GET_DMA_SHIFT (9)
+#define SPIM_EDGE_TX_RX_SHIFT (8)
+#define SPFI_TRNSFR_MODE_SHIFT (5)
+#define SPFI_TRNSFR_MODE_DQ_SHIFT (2)
+#define SPFI_TX_RX_SHIFT (1)
+#define SPFI_EN_SHIFT (0)
+
+/* Transaction register */
+
+#define SPFI_TSIZE_MASK (0xffff0000)
+#define SPFI_CMD_LENGTH_MASK (0x0000e000)
+#define SPFI_ADDR_LENGTH_MASK (0x00001c00)
+#define SPFI_DUMMY_LENGTH_MASK (0x000003e0)
+#define SPFI_PI_LENGTH_MASK (0x0000001c)
+
+#define SPFI_TSIZE_SHIFT (16)
+#define SPFI_CMD_LENGTH_SHIFT (13)
+#define SPFI_ADDR_LENGTH_SHIFT (10)
+#define SPFI_DUMMY_LENGTH_SHIFT (5)
+#define SPFI_PI_LENGTH_SHIFT (2)
+
+/* Port state register */
+
+#define SPFI_PORT_SELECT_MASK (0x00700000)
+/* WARNING the following bits are reversed */
+#define SPFI_CLOCK0_IDLE_MASK (0x000f8000)
+#define SPFI_CLOCK0_PHASE_MASK (0x00007c00)
+#define SPFI_CS0_IDLE_MASK (0x000003e0)
+#define SPFI_DATA0_IDLE_MASK (0x0000001f)
+
+#define SPIM_CLOCK0_IDLE_MASK (0x000f8000)
+#define SPIM_CLOCK0_PHASE_MASK (0x00007c00)
+#define SPIM_CS0_IDLE_MASK (0x000003e0)
+#define SPIM_DATA0_IDLE_MASK (0x0000001f)
+
+#define SPIM_PORT0_MASK (0x00084210)
+
+#define SPFI_PORT_SELECT_SHIFT (20)
+/* WARNING the following bits are reversed, bit 0 is highest */
+#define SPFI_CLOCK0_IDLE_SHIFT (19)
+#define SPFI_CLOCK0_PHASE_SHIFT (14)
+#define SPFI_CS0_IDLE_SHIFT (9)
+#define SPFI_DATA0_IDLE_SHIFT (4)
+
+#define SPIM_CLOCK0_IDLE_SHIFT (19)
+#define SPIM_CLOCK0_PHASE_SHIFT (14)
+#define SPIM_CS0_IDLE_SHIFT (9)
+#define SPIM_DATA0_IDLE_SHIFT (4)
+
+
+/*
+ * Interrupt registers
+ * SPFI_GDOF_MASK means Rx buffer full, not an overflow, because clock stalls
+ * SPFI_SDUF_MASK means Tx buffer empty, not an underflow, because clock stalls
+ */
+#define SPFI_IACCESS_MASK (0x00001000)
+#define SPFI_GDEX8BIT_MASK (0x00000800)
+#define SPFI_ALLDONE_MASK (0x00000200)
+#define SPFI_GDFUL_MASK (0x00000100)
+#define SPFI_GDHF_MASK (0x00000080)
+#define SPFI_GDEX32BIT_MASK (0x00000040)
+#define SPFI_GDTRIG_MASK (0x00000020)
+#define SPFI_SDFUL_MASK (0x00000008)
+#define SPFI_SDHF_MASK (0x00000004)
+#define SPFI_SDE_MASK (0x00000002)
+#define SPFI_SDTRIG_MASK (0x00000001)
+
+#define SPFI_IACCESS_SHIFT (12)
+#define SPFI_GDEX8BIT_SHIFT (11)
+#define SPFI_ALLDONE_SHIFT (9)
+#define SPFI_GDFUL_SHIFT (8)
+#define SPFI_GDHF_SHIFT (7)
+#define SPFI_GDEX32BIT_SHIFT (6)
+#define SPFI_GDTRIG_SHIFT (5)
+#define SPFI_SDFUL_SHIFT (3)
+#define SPFI_SDHF_SHIFT (2)
+#define SPFI_SDE_SHIFT (1)
+#define SPFI_SDTRIG_SHIFT (0)
+
+
+/* SPFI register block */
+
+#define SPFI_PORT_0_PARAM_REG_OFFSET (0x00)
+#define SPFI_PORT_1_PARAM_REG_OFFSET (0x04)
+#define SPFI_PORT_2_PARAM_REG_OFFSET (0x08)
+#define SPFI_PORT_3_PARAM_REG_OFFSET (0x0C)
+#define SPFI_PORT_4_PARAM_REG_OFFSET (0x10)
+#define SPFI_CONTROL_REG_OFFSET (0x14)
+#define SPFI_TRANSACTION_REG_OFFSET (0x18)
+#define SPFI_PORT_STATE_REG_OFFSET (0x1C)
+
+#define SPFI_SEND_LONG_REG_OFFSET (0x20)
+#define SPFI_SEND_BYTE_REG_OFFSET (0x24)
+#define SPFI_GET_LONG_REG_OFFSET (0x28)
+#define SPFI_GET_BYTE_REG_OFFSET (0x2C)
+
+#define SPFI_INT_STATUS_REG_OFFSET (0x30)
+#define SPFI_INT_ENABLE_REG_OFFSET (0x34)
+#define SPFI_INT_CLEAR_REG_OFFSET (0x38)
+
+#define SPFI_IMMEDIATE_STATUS_REG_OFFSET (0x3c)
+
+#define SPFI_FLASH_BASE_ADDRESS_REG_OFFSET (0x48)
+#define SPFI_FLASH_STATUS_REG_OFFSET (0x4C)
+
+#define IMG_FALSE 0
+#define IMG_TRUE 1
+
+/* Number of SPIM interfaces*/
+#define SPIM_NUM_BLOCKS 2
+/* Number of chip select lines supported by the SPI master port. */
+#define SPIM_NUM_PORTS_PER_BLOCK (SPIM_DUMMY_CS)
+/* Maximum transfer size (in bytes) for the SPI master port. */
+#define SPIM_MAX_TRANSFER_BYTES (0xFFFF)
+/* Maximum size of a flash command: command bytes+address_bytes. */
+#define SPIM_MAX_FLASH_COMMAND_BYTES (0x8)
+/* Write operation to fifo done in blocks of 16 words (64 bytes) */
+#define SPIM_MAX_BLOCK_BYTES (0x40)
+/* Number of tries until timeout error is returned*/
+#define SPI_TIMEOUT_VALUE_US 500000
+
+/* SPIM initialisation function return value.*/
+enum spim_return {
+ /* Initialisation parameters are valid. */
+ SPIM_OK = 0,
+ /* Mode parameter is invalid. */
+ SPIM_INVALID_SPI_MODE,
+ /* Chip select idle level is invalid. */
+ SPIM_INVALID_CS_IDLE_LEVEL,
+ /* Data idle level is invalid. */
+ SPIM_INVALID_DATA_IDLE_LEVEL,
+ /* Chip select line parameter is invalid. */
+ SPIM_INVALID_CS_LINE,
+ /* Transfer size parameter is invalid. */
+ SPIM_INVALID_SIZE,
+ /* Read/write parameter is invalid. */
+ SPIM_INVALID_READ_WRITE,
+ /* Continue parameter is invalid. */
+ SPIM_INVALID_CONTINUE,
+ /* Invalid block index */
+ SPIM_INVALID_BLOCK_INDEX,
+ /* Extended error values */
+ /* Invalid bit rate */
+ SPIM_INVALID_BIT_RATE,
+ /* Invalid CS hold value */
+ SPIM_INVALID_CS_HOLD_VALUE,
+ /* API function called before API is initialised */
+ SPIM_API_NOT_INITIALISED,
+ /* SPI driver initialisation failed */
+ SPIM_DRIVER_INIT_ERROR,
+ /* Invalid transfer description */
+ SPIM_INVALID_TRANSFER_DESC,
+ /* Timeout */
+ SPIM_TIMEOUT
+
+};
+
+/* This type defines the SPI Mode.*/
+enum spim_mode {
+ /* Mode 0 (clock idle low, data valid on first clock transition). */
+ SPIM_MODE_0 = 0,
+ /* Mode 1 (clock idle low, data valid on second clock transition). */
+ SPIM_MODE_1,
+ /* Mode 2 (clock idle high, data valid on first clock transition). */
+ SPIM_MODE_2,
+ /* Mode 3 (clock idle high, data valid on second clock transition). */
+ SPIM_MODE_3
+
+};
+
+/* This type defines the SPIM device numbers (chip select lines). */
+enum spim_device {
+ /* Device 0 (CS0). */
+ SPIM_DEVICE0 = 0,
+ /* Device 1 (CS1). */
+ SPIM_DEVICE1,
+ /* Device 2 (CS2). */
+ SPIM_DEVICE2,
+ /* Device 3 (CS3). */
+ SPIM_DEVICE3,
+ /* Device 4 (CS4). */
+ SPIM_DEVICE4,
+ /* Dummy chip select. */
+ SPIM_DUMMY_CS
+
+};
+
+/* This structure defines communication parameters for a slave device */
+struct spim_device_parameters {
+ /* Bit rate value.*/
+ unsigned char bitrate;
+ /*
+ * Chip select set up time.
+ * Time taken between chip select going active and activity occurring
+ * on the clock, calculated by dividing the desired set up time in ns
+ * by the Input clock period. (setup time / Input clock freq)
+ */
+ unsigned char cs_setup;
+ /*
+ * Chip select hold time.
+ * Time after the last clock pulse before chip select goes inactive,
+ * calculated by dividing the desired hold time in ns by the
+ * Input clock period (hold time / Input clock freq).
+ */
+ unsigned char cs_hold;
+ /*
+ * Chip select delay time (CS minimum inactive time).
+ * Minimum time after chip select goes inactive before chip select
+ * can go active again, calculated by dividing the desired delay time
+ * in ns by the Input clock period (delay time / Input clock freq).
+ */
+ unsigned char cs_delay;
+ /* SPI Mode. */
+ enum spim_mode spi_mode;
+ /* Chip select idle level (0=low, 1=high, Others=invalid). */
+ unsigned int cs_idle_level;
+ /* Data idle level (0=low, 1=high, Others=invalid). */
+ unsigned int data_idle_level;
+
+};
+
+/* Command transfer mode */
+enum command_mode {
+ /* Command, address, dummy and PI cycles are transferred on sio0 */
+ SPIM_CMD_MODE_0 = 0,
+ /*
+ * Command and Address are transferred on sio0 port only but dummy
+ * cycles and PI is transferred on all the interface ports.
+ */
+ SPIM_CMD_MODE_1,
+ /*
+ * Command is transferred on sio0 port only but address, dummy
+ * and PI is transferred on all the interface portS
+ */
+ SPIM_CMD_MODE_2,
+ /*
+ * Command, address, dummy and PI bytes are transferred on all
+ * the interfaces
+ */
+ SPIM_CMD_MODE_3
+};
+
+/* Data transfer mode */
+enum transfer_mode {
+ /* Transfer data in single mode */
+ SPIM_DMODE_SINGLE = 0,
+ /* Transfer data in dual mode */
+ SPIM_DMODE_DUAL,
+ /* Transfer data in quad mode */
+ SPIM_DMODE_QUAD
+};
+
+/* This structure contains parameters that describe an SPIM operation. */
+struct spim_buffer {
+ /* The buffer to read from or write to. */
+ unsigned char *buffer;
+
+ /* Number of bytes to read/write. Valid range is 0 to 65536 bytes. */
+ unsigned int size;
+
+ /* Read/write select. TRUE for read, FALSE for write, Others-invalid.*/
+ int isread;
+
+ /*
+ * ByteDelay select.
+ * Selects whether or not a delay is inserted between bytes.
+ * 0 - Minimum inter-byte delay
+ * 1 - Inter-byte delay of (cs_hold/master_clk half period)*master_clk.
+ */
+ int inter_byte_delay;
+};
+
+#endif /* __SOC_IMGTEC_DANUBE_SPI_H__ */
diff --git a/src/soc/imgtec/pistachio/memlayout.ld b/src/soc/imgtec/pistachio/memlayout.ld
deleted file mode 100644
index 21c3d73..0000000
--- a/src/soc/imgtec/pistachio/memlayout.ld
+++ /dev/null
@@ -1,38 +0,0 @@
-/*
- * This file is part of the coreboot project.
- *
- * Copyright 2014 Google 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 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.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
- */
-
-#include <memlayout.h>
-
-#include <arch/header.ld>
-
-/* TODO: This should be revised by someone who understands the SoC better. */
-
-SECTIONS
-{
- CBFS_CACHE(0x0, 0) /* TODO: fix this, it was already broken before!!! */
-
- DRAM_START(0x80000000)
- RAMSTAGE(0x80000000, 128K)
-
- /* TODO: Does this SoC use SRAM? Add SRAM_START() and SRAM_END(). */
- BOOTBLOCK(0x9B000000, 16K)
- ROMSTAGE(0x9B004000, 40K)
- STACK(0x9B00E000, 6K)
- PRERAM_CBMEM_CONSOLE(0x9B00F800, 3K)
-}
diff --git a/src/soc/imgtec/pistachio/spi.c b/src/soc/imgtec/pistachio/spi.c
index 2b21475..69682d0 100644
--- a/src/soc/imgtec/pistachio/spi.c
+++ b/src/soc/imgtec/pistachio/spi.c
@@ -16,10 +16,10 @@
#include <string.h>
#include <stdlib.h>
#include <timer.h>
+#include <soc/cpu.h>
+#include <soc/spi.h>
#include <spi-generic.h>
#include <spi_flash.h>
-#include "cpu.h"
-#include "spi.h"
#if !CONFIG_SPI_ATOMIC_SEQUENCING
#error "Unsupported SPI driver API"
diff --git a/src/soc/imgtec/pistachio/spi.h b/src/soc/imgtec/pistachio/spi.h
deleted file mode 100644
index 91d6d55..0000000
--- a/src/soc/imgtec/pistachio/spi.h
+++ /dev/null
@@ -1,358 +0,0 @@
-/*
- * This file is part of the coreboot project.
- *
- * Copyright (C) 2014 Imagination Technologies
- *
- * 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_IMGTEC_DANUBE_SPI_H__
-#define __SOC_IMGTEC_DANUBE_SPI_H__
-
-#include <arch/types.h>
-#include <arch/io.h>
-
-#define spi_read_reg_field(regval, field) \
-( \
- ((field##_MASK) == 0xFFFFFFFF) ? \
- (regval) : \
- (((regval) & (field##_MASK)) >> (field##_SHIFT))\
-)
-
-#define spi_write_reg_field(regval, field, val) \
-( \
- ((field##_MASK) == 0xFFFFFFFF) ? \
- (val) : \
- (((regval) & ~(field##_MASK)) | \
- (((val) << (field##_SHIFT)) & (field##_MASK))) \
-)
-
-/*
- * Parameter register
- * Each of these corresponds to a single port (ie CS line) in the interface
- * Fields Name Description
- * ====== ==== ===========
- * b31:24 CLK_RATE Bit Clock rate = (24.576 * value / 512) MHz
- * b23:16 CS_SETUP Chip Select setup = (40 * value) ns
- * b15:8 CS_HOLD Chip Select hold = (40 * value) ns
- * b7:0 CS_DELAY Chip Select delay = (40 * value) ns
- */
-
-#define SPIM_CLK_DIVIDE_MASK (0xFF000000)
-#define SPIM_CS_SETUP_MASK (0x00FF0000)
-#define SPIM_CS_HOLD_MASK (0x0000FF00)
-#define SPIM_CS_DELAY_MASK (0x000000FF)
-#define SPIM_CS_PARAM_MASK (SPIM_CS_SETUP_MASK \
- | SPIM_CS_HOLD_MASK \
- | SPIM_CS_DELAY_MASK)
-
-#define SPIM_CLK_DIVIDE_SHIFT (24)
-#define SPIM_CS_SETUP_SHIFT (16)
-#define SPIM_CS_HOLD_SHIFT (8)
-#define SPIM_CS_DELAY_SHIFT (0)
-#define SPIM_CS_PARAM_SHIFT (0)
-
-/* Control register */
-
-#define SPFI_DRIBBLE_COUNT_MASK (0x000e0000)
-#define SPFI_MEMORY_IF_MASK (0x00008000)
-#define SPIM_BYTE_DELAY_MASK (0x00004000)
-#define SPIM_CS_DEASSERT_MASK (0x00002000)
-#define SPIM_CONTINUE_MASK (0x00001000)
-#define SPIM_SOFT_RESET_MASK (0x00000800)
-#define SPIM_SEND_DMA_MASK (0x00000400)
-#define SPIM_GET_DMA_MASK (0x00000200)
-#define SPIM_EDGE_TX_RX_MASK (0x00000100)
-#define SPFI_TRNSFR_MODE_MASK (0x000000e0)
-#define SPFI_TRNSFR_MODE_DQ_MASK (0x0000001c)
-#define SPFI_TX_RX_MASK (0x00000002)
-#define SPFI_EN_MASK (0x00000001)
-
-#define SPFI_DRIBBLE_COUNT_SHIFT (17)
-#define SPFI_MEMORY_IF_SHIFT (15)
-#define SPIM_BYTE_DELAY_SHIFT (14)
-#define SPIM_CS_DEASSERT_SHIFT (13)
-#define SPIM_CONTINUE_SHIFT (12)
-#define SPIM_SOFT_RESET_SHIFT (11)
-#define SPIM_SEND_DMA_SHIFT (10)
-#define SPIM_GET_DMA_SHIFT (9)
-#define SPIM_EDGE_TX_RX_SHIFT (8)
-#define SPFI_TRNSFR_MODE_SHIFT (5)
-#define SPFI_TRNSFR_MODE_DQ_SHIFT (2)
-#define SPFI_TX_RX_SHIFT (1)
-#define SPFI_EN_SHIFT (0)
-
-/* Transaction register */
-
-#define SPFI_TSIZE_MASK (0xffff0000)
-#define SPFI_CMD_LENGTH_MASK (0x0000e000)
-#define SPFI_ADDR_LENGTH_MASK (0x00001c00)
-#define SPFI_DUMMY_LENGTH_MASK (0x000003e0)
-#define SPFI_PI_LENGTH_MASK (0x0000001c)
-
-#define SPFI_TSIZE_SHIFT (16)
-#define SPFI_CMD_LENGTH_SHIFT (13)
-#define SPFI_ADDR_LENGTH_SHIFT (10)
-#define SPFI_DUMMY_LENGTH_SHIFT (5)
-#define SPFI_PI_LENGTH_SHIFT (2)
-
-/* Port state register */
-
-#define SPFI_PORT_SELECT_MASK (0x00700000)
-/* WARNING the following bits are reversed */
-#define SPFI_CLOCK0_IDLE_MASK (0x000f8000)
-#define SPFI_CLOCK0_PHASE_MASK (0x00007c00)
-#define SPFI_CS0_IDLE_MASK (0x000003e0)
-#define SPFI_DATA0_IDLE_MASK (0x0000001f)
-
-#define SPIM_CLOCK0_IDLE_MASK (0x000f8000)
-#define SPIM_CLOCK0_PHASE_MASK (0x00007c00)
-#define SPIM_CS0_IDLE_MASK (0x000003e0)
-#define SPIM_DATA0_IDLE_MASK (0x0000001f)
-
-#define SPIM_PORT0_MASK (0x00084210)
-
-#define SPFI_PORT_SELECT_SHIFT (20)
-/* WARNING the following bits are reversed, bit 0 is highest */
-#define SPFI_CLOCK0_IDLE_SHIFT (19)
-#define SPFI_CLOCK0_PHASE_SHIFT (14)
-#define SPFI_CS0_IDLE_SHIFT (9)
-#define SPFI_DATA0_IDLE_SHIFT (4)
-
-#define SPIM_CLOCK0_IDLE_SHIFT (19)
-#define SPIM_CLOCK0_PHASE_SHIFT (14)
-#define SPIM_CS0_IDLE_SHIFT (9)
-#define SPIM_DATA0_IDLE_SHIFT (4)
-
-
-/*
- * Interrupt registers
- * SPFI_GDOF_MASK means Rx buffer full, not an overflow, because clock stalls
- * SPFI_SDUF_MASK means Tx buffer empty, not an underflow, because clock stalls
- */
-#define SPFI_IACCESS_MASK (0x00001000)
-#define SPFI_GDEX8BIT_MASK (0x00000800)
-#define SPFI_ALLDONE_MASK (0x00000200)
-#define SPFI_GDFUL_MASK (0x00000100)
-#define SPFI_GDHF_MASK (0x00000080)
-#define SPFI_GDEX32BIT_MASK (0x00000040)
-#define SPFI_GDTRIG_MASK (0x00000020)
-#define SPFI_SDFUL_MASK (0x00000008)
-#define SPFI_SDHF_MASK (0x00000004)
-#define SPFI_SDE_MASK (0x00000002)
-#define SPFI_SDTRIG_MASK (0x00000001)
-
-#define SPFI_IACCESS_SHIFT (12)
-#define SPFI_GDEX8BIT_SHIFT (11)
-#define SPFI_ALLDONE_SHIFT (9)
-#define SPFI_GDFUL_SHIFT (8)
-#define SPFI_GDHF_SHIFT (7)
-#define SPFI_GDEX32BIT_SHIFT (6)
-#define SPFI_GDTRIG_SHIFT (5)
-#define SPFI_SDFUL_SHIFT (3)
-#define SPFI_SDHF_SHIFT (2)
-#define SPFI_SDE_SHIFT (1)
-#define SPFI_SDTRIG_SHIFT (0)
-
-
-/* SPFI register block */
-
-#define SPFI_PORT_0_PARAM_REG_OFFSET (0x00)
-#define SPFI_PORT_1_PARAM_REG_OFFSET (0x04)
-#define SPFI_PORT_2_PARAM_REG_OFFSET (0x08)
-#define SPFI_PORT_3_PARAM_REG_OFFSET (0x0C)
-#define SPFI_PORT_4_PARAM_REG_OFFSET (0x10)
-#define SPFI_CONTROL_REG_OFFSET (0x14)
-#define SPFI_TRANSACTION_REG_OFFSET (0x18)
-#define SPFI_PORT_STATE_REG_OFFSET (0x1C)
-
-#define SPFI_SEND_LONG_REG_OFFSET (0x20)
-#define SPFI_SEND_BYTE_REG_OFFSET (0x24)
-#define SPFI_GET_LONG_REG_OFFSET (0x28)
-#define SPFI_GET_BYTE_REG_OFFSET (0x2C)
-
-#define SPFI_INT_STATUS_REG_OFFSET (0x30)
-#define SPFI_INT_ENABLE_REG_OFFSET (0x34)
-#define SPFI_INT_CLEAR_REG_OFFSET (0x38)
-
-#define SPFI_IMMEDIATE_STATUS_REG_OFFSET (0x3c)
-
-#define SPFI_FLASH_BASE_ADDRESS_REG_OFFSET (0x48)
-#define SPFI_FLASH_STATUS_REG_OFFSET (0x4C)
-
-#define IMG_FALSE 0
-#define IMG_TRUE 1
-
-/* Number of SPIM interfaces*/
-#define SPIM_NUM_BLOCKS 2
-/* Number of chip select lines supported by the SPI master port. */
-#define SPIM_NUM_PORTS_PER_BLOCK (SPIM_DUMMY_CS)
-/* Maximum transfer size (in bytes) for the SPI master port. */
-#define SPIM_MAX_TRANSFER_BYTES (0xFFFF)
-/* Maximum size of a flash command: command bytes+address_bytes. */
-#define SPIM_MAX_FLASH_COMMAND_BYTES (0x8)
-/* Write operation to fifo done in blocks of 16 words (64 bytes) */
-#define SPIM_MAX_BLOCK_BYTES (0x40)
-/* Number of tries until timeout error is returned*/
-#define SPI_TIMEOUT_VALUE_US 500000
-
-/* SPIM initialisation function return value.*/
-enum spim_return {
- /* Initialisation parameters are valid. */
- SPIM_OK = 0,
- /* Mode parameter is invalid. */
- SPIM_INVALID_SPI_MODE,
- /* Chip select idle level is invalid. */
- SPIM_INVALID_CS_IDLE_LEVEL,
- /* Data idle level is invalid. */
- SPIM_INVALID_DATA_IDLE_LEVEL,
- /* Chip select line parameter is invalid. */
- SPIM_INVALID_CS_LINE,
- /* Transfer size parameter is invalid. */
- SPIM_INVALID_SIZE,
- /* Read/write parameter is invalid. */
- SPIM_INVALID_READ_WRITE,
- /* Continue parameter is invalid. */
- SPIM_INVALID_CONTINUE,
- /* Invalid block index */
- SPIM_INVALID_BLOCK_INDEX,
- /* Extended error values */
- /* Invalid bit rate */
- SPIM_INVALID_BIT_RATE,
- /* Invalid CS hold value */
- SPIM_INVALID_CS_HOLD_VALUE,
- /* API function called before API is initialised */
- SPIM_API_NOT_INITIALISED,
- /* SPI driver initialisation failed */
- SPIM_DRIVER_INIT_ERROR,
- /* Invalid transfer description */
- SPIM_INVALID_TRANSFER_DESC,
- /* Timeout */
- SPIM_TIMEOUT
-
-};
-
-/* This type defines the SPI Mode.*/
-enum spim_mode {
- /* Mode 0 (clock idle low, data valid on first clock transition). */
- SPIM_MODE_0 = 0,
- /* Mode 1 (clock idle low, data valid on second clock transition). */
- SPIM_MODE_1,
- /* Mode 2 (clock idle high, data valid on first clock transition). */
- SPIM_MODE_2,
- /* Mode 3 (clock idle high, data valid on second clock transition). */
- SPIM_MODE_3
-
-};
-
-/* This type defines the SPIM device numbers (chip select lines). */
-enum spim_device {
- /* Device 0 (CS0). */
- SPIM_DEVICE0 = 0,
- /* Device 1 (CS1). */
- SPIM_DEVICE1,
- /* Device 2 (CS2). */
- SPIM_DEVICE2,
- /* Device 3 (CS3). */
- SPIM_DEVICE3,
- /* Device 4 (CS4). */
- SPIM_DEVICE4,
- /* Dummy chip select. */
- SPIM_DUMMY_CS
-
-};
-
-/* This structure defines communication parameters for a slave device */
-struct spim_device_parameters {
- /* Bit rate value.*/
- unsigned char bitrate;
- /*
- * Chip select set up time.
- * Time taken between chip select going active and activity occurring
- * on the clock, calculated by dividing the desired set up time in ns
- * by the Input clock period. (setup time / Input clock freq)
- */
- unsigned char cs_setup;
- /*
- * Chip select hold time.
- * Time after the last clock pulse before chip select goes inactive,
- * calculated by dividing the desired hold time in ns by the
- * Input clock period (hold time / Input clock freq).
- */
- unsigned char cs_hold;
- /*
- * Chip select delay time (CS minimum inactive time).
- * Minimum time after chip select goes inactive before chip select
- * can go active again, calculated by dividing the desired delay time
- * in ns by the Input clock period (delay time / Input clock freq).
- */
- unsigned char cs_delay;
- /* SPI Mode. */
- enum spim_mode spi_mode;
- /* Chip select idle level (0=low, 1=high, Others=invalid). */
- unsigned int cs_idle_level;
- /* Data idle level (0=low, 1=high, Others=invalid). */
- unsigned int data_idle_level;
-
-};
-
-/* Command transfer mode */
-enum command_mode {
- /* Command, address, dummy and PI cycles are transferred on sio0 */
- SPIM_CMD_MODE_0 = 0,
- /*
- * Command and Address are transferred on sio0 port only but dummy
- * cycles and PI is transferred on all the interface ports.
- */
- SPIM_CMD_MODE_1,
- /*
- * Command is transferred on sio0 port only but address, dummy
- * and PI is transferred on all the interface portS
- */
- SPIM_CMD_MODE_2,
- /*
- * Command, address, dummy and PI bytes are transferred on all
- * the interfaces
- */
- SPIM_CMD_MODE_3
-};
-
-/* Data transfer mode */
-enum transfer_mode {
- /* Transfer data in single mode */
- SPIM_DMODE_SINGLE = 0,
- /* Transfer data in dual mode */
- SPIM_DMODE_DUAL,
- /* Transfer data in quad mode */
- SPIM_DMODE_QUAD
-};
-
-/* This structure contains parameters that describe an SPIM operation. */
-struct spim_buffer {
- /* The buffer to read from or write to. */
- unsigned char *buffer;
-
- /* Number of bytes to read/write. Valid range is 0 to 65536 bytes. */
- unsigned int size;
-
- /* Read/write select. TRUE for read, FALSE for write, Others-invalid.*/
- int isread;
-
- /*
- * ByteDelay select.
- * Selects whether or not a delay is inserted between bytes.
- * 0 - Minimum inter-byte delay
- * 1 - Inter-byte delay of (cs_hold/master_clk half period)*master_clk.
- */
- int inter_byte_delay;
-};
-
-#endif /* __SOC_IMGTEC_DANUBE_SPI_H__ */
More information about the coreboot-gerrit
mailing list