tnt has uploaded this change for review.
gateware/common: Unify a bit with other repo
This just pulls in some small update in various files shared
by several repository. It's mostly comment and formatting, nothing
functionnal really.
Signed-off-by: Sylvain Munaut <tnt@246tNt.com>
Change-Id: Icb7bea1cf7243e9ace819cd567eb006fcc71c808
---
M gateware/common/fw/Makefile
D gateware/common/fw/bin2hex.py
M gateware/common/fw/boot.S
M gateware/common/rtl/soc_picorv32_bridge.v
4 files changed, 72 insertions(+), 41 deletions(-)
git pull ssh://gerrit.osmocom.org:29418/osmo-e1-hardware refs/changes/08/28008/1
diff --git a/gateware/common/fw/Makefile b/gateware/common/fw/Makefile
index 3fef9a5..52889ee 100644
--- a/gateware/common/fw/Makefile
+++ b/gateware/common/fw/Makefile
@@ -1,12 +1,14 @@
-CROSS = riscv-none-embed-
+CROSS ?= riscv-none-embed-
CC := $(CROSS)gcc
OBJCOPY := $(CROSS)objcopy
-CFLAGS=-Wall -Os -march=rv32i -mabi=ilp32 -ffreestanding -flto -nostartfiles -fomit-frame-pointer -Wl,--gc-section
+CFLAGS=-Wall -Os -march=rv32i -mabi=ilp32 -ffreestanding -flto -nostartfiles -fomit-frame-pointer -Wl,--gc-section --specs=nano.specs
+
all: boot.hex
+
boot.elf: lnk-boot.lds boot.S
$(CC) $(CFLAGS) -Wl,-Bstatic,-T,lnk-boot.lds,--strip-debug -DAPP_FLASH_ADDR=0x000a0000 -o $@ boot.S
@@ -14,7 +16,7 @@
$(OBJCOPY) -O binary $< $@
%.hex: %.bin
- ./bin2hex.py $< $@
+ hexdump boot.bin -ve '1/4 "%08x\n"' $< > $@
clean:
rm -f *.bin *.hex *.elf *.o
diff --git a/gateware/common/fw/bin2hex.py b/gateware/common/fw/bin2hex.py
deleted file mode 100755
index 43ba263..0000000
--- a/gateware/common/fw/bin2hex.py
+++ /dev/null
@@ -1,22 +0,0 @@
-#!/usr/bin/env python3
-#
-# Converts binary into something that can be used by `readmemh`
-#
-# Copyright (C) 2020 Sylvain Munaut <tnt@246tNt.com>
-# SPDX-License-Identifier: MIT
-#
-
-import struct
-import sys
-
-
-def main(argv0, in_name, out_name):
- with open(in_name, 'rb') as in_fh, open(out_name, 'w') as out_fh:
- while True:
- b = in_fh.read(4)
- if len(b) < 4:
- break
- out_fh.write('%08x\n' % struct.unpack('<I', b))
-
-if __name__ == '__main__':
- main(*sys.argv)
diff --git a/gateware/common/fw/boot.S b/gateware/common/fw/boot.S
index df4f41b..b01fc80 100644
--- a/gateware/common/fw/boot.S
+++ b/gateware/common/fw/boot.S
@@ -3,10 +3,13 @@
*
* SPI boot code
*
- * Copyright (C) 2020 Sylvain Munaut <tnt@246tNt.com>
+ * Copyright (C) 2020-2022 Sylvain Munaut <tnt@246tNt.com>
* SPDX-License-Identifier: MIT
*/
+// #define BOOT_DEBUG
+// (also set UART_DIV for the board below !)
+
#ifndef APP_FLASH_ADDR
#define APP_FLASH_ADDR 0x00100000
#endif
@@ -19,18 +22,50 @@
#define APP_SIZE 0x00010000
#endif
+ .equ UART_BASE, 0x81000000
+ .equ UART_DIV, 29 // 30.72 MHz / (29+2) ~= 1 Mbaud (icE1usb)
+ //.equ UART_DIV, 22 // 24 MHz / (22+2) ~= 1 Mbaud (e1-tracer)
+
.section .text.start
.global _start
_start:
+ // Debug
+#ifdef BOOT_DEBUG
+ // Set UART divisor
+ li a0, UART_BASE
+ li a1, UART_DIV
+ sw a1, 4(a0)
+
+ // Output 'a'
+ li a1, 97
+ sw a1, 0(a0)
+#endif
+
// SPI init
jal spi_init
+ // Debug
+#ifdef BOOT_DEBUG
+ // Output 'b'
+ li a0, UART_BASE
+ li a1, 98
+ sw a1, 0(a0)
+#endif
+
// Read from flash to SRAM
li a0, APP_SRAM_ADDR
li a1, APP_SIZE
li a2, APP_FLASH_ADDR
jal spi_flash_read
+ // Debug
+#ifdef BOOT_DEBUG
+ // Output 'c'
+ li a0, UART_BASE
+ li a1, 99
+ sw a1, 0(a0)
+#endif
+
// Setup reboot code
li t0, 0x0002006f
sw t0, 0(zero)
@@ -39,16 +74,27 @@
j APP_SRAM_ADDR
- .equ SPI_BASE, 0x80000000
- .equ SPICR0, 4 * 0x08
- .equ SPICR1, 4 * 0x09
- .equ SPICR2, 4 * 0x0a
- .equ SPIBR, 4 * 0x0b
- .equ SPISR, 4 * 0x0c
- .equ SPITXDR, 4 * 0x0d
- .equ SPIRXDR, 4 * 0x0e
- .equ SPICSR, 4 * 0x0f
+// ---------------------------------------------------------------------------
+// SB_SPI driver code
+// ---------------------------------------------------------------------------
+// Register definitions
+
+ .equ SPI_BASE, 0x80000000
+
+ .equ SPICR0, 4 * 0x08
+ .equ SPICR1, 4 * 0x09
+ .equ SPICR2, 4 * 0x0a
+ .equ SPIBR, 4 * 0x0b
+ .equ SPISR, 4 * 0x0c
+ .equ SPITXDR, 4 * 0x0d
+ .equ SPIRXDR, 4 * 0x0e
+ .equ SPICSR, 4 * 0x0f
+
+
+// Initializes te SPI hardware
+//
+// Clobbers a0, a1
spi_init:
li a0, SPI_BASE
@@ -71,11 +117,13 @@
ret
+// Reads a block of memory from SPI flash
+//
// Params:
// a0 - destination pointer
// a1 - length (bytes)
// a2 - flash offset
-//
+// Clobbers t0, t1, s0, s1, s2
spi_flash_read:
// Save params
@@ -121,9 +169,12 @@
jr s2
+// Performs a single 8 bit SPI xfer
+//
// Params: a0 - Data to TX
// Returns: a0 - RX data
// Clobbers t0, t1
+
_spi_do_one:
li t0, SPI_BASE
li t1, 0x08
diff --git a/gateware/common/rtl/soc_picorv32_bridge.v b/gateware/common/rtl/soc_picorv32_bridge.v
index c0860fe..282a950 100644
--- a/gateware/common/rtl/soc_picorv32_bridge.v
+++ b/gateware/common/rtl/soc_picorv32_bridge.v
@@ -10,11 +10,11 @@
`default_nettype none
module soc_picorv32_bridge #(
- parameter integer WB_N = 8,
- parameter integer WB_DW = 32,
- parameter integer WB_AW = 16,
- parameter integer WB_AI = 2,
- parameter integer WB_REG = 0 // [0] = cyc / [1] = addr/wdata/wstrb / [2] = ack/rdata
+ parameter integer WB_N = 8,
+ parameter integer WB_DW = 32,
+ parameter integer WB_AW = 16,
+ parameter integer WB_AI = 2,
+ parameter integer WB_REG = 0 // [0] = cyc / [1] = addr/wdata/wstrb / [2] = ack/rdata
)(
/* PicoRV32 bus */
input wire [31:0] pb_addr,
To view, visit change 28008. To unsubscribe, or for help writing mail filters, visit settings.