From mboxrd@z Thu Jan 1 00:00:00 1970 From: "Shevchenko, Andriy" Subject: Re: [PATCH] dt: add helper function to read u8 & u16 variables & arrays Date: Tue, 20 Nov 2012 08:21:07 +0000 Message-ID: <1353399661.20110.4.camel@smile> References: <0ee5b74534a09d75c14b22c2d9330c4971ab30fb.1353386646.git.viresh.kumar@linaro.org> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <0ee5b74534a09d75c14b22c2d9330c4971ab30fb.1353386646.git.viresh.kumar@linaro.org> Content-Language: en-US Content-ID: Sender: linux-kernel-owner@vger.kernel.org To: Viresh Kumar Cc: "rob.herring@calxeda.com" , "grant.likely@secretlab.ca" , "spear-devel@list.st.com" , "devicetree-discuss@lists.ozlabs.org" , "linux-kernel@vger.kernel.org" , "linaro-dev@lists.linaro.org" , "patches@linaro.org" , "swarren@wwwdotorg.org" List-Id: devicetree@vger.kernel.org T24gVHVlLCAyMDEyLTExLTIwIGF0IDEwOjE1ICswNTMwLCBWaXJlc2ggS3VtYXIgd3JvdGU6IA0K PiBUaGlzIGFkZHMgZm9sbG93aW5nIGhlbHBlciByb3V0aW5lczoNCj4gLSBvZl9wcm9wZXJ0eV9y ZWFkX3U4X2FycmF5KCkNCj4gLSBvZl9wcm9wZXJ0eV9yZWFkX3UxNl9hcnJheSgpDQo+IC0gb2Zf cHJvcGVydHlfcmVhZF91OCgpDQo+IC0gb2ZfcHJvcGVydHlfcmVhZF91MTYoKQ0KPiANCj4gVGhp cyBleHBlY3RzIGFycmF5cyBmcm9tIERUIHRvIGJlIHBhc3NlZCBhczoNCj4gLSB1OCBhcnJheToN Cj4gCXByb3BlcnR5ID0gL2JpdHMvIDggPDB4NTAgMHg2MCAweDcwPjsNCj4gLSB1MTYgYXJyYXk6 DQo+IAlwcm9wZXJ0eSA9IC9iaXRzLyAxNiA8MHg1MDAwIDB4NjAwMCAweDcwMDA+Ow0KPiANCj4g U2lnbmVkLW9mZi1ieTogVmlyZXNoIEt1bWFyIDx2aXJlc2gua3VtYXJAbGluYXJvLm9yZz4NCj4g LS0tDQo+IFYyLT5WMzoNCj4gLSBFeHBlY3QgdTggJiB1MTYgYXJyYXlzIHRvIGJlIHBhc3NlZCB1 c2luZzogL2JpdHMvIDggb3IgMTYNCj4gLSByZW1vdmUgY29tbW9uIG1hY3JvLCBhcyBub3QgbXVj aCBjb21tb24gbm93IDooDQoNCllvdSBjb3VsZCBhdCBsZWFzdCBjcmVhdGUgbWFjcm8gdG8gZG8g YSBwcmVjaGVjayBpZiB5b3Ugd2FudCB0by4NCg0KTGlrZSANCiNkZWZpbmUgQ0hFQ0tfUFJPUChw cm9wLCBzeiwgb3V0KQ0KDQp7DQppZiAoIXByb3ApIA0KCQlyZXR1cm4gLUVJTlZBTDsNCglpZiAo IXByb3AtPnZhbHVlKQ0KCQlyZXR1cm4gLUVOT0RBVEE7DQoJaWYgKChzeiAqIHNpemVvZigqb3V0 KSkgPiBwcm9wLT5sZW5ndGgpDQoJCXJldHVybiAtRU9WRVJGTE9XOw0KfQ0KDQpPZiBjb3Vyc2Ug eW91IGNhbiBkbyBldmVuIHJvYnVzdCBtYWNybyB0byBjb3ZlciB0eXBlcywgYnV0IEkgZG9uJ3Qg bGlrZQ0KdWdseSBtYWNyb3MgKGFzIEkgY2FuJ3Qgc2VlIGhvdyBpdCBjb3VsZCBiZSBzaGFwZWQg bmljZWx5KS4NCg0KPiAtIFRlc3RlZCBvbiBBUk0gcGxhdGZvcm0uDQo+IA0KDQo+IC0tLSBhL2Ry aXZlcnMvb2YvYmFzZS5jDQo+ICsrKyBiL2RyaXZlcnMvb2YvYmFzZS5jDQo+IEBAIC02NzEsMTIg KzY3MSw4OSBAQCBzdHJ1Y3QgZGV2aWNlX25vZGUgKm9mX2ZpbmRfbm9kZV9ieV9waGFuZGxlKHBo YW5kbGUgaGFuZGxlKQ0KPiAgRVhQT1JUX1NZTUJPTChvZl9maW5kX25vZGVfYnlfcGhhbmRsZSk7 DQo+ICANCj4gIC8qKg0KPiArICogb2ZfcHJvcGVydHlfcmVhZF91OF9hcnJheSAtIEZpbmQgYW5k IHJlYWQgYW4gYXJyYXkgb2YgdTggZnJvbSBhIHByb3BlcnR5Lg0KPiArICoNCj4gKyAqIEBucDoJ CWRldmljZSBub2RlIGZyb20gd2hpY2ggdGhlIHByb3BlcnR5IHZhbHVlIGlzIHRvIGJlIHJlYWQu DQo+ICsgKiBAcHJvcG5hbWU6CW5hbWUgb2YgdGhlIHByb3BlcnR5IHRvIGJlIHNlYXJjaGVkLg0K PiArICogQG91dF92YWx1ZToJcG9pbnRlciB0byByZXR1cm4gdmFsdWUsIG1vZGlmaWVkIG9ubHkg aWYgcmV0dXJuIHZhbHVlIGlzIDAuDQo+ICsgKiBAc3o6CQludW1iZXIgb2YgYXJyYXkgZWxlbWVu dHMgdG8gcmVhZA0KPiArICoNCj4gKyAqIFNlYXJjaCBmb3IgYSBwcm9wZXJ0eSBpbiBhIGRldmlj ZSBub2RlIGFuZCByZWFkIDgtYml0IHZhbHVlKHMpIGZyb20NCj4gKyAqIGl0LiBSZXR1cm5zIDAg b24gc3VjY2VzcywgLUVJTlZBTCBpZiB0aGUgcHJvcGVydHkgZG9lcyBub3QgZXhpc3QsDQo+ICsg KiAtRU5PREFUQSBpZiBwcm9wZXJ0eSBkb2VzIG5vdCBoYXZlIGEgdmFsdWUsIGFuZCAtRU9WRVJG TE9XIGlmIHRoZQ0KPiArICogcHJvcGVydHkgZGF0YSBpc24ndCBsYXJnZSBlbm91Z2guDQo+ICsg Kg0KPiArICogZHRzIGVudHJ5IG9mIGFycmF5IHNob3VsZCBiZSBsaWtlOg0KPiArICoJcHJvcGVy dHkgPSAvYml0cy8gOCA8MHg1MCAweDYwIDB4NzA+Ow0KPiArICoNCj4gKyAqIFRoZSBvdXRfdmFs dWUgaXMgbW9kaWZpZWQgb25seSBpZiBhIHZhbGlkIHU4IHZhbHVlIGNhbiBiZSBkZWNvZGVkLg0K PiArICovDQo+ICtpbnQgb2ZfcHJvcGVydHlfcmVhZF91OF9hcnJheShjb25zdCBzdHJ1Y3QgZGV2 aWNlX25vZGUgKm5wLA0KPiArCQkJY29uc3QgY2hhciAqcHJvcG5hbWUsIHU4ICpvdXRfdmFsdWVz LCBzaXplX3Qgc3opDQo+ICt7DQo+ICsJc3RydWN0IHByb3BlcnR5ICpwcm9wID0gb2ZfZmluZF9w cm9wZXJ0eShucCwgcHJvcG5hbWUsIE5VTEwpOw0KPiArCWNvbnN0IHU4ICp2YWw7DQo+ICsNCj4g KwlpZiAoIXByb3ApDQo+ICsJCXJldHVybiAtRUlOVkFMOw0KPiArCWlmICghcHJvcC0+dmFsdWUp DQo+ICsJCXJldHVybiAtRU5PREFUQTsNCj4gKwlpZiAoKHN6ICogc2l6ZW9mKCpvdXRfdmFsdWVz KSkgPiBwcm9wLT5sZW5ndGgpDQo+ICsJCXJldHVybiAtRU9WRVJGTE9XOw0KPiArDQo+ICsJdmFs ID0gcHJvcC0+dmFsdWU7DQo+ICsJd2hpbGUgKHN6LS0pDQo+ICsJCSpvdXRfdmFsdWVzKysgPSAq dmFsKys7DQo+ICsJcmV0dXJuIDA7DQo+ICt9DQo+ICtFWFBPUlRfU1lNQk9MX0dQTChvZl9wcm9w ZXJ0eV9yZWFkX3U4X2FycmF5KTsNCj4gKw0KPiArLyoqDQo+ICsgKiBvZl9wcm9wZXJ0eV9yZWFk X3UxNl9hcnJheSAtIEZpbmQgYW5kIHJlYWQgYW4gYXJyYXkgb2YgdTE2IGZyb20gYSBwcm9wZXJ0 eS4NCj4gKyAqDQo+ICsgKiBAbnA6CQlkZXZpY2Ugbm9kZSBmcm9tIHdoaWNoIHRoZSBwcm9wZXJ0 eSB2YWx1ZSBpcyB0byBiZSByZWFkLg0KPiArICogQHByb3BuYW1lOgluYW1lIG9mIHRoZSBwcm9w ZXJ0eSB0byBiZSBzZWFyY2hlZC4NCj4gKyAqIEBvdXRfdmFsdWU6CXBvaW50ZXIgdG8gcmV0dXJu IHZhbHVlLCBtb2RpZmllZCBvbmx5IGlmIHJldHVybiB2YWx1ZSBpcyAwLg0KPiArICogQHN6OgkJ bnVtYmVyIG9mIGFycmF5IGVsZW1lbnRzIHRvIHJlYWQNCj4gKyAqDQo+ICsgKiBTZWFyY2ggZm9y IGEgcHJvcGVydHkgaW4gYSBkZXZpY2Ugbm9kZSBhbmQgcmVhZCAxNi1iaXQgdmFsdWUocykgZnJv bQ0KPiArICogaXQuIFJldHVybnMgMCBvbiBzdWNjZXNzLCAtRUlOVkFMIGlmIHRoZSBwcm9wZXJ0 eSBkb2VzIG5vdCBleGlzdCwNCj4gKyAqIC1FTk9EQVRBIGlmIHByb3BlcnR5IGRvZXMgbm90IGhh dmUgYSB2YWx1ZSwgYW5kIC1FT1ZFUkZMT1cgaWYgdGhlDQo+ICsgKiBwcm9wZXJ0eSBkYXRhIGlz bid0IGxhcmdlIGVub3VnaC4NCj4gKyAqDQo+ICsgKiBkdHMgZW50cnkgb2YgYXJyYXkgc2hvdWxk IGJlIGxpa2U6DQo+ICsgKglwcm9wZXJ0eSA9IC9iaXRzLyAxNiA8MHg1MDAwIDB4NjAwMCAweDcw MDA+Ow0KPiArICoNCj4gKyAqIFRoZSBvdXRfdmFsdWUgaXMgbW9kaWZpZWQgb25seSBpZiBhIHZh bGlkIHUxNiB2YWx1ZSBjYW4gYmUgZGVjb2RlZC4NCj4gKyAqLw0KPiAraW50IG9mX3Byb3BlcnR5 X3JlYWRfdTE2X2FycmF5KGNvbnN0IHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnAsDQo+ICsJCQljb25z dCBjaGFyICpwcm9wbmFtZSwgdTE2ICpvdXRfdmFsdWVzLCBzaXplX3Qgc3opDQo+ICt7DQo+ICsJ c3RydWN0IHByb3BlcnR5ICpwcm9wID0gb2ZfZmluZF9wcm9wZXJ0eShucCwgcHJvcG5hbWUsIE5V TEwpOw0KPiArCWNvbnN0IF9fYmUxNiAqdmFsOw0KPiArDQo+ICsJaWYgKCFwcm9wKQ0KPiArCQly ZXR1cm4gLUVJTlZBTDsNCj4gKwlpZiAoIXByb3AtPnZhbHVlKQ0KPiArCQlyZXR1cm4gLUVOT0RB VEE7DQo+ICsJaWYgKChzeiAqIHNpemVvZigqb3V0X3ZhbHVlcykpID4gcHJvcC0+bGVuZ3RoKQ0K PiArCQlyZXR1cm4gLUVPVkVSRkxPVzsNCj4gKw0KPiArCXZhbCA9IHByb3AtPnZhbHVlOw0KPiAr CXdoaWxlIChzei0tKQ0KPiArCQkqb3V0X3ZhbHVlcysrID0gYmUxNl90b19jcHVwKHZhbCsrKTsN Cj4gKwlyZXR1cm4gMDsNCj4gK30NCj4gK0VYUE9SVF9TWU1CT0xfR1BMKG9mX3Byb3BlcnR5X3Jl YWRfdTE2X2FycmF5KTsNCj4gKw0KPiArLyoqDQo+ICAgKiBvZl9wcm9wZXJ0eV9yZWFkX3UzMl9h cnJheSAtIEZpbmQgYW5kIHJlYWQgYW4gYXJyYXkgb2YgMzIgYml0IGludGVnZXJzDQo+ICAgKiBm cm9tIGEgcHJvcGVydHkuDQo+ICAgKg0KPiAgICogQG5wOgkJZGV2aWNlIG5vZGUgZnJvbSB3aGlj aCB0aGUgcHJvcGVydHkgdmFsdWUgaXMgdG8gYmUgcmVhZC4NCj4gICAqIEBwcm9wbmFtZToJbmFt ZSBvZiB0aGUgcHJvcGVydHkgdG8gYmUgc2VhcmNoZWQuDQo+ICAgKiBAb3V0X3ZhbHVlOglwb2lu dGVyIHRvIHJldHVybiB2YWx1ZSwgbW9kaWZpZWQgb25seSBpZiByZXR1cm4gdmFsdWUgaXMgMC4N Cj4gKyAqIEBzejoJCW51bWJlciBvZiBhcnJheSBlbGVtZW50cyB0byByZWFkDQo+ICAgKg0KPiAg ICogU2VhcmNoIGZvciBhIHByb3BlcnR5IGluIGEgZGV2aWNlIG5vZGUgYW5kIHJlYWQgMzItYml0 IHZhbHVlKHMpIGZyb20NCj4gICAqIGl0LiBSZXR1cm5zIDAgb24gc3VjY2VzcywgLUVJTlZBTCBp ZiB0aGUgcHJvcGVydHkgZG9lcyBub3QgZXhpc3QsDQoNCi0tIA0KQW5keSBTaGV2Y2hlbmtvIDxh bmRyaXkuc2hldmNoZW5rb0BpbnRlbC5jb20+DQpJbnRlbCBGaW5sYW5kIE95DQotLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0KSW50ZWwgRmlubGFuZCBPeQpSZWdpc3RlcmVkIEFkZHJlc3M6IFBMIDI4MSwgMDAxODEgSGVs c2lua2kgCkJ1c2luZXNzIElkZW50aXR5IENvZGU6IDAzNTc2MDYgLSA0IApEb21pY2lsZWQgaW4g SGVsc2lua2kgCgpUaGlzIGUtbWFpbCBhbmQgYW55IGF0dGFjaG1lbnRzIG1heSBjb250YWluIGNv bmZpZGVudGlhbCBtYXRlcmlhbCBmb3IKdGhlIHNvbGUgdXNlIG9mIHRoZSBpbnRlbmRlZCByZWNp cGllbnQocykuIEFueSByZXZpZXcgb3IgZGlzdHJpYnV0aW9uCmJ5IG90aGVycyBpcyBzdHJpY3Rs eSBwcm9oaWJpdGVkLiBJZiB5b3UgYXJlIG5vdCB0aGUgaW50ZW5kZWQKcmVjaXBpZW50LCBwbGVh c2UgY29udGFjdCB0aGUgc2VuZGVyIGFuZCBkZWxldGUgYWxsIGNvcGllcy4K From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752749Ab2KTIVY (ORCPT ); Tue, 20 Nov 2012 03:21:24 -0500 Received: from mga01.intel.com ([192.55.52.88]:5547 "EHLO mga01.intel.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1752558Ab2KTIVX (ORCPT ); Tue, 20 Nov 2012 03:21:23 -0500 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="4.83,284,1352102400"; d="scan'208";a="251740095" From: "Shevchenko, Andriy" To: Viresh Kumar CC: "rob.herring@calxeda.com" , "grant.likely@secretlab.ca" , "spear-devel@list.st.com" , "devicetree-discuss@lists.ozlabs.org" , "linux-kernel@vger.kernel.org" , "linaro-dev@lists.linaro.org" , "patches@linaro.org" , "swarren@wwwdotorg.org" Subject: Re: [PATCH] dt: add helper function to read u8 & u16 variables & arrays Thread-Topic: [PATCH] dt: add helper function to read u8 & u16 variables & arrays Thread-Index: AQHNxtnmG2JUbrBB7Uaga1PphgQcjJfyYj+A Date: Tue, 20 Nov 2012 08:21:07 +0000 Message-ID: <1353399661.20110.4.camel@smile> References: <0ee5b74534a09d75c14b22c2d9330c4971ab30fb.1353386646.git.viresh.kumar@linaro.org> In-Reply-To: <0ee5b74534a09d75c14b22c2d9330c4971ab30fb.1353386646.git.viresh.kumar@linaro.org> Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-originating-ip: [10.237.72.173] Content-Type: text/plain; charset="utf-8" Content-ID: MIME-Version: 1.0 Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Transfer-Encoding: 8bit X-MIME-Autoconverted: from base64 to 8bit by mail.home.local id qAK8LSHO020465 On Tue, 2012-11-20 at 10:15 +0530, Viresh Kumar wrote: > This adds following helper routines: > - of_property_read_u8_array() > - of_property_read_u16_array() > - of_property_read_u8() > - of_property_read_u16() > > This expects arrays from DT to be passed as: > - u8 array: > property = /bits/ 8 <0x50 0x60 0x70>; > - u16 array: > property = /bits/ 16 <0x5000 0x6000 0x7000>; > > Signed-off-by: Viresh Kumar > --- > V2->V3: > - Expect u8 & u16 arrays to be passed using: /bits/ 8 or 16 > - remove common macro, as not much common now :( You could at least create macro to do a precheck if you want to. Like #define CHECK_PROP(prop, sz, out) { if (!prop) return -EINVAL; if (!prop->value) return -ENODATA; if ((sz * sizeof(*out)) > prop->length) return -EOVERFLOW; } Of course you can do even robust macro to cover types, but I don't like ugly macros (as I can't see how it could be shaped nicely). > - Tested on ARM platform. > > --- a/drivers/of/base.c > +++ b/drivers/of/base.c > @@ -671,12 +671,89 @@ struct device_node *of_find_node_by_phandle(phandle handle) > EXPORT_SYMBOL(of_find_node_by_phandle); > > /** > + * of_property_read_u8_array - Find and read an array of u8 from a property. > + * > + * @np: device node from which the property value is to be read. > + * @propname: name of the property to be searched. > + * @out_value: pointer to return value, modified only if return value is 0. > + * @sz: number of array elements to read > + * > + * Search for a property in a device node and read 8-bit value(s) from > + * it. Returns 0 on success, -EINVAL if the property does not exist, > + * -ENODATA if property does not have a value, and -EOVERFLOW if the > + * property data isn't large enough. > + * > + * dts entry of array should be like: > + * property = /bits/ 8 <0x50 0x60 0x70>; > + * > + * The out_value is modified only if a valid u8 value can be decoded. > + */ > +int of_property_read_u8_array(const struct device_node *np, > + const char *propname, u8 *out_values, size_t sz) > +{ > + struct property *prop = of_find_property(np, propname, NULL); > + const u8 *val; > + > + if (!prop) > + return -EINVAL; > + if (!prop->value) > + return -ENODATA; > + if ((sz * sizeof(*out_values)) > prop->length) > + return -EOVERFLOW; > + > + val = prop->value; > + while (sz--) > + *out_values++ = *val++; > + return 0; > +} > +EXPORT_SYMBOL_GPL(of_property_read_u8_array); > + > +/** > + * of_property_read_u16_array - Find and read an array of u16 from a property. > + * > + * @np: device node from which the property value is to be read. > + * @propname: name of the property to be searched. > + * @out_value: pointer to return value, modified only if return value is 0. > + * @sz: number of array elements to read > + * > + * Search for a property in a device node and read 16-bit value(s) from > + * it. Returns 0 on success, -EINVAL if the property does not exist, > + * -ENODATA if property does not have a value, and -EOVERFLOW if the > + * property data isn't large enough. > + * > + * dts entry of array should be like: > + * property = /bits/ 16 <0x5000 0x6000 0x7000>; > + * > + * The out_value is modified only if a valid u16 value can be decoded. > + */ > +int of_property_read_u16_array(const struct device_node *np, > + const char *propname, u16 *out_values, size_t sz) > +{ > + struct property *prop = of_find_property(np, propname, NULL); > + const __be16 *val; > + > + if (!prop) > + return -EINVAL; > + if (!prop->value) > + return -ENODATA; > + if ((sz * sizeof(*out_values)) > prop->length) > + return -EOVERFLOW; > + > + val = prop->value; > + while (sz--) > + *out_values++ = be16_to_cpup(val++); > + return 0; > +} > +EXPORT_SYMBOL_GPL(of_property_read_u16_array); > + > +/** > * of_property_read_u32_array - Find and read an array of 32 bit integers > * from a property. > * > * @np: device node from which the property value is to be read. > * @propname: name of the property to be searched. > * @out_value: pointer to return value, modified only if return value is 0. > + * @sz: number of array elements to read > * > * Search for a property in a device node and read 32-bit value(s) from > * it. Returns 0 on success, -EINVAL if the property does not exist, -- Andy Shevchenko Intel Finland Oy --------------------------------------------------------------------- Intel Finland Oy Registered Address: PL 281, 00181 Helsinki Business Identity Code: 0357606 - 4 Domiciled in Helsinki This e-mail and any attachments may contain confidential material for the sole use of the intended recipient(s). Any review or distribution by others is strictly prohibited. If you are not the intended recipient, please contact the sender and delete all copies. {.n++%ݶw{.n+{G{ayʇڙ,jfhz_(階ݢj"mG?&~iOzv^m ?I