Minor bugfix release to aid debugging. master release-1.0.1
authorTerry Barnaby <terry.barnaby@beam.beam.ltd.uk>
Sat, 18 Jul 2020 08:08:29 +0000 (09:08 +0100)
committerTerry Barnaby <terry.barnaby@beam.beam.ltd.uk>
Sat, 18 Jul 2020 08:08:29 +0000 (09:08 +0100)
1. The bfpga_driver's Makefile now finds the correct PCI device when loading the bfpga Linux driver.
2. The bfpga driver's udev file, bfpga.rules, now has the correct device name.
3. Fix to the test code for correct bfpga device name string.
4. Added NVMe PCIe phy_status and link_status signals to the NvmeStorageUnit's status register (bits 30 and 31).

12 files changed:
Config.mk
docsrc/DuneNvme-releasenotes.html
docsrc/DuneNvmeStorageDesign.odt
docsrc/DuneNvmeStorageManual.odt
docsrc/fpga_doxygen.dox
docsrc/host_doxygen.dox
src/DuneNvmeTestOpseroTop.xdc
src/DuneNvmeTestTop.xdc
src/NvmeStorageUnit.vhd
test/NvmeAccess.cpp
test/bfpga_driver/Makefile
test/bfpga_driver/bfpga.rules

index f8fc97ac2e694df218c5bba93568f1ed35a08505..077ddfb8637e5a01ab2551d0c56de71971afe5b1 100644 (file)
--- a/Config.mk
+++ b/Config.mk
@@ -4,5 +4,5 @@
 ################################################################################
 #
 PROJECT                = DuneNvme
-VERSION                = 1.0.0
+VERSION                = 1.0.1
 DOCDIR         ?= 
index 51a0a26157a5ebb40531e2eb2ff288989615ecff..e8900214c5a45e548702b17b4aabba806b740609 100644 (file)
@@ -6,20 +6,29 @@
        <meta name="generator" content="LibreOffice 6.3.6.2 (Linux)"/>
        <meta name="created" content="00:00:00"/>
        <meta name="changedby" content="Terry Barnaby"/>
-       <meta name="changed" content="2020-06-16T11:18:09.571516965"/>
+       <meta name="changed" content="2020-07-18T07:19:54.309394236"/>
+       <meta name="created" content="00:00:00">
        <style type="text/css">
                h3.cjk { font-family: "Noto Sans CJK SC" }
                h3.ctl { font-family: "Lohit Devanagari" }
-               pre.cjk { font-family: "Noto Sans Mono CJK SC", monospace }
        </style>
 </head>
 <body lang="en-GB" dir="ltr"><h1 align="center">DuneNvme test system
 Release Notes</h1>
+<h3 class="western">Release 1.0.1: <font face="Liberation Serif, serif"><font size="4" style="font-size: 14pt"><b>2020-0</b></font></font><font face="Liberation Serif, serif"><font size="4" style="font-size: 14pt"><b>7</b></font></font><font face="Liberation Serif, serif"><font size="4" style="font-size: 14pt"><b>-1</b></font></font><font face="Liberation Serif, serif"><font size="4" style="font-size: 14pt"><b>8</b></font></font></h3>
+<p>Minor bugfix release to aid debugging.</p>
+<ol>
+       <li><p>The bfpga_driver’s Makefile now finds the correct PCI
+       device when loading the bfpga Linux driver.</p>
+       <li><p>The bfpga driver’s udev file, bfpga.rules, now has the
+       correct device name.</p>
+       <li><p>Fix to the test code for correct bfpga device name string.</p>
+       <li><p>Added NVMe PCIe phy_status and link_status signals to the
+       NvmeStorageUnit’s status register (bits 30 and 31).</p>
+</ol>
 <h3 class="western">Release 1.0.0: <font face="Liberation Serif, serif"><font size="4" style="font-size: 14pt"><b>2020-06-16</b></font></font></h3>
-<ul>
-       <li><p>First release of Dune NvmeStorage system. This includes
-       builds for the AB17-M2FMC and Opsero OP47 NVMe boards.</p>
-</ul>
+<p>First release of Dune NvmeStorage system. This includes builds for
+the AB17-M2FMC and Opsero OP47 NVMe boards.</p>
 <p>NvmeStorage Utilisation:</p>
 <table width="580" cellpadding="0" cellspacing="0" style="page-break-inside: avoid">
        <col width="78"/>
@@ -90,6 +99,9 @@ Release Notes</h1>
                </td>
        </tr>
 </table>
-<pre class="western"></pre>
+<p><br/>
+<br/>
+
+</p>
 </body>
 </html>
