[PATCH v6 2/3] of/pci: Add helper function to parse max-link-speed from dt

Rob Herring robh at kernel.org
Tue Oct 11 07:02:51 PDT 2016


On Mon, Oct 10, 2016 at 11:26 PM, Shawn Lin <shawn.lin at rock-chips.com> wrote:
> This new helper function could be used by host drivers to
> get the limitaion of max link speed provided by dt. If the
> property isn't assigned or is invalid, it will return -EINVAL
> to the caller.
>
> Signed-off-by: Shawn Lin <shawn.lin at rock-chips.com>
> ---
>
> Changes in v6: None
> Changes in v5: None
> Changes in v4: None
> Changes in v3: None
> Changes in v2: None
>
>  drivers/of/of_pci.c    | 27 +++++++++++++++++++++++++++
>  include/linux/of_pci.h |  7 +++++++
>  2 files changed, 34 insertions(+)
>
> diff --git a/drivers/of/of_pci.c b/drivers/of/of_pci.c
> index 589b30c..91fd465 100644
> --- a/drivers/of/of_pci.c
> +++ b/drivers/of/of_pci.c
> @@ -120,6 +120,33 @@ int of_get_pci_domain_nr(struct device_node *node)
>  EXPORT_SYMBOL_GPL(of_get_pci_domain_nr);
>
>  /**
> + * This function will try to find the limitation of link speed by finding
> + * a property called "max-link-speed" of the given device node.
> + *
> + * @node: device tree node with the max link speed information
> + *
> + * Returns the associated max link speed from DT, or a negative value if the
> + * required property is not found or is invalid.
> + */
> +int of_get_pci_max_link_speed(struct device_node *node)

of_pci_get_max_link_speed

> +{
> +       const __be32 *value;
> +       int len;
> +       u16 max_link_speed;
> +
> +       value = of_get_property(node, "max-link-speed", &len);

Use of_property_read_u32 instead.

> +       if (!value || len < sizeof(*value))
> +               return -EINVAL;
> +
> +       max_link_speed = (u16)be32_to_cpup(value);

There's no point in making this a u16.

> +       if (max_link_speed > 4)
> +               return -EINVAL;
> +
> +       return max_link_speed;
> +}
> +EXPORT_SYMBOL_GPL(of_get_pci_max_link_speed);
> +
> +/**
>   * of_pci_check_probe_only - Setup probe only mode if linux,pci-probe-only
>   *                           is present and valid
>   */
> diff --git a/include/linux/of_pci.h b/include/linux/of_pci.h
> index b969e94..a8946d7 100644
> --- a/include/linux/of_pci.h
> +++ b/include/linux/of_pci.h
> @@ -16,6 +16,7 @@ int of_pci_get_devfn(struct device_node *np);
>  int of_irq_parse_and_map_pci(const struct pci_dev *dev, u8 slot, u8 pin);
>  int of_pci_parse_bus_range(struct device_node *node, struct resource *res);
>  int of_get_pci_domain_nr(struct device_node *node);
> +int of_get_pci_max_link_speed(struct device_node *node);
>  void of_pci_check_probe_only(void);
>  #else
>  static inline int of_irq_parse_pci(const struct pci_dev *pdev, struct of_phandle_args *out_irq)
> @@ -52,6 +53,12 @@ of_get_pci_domain_nr(struct device_node *node)
>         return -1;
>  }
>
> +static inline int
> +of_get_pci_max_link_speed(struct device_node *node)
> +{
> +       return -EINVAL;
> +}
> +
>  static inline void of_pci_check_probe_only(void) { }
>  #endif
>
> --
> 2.3.7
>
>



More information about the Linux-rockchip mailing list