Commit a0f1f3e0 authored by Dimitris Lampridis's avatar Dimitris Lampridis

hdl,drv: fix SVEC demo issues (#27)

The main issue here is that SVEC base occupies the first 0x4000 of the
address space (as opposed to the 0x2000 for the SPEC base).

This was overlooked when the SVEC demo was updated.

Furthermore, this creates the need for having two separate top-level
drivers (others ways exist of course but this is the simplest).
parent 5428e2ea
......@@ -77,8 +77,8 @@ architecture arch of spec_mt_demo is
-- Constants
-----------------------------------------------------------------------------
-- MT Node identification (TRTL)
constant c_MT_NODE_ID : std_logic_vector(31 downto 0) := x"5452_544C";
-- MT Node identification (MTDC)
constant c_MT_NODE_ID : std_logic_vector(31 downto 0) := x"4D54_4443";
constant c_MT_CONFIG : t_mt_config := (
app_id => c_MT_NODE_ID,
......
......@@ -98,8 +98,8 @@ architecture arch of svec_mt_demo is
-- Constants
-----------------------------------------------------------------------------
-- MT Node identification (TRTL)
constant c_MT_NODE_ID : std_logic_vector(31 downto 0) := x"5452_544C";
-- MT Node identification (MTDV)
constant c_MT_NODE_ID : std_logic_vector(31 downto 0) := x"4D54_4456";
constant c_MT_CONFIG : t_mt_config := (
app_id => c_MT_NODE_ID,
......@@ -128,7 +128,7 @@ architecture arch of svec_mt_demo is
constant c_WB_SLAVE_MT : integer := 1;
-- Convention metadata base address
constant c_METADATA_ADDR : t_wishbone_address := x"0000_2000";
constant c_METADATA_ADDR : t_wishbone_address := x"0000_4000";
-- Primary wishbone crossbar layout
constant c_WB_LAYOUT_ADDR :
......
......@@ -20,7 +20,8 @@ ccflags-$(CONFIG_TRTL_DEBUG) += -DDEBUG
subdirs-ccflags-y = $(ccflags-y)
obj-m := mockturtle.o
obj-m += mockturtle-demo.o
obj-m += mockturtle-spec-demo.o
obj-m += mockturtle-svec-demo.o
mockturtle-y := mockturtle-core.o
mockturtle-y += mockturtle-cpu.o
......@@ -29,4 +30,5 @@ mockturtle-y += mockturtle-tty.o
mockturtle-y += mockturtle-dbg.o
mockturtle-y += mockturtle-dbg.o
mockturtle-y += mockturtle-compat.o
mockturtle-demo-y += mockturtle-demo-core.o
mockturtle-spec-demo-y += mockturtle-demo-spec.o
mockturtle-svec-demo-y += mockturtle-demo-svec.o
......@@ -15,7 +15,7 @@ enum trtl_demo_dev_offsets {
};
/* MFD devices */
enum spec_fpga_mfd_devs_enum {
enum trtl_demo_fpga_mfd_devs_enum {
TRTL_DEMO_MFD_TRTL = 0,
};
......@@ -100,13 +100,13 @@ enum trtl_demo_version {
static const struct platform_device_id trtl_demo_id_table[] = {
{
.name = "trtl-demo",
.name = "spec-trtl-demo",
.driver_data = TRTL_DEMO_VER,
}, {
.name = "id:000010DC5452544C",
.name = "id:000010DC4D544443",
.driver_data = TRTL_DEMO_VER,
}, {
.name = "id:000010dc5452544c",
.name = "id:000010dc4d544443",
.driver_data = TRTL_DEMO_VER,
},
{},
......@@ -114,7 +114,7 @@ static const struct platform_device_id trtl_demo_id_table[] = {
static struct platform_driver trtl_demo_driver = {
.driver = {
.name = "trtl-demo",
.name = "spec-trtl-demo",
.owner = THIS_MODULE,
},
.id_table = trtl_demo_id_table,
......@@ -126,7 +126,7 @@ module_platform_driver(trtl_demo_driver);
MODULE_AUTHOR("Federico Vaga <federico.vaga@cern.ch>");
MODULE_LICENSE("GPL");
MODULE_VERSION(GIT_VERSION);
MODULE_DESCRIPTION("Driver for the Mockturtle DEMO");
MODULE_DESCRIPTION("Driver for the SPEC Mockturtle DEMO");
MODULE_DEVICE_TABLE(platform, trtl_demo_id_table);
MODULE_SOFTDEP("pre: mockturtle");
// SPDX-License-Identifier: GPL-2.0-or-later
/*
* Copyright (C) 2022 CERN (home.cern)
* Author: Federico Vaga <federico.vaga@cern.ch>
*/
#include <linux/module.h>
#include <linux/platform_device.h>
#include <linux/mfd/core.h>
#include <linux/mod_devicetable.h>
enum trtl_demo_dev_offsets {
TRTL_DEMO_TRTL_MEM_START = 0x0001C000,
TRTL_DEMO_TRTL_MEM_END = 0x0003C000,
};
/* MFD devices */
enum trtl_demo_fpga_mfd_devs_enum {
TRTL_DEMO_MFD_TRTL = 0,
};
static struct resource trtl_demo_trtl_res[] = {
{
.name = "mock-turtle-mem",
.flags = IORESOURCE_MEM,
.start = TRTL_DEMO_TRTL_MEM_START,
.end = TRTL_DEMO_TRTL_MEM_END,
}, {
.name = "mock-turtle-irq_in",
.flags = IORESOURCE_IRQ | IORESOURCE_IRQ_HIGHLEVEL,
.start = 0,
}, {
.name = "mock-turtle-irq_out",
.flags = IORESOURCE_IRQ | IORESOURCE_IRQ_HIGHLEVEL,
.start = 1,
}, {
.name = "mock-turtle-irq_con",
.flags = IORESOURCE_IRQ | IORESOURCE_IRQ_HIGHLEVEL,
.start = 2,
}, {
.name = "mock-turtle-irq_not",
.flags = IORESOURCE_IRQ | IORESOURCE_IRQ_HIGHLEVEL,
.start = 3,
},
};
static const struct mfd_cell trtl_demo_mfd_devs[] = {
[TRTL_DEMO_MFD_TRTL] = {
.name = "mock-turtle",
.platform_data = NULL,
.pdata_size = 0,
.num_resources = ARRAY_SIZE(trtl_demo_trtl_res),
.resources = trtl_demo_trtl_res,
},
};
static int trtl_demo_probe(struct platform_device *pdev)
{
struct resource *rmem;
int irq;
rmem = platform_get_resource(pdev, IORESOURCE_MEM, 0);
if (!rmem) {
dev_err(&pdev->dev, "Missing memory resource\n");
return -EINVAL;
}
irq = platform_get_irq(pdev, 0);
if (irq < 0) {
dev_err(&pdev->dev, "Missing IRQ number\n");
return -EINVAL;
}
/*
* We know that this design uses the HTVIC IRQ controller.
* This IRQ controller has a linear mapping, so it is enough
* to give the first one as input
*/
return mfd_add_devices(&pdev->dev, PLATFORM_DEVID_AUTO,
trtl_demo_mfd_devs,
ARRAY_SIZE(trtl_demo_mfd_devs),
rmem, irq, NULL);
}
static int trtl_demo_remove(struct platform_device *pdev)
{
mfd_remove_devices(&pdev->dev);
return 0;
}
/**
* List of supported platform
*/
enum trtl_demo_version {
TRTL_DEMO_VER = 0,
};
static const struct platform_device_id trtl_demo_id_table[] = {
{
.name = "svec-trtl-demo",
.driver_data = TRTL_DEMO_VER,
}, {
.name = "id:000010DC4D544456",
.driver_data = TRTL_DEMO_VER,
}, {
.name = "id:000010dc4d544456",
.driver_data = TRTL_DEMO_VER,
},
{},
};
static struct platform_driver trtl_demo_driver = {
.driver = {
.name = "svec-trtl-demo",
.owner = THIS_MODULE,
},
.id_table = trtl_demo_id_table,
.probe = trtl_demo_probe,
.remove = trtl_demo_remove,
};
module_platform_driver(trtl_demo_driver);
MODULE_AUTHOR("Federico Vaga <federico.vaga@cern.ch>");
MODULE_LICENSE("GPL");
MODULE_VERSION(GIT_VERSION);
MODULE_DESCRIPTION("Driver for the SVEC Mockturtle DEMO");
MODULE_DEVICE_TABLE(platform, trtl_demo_id_table);
MODULE_SOFTDEP("pre: mockturtle");
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment