Re: [PATCH v2] fpga fr br: update supported version numbers

From: Moritz Fischer
Date: Fri Apr 07 2017 - 20:53:22 EST


On Fri, Apr 07, 2017 at 12:26:36PM -0700, matthew.gerlach@xxxxxxxxxxxxxxx wrote:
> From: Matthew Gerlach <matthew.gerlach@xxxxxxxxxxxxxxx>
>
> 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@xxxxxxxxxxxxxxx>
Reviewed-by: Moritz Fischer <mdf@xxxxxxxxxx>
> ---
> v2: change warning to fail as per Moritz Fischer <mdf@xxxxxxxxxx>
> ---
> drivers/fpga/altera-freeze-bridge.c | 30 +++++++++++++++++++-----------
> 1 file changed, 19 insertions(+), 11 deletions(-)
>
> diff --git a/drivers/fpga/altera-freeze-bridge.c b/drivers/fpga/altera-freeze-bridge.c
> index 8dcd9fb..114d3cb 100644
> --- 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 platform_device *pdev)
> {
> 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 platform_device *pdev)
> 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);
> --
> 2.7.4
>

Thanks,
Moritz

Attachment: signature.asc
Description: PGP signature