Commit a1a10cdb authored by Linus Torvalds's avatar Linus Torvalds
Browse files

Merge tag 'clk-fixes-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/clk/linux

Pull clk driver fixes from Stephen Boyd:

 - Mark the DDR bus clk critical in the SpaceMiT driver so that
   boot doesn't fail

 - Fix boot on Mobile EyeQ by creating the auxiliary device for
   the ethernet PHY

 - Plug an OF node leak in Rockchip rk808 clk driver

* tag 'clk-fixes-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/clk/linux:
  clk: rk808: fix OF node reference imbalance
  MAINTAINERS: add myself as a reviewer for the clk subsystem
  reset: eyeq: drop device_set_of_node_from_dev() done by parent
  clk: eyeq: add EyeQ5 children auxiliary device for generic PHYs
  clk: eyeq: use the auxiliary device creation helper
  clk: spacemit: k3: mark top_dclk as CLK_IS_CRITICAL
parents 515186b7 de019f20
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -6356,6 +6356,7 @@ F: include/uapi/linux/comedi.h
COMMON CLK FRAMEWORK
M:	Michael Turquette <mturquette@baylibre.com>
M:	Stephen Boyd <sboyd@kernel.org>
R:	Brian Masney <bmasney@redhat.com>
L:	linux-clk@vger.kernel.org
S:	Maintained
Q:	http://patchwork.kernel.org/project/linux-clk/list/
+15 −45
Original line number Diff line number Diff line
@@ -110,6 +110,7 @@ struct eqc_match_data {

	const char		*reset_auxdev_name;
	const char		*pinctrl_auxdev_name;
	const char		*eth_phy_auxdev_name;

	unsigned int		early_clk_count;
};
@@ -321,38 +322,18 @@ static void eqc_probe_init_fixed_factors(struct device *dev,
	}
}

static void eqc_auxdev_release(struct device *dev)
{
	struct auxiliary_device *adev = to_auxiliary_dev(dev);

	kfree(adev);
}

static int eqc_auxdev_create(struct device *dev, void __iomem *base,
			     const char *name, u32 id)
static void eqc_auxdev_create_optional(struct device *dev, void __iomem *base,
				       const char *name)
{
	struct auxiliary_device *adev;
	int ret;

	adev = kzalloc_obj(*adev);
	if (name) {
		adev = devm_auxiliary_device_create(dev, name,
						    (void __force *)base);
		if (!adev)
		return -ENOMEM;

	adev->name = name;
	adev->dev.parent = dev;
	adev->dev.platform_data = (void __force *)base;
	adev->dev.release = eqc_auxdev_release;
	adev->id = id;

	ret = auxiliary_device_init(adev);
	if (ret)
		return ret;

	ret = auxiliary_device_add(adev);
	if (ret)
		auxiliary_device_uninit(adev);

	return ret;
			dev_warn(dev, "failed creating auxiliary device %s.%s\n",
				 KBUILD_MODNAME, name);
	}
}

static int eqc_probe(struct platform_device *pdev)
@@ -364,7 +345,6 @@ static int eqc_probe(struct platform_device *pdev)
	unsigned int i, clk_count;
	struct resource *res;
	void __iomem *base;
	int ret;

	data = device_get_match_data(dev);
	if (!data)
@@ -378,21 +358,10 @@ static int eqc_probe(struct platform_device *pdev)
	if (!base)
		return -ENOMEM;

	/* Init optional reset auxiliary device. */
	if (data->reset_auxdev_name) {
		ret = eqc_auxdev_create(dev, base, data->reset_auxdev_name, 0);
		if (ret)
			dev_warn(dev, "failed creating auxiliary device %s.%s: %d\n",
				 KBUILD_MODNAME, data->reset_auxdev_name, ret);
	}

	/* Init optional pinctrl auxiliary device. */
	if (data->pinctrl_auxdev_name) {
		ret = eqc_auxdev_create(dev, base, data->pinctrl_auxdev_name, 0);
		if (ret)
			dev_warn(dev, "failed creating auxiliary device %s.%s: %d\n",
				 KBUILD_MODNAME, data->pinctrl_auxdev_name, ret);
	}
	/* Init optional auxiliary devices. */
	eqc_auxdev_create_optional(dev, base, data->reset_auxdev_name);
	eqc_auxdev_create_optional(dev, base, data->pinctrl_auxdev_name);
	eqc_auxdev_create_optional(dev, base, data->eth_phy_auxdev_name);

	if (data->pll_count + data->div_count + data->fixed_factor_count == 0)
		return 0; /* Zero clocks, we are done. */
@@ -553,6 +522,7 @@ static const struct eqc_match_data eqc_eyeq5_match_data = {

	.reset_auxdev_name = "reset",
	.pinctrl_auxdev_name = "pinctrl",
	.eth_phy_auxdev_name = "phy",

	.early_clk_count = ARRAY_SIZE(eqc_eyeq5_early_plls) +
			   ARRAY_SIZE(eqc_eyeq5_early_fixed_factors),
+1 −1
Original line number Diff line number Diff line
@@ -153,7 +153,7 @@ static int rk808_clkout_probe(struct platform_device *pdev)
	struct rk808_clkout *rk808_clkout;
	int ret;

	dev->of_node = pdev->dev.parent->of_node;
	device_set_of_node_from_dev(dev, dev->parent);

	rk808_clkout = devm_kzalloc(dev,
				    sizeof(*rk808_clkout), GFP_KERNEL);
+1 −1
Original line number Diff line number Diff line
@@ -846,7 +846,7 @@ static const struct clk_parent_data top_parents[] = {
	CCU_PARENT_HW(pll6_d3),
};
CCU_MUX_DIV_GATE_FC_DEFINE(top_dclk, top_parents, APMU_TOP_DCLK_CTRL, 5, 3,
			   BIT(8), 2, 3, BIT(1), 0);
			   BIT(8), 2, 3, BIT(1), CLK_IS_CRITICAL);

static const struct clk_parent_data ucie_parents[] = {
	CCU_PARENT_HW(pll1_d8_307p2),
+2 −22
Original line number Diff line number Diff line
@@ -422,13 +422,6 @@ static int eqr_of_xlate_twocells(struct reset_controller_dev *rcdev,
	return eqr_of_xlate_internal(rcdev, reset_spec->args[0], reset_spec->args[1]);
}

static void eqr_of_node_put(void *_dev)
{
	struct device *dev = _dev;

	of_node_put(dev->of_node);
}

static int eqr_probe(struct auxiliary_device *adev,
		     const struct auxiliary_device_id *id)
{
@@ -439,21 +432,8 @@ static int eqr_probe(struct auxiliary_device *adev,
	int ret;

	/*
	 * We are an auxiliary device of clk-eyeq. We do not have an OF node by
	 * default; let's reuse our parent's OF node.
	 */
	WARN_ON(dev->of_node);
	device_set_of_node_from_dev(dev, dev->parent);
	if (!dev->of_node)
		return -ENODEV;

	ret = devm_add_action_or_reset(dev, eqr_of_node_put, dev);
	if (ret)
		return ret;

	/*
	 * Using our newfound OF node, we can get match data. We cannot use
	 * device_get_match_data() because it does not match reused OF nodes.
	 * Get match data. We cannot use device_get_match_data() because it does
	 * not accept reused OF nodes; see device_set_of_node_from_dev().
	 */
	match = of_match_node(dev->driver->of_match_table, dev->of_node);
	if (!match || !match->data)