|
@@ -136,6 +136,8 @@
|
|
#define IFI_CANFD_SYSCLOCK 0x50
|
|
#define IFI_CANFD_SYSCLOCK 0x50
|
|
|
|
|
|
#define IFI_CANFD_VER 0x54
|
|
#define IFI_CANFD_VER 0x54
|
|
|
|
+#define IFI_CANFD_VER_REV_MASK 0xff
|
|
|
|
+#define IFI_CANFD_VER_REV_MIN_SUPPORTED 0x15
|
|
|
|
|
|
#define IFI_CANFD_IP_ID 0x58
|
|
#define IFI_CANFD_IP_ID 0x58
|
|
#define IFI_CANFD_IP_ID_VALUE 0xD073CAFD
|
|
#define IFI_CANFD_IP_ID_VALUE 0xD073CAFD
|
|
@@ -933,7 +935,7 @@ static int ifi_canfd_plat_probe(struct platform_device *pdev)
|
|
struct resource *res;
|
|
struct resource *res;
|
|
void __iomem *addr;
|
|
void __iomem *addr;
|
|
int irq, ret;
|
|
int irq, ret;
|
|
- u32 id;
|
|
|
|
|
|
+ u32 id, rev;
|
|
|
|
|
|
res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
|
|
res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
|
|
addr = devm_ioremap_resource(dev, res);
|
|
addr = devm_ioremap_resource(dev, res);
|
|
@@ -947,6 +949,13 @@ static int ifi_canfd_plat_probe(struct platform_device *pdev)
|
|
return -EINVAL;
|
|
return -EINVAL;
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+ rev = readl(addr + IFI_CANFD_VER) & IFI_CANFD_VER_REV_MASK;
|
|
|
|
+ if (rev < IFI_CANFD_VER_REV_MIN_SUPPORTED) {
|
|
|
|
+ dev_err(dev, "This block is too old (rev %i), minimum supported is rev %i\n",
|
|
|
|
+ rev, IFI_CANFD_VER_REV_MIN_SUPPORTED);
|
|
|
|
+ return -EINVAL;
|
|
|
|
+ }
|
|
|
|
+
|
|
ndev = alloc_candev(sizeof(*priv), 1);
|
|
ndev = alloc_candev(sizeof(*priv), 1);
|
|
if (!ndev)
|
|
if (!ndev)
|
|
return -ENOMEM;
|
|
return -ENOMEM;
|