\ No newline at end of file
index f0e369abd00217191e0d95aeaf90cd81aa3c4025..e7dbe80691a72f44cbdbefd37bbe8d5d311b8f44 100644 (file)
Binary files a/docsrc/DuneNvmeStorageDesign.odt and b/docsrc/DuneNvmeStorageDesign.odt differ
index 3e2a97cdccffdb8f0e98451e5bb279d22ac0fd2c..e84aeeaebc134c5a648c62ffedd203e054255178 100644 (file)
Binary files a/docsrc/DuneNvmeStorageManual.odt and b/docsrc/DuneNvmeStorageManual.odt differ
index 37859b0c339099091e72d8705b86f5a012c65ff1..c605c4b0b75bd59e921e78fc517f5f897dbaf770 100644 (file)
@@ -119,7 +119,7 @@ WARN_LOGFILE           =
 # Configuration options related to the input files
 #---------------------------------------------------------------------------
 #INPUT                  = ../src
-NPUT_ENCODING         = UTF-8
+INPUT_ENCODING         = UTF-8
 FILE_PATTERNS          = *.c \
                          *.cc \
                          *.cxx \
index 3bf9a8c13ac959ae7b10bd8cf6dea9db09180d1d..f04cbae90470649bab50725860318b26f65d7234 100644 (file)
@@ -119,7 +119,7 @@ WARN_LOGFILE           =
 # Configuration options related to the input files
 #---------------------------------------------------------------------------
 #INPUT                  = ../src
-NPUT_ENCODING         = UTF-8
+INPUT_ENCODING         = UTF-8
 FILE_PATTERNS          = *.c \
                          *.cc \
                          *.cxx \
index 63e9cdac8fc199ff9ce61cd62c465772b47230e3..acc38ce5487de0b7884e5ad07c36124ab0f07176 100644 (file)
@@ -51,6 +51,9 @@ set_false_path -from [get_ports pci_reset_n]
 set_false_path -through [get_nets -hier -filter {NAME=~ */nvmeStorageUnit*/reset_local}]\r
 #set_false_path -through [get_nets -hier -filter {NAME=~ */nvmeStorageUnit*/nvme_reset_local_n}]\r
 \r
+set_false_path -through [get_nets -hier -filter {NAME=~ */nvmeStorageUnit*/phy_rdy_out}]\r
+set_false_path -through [get_nets -hier -filter {NAME=~ */nvmeStorageUnit*/user_lnk_up}]\r
+\r
 # Output pins\r
 set_output_delay -clock [get_clocks nvme_clk] -min 0.0 [get_ports -filter NAME=~nvme_reset_n]\r
 set_output_delay -clock [get_clocks nvme_clk] -max 1000.0 [get_ports -filter NAME=~nvme_reset_n]\r
index eb8e82bb67bbb7c9d1d024969a4ab0899cc0593e..3ae89fb7ecc7e8741f9c7967585113f368260f8b 100644 (file)
@@ -49,6 +49,9 @@ set_false_path -from [get_ports pci_reset_n]
 set_false_path -through [get_nets -hier -filter {NAME=~ */nvmeStorageUnit*/reset_local}]\r
 #set_false_path -through [get_nets -hier -filter {NAME=~ */nvmeStorageUnit*/nvme_reset_local_n}]\r
 \r
+set_false_path -through [get_nets -hier -filter {NAME=~ */nvmeStorageUnit*/phy_rdy_out}]\r
+set_false_path -through [get_nets -hier -filter {NAME=~ */nvmeStorageUnit*/user_lnk_up}]\r
+\r
 # Output pins\r
 set_output_delay -clock [get_clocks nvme_clk] -min 0.0 [get_ports -filter NAME=~nvme_reset_n]\r
 set_output_delay -clock [get_clocks nvme_clk] -max 1000.0 [get_ports -filter NAME=~nvme_reset_n]\r
index 089d64e212a93f410a91c424c708c5f37d225fe9..2c3f388792e060d26084954c96da1da848f1f27c 100644 (file)
@@ -438,7 +438,7 @@ signal regDataIn1           : std_logic_vector(31 downto 0);        --! Register write data
 signal regDataOut0             : std_logic_vector(31 downto 0);        --! Register contents
 signal regDataOut1             : std_logic_vector(31 downto 0);        --! Register contents
 
-signal reg_id                  : RegDataType := x"56010000";
+signal reg_id                  : RegDataType := x"56010001";
 signal reg_control             : RegDataType := (others => '0');
 signal reg_status              : RegDataType := (others => '0');
 signal reg_totalBlocks         : RegDataType := to_stl(NvmeTotalBlocks, RegWidth);
@@ -459,6 +459,10 @@ signal waitingForData              : std_logic := 'U';
 signal dataEnabledOut1         : std_logic := 'U';
 signal writeComplete           : std_logic := 'U';
 
+-- Status signals
+signal phy_rdy_out             : std_logic := 'U';
+signal user_lnk_up             : std_logic := 'U';
+
 -- Pcie_nvme signals
 signal nvme_reset_local_n      : std_logic := '0';
 signal nvme_user_clk           : std_logic := 'U';
