Commit e5535da5 authored by Federico Vaga's avatar Federico Vaga

sw:drv: move metadata to spec_fpga

Signed-off-by: Federico Vaga's avatarFederico Vaga <federico.vaga@cern.ch>
parent e7c7b7d8
...@@ -126,7 +126,7 @@ static int spec_fpga_vic_init(struct spec_fpga *spec_fpga) ...@@ -126,7 +126,7 @@ static int spec_fpga_vic_init(struct spec_fpga *spec_fpga)
struct resource res[ARRAY_SIZE(spec_fpga_vic_res)]; struct resource res[ARRAY_SIZE(spec_fpga_vic_res)];
struct platform_device *pdev; struct platform_device *pdev;
if (!(spec_gn412x->meta->cap & SPEC_META_CAP_VIC)) if (!(spec_fpga->meta->cap & SPEC_META_CAP_VIC))
return 0; return 0;
memcpy(&res, spec_fpga_vic_res, sizeof(spec_fpga_vic_res)); memcpy(&res, spec_fpga_vic_res, sizeof(spec_fpga_vic_res));
...@@ -246,7 +246,6 @@ static inline size_t __fpga_mfd_devs_size(void) ...@@ -246,7 +246,6 @@ static inline size_t __fpga_mfd_devs_size(void)
static int spec_fpga_devices_init(struct spec_fpga *spec_fpga) static int spec_fpga_devices_init(struct spec_fpga *spec_fpga)
{ {
struct pci_dev *pcidev = to_pci_dev(spec_fpga->dev.parent); struct pci_dev *pcidev = to_pci_dev(spec_fpga->dev.parent);
struct spec_gn412x *spec_gn412x = pci_get_drvdata(pcidev);
struct mfd_cell *fpga_mfd_devs; struct mfd_cell *fpga_mfd_devs;
struct irq_domain *vic_domain; struct irq_domain *vic_domain;
unsigned int n_mfd = 0; unsigned int n_mfd = 0;
...@@ -263,7 +262,7 @@ static int spec_fpga_devices_init(struct spec_fpga *spec_fpga) ...@@ -263,7 +262,7 @@ static int spec_fpga_devices_init(struct spec_fpga *spec_fpga)
sizeof(fpga_mfd_devs[n_mfd])); sizeof(fpga_mfd_devs[n_mfd]));
n_mfd++; n_mfd++;
if (spec_gn412x->meta->cap & SPEC_META_CAP_SPI) { if (spec_fpga->meta->cap & SPEC_META_CAP_SPI) {
memcpy(&fpga_mfd_devs[n_mfd], memcpy(&fpga_mfd_devs[n_mfd],
&spec_fpga_mfd_devs[SPEC_FPGA_MFD_SPI], &spec_fpga_mfd_devs[SPEC_FPGA_MFD_SPI],
sizeof(fpga_mfd_devs[n_mfd])); sizeof(fpga_mfd_devs[n_mfd]));
...@@ -302,10 +301,8 @@ static ssize_t temperature_show(struct device *dev, ...@@ -302,10 +301,8 @@ static ssize_t temperature_show(struct device *dev,
char *buf) char *buf)
{ {
struct spec_fpga *spec_fpga = to_spec_fpga(dev); struct spec_fpga *spec_fpga = to_spec_fpga(dev);
struct pci_dev *pcidev = to_pci_dev(dev->parent);
struct spec_gn412x *spec_gn412x = pci_get_drvdata(pcidev);
if (spec_gn412x->meta->cap & SPEC_META_CAP_THERM) { if (spec_fpga->meta->cap & SPEC_META_CAP_THERM) {
uint32_t temp = ioread32(spec_fpga->fpga + SPEC_FPGA_THERM_TEMP); uint32_t temp = ioread32(spec_fpga->fpga + SPEC_FPGA_THERM_TEMP);
return snprintf(buf, PAGE_SIZE, "%d.%d C\n", return snprintf(buf, PAGE_SIZE, "%d.%d C\n",
...@@ -322,10 +319,8 @@ static ssize_t serial_number_show(struct device *dev, ...@@ -322,10 +319,8 @@ static ssize_t serial_number_show(struct device *dev,
char *buf) char *buf)
{ {
struct spec_fpga *spec_fpga = to_spec_fpga(dev); struct spec_fpga *spec_fpga = to_spec_fpga(dev);
struct pci_dev *pcidev = to_pci_dev(dev->parent);
struct spec_gn412x *spec_gn412x = pci_get_drvdata(pcidev);
if (spec_gn412x->meta->cap & SPEC_META_CAP_THERM) { if (spec_fpga->meta->cap & SPEC_META_CAP_THERM) {
uint32_t msb = ioread32(spec_fpga->fpga + SPEC_FPGA_THERM_SERID_MSB); uint32_t msb = ioread32(spec_fpga->fpga + SPEC_FPGA_THERM_SERID_MSB);
uint32_t lsb = ioread32(spec_fpga->fpga + SPEC_FPGA_THERM_SERID_LSB); uint32_t lsb = ioread32(spec_fpga->fpga + SPEC_FPGA_THERM_SERID_LSB);
...@@ -561,33 +556,34 @@ static void spec_fpga_app_exit(struct spec_fpga *spec_fpga) ...@@ -561,33 +556,34 @@ static void spec_fpga_app_exit(struct spec_fpga *spec_fpga)
} }
static bool spec_fpga_is_valid(struct spec_gn412x *spec_gn412x) static bool spec_fpga_is_valid(struct spec_gn412x *spec_gn412x,
struct spec_meta_id *meta)
{ {
if ((spec_gn412x->meta->bom & SPEC_META_BOM_END_MASK) != SPEC_META_BOM_LE) { if ((meta->bom & SPEC_META_BOM_END_MASK) != SPEC_META_BOM_LE) {
dev_err(&spec_gn412x->pdev->dev, dev_err(&spec_gn412x->pdev->dev,
"Expected Little Endian devices BOM: 0x%x\n", "Expected Little Endian devices BOM: 0x%x\n",
spec_gn412x->meta->bom); meta->bom);
return false; return false;
} }
if ((spec_gn412x->meta->bom & SPEC_META_BOM_VER_MASK) != 0) { if ((meta->bom & SPEC_META_BOM_VER_MASK) != 0) {
dev_err(&spec_gn412x->pdev->dev, dev_err(&spec_gn412x->pdev->dev,
"Unknow Metadata specification version BOM: 0x%x\n", "Unknow Metadata specification version BOM: 0x%x\n",
spec_gn412x->meta->bom); meta->bom);
return false; return false;
} }
if (spec_gn412x->meta->vendor != SPEC_META_VENDOR_ID || if (meta->vendor != SPEC_META_VENDOR_ID ||
spec_gn412x->meta->device != SPEC_META_DEVICE_ID) { meta->device != SPEC_META_DEVICE_ID) {
dev_err(&spec_gn412x->pdev->dev, dev_err(&spec_gn412x->pdev->dev,
"Unknow vendor/device ID: %08x:%08x\n", "Unknow vendor/device ID: %08x:%08x\n",
spec_gn412x->meta->vendor, spec_gn412x->meta->device); meta->vendor, meta->device);
return false; return false;
} }
if (spec_gn412x->meta->version != SPEC_META_VERSION_1_4) { if (meta->version != SPEC_META_VERSION_1_4) {
dev_err(&spec_gn412x->pdev->dev, dev_err(&spec_gn412x->pdev->dev,
"Unknow version: %08x\n", spec_gn412x->meta->version); "Unknow version: %08x\n", meta->version);
return false; return false;
} }
...@@ -637,8 +633,8 @@ int spec_fpga_init(struct spec_gn412x *spec_gn412x) ...@@ -637,8 +633,8 @@ int spec_fpga_init(struct spec_gn412x *spec_gn412x)
err = -ENOMEM; err = -ENOMEM;
goto err_map; goto err_map;
} }
spec_gn412x->meta = spec_fpga->fpga + SPEC_META_BASE; spec_fpga->meta = spec_fpga->fpga + SPEC_META_BASE;
if (!spec_fpga_is_valid(spec_gn412x)) { if (!spec_fpga_is_valid(spec_gn412x, spec_fpga->meta)) {
err = -EINVAL; err = -EINVAL;
goto err_valid; goto err_valid;
} }
......
...@@ -96,24 +96,37 @@ static const struct file_operations spec_dbg_fw_ops = { ...@@ -96,24 +96,37 @@ static const struct file_operations spec_dbg_fw_ops = {
static int spec_dbg_meta(struct seq_file *s, void *offset) static int spec_dbg_meta(struct seq_file *s, void *offset)
{ {
struct spec_gn412x *spec_gn412x = s->private; struct spec_gn412x *spec_gn412x = s->private;
struct resource *r0 = &spec_gn412x->pdev->resource[0];
struct spec_meta_id __iomem *meta;
void __iomem *mem;
mem = ioremap(r0->start, resource_size(r0));
if (!mem) {
dev_warn(&spec_gn412x->pdev->dev, "%s: Mapping failed\n",
__func__);
return -ENOMEM;
}
meta = mem + SPEC_META_BASE;
seq_printf(s, "'%s':\n", dev_name(&spec_gn412x->pdev->dev)); seq_printf(s, "'%s':\n", dev_name(&spec_gn412x->pdev->dev));
seq_puts(s, "Metadata:\n"); seq_puts(s, "Metadata:\n");
seq_printf(s, " - Vendor: 0x%08x\n", spec_gn412x->meta->vendor); seq_printf(s, " - Vendor: 0x%08x\n", meta->vendor);
seq_printf(s, " - Device: 0x%08x\n", spec_gn412x->meta->device); seq_printf(s, " - Device: 0x%08x\n", meta->device);
seq_printf(s, " - Version: 0x%08x\n", spec_gn412x->meta->version); seq_printf(s, " - Version: 0x%08x\n", meta->version);
seq_printf(s, " - BOM: 0x%08x\n", spec_gn412x->meta->bom); seq_printf(s, " - BOM: 0x%08x\n", meta->bom);
seq_printf(s, " - SourceID: 0x%08x%08x%08x%08x\n", seq_printf(s, " - SourceID: 0x%08x%08x%08x%08x\n",
spec_gn412x->meta->src[0], meta->src[0],
spec_gn412x->meta->src[1], meta->src[1],
spec_gn412x->meta->src[2], meta->src[2],
spec_gn412x->meta->src[3]); meta->src[3]);
seq_printf(s, " - CapabilityMask: 0x%08x\n", spec_gn412x->meta->cap); seq_printf(s, " - CapabilityMask: 0x%08x\n", meta->cap);
seq_printf(s, " - VendorUUID: 0x%08x%08x%08x%08x\n", seq_printf(s, " - VendorUUID: 0x%08x%08x%08x%08x\n",
spec_gn412x->meta->uuid[0], meta->uuid[0],
spec_gn412x->meta->uuid[1], meta->uuid[1],
spec_gn412x->meta->uuid[2], meta->uuid[2],
spec_gn412x->meta->uuid[3]); meta->uuid[3]);
iounmap(mem);
return 0; return 0;
} }
......
...@@ -114,6 +114,7 @@ struct spec_meta_id { ...@@ -114,6 +114,7 @@ struct spec_meta_id {
struct spec_fpga { struct spec_fpga {
struct device dev; struct device dev;
void __iomem *fpga; void __iomem *fpga;
struct spec_meta_id __iomem *meta;
struct platform_device *vic_pdev; struct platform_device *vic_pdev;
struct platform_device *app_pdev; struct platform_device *app_pdev;
struct fmc_slot_info slot_info; struct fmc_slot_info slot_info;
...@@ -132,7 +133,6 @@ struct spec_fpga { ...@@ -132,7 +133,6 @@ struct spec_fpga {
struct spec_gn412x { struct spec_gn412x {
struct pci_dev *pdev; struct pci_dev *pdev;
struct mutex mtx; struct mutex mtx;
struct spec_meta_id __iomem *meta;
struct gpiod_lookup_table *gpiod_table; struct gpiod_lookup_table *gpiod_table;
struct gpio_desc *gpiod[GN4124_GPIO_MAX]; struct gpio_desc *gpiod[GN4124_GPIO_MAX];
struct dentry *dbg_dir; struct dentry *dbg_dir;
......
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