From c831ccfc9e04771e6049a9b601d25d62d229e57c Mon Sep 17 00:00:00 2001 From: Ralph Metzler Date: Wed, 2 May 2018 15:39:09 +0200 Subject: [PATCH] add check for minimum FPGA firmware version --- ddbridge/ddbridge-hw.c | 4 ++++ ddbridge/ddbridge-main.c | 7 +++++++ ddbridge/ddbridge.h | 3 ++- 3 files changed, 13 insertions(+), 1 deletion(-) diff --git a/ddbridge/ddbridge-hw.c b/ddbridge/ddbridge-hw.c index b21f20a..f03b818 100644 --- a/ddbridge/ddbridge-hw.c +++ b/ddbridge/ddbridge-hw.c @@ -336,6 +336,7 @@ static const struct ddb_info ddb_v7a = { .board_control = 2, .board_control_2 = 4, .ts_quirks = TS_QUIRK_REVERSED, + .hw_min = 0x010007, }; static const struct ddb_info ddb_v7 = { @@ -347,6 +348,7 @@ static const struct ddb_info ddb_v7 = { .board_control = 2, .board_control_2 = 4, .ts_quirks = TS_QUIRK_REVERSED, + .hw_min = 0x010007, }; static const struct ddb_info ddb_ctv7 = { @@ -391,6 +393,7 @@ static const struct ddb_info ddb_ci_s2_pro = { .i2c_mask = 0x01, .board_control = 2, .board_control_2 = 4, + .hw_min = 0x010007, }; static const struct ddb_info ddb_ci_s2_pro_a = { @@ -401,6 +404,7 @@ static const struct ddb_info ddb_ci_s2_pro_a = { .i2c_mask = 0x01, .board_control = 2, .board_control_2 = 4, + .hw_min = 0x010007, }; static const struct ddb_info ddb_dvbct = { diff --git a/ddbridge/ddbridge-main.c b/ddbridge/ddbridge-main.c index 49bfe93..b5d16f2 100644 --- a/ddbridge/ddbridge-main.c +++ b/ddbridge/ddbridge-main.c @@ -337,6 +337,13 @@ static int __devinit ddb_probe(struct pci_dev *pdev, dev_info(dev->dev, "HW %08x REGMAP %08x\n", dev->link[0].ids.hwid, dev->link[0].ids.regmapid); + if ((dev->link[0].ids.hwid & 0xffffff) < + dev->link[0].info->hw_min) { + u32 min = dev->link[0].info->hw_min; + + dev_err(dev->dev, "Update firmware to at least version %u.%u to ensure full functionality!\n", + (min & 0xff0000) >> 16, min & 0xffff); + } if (dev->link[0].info->ns_num) { ddbwritel(dev, 0, ETHER_CONTROL); diff --git a/ddbridge/ddbridge.h b/ddbridge/ddbridge.h index 7958a0a..efd3c8f 100644 --- a/ddbridge/ddbridge.h +++ b/ddbridge/ddbridge.h @@ -167,6 +167,7 @@ struct ddb_info { u8 ns_num; u8 con_clock; /* use a continuous clock */ u8 ts_quirks; + u8 mci; #define TS_QUIRK_SERIAL 1 #define TS_QUIRK_REVERSED 2 #define TS_QUIRK_NO_OUTPUT 4 @@ -174,7 +175,7 @@ struct ddb_info { u32 tempmon_irq; u32 lostlock_irq; u32 mdio_base; - u8 mci; + u32 hw_min; const struct ddb_regmap *regmap; };