| From 1ac2b755e3a514fb74fbe7574042364c97a8e572 Mon Sep 17 00:00:00 2001 |
| From: Matthew Gerlach <matthew.gerlach@linux.intel.com> |
| Date: Mon, 24 Apr 2017 16:34:22 -0500 |
| Subject: [PATCH 098/103] fpga fr br: update supported version numbers |
| |
| The value in the version register of the altera freeze bridge |
| controller changed from the beta value of 2 to the |
| value of 0xad000003 in the official release of the IP. |
| This patch supports the old and new version numbers, and the |
| driver's probe function will fail if neither of the supported |
| versions is found. |
| |
| Signed-off-by: Matthew Gerlach <matthew.gerlach@linux.intel.com> |
| Reviewed-by: Moritz Fischer <mdf@kernel.org> |
| Signed-off-by: Alan Tull <atull@kernel.org> |
| Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
| --- |
| drivers/fpga/altera-freeze-bridge.c | 30 +++++++++++++++++++----------- |
| 1 file changed, 19 insertions(+), 11 deletions(-) |
| |
| --- a/drivers/fpga/altera-freeze-bridge.c |
| +++ b/drivers/fpga/altera-freeze-bridge.c |
| @@ -28,6 +28,7 @@ |
| #define FREEZE_CSR_REG_VERSION 12 |
| |
| #define FREEZE_CSR_SUPPORTED_VERSION 2 |
| +#define FREEZE_CSR_OFFICIAL_VERSION 0xad000003 |
| |
| #define FREEZE_CSR_STATUS_FREEZE_REQ_DONE BIT(0) |
| #define FREEZE_CSR_STATUS_UNFREEZE_REQ_DONE BIT(1) |
| @@ -218,6 +219,7 @@ static int altera_freeze_br_probe(struct |
| { |
| struct device *dev = &pdev->dev; |
| struct device_node *np = pdev->dev.of_node; |
| + void __iomem *base_addr; |
| struct altera_freeze_br_data *priv; |
| struct resource *res; |
| u32 status, revision; |
| @@ -225,26 +227,32 @@ static int altera_freeze_br_probe(struct |
| if (!np) |
| return -ENODEV; |
| |
| + res = platform_get_resource(pdev, IORESOURCE_MEM, 0); |
| + base_addr = devm_ioremap_resource(dev, res); |
| + if (IS_ERR(base_addr)) |
| + return PTR_ERR(base_addr); |
| + |
| + revision = readl(base_addr + FREEZE_CSR_REG_VERSION); |
| + if ((revision != FREEZE_CSR_SUPPORTED_VERSION) && |
| + (revision != FREEZE_CSR_OFFICIAL_VERSION)) { |
| + dev_err(dev, |
| + "%s unexpected revision 0x%x != 0x%x != 0x%x\n", |
| + __func__, revision, FREEZE_CSR_SUPPORTED_VERSION, |
| + FREEZE_CSR_OFFICIAL_VERSION); |
| + return -EINVAL; |
| + } |
| + |
| priv = devm_kzalloc(dev, sizeof(*priv), GFP_KERNEL); |
| if (!priv) |
| return -ENOMEM; |
| |
| priv->dev = dev; |
| |
| - res = platform_get_resource(pdev, IORESOURCE_MEM, 0); |
| - priv->base_addr = devm_ioremap_resource(dev, res); |
| - if (IS_ERR(priv->base_addr)) |
| - return PTR_ERR(priv->base_addr); |
| - |
| - status = readl(priv->base_addr + FREEZE_CSR_STATUS_OFFSET); |
| + status = readl(base_addr + FREEZE_CSR_STATUS_OFFSET); |
| if (status & FREEZE_CSR_STATUS_UNFREEZE_REQ_DONE) |
| priv->enable = 1; |
| |
| - revision = readl(priv->base_addr + FREEZE_CSR_REG_VERSION); |
| - if (revision != FREEZE_CSR_SUPPORTED_VERSION) |
| - dev_warn(dev, |
| - "%s Freeze Controller unexpected revision %d != %d\n", |
| - __func__, revision, FREEZE_CSR_SUPPORTED_VERSION); |
| + priv->base_addr = base_addr; |
| |
| return fpga_bridge_register(dev, FREEZE_BRIDGE_NAME, |
| &altera_freeze_br_br_ops, priv); |