Commit aa9df531 authored by Federico Vaga's avatar Federico Vaga

sw: check that FPGA is programmed before loading devices

Signed-off-by: Federico Vaga's avatarFederico Vaga <federico.vaga@cern.ch>
parent f60a9aa2
......@@ -1195,6 +1195,22 @@ static const struct device_type spec_fpga_type = {
.groups = spec_groups,
};
/**
* Checks if the FPGA has been programmed
*/
static bool spec_fpga_is_programmed(struct spec_gn412x *spec_gn412x)
{
struct resource *r4 = &spec_gn412x->pdev->resource[4];
void *mem;
bool done;
mem = ioremap(r4->start, resource_size(r4));
done = ioread32(mem + FCL_STATUS) & FCL_SPRI_DONE;
iounmap(mem);
dev_err(&spec_gn412x->pdev->dev, "SPRI_DONE %d\n", done);
return done;
}
/**
* Initialize carrier devices on FPGA
*/
......@@ -1204,6 +1220,11 @@ int spec_fpga_init(struct spec_gn412x *spec_gn412x)
struct resource *r0 = &spec_gn412x->pdev->resource[0];
int err;
if (!spec_fpga_is_programmed(spec_gn412x)) {
dev_err(&spec_gn412x->pdev->dev, "FPGA is not programmed\n");
return -ENODEV;
}
spec_fpga = kzalloc(sizeof(*spec_fpga), GFP_KERNEL);
if (!spec_fpga)
return -ENOMEM;
......
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