From mboxrd@z Thu Jan 1 00:00:00 1970 From: Thierry Reding Subject: [PATCH 2/5] reset: Add acquired flag to of_reset_control_array_get() Date: Thu, 21 Feb 2019 16:25:54 +0100 Message-ID: <20190221152557.8534-2-thierry.reding@gmail.com> References: <20190221152557.8534-1-thierry.reding@gmail.com> Mime-Version: 1.0 Content-Transfer-Encoding: 8bit Return-path: In-Reply-To: <20190221152557.8534-1-thierry.reding@gmail.com> Sender: linux-kernel-owner@vger.kernel.org To: Philipp Zabel Cc: Jonathan Hunter , linux-tegra@vger.kernel.org, linux-kernel@vger.kernel.org, Felipe Balbi , Greg Kroah-Hartman , linux-usb@vger.kernel.org List-Id: linux-tegra@vger.kernel.org From: Thierry Reding In order to be able to request an array of reset controls in acquired or released mode, add the acquired flag to of_reset_control_array_get() and pass the flag to subsequent calls of __of_reset_control_get(). Signed-off-by: Thierry Reding --- drivers/reset/core.c | 9 ++++++--- drivers/usb/dwc3/dwc3-of-simple.c | 3 ++- include/linux/reset.h | 14 ++++++++------ 3 files changed, 16 insertions(+), 10 deletions(-) diff --git a/drivers/reset/core.c b/drivers/reset/core.c index 1e8a42b16f23..f94da91c22af 100644 --- a/drivers/reset/core.c +++ b/drivers/reset/core.c @@ -830,12 +830,15 @@ static int of_reset_control_get_count(struct device_node *node) * @np: device node for the device that requests the reset controls array * @shared: whether reset controls are shared or not * @optional: whether it is optional to get the reset controls + * @acquired: only one reset control may be acquired for a given controller + * and ID * * Returns pointer to allocated reset_control_array on success or * error on failure */ struct reset_control * -of_reset_control_array_get(struct device_node *np, bool shared, bool optional) +of_reset_control_array_get(struct device_node *np, bool shared, bool optional, + bool acquired) { struct reset_control_array *resets; struct reset_control *rstc; @@ -851,7 +854,7 @@ of_reset_control_array_get(struct device_node *np, bool shared, bool optional) for (i = 0; i < num; i++) { rstc = __of_reset_control_get(np, NULL, i, shared, optional, - true); + acquired); if (IS_ERR(rstc)) goto err_rst; resets->rstc[i] = rstc; @@ -898,7 +901,7 @@ devm_reset_control_array_get(struct device *dev, bool shared, bool optional) if (!devres) return ERR_PTR(-ENOMEM); - rstc = of_reset_control_array_get(dev->of_node, shared, optional); + rstc = of_reset_control_array_get(dev->of_node, shared, optional, true); if (IS_ERR(rstc)) { devres_free(devres); return rstc; diff --git a/drivers/usb/dwc3/dwc3-of-simple.c b/drivers/usb/dwc3/dwc3-of-simple.c index 4c2771c5e727..67ce2037472d 100644 --- a/drivers/usb/dwc3/dwc3-of-simple.c +++ b/drivers/usb/dwc3/dwc3-of-simple.c @@ -107,7 +107,8 @@ static int dwc3_of_simple_probe(struct platform_device *pdev) simple->pulse_resets = true; } - simple->resets = of_reset_control_array_get(np, shared_resets, true); + simple->resets = of_reset_control_array_get(np, shared_resets, true, + true); if (IS_ERR(simple->resets)) { ret = PTR_ERR(simple->resets); dev_err(dev, "failed to get device resets, err=%d\n", ret); diff --git a/include/linux/reset.h b/include/linux/reset.h index ea9a8a1ce4b1..a01b32bf51d4 100644 --- a/include/linux/reset.h +++ b/include/linux/reset.h @@ -32,7 +32,8 @@ struct reset_control *__devm_reset_control_get(struct device *dev, struct reset_control *devm_reset_control_array_get(struct device *dev, bool shared, bool optional); struct reset_control *of_reset_control_array_get(struct device_node *np, - bool shared, bool optional); + bool shared, bool optional, + bool acquired); int reset_control_get_count(struct device *dev); @@ -107,7 +108,8 @@ devm_reset_control_array_get(struct device *dev, bool shared, bool optional) } static inline struct reset_control * -of_reset_control_array_get(struct device_node *np, bool shared, bool optional) +of_reset_control_array_get(struct device_node *np, bool shared, bool optional, + bool acquired) { return optional ? NULL : ERR_PTR(-ENOTSUPP); } @@ -465,24 +467,24 @@ devm_reset_control_array_get_optional_shared(struct device *dev) static inline struct reset_control * of_reset_control_array_get_exclusive(struct device_node *node) { - return of_reset_control_array_get(node, false, false); + return of_reset_control_array_get(node, false, false, true); } static inline struct reset_control * of_reset_control_array_get_shared(struct device_node *node) { - return of_reset_control_array_get(node, true, false); + return of_reset_control_array_get(node, true, false, true); } static inline struct reset_control * of_reset_control_array_get_optional_exclusive(struct device_node *node) { - return of_reset_control_array_get(node, false, true); + return of_reset_control_array_get(node, false, true, true); } static inline struct reset_control * of_reset_control_array_get_optional_shared(struct device_node *node) { - return of_reset_control_array_get(node, true, true); + return of_reset_control_array_get(node, true, true, true); } #endif -- 2.20.1 From mboxrd@z Thu Jan 1 00:00:00 1970 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: base64 Subject: [2/5] reset: Add acquired flag to of_reset_control_array_get() From: Thierry Reding Message-Id: <20190221152557.8534-2-thierry.reding@gmail.com> Date: Thu, 21 Feb 2019 16:25:54 +0100 To: Philipp Zabel Cc: Jonathan Hunter , linux-tegra@vger.kernel.org, linux-kernel@vger.kernel.org, Felipe Balbi , Greg Kroah-Hartman , linux-usb@vger.kernel.org List-ID: RnJvbTogVGhpZXJyeSBSZWRpbmcgPHRyZWRpbmdAbnZpZGlhLmNvbT4KCkluIG9yZGVyIHRvIGJl IGFibGUgdG8gcmVxdWVzdCBhbiBhcnJheSBvZiByZXNldCBjb250cm9scyBpbiBhY3F1aXJlZCBv cgpyZWxlYXNlZCBtb2RlLCBhZGQgdGhlIGFjcXVpcmVkIGZsYWcgdG8gb2ZfcmVzZXRfY29udHJv bF9hcnJheV9nZXQoKSBhbmQKcGFzcyB0aGUgZmxhZyB0byBzdWJzZXF1ZW50IGNhbGxzIG9mIF9f b2ZfcmVzZXRfY29udHJvbF9nZXQoKS4KClNpZ25lZC1vZmYtYnk6IFRoaWVycnkgUmVkaW5nIDx0 cmVkaW5nQG52aWRpYS5jb20+Ci0tLQogZHJpdmVycy9yZXNldC9jb3JlLmMgICAgICAgICAgICAg IHwgIDkgKysrKysrLS0tCiBkcml2ZXJzL3VzYi9kd2MzL2R3YzMtb2Ytc2ltcGxlLmMgfCAgMyAr Ky0KIGluY2x1ZGUvbGludXgvcmVzZXQuaCAgICAgICAgICAgICB8IDE0ICsrKysrKysrLS0tLS0t CiAzIGZpbGVzIGNoYW5nZWQsIDE2IGluc2VydGlvbnMoKyksIDEwIGRlbGV0aW9ucygtKQoKZGlm ZiAtLWdpdCBhL2RyaXZlcnMvcmVzZXQvY29yZS5jIGIvZHJpdmVycy9yZXNldC9jb3JlLmMKaW5k ZXggMWU4YTQyYjE2ZjIzLi5mOTRkYTkxYzIyYWYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcmVzZXQv Y29yZS5jCisrKyBiL2RyaXZlcnMvcmVzZXQvY29yZS5jCkBAIC04MzAsMTIgKzgzMCwxNSBAQCBz dGF0aWMgaW50IG9mX3Jlc2V0X2NvbnRyb2xfZ2V0X2NvdW50KHN0cnVjdCBkZXZpY2Vfbm9kZSAq bm9kZSkKICAqIEBucDogZGV2aWNlIG5vZGUgZm9yIHRoZSBkZXZpY2UgdGhhdCByZXF1ZXN0cyB0 aGUgcmVzZXQgY29udHJvbHMgYXJyYXkKICAqIEBzaGFyZWQ6IHdoZXRoZXIgcmVzZXQgY29udHJv bHMgYXJlIHNoYXJlZCBvciBub3QKICAqIEBvcHRpb25hbDogd2hldGhlciBpdCBpcyBvcHRpb25h bCB0byBnZXQgdGhlIHJlc2V0IGNvbnRyb2xzCisgKiBAYWNxdWlyZWQ6IG9ubHkgb25lIHJlc2V0 IGNvbnRyb2wgbWF5IGJlIGFjcXVpcmVkIGZvciBhIGdpdmVuIGNvbnRyb2xsZXIKKyAqICAgICAg ICAgICAgYW5kIElECiAgKgogICogUmV0dXJucyBwb2ludGVyIHRvIGFsbG9jYXRlZCByZXNldF9j b250cm9sX2FycmF5IG9uIHN1Y2Nlc3Mgb3IKICAqIGVycm9yIG9uIGZhaWx1cmUKICAqLwogc3Ry dWN0IHJlc2V0X2NvbnRyb2wgKgotb2ZfcmVzZXRfY29udHJvbF9hcnJheV9nZXQoc3RydWN0IGRl dmljZV9ub2RlICpucCwgYm9vbCBzaGFyZWQsIGJvb2wgb3B0aW9uYWwpCitvZl9yZXNldF9jb250 cm9sX2FycmF5X2dldChzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wLCBib29sIHNoYXJlZCwgYm9vbCBv cHRpb25hbCwKKwkJCSAgIGJvb2wgYWNxdWlyZWQpCiB7CiAJc3RydWN0IHJlc2V0X2NvbnRyb2xf YXJyYXkgKnJlc2V0czsKIAlzdHJ1Y3QgcmVzZXRfY29udHJvbCAqcnN0YzsKQEAgLTg1MSw3ICs4 NTQsNyBAQCBvZl9yZXNldF9jb250cm9sX2FycmF5X2dldChzdHJ1Y3QgZGV2aWNlX25vZGUgKm5w LCBib29sIHNoYXJlZCwgYm9vbCBvcHRpb25hbCkKIAogCWZvciAoaSA9IDA7IGkgPCBudW07IGkr KykgewogCQlyc3RjID0gX19vZl9yZXNldF9jb250cm9sX2dldChucCwgTlVMTCwgaSwgc2hhcmVk LCBvcHRpb25hbCwKLQkJCQkJICAgICAgdHJ1ZSk7CisJCQkJCSAgICAgIGFjcXVpcmVkKTsKIAkJ aWYgKElTX0VSUihyc3RjKSkKIAkJCWdvdG8gZXJyX3JzdDsKIAkJcmVzZXRzLT5yc3RjW2ldID0g cnN0YzsKQEAgLTg5OCw3ICs5MDEsNyBAQCBkZXZtX3Jlc2V0X2NvbnRyb2xfYXJyYXlfZ2V0KHN0 cnVjdCBkZXZpY2UgKmRldiwgYm9vbCBzaGFyZWQsIGJvb2wgb3B0aW9uYWwpCiAJaWYgKCFkZXZy ZXMpCiAJCXJldHVybiBFUlJfUFRSKC1FTk9NRU0pOwogCi0JcnN0YyA9IG9mX3Jlc2V0X2NvbnRy b2xfYXJyYXlfZ2V0KGRldi0+b2Zfbm9kZSwgc2hhcmVkLCBvcHRpb25hbCk7CisJcnN0YyA9IG9m X3Jlc2V0X2NvbnRyb2xfYXJyYXlfZ2V0KGRldi0+b2Zfbm9kZSwgc2hhcmVkLCBvcHRpb25hbCwg dHJ1ZSk7CiAJaWYgKElTX0VSUihyc3RjKSkgewogCQlkZXZyZXNfZnJlZShkZXZyZXMpOwogCQly ZXR1cm4gcnN0YzsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2R3YzMvZHdjMy1vZi1zaW1wbGUu YyBiL2RyaXZlcnMvdXNiL2R3YzMvZHdjMy1vZi1zaW1wbGUuYwppbmRleCA0YzI3NzFjNWU3Mjcu LjY3Y2UyMDM3NDcyZCAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvZHdjMy9kd2MzLW9mLXNpbXBs ZS5jCisrKyBiL2RyaXZlcnMvdXNiL2R3YzMvZHdjMy1vZi1zaW1wbGUuYwpAQCAtMTA3LDcgKzEw Nyw4IEBAIHN0YXRpYyBpbnQgZHdjM19vZl9zaW1wbGVfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2Rl dmljZSAqcGRldikKIAkJc2ltcGxlLT5wdWxzZV9yZXNldHMgPSB0cnVlOwogCX0KIAotCXNpbXBs ZS0+cmVzZXRzID0gb2ZfcmVzZXRfY29udHJvbF9hcnJheV9nZXQobnAsIHNoYXJlZF9yZXNldHMs IHRydWUpOworCXNpbXBsZS0+cmVzZXRzID0gb2ZfcmVzZXRfY29udHJvbF9hcnJheV9nZXQobnAs IHNoYXJlZF9yZXNldHMsIHRydWUsCisJCQkJCQkgICAgdHJ1ZSk7CiAJaWYgKElTX0VSUihzaW1w bGUtPnJlc2V0cykpIHsKIAkJcmV0ID0gUFRSX0VSUihzaW1wbGUtPnJlc2V0cyk7CiAJCWRldl9l cnIoZGV2LCAiZmFpbGVkIHRvIGdldCBkZXZpY2UgcmVzZXRzLCBlcnI9JWRcbiIsIHJldCk7CmRp ZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3Jlc2V0LmggYi9pbmNsdWRlL2xpbnV4L3Jlc2V0LmgK aW5kZXggZWE5YThhMWNlNGIxLi5hMDFiMzJiZjUxZDQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGlu dXgvcmVzZXQuaAorKysgYi9pbmNsdWRlL2xpbnV4L3Jlc2V0LmgKQEAgLTMyLDcgKzMyLDggQEAg c3RydWN0IHJlc2V0X2NvbnRyb2wgKl9fZGV2bV9yZXNldF9jb250cm9sX2dldChzdHJ1Y3QgZGV2 aWNlICpkZXYsCiBzdHJ1Y3QgcmVzZXRfY29udHJvbCAqZGV2bV9yZXNldF9jb250cm9sX2FycmF5 X2dldChzdHJ1Y3QgZGV2aWNlICpkZXYsCiAJCQkJCQkgICBib29sIHNoYXJlZCwgYm9vbCBvcHRp b25hbCk7CiBzdHJ1Y3QgcmVzZXRfY29udHJvbCAqb2ZfcmVzZXRfY29udHJvbF9hcnJheV9nZXQo c3RydWN0IGRldmljZV9ub2RlICpucCwKLQkJCQkJCSBib29sIHNoYXJlZCwgYm9vbCBvcHRpb25h bCk7CisJCQkJCQkgYm9vbCBzaGFyZWQsIGJvb2wgb3B0aW9uYWwsCisJCQkJCQkgYm9vbCBhY3F1 aXJlZCk7CiAKIGludCByZXNldF9jb250cm9sX2dldF9jb3VudChzdHJ1Y3QgZGV2aWNlICpkZXYp OwogCkBAIC0xMDcsNyArMTA4LDggQEAgZGV2bV9yZXNldF9jb250cm9sX2FycmF5X2dldChzdHJ1 Y3QgZGV2aWNlICpkZXYsIGJvb2wgc2hhcmVkLCBib29sIG9wdGlvbmFsKQogfQogCiBzdGF0aWMg aW5saW5lIHN0cnVjdCByZXNldF9jb250cm9sICoKLW9mX3Jlc2V0X2NvbnRyb2xfYXJyYXlfZ2V0 KHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnAsIGJvb2wgc2hhcmVkLCBib29sIG9wdGlvbmFsKQorb2Zf cmVzZXRfY29udHJvbF9hcnJheV9nZXQoc3RydWN0IGRldmljZV9ub2RlICpucCwgYm9vbCBzaGFy ZWQsIGJvb2wgb3B0aW9uYWwsCisJCQkgICBib29sIGFjcXVpcmVkKQogewogCXJldHVybiBvcHRp b25hbCA/IE5VTEwgOiBFUlJfUFRSKC1FTk9UU1VQUCk7CiB9CkBAIC00NjUsMjQgKzQ2NywyNCBA QCBkZXZtX3Jlc2V0X2NvbnRyb2xfYXJyYXlfZ2V0X29wdGlvbmFsX3NoYXJlZChzdHJ1Y3QgZGV2 aWNlICpkZXYpCiBzdGF0aWMgaW5saW5lIHN0cnVjdCByZXNldF9jb250cm9sICoKIG9mX3Jlc2V0 X2NvbnRyb2xfYXJyYXlfZ2V0X2V4Y2x1c2l2ZShzdHJ1Y3QgZGV2aWNlX25vZGUgKm5vZGUpCiB7 Ci0JcmV0dXJuIG9mX3Jlc2V0X2NvbnRyb2xfYXJyYXlfZ2V0KG5vZGUsIGZhbHNlLCBmYWxzZSk7 CisJcmV0dXJuIG9mX3Jlc2V0X2NvbnRyb2xfYXJyYXlfZ2V0KG5vZGUsIGZhbHNlLCBmYWxzZSwg dHJ1ZSk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgc3RydWN0IHJlc2V0X2NvbnRyb2wgKgogb2ZfcmVz ZXRfY29udHJvbF9hcnJheV9nZXRfc2hhcmVkKHN0cnVjdCBkZXZpY2Vfbm9kZSAqbm9kZSkKIHsK LQlyZXR1cm4gb2ZfcmVzZXRfY29udHJvbF9hcnJheV9nZXQobm9kZSwgdHJ1ZSwgZmFsc2UpOwor CXJldHVybiBvZl9yZXNldF9jb250cm9sX2FycmF5X2dldChub2RlLCB0cnVlLCBmYWxzZSwgdHJ1 ZSk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgc3RydWN0IHJlc2V0X2NvbnRyb2wgKgogb2ZfcmVzZXRf Y29udHJvbF9hcnJheV9nZXRfb3B0aW9uYWxfZXhjbHVzaXZlKHN0cnVjdCBkZXZpY2Vfbm9kZSAq bm9kZSkKIHsKLQlyZXR1cm4gb2ZfcmVzZXRfY29udHJvbF9hcnJheV9nZXQobm9kZSwgZmFsc2Us IHRydWUpOworCXJldHVybiBvZl9yZXNldF9jb250cm9sX2FycmF5X2dldChub2RlLCBmYWxzZSwg dHJ1ZSwgdHJ1ZSk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgc3RydWN0IHJlc2V0X2NvbnRyb2wgKgog b2ZfcmVzZXRfY29udHJvbF9hcnJheV9nZXRfb3B0aW9uYWxfc2hhcmVkKHN0cnVjdCBkZXZpY2Vf bm9kZSAqbm9kZSkKIHsKLQlyZXR1cm4gb2ZfcmVzZXRfY29udHJvbF9hcnJheV9nZXQobm9kZSwg dHJ1ZSwgdHJ1ZSk7CisJcmV0dXJuIG9mX3Jlc2V0X2NvbnRyb2xfYXJyYXlfZ2V0KG5vZGUsIHRy dWUsIHRydWUsIHRydWUpOwogfQogI2VuZGlmCg==