@@ -558,7 +562,9 @@ begin
        reg_status(2)           <= reg_control(2);
        reg_status(3)           <= writeComplete;
        reg_status(4)           <= '0';                         -- Error: ideally needs seting from various sources
-       reg_status(31 downto 5) <= (others => '0');
+       reg_status(29 downto 5) <= (others => '0');
+       reg_status(30)          <= phy_rdy_out;
+       reg_status(31)          <= user_lnk_up;
        
        -- Perform reset of Nvme subsystem. This implements a 100ms reset suitable for the Nvme Pcie reset.
        -- Local state machines and external Nvme devices use this reset_local signal.
@@ -653,7 +659,7 @@ begin
                sys_clk                 => nvme_clk,
                sys_clk_gt              => nvme_clk_gt,
                sys_reset               => nvme_reset_local_n,
-               phy_rdy_out             => leds(0),
+               phy_rdy_out             => phy_rdy_out,
 
                pci_exp_txn             => nvme_exp_txn,
                pci_exp_txp             => nvme_exp_txp,
@@ -662,7 +668,7 @@ begin
 
                user_clk                => nvme_user_clk,
                user_reset              => nvme_user_reset,
-               user_lnk_up             => leds(1),
+               user_lnk_up             => user_lnk_up,
 
                s_axis_rq_tdata         => hostReq.data,
                s_axis_rq_tkeep         => hostReq.keep,
@@ -705,7 +711,7 @@ begin
                sys_clk                 => nvme_clk,
                sys_clk_gt              => nvme_clk_gt,
                sys_reset               => nvme_reset_local_n,
-               phy_rdy_out             => leds(0),
+               phy_rdy_out             => phy_rdy_out,
 
                pci_exp_txn             => nvme_exp_txn,
                pci_exp_txp             => nvme_exp_txp,
@@ -714,7 +720,7 @@ begin
 
                user_clk                => nvme_user_clk,
                user_reset              => nvme_user_reset,
-               user_lnk_up             => leds(1),
+               user_lnk_up             => user_lnk_up,
 
                s_axis_rq_tdata         => hostReq.data,
                s_axis_rq_tkeep         => hostReq.keep,
@@ -765,7 +771,9 @@ begin
 
        nvmeReply.ready <= nvmeReply_ready(0) and nvmeReply_ready(1) and nvmeReply_ready(2) and nvmeReply_ready(3);
        nvmeReply_user <= (others => '0');
-       
+
+       leds(0) <= phy_rdy_out;
+       leds(1) <= user_lnk_up;
        leds(2) <= '0';
        end generate;
        
index 3b258c03bb111de83ed424b4636bb4806d4d051a..218a7c7bffa6c368f6bcc62be35b97deda3d3103 100644 (file)
@@ -119,7 +119,7 @@ int NvmeAccess::init(){
        int     r;
 
        if((oregsFd = open("/dev/bfpga0", O_RDWR | O_SYNC)) < 0){
-               fprintf(stderr, "Unable to open /dev/xdma0_user\n");
+               fprintf(stderr, "Unable to open /dev/bfpga0\n");
                return 1;
        }
 
index fc52940cda52ead94ed3783c33f6bccbd747e7b6..392671031ef7c6a0ef650d5d7f6c8987843998d0 100644 (file)
@@ -20,6 +20,9 @@ KERNELINSTALLDIR      = ${DEST_DIR}/lib/modules/$${KERNELVERSION}/extra
 PWD                    := $(shell pwd)
 endif
 
+PCI_DEV_SLOT           = $(shell lspci -d 10ee:8024 | sed -e "s/ .*//")
+PCI_DEV                = /sys/bus/pci/devices/0000:${PCI_DEV_SLOT}
+
 LDLIBS += -lpthread
 
 all:
@@ -43,11 +46,12 @@ install:
 # Debug
 installRules:
        cp bfpga.rules ${DESTDIR}/etc/udev/rules.d/bfpga.rules 
-
+       
 load:
        -rmmod bfpga
-       -echo 1 > /sys/bus/pci/devices/0000:01:00.0/remove
-       echo 1 > /sys/bus/pci/rescan
-       echo 1 > /sys/bus/pci/devices/0000:01:00.0/reset
+       @(if [ "${PCI_DEV_SLOT}" != "" ]; then\
+               echo "Rescan PCI device";\
+               echo 1 > ${PCI_DEV}/remove;\
+               echo 1 > /sys/bus/pci/rescan;\
+               echo 1 > ${PCI_DEV}/reset; fi)
        insmod bfpga.ko
-       
index 3431c2f39a61d9ad9421a599bb110c155fc42421..668e7c569059aaa607a3dacd5cefb90bb03da730 100644 (file)
@@ -3,4 +3,4 @@
 ################################################################
 #
 #KERNEL=="bfpga-*",    NAME="%k", MODE="0666"
-KERNEL=="bfpga-*",     MODE="0666"
+KERNEL=="bfpga*",      MODE="0666"