Skip to content
Projects
Groups
Snippets
Help
Loading...
Sign in
Toggle navigation
S
Simple PCIe FMC carrier SPEC - Software
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
3
Issues
3
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
Wiki
Wiki
image/svg+xml
Discourse
Discourse
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Commits
Issue Boards
Open sidebar
Projects
Simple PCIe FMC carrier SPEC - Software
Commits
f22fff86
Commit
f22fff86
authored
Jan 11, 2021
by
Maciej Lipinski
Browse files
Options
Browse Files
Download
Plain Diff
Merge branch 'dio_extension' into 'starting-kit-master'
Dio extension See merge request
!3
parents
96a81d1a
a8c6809f
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
40 additions
and
4 deletions
+40
-4
spec-sdb-scan.c
kernel/spec-sdb-scan.c
+40
-4
No files found.
kernel/spec-sdb-scan.c
View file @
f22fff86
...
@@ -49,7 +49,10 @@
...
@@ -49,7 +49,10 @@
// Vendor
// Vendor
#define SDB_7SOLS_VENDOR 0x000075cb
#define SDB_7SOLS_VENDOR 0x000075cb
// Products
// Products
#define SDB_DIO_PID 0x00000001
#define SDB_DIO_PID 0x00000001
// V2 DIO gateware product ID. The 0x3 value should
// be used to mantain backward compatibility
#define SDB_DIO_PID_V2 0x00000003
#define SDB_DIO_NAME "DIO"
#define SDB_DIO_NAME "DIO"
// Designs entry points, bitstreams and firmware files
// Designs entry points, bitstreams and firmware files
...
@@ -161,11 +164,13 @@ static void fpga_dev_release(struct device *dev){}
...
@@ -161,11 +164,13 @@ static void fpga_dev_release(struct device *dev){}
#define FPGA_DEVS_DIO_DEV 2
#define FPGA_DEVS_DIO_DEV 2
#define FPGA_DEVS_DIO_DEV_NAME "spec-fmc-dio"
#define FPGA_DEVS_DIO_DEV_NAME "spec-fmc-dio"
#define FPGA_DEVS_DIO_DEV_DIO 0
#define FPGA_DEVS_DIO_DEV_DIO 0
#define FPGA_DEVS_DIO_DEV_DIO_V2 1
#define FPGA_DEVS_DIO_DEV_DIO_IRQ 3
#define FPGA_DEVS_DIO_DEV_DIO_IRQ 3
#define FPGA_DEVS_DIO_DEV_GPIO
1
#define FPGA_DEVS_DIO_DEV_GPIO
2
#define FPGA_DEVS_DIO_DEV_PPSG
2
#define FPGA_DEVS_DIO_DEV_PPSG
3
#define FPGA_DEVS_DIO_DEV_NUM
3
#define FPGA_DEVS_DIO_DEV_NUM
4
#define FPGA_DEVS_DIO_DEV_PDEV_NAME "fmc-dio-spec"
#define FPGA_DEVS_DIO_DEV_PDEV_NAME "fmc-dio-spec"
#define FPGA_DEVS_DIO_DEV_PDEV_NAME_V2 "fmc-diov2-spec"
#define FPGA_DEVS_DIO_DEV_PDEV_RELEASE_F fpga_dev_release
#define FPGA_DEVS_DIO_DEV_PDEV_RELEASE_F fpga_dev_release
// Global structure for FPGA devices
// Global structure for FPGA devices
...
@@ -185,6 +190,7 @@ static struct fpga_dev fpga_devs[] =
...
@@ -185,6 +190,7 @@ static struct fpga_dev fpga_devs[] =
/* DIO */
/* DIO */
FPGA_DEVS_CREATE_BEGIN_DEV
(
FPGA_DEVS_DIO_DEV
,
FPGA_DEVS_DIO_DEV_NAME
)
FPGA_DEVS_CREATE_BEGIN_DEV
(
FPGA_DEVS_DIO_DEV
,
FPGA_DEVS_DIO_DEV_NAME
)
FPGA_DEV_CREATE_SFULL
(
FPGA_DEVS_DIO_DEV_DIO
,
SDB_DIO_NAME
,
SDB_7SOLS_VENDOR
,
SDB_DIO_PID
,
FPGA_DEVS_DIO_DEV_DIO_IRQ
)
FPGA_DEV_CREATE_SFULL
(
FPGA_DEVS_DIO_DEV_DIO
,
SDB_DIO_NAME
,
SDB_7SOLS_VENDOR
,
SDB_DIO_PID
,
FPGA_DEVS_DIO_DEV_DIO_IRQ
)
FPGA_DEV_CREATE_SFULL
(
FPGA_DEVS_DIO_DEV_DIO_V2
,
SDB_DIO_NAME
,
SDB_7SOLS_VENDOR
,
SDB_DIO_PID_V2
,
FPGA_DEVS_DIO_DEV_DIO_IRQ
)
FPGA_DEV_CREATE
(
FPGA_DEVS_DIO_DEV_GPIO
,
SDB_GPIO_NAME
,
SDB_CERN_VENDOR
,
SDB_GPIO_PID
)
FPGA_DEV_CREATE
(
FPGA_DEVS_DIO_DEV_GPIO
,
SDB_GPIO_NAME
,
SDB_CERN_VENDOR
,
SDB_GPIO_PID
)
FPGA_DEV_CREATE
(
FPGA_DEVS_DIO_DEV_PPSG
,
SDB_PPSG_NAME
,
SDB_CERN_VENDOR
,
SDB_PPSG_PID
)
FPGA_DEV_CREATE
(
FPGA_DEVS_DIO_DEV_PPSG
,
SDB_PPSG_NAME
,
SDB_CERN_VENDOR
,
SDB_PPSG_PID
)
FPGA_DEVS_CREATE_END_DEV
(
FPGA_DEVS_DIO_DEV_NUM
,
FPGA_DEVS_DIO_DEV_PDEV_NAME
,
FPGA_DEVS_DIO_DEV_PDEV_RELEASE_F
)
FPGA_DEVS_CREATE_END_DEV
(
FPGA_DEVS_DIO_DEV_NUM
,
FPGA_DEVS_DIO_DEV_PDEV_NAME
,
FPGA_DEVS_DIO_DEV_PDEV_RELEASE_F
)
...
@@ -212,6 +218,7 @@ static int spec_sdb_fpga_dev_register(struct fmc_device *fmc, struct fpga_dev *f
...
@@ -212,6 +218,7 @@ static int spec_sdb_fpga_dev_register(struct fmc_device *fmc, struct fpga_dev *f
int
i
,
j
,
r
;
int
i
,
j
,
r
;
unsigned
int
n_irqs
=
0
;
unsigned
int
n_irqs
=
0
;
unsigned
int
n_res
=
0
;
unsigned
int
n_res
=
0
;
int
version_found
=
0
;
if
(
fdev
->
n_cores
<=
0
||
fdev
->
n_cores
>=
FPGA_DEV_MAX_CORES
)
if
(
fdev
->
n_cores
<=
0
||
fdev
->
n_cores
>=
FPGA_DEV_MAX_CORES
)
return
-
EINVAL
;
return
-
EINVAL
;
...
@@ -231,11 +238,35 @@ static int spec_sdb_fpga_dev_register(struct fmc_device *fmc, struct fpga_dev *f
...
@@ -231,11 +238,35 @@ static int spec_sdb_fpga_dev_register(struct fmc_device *fmc, struct fpga_dev *f
start
=
fmc_find_sdb_device
(
fmc
->
sdb
,
start
=
fmc_find_sdb_device
(
fmc
->
sdb
,
fdev
->
cores
[
i
].
vid
,
fdev
->
cores
[
i
].
vid
,
fdev
->
cores
[
i
].
pid
,
&
size
);
fdev
->
cores
[
i
].
pid
,
&
size
);
if
(
start
<
0
)
{
if
(
start
<
0
)
{
if
(
fdev
->
cores
[
i
].
vid
==
SDB_7SOLS_VENDOR
)
{
// If DIO V1 is not found, continue to find DIO V2
if
(
fdev
->
cores
[
i
].
pid
==
SDB_DIO_PID
)
{
continue
;
}
// If DIO V2 is not found, check if DIO V2 has been found previously
else
if
(
fdev
->
cores
[
i
].
pid
==
SDB_DIO_PID_V2
&&
version_found
==
1
){
continue
;
}
}
kfree
(
res
);
kfree
(
res
);
return
-
EINVAL
;
return
-
EINVAL
;
}
}
if
(
fdev
->
cores
[
i
].
vid
==
SDB_7SOLS_VENDOR
)
{
//DIO v1 has been detected
if
(
fdev
->
cores
[
i
].
pid
==
SDB_DIO_PID
)
{
version_found
=
1
;
}
//DIO v2 has been detected
else
if
(
fdev
->
cores
[
i
].
pid
==
SDB_DIO_PID_V2
)
{
version_found
=
2
;
}
}
res
[
j
].
name
=
fdev
->
cores
[
i
].
name
;
res
[
j
].
name
=
fdev
->
cores
[
i
].
name
;
res
[
j
].
flags
=
IORESOURCE_MEM
;
res
[
j
].
flags
=
IORESOURCE_MEM
;
res
[
j
].
start
=
spec
->
area
[
0
]
->
start
+
start
;
res
[
j
].
start
=
spec
->
area
[
0
]
->
start
+
start
;
...
@@ -258,6 +289,11 @@ static int spec_sdb_fpga_dev_register(struct fmc_device *fmc, struct fpga_dev *f
...
@@ -258,6 +289,11 @@ static int spec_sdb_fpga_dev_register(struct fmc_device *fmc, struct fpga_dev *f
fdev
->
dev
.
resource
=
res
;
fdev
->
dev
.
resource
=
res
;
fdev
->
dev
.
num_resources
=
n_res
;
fdev
->
dev
.
num_resources
=
n_res
;
//Set V2 device name if it has been detected
if
(
version_found
==
2
)
{
fdev
->
dev
.
name
=
FPGA_DEVS_DIO_DEV_PDEV_NAME_V2
;
}
platform_set_drvdata
(
&
fdev
->
dev
,
fdev
->
priv
);
platform_set_drvdata
(
&
fdev
->
dev
,
fdev
->
priv
);
r
=
platform_device_register
(
&
fdev
->
dev
);
r
=
platform_device_register
(
&
fdev
->
dev
);
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment