From 09de3ed715a2e52850d11418e286b13b4bd017ad Mon Sep 17 00:00:00 2001 From: Alessandro Rubini <rubini@gnudd.com> Date: Thu, 2 Aug 2012 10:35:19 +0200 Subject: [PATCH] spec: don't access eeprom if not golden firmware --- kernel/spec-fmc.c | 9 +++++++++ kernel/spec-i2c.c | 2 +- 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/kernel/spec-fmc.c b/kernel/spec-fmc.c index 5e2015d..8ef65e4 100644 --- a/kernel/spec-fmc.c +++ b/kernel/spec-fmc.c @@ -55,11 +55,16 @@ static int spec_reprogram(struct fmc_device *fmc, char *gw) goto out; } fmc_free_sdb_tree(fmc); + fmc->flags &= ~(FMC_DEVICE_HAS_GOLDEN | FMC_DEVICE_HAS_CUSTOM); ret = spec_load_fpga(spec, fw->data, fw->size); if (ret <0) { dev_err(dev, "write firmware \"%s\": error %i\n", gw, ret); goto out; } + if (gw == spec_fw_name) + fmc->flags |= FMC_DEVICE_HAS_GOLDEN; + else + fmc->flags |= FMC_DEVICE_HAS_CUSTOM; /* FIXME: load lm32 */ out: @@ -132,12 +137,16 @@ static int spec_irq_free(struct fmc_device *fmc) /* The engines for this live in spec-i2c.c, we only shape arguments */ static int spec_read_ee(struct fmc_device *fmc, int pos, void *data, int len) { + if (!(fmc->flags & FMC_DEVICE_HAS_GOLDEN)) + return -ENOTSUPP; return spec_eeprom_read(fmc, SPEC_I2C_EEPROM_ADDR, pos, data, len); } static int spec_write_ee(struct fmc_device *fmc, int pos, const void *data, int len) { + if (!(fmc->flags & FMC_DEVICE_HAS_GOLDEN)) + return -ENOTSUPP; return spec_eeprom_write(fmc, SPEC_I2C_EEPROM_ADDR, pos, data, len); } diff --git a/kernel/spec-i2c.c b/kernel/spec-i2c.c index 215f7f1..ec27da6 100644 --- a/kernel/spec-i2c.c +++ b/kernel/spec-i2c.c @@ -205,7 +205,7 @@ int spec_i2c_init(struct fmc_device *fmc) found = mi2c_scan(fmc); if (!found) { - dev_err(&spec->pdev->dev, "Empty mezzanine?\n"); + fmc->flags |= FMC_DEVICE_NO_MEZZANINE; return 0; } -- GitLab