Changes in V3:
- Follow Mark Rutland's advice.
- Document common case of the endianess usage.
Changes in V2:
- Namespace the properties using the prefix sring.
- Add one binding ducomentation off regmap.
Xiubo Li (2):
dt/bindings: Add the DT binding documentation for endianness
regmap: add DT endianness binding support.
.../devicetree/bindings/endianness/endianness.txt | 47 +++++++
drivers/base/regmap/regmap-i2c.c | 2 +
drivers/base/regmap/regmap-spi.c | 2 +
drivers/base/regmap/regmap.c | 147 +++++++++++++++++++--
4 files changed, 187 insertions(+), 11 deletions(-)
create mode 100644 Documentation/devicetree/bindings/endianness/endianness.txt
--
1.8.4
For many drivers which will support rich endianness of CPU<-->Dev
need define DT properties by itself without the binding support.
The endianness using regmap:
Index CPU Device Endianess flag for DT bool property
------------------------------------------------------------
1 LE LE -
2 LE BE 'big-endian-{val,reg}'
3 BE BE -
4 BE LE 'little-endian-{val,reg}'
Please see the following documetation for detail:
Documentation/devicetree/bindings/endianness/endianness.txt
Signed-off-by: Xiubo Li <[email protected]>
---
drivers/base/regmap/regmap-i2c.c | 2 +
drivers/base/regmap/regmap-spi.c | 2 +
drivers/base/regmap/regmap.c | 147 ++++++++++++++++++++++++++++++++++++---
3 files changed, 140 insertions(+), 11 deletions(-)
diff --git a/drivers/base/regmap/regmap-i2c.c b/drivers/base/regmap/regmap-i2c.c
index fa6bf52..1f603a6 100644
--- a/drivers/base/regmap/regmap-i2c.c
+++ b/drivers/base/regmap/regmap-i2c.c
@@ -96,6 +96,8 @@ static struct regmap_bus regmap_i2c = {
.write = regmap_i2c_write,
.gather_write = regmap_i2c_gather_write,
.read = regmap_i2c_read,
+ .reg_format_endian_default = REGMAP_ENDIAN_BIG,
+ .val_format_endian_default = REGMAP_ENDIAN_BIG,
};
/**
diff --git a/drivers/base/regmap/regmap-spi.c b/drivers/base/regmap/regmap-spi.c
index 37f12ae..377fa29 100644
--- a/drivers/base/regmap/regmap-spi.c
+++ b/drivers/base/regmap/regmap-spi.c
@@ -110,6 +110,8 @@ static struct regmap_bus regmap_spi = {
.async_alloc = regmap_spi_async_alloc,
.read = regmap_spi_read,
.read_flag_mask = 0x80,
+ .reg_format_endian_default = REGMAP_ENDIAN_BIG,
+ .val_format_endian_default = REGMAP_ENDIAN_BIG,
};
/**
diff --git a/drivers/base/regmap/regmap.c b/drivers/base/regmap/regmap.c
index 8e8cea1..946e901 100644
--- a/drivers/base/regmap/regmap.c
+++ b/drivers/base/regmap/regmap.c
@@ -15,6 +15,7 @@
#include <linux/export.h>
#include <linux/mutex.h>
#include <linux/err.h>
+#include <linux/of.h>
#include <linux/rbtree.h>
#include <linux/sched.h>
@@ -422,6 +423,132 @@ static void regmap_range_exit(struct regmap *map)
kfree(map->selector_work_buf);
}
+enum regmap_endian_type {
+ REGMAP_ENDIAN_REG,
+ REGMAP_ENDIAN_VAL,
+};
+
+/**
+ * of_regmap_endian_by_type() - Parse and lookup the endian referenced
+ * by a device node
+ * @np: pointer to clock consumer node
+ * @type: type of consumer's endian input
+ *
+ * This function parses the device endian property, and uses them to
+ * determine the endian of the registers and values.
+ */
+static int of_regmap_endian_by_type(struct device_node *np,
+ enum regmap_endian_type type,
+ enum regmap_endian *endian)
+{
+ if (!endian)
+ return -EINVAL;
+
+ switch (type) {
+ case REGMAP_ENDIAN_REG:
+ if (of_property_read_bool(np, "big-endian-reg"))
+ *endian = REGMAP_ENDIAN_BIG;
+ else if (of_property_read_bool(np, "little-endian-reg"))
+ *endian = REGMAP_ENDIAN_LITTLE;
+ else
+ *endian = REGMAP_ENDIAN_NATIVE;
+ break;
+ case REGMAP_ENDIAN_VAL:
+ if (of_property_read_bool(np, "big-endian-val"))
+ *endian = REGMAP_ENDIAN_BIG;
+ else if (of_property_read_bool(np, "little-endian-val"))
+ *endian = REGMAP_ENDIAN_LITTLE;
+ else
+ *endian = REGMAP_ENDIAN_NATIVE;
+ break;
+ default:
+ return -EINVAL;
+ }
+
+ return 0;
+}
+
+static int of_regmap_get_endian(struct device *dev,
+ const struct regmap_bus *bus,
+ const struct regmap_config *config,
+ enum regmap_endian_type type,
+ enum regmap_endian *endian)
+{
+ int ret;
+
+ if (!endian || !config)
+ return -EINVAL;
+
+ /*
+ * Firstly, try to parse the endian from driver's config,
+ * this is to be compatible with the none DT or the old drivers.
+ * From the driver's config the endian value maybe:
+ * REGMAP_ENDIAN_BIG,
+ * REGMAP_ENDIAN_LITTLE,
+ * REGMAP_ENDIAN_NATIVE,
+ * REGMAP_ENDIAN_DEFAULT.
+ */
+ switch (type) {
+ case REGMAP_ENDIAN_REG:
+ *endian = config->reg_format_endian;
+ break;
+ case REGMAP_ENDIAN_VAL:
+ *endian = config->val_format_endian;
+ break;
+ default:
+ return -EINVAL;
+ }
+
+ /*
+ * If the endian parsing from driver's config is REGMAP_ENDIAN_DEFAULT,
+ * that means maybe we are using the DT node to specify the endianness.
+ */
+ if (*endian != REGMAP_ENDIAN_DEFAULT)
+ return 0;
+
+ /*
+ * Secondly, try to parse the endian from DT node if the
+ * driver config does not specify it.
+ * From the DT node the endian value maybe:
+ * REGMAP_ENDIAN_BIG,
+ * REGMAP_ENDIAN_LITTLE,
+ * REGMAP_ENDIAN_NATIVE,
+ */
+ if (dev) {
+ ret = of_regmap_endian_by_type(dev->of_node, type, endian);
+ if (ret < 0)
+ return ret;
+ }
+
+ /*
+ * If the endian parsing from DT node is REGMAP_ENDIAN_NATIVE, that
+ * maybe means the DT does not care the endianness or it should use
+ * the regmap bus's default endianness, then we should try to check
+ * whether the regmap bus has specified the default endianess.
+ */
+ if (*endian != REGMAP_ENDIAN_NATIVE)
+ return 0;
+
+ /*
+ * Finally, try to parse the endian from regmap bus config
+ * if in device's DT node the endian property is absent.
+ */
+ switch (type) {
+ case REGMAP_ENDIAN_REG:
+ if (bus && bus->reg_format_endian_default)
+ *endian = bus->reg_format_endian_default;
+ break;
+ case REGMAP_ENDIAN_VAL:
+ if (bus && bus->val_format_endian_default)
+ *endian = bus->val_format_endian_default;
+ break;
+ default:
+ return -EINVAL;
+ }
+
+ return 0;
+}
+
/**
* regmap_init(): Initialise register map
*
@@ -518,17 +645,15 @@ struct regmap *regmap_init(struct device *dev,
map->reg_read = _regmap_bus_read;
}
- reg_endian = config->reg_format_endian;
- if (reg_endian == REGMAP_ENDIAN_DEFAULT)
- reg_endian = bus->reg_format_endian_default;
- if (reg_endian == REGMAP_ENDIAN_DEFAULT)
- reg_endian = REGMAP_ENDIAN_BIG;
-
- val_endian = config->val_format_endian;
- if (val_endian == REGMAP_ENDIAN_DEFAULT)
- val_endian = bus->val_format_endian_default;
- if (val_endian == REGMAP_ENDIAN_DEFAULT)
- val_endian = REGMAP_ENDIAN_BIG;
+ ret = of_regmap_get_endian(dev, bus, config, REGMAP_ENDIAN_REG,
+ ®_endian);
+ if (ret)
+ return ERR_PTR(ret);
+
+ ret = of_regmap_get_endian(dev, bus, config, REGMAP_ENDIAN_VAL,
+ &val_endian);
+ if (ret)
+ return ERR_PTR(ret);
switch (config->reg_bits + map->reg_shift) {
case 2:
--
1.8.4
Signed-off-by: Xiubo Li <[email protected]>
---
.../devicetree/bindings/endianness/endianness.txt | 47 ++++++++++++++++++++++
1 file changed, 47 insertions(+)
create mode 100644 Documentation/devicetree/bindings/endianness/endianness.txt
diff --git a/Documentation/devicetree/bindings/endianness/endianness.txt b/Documentation/devicetree/bindings/endianness/endianness.txt
new file mode 100644
index 0000000..49458a1
--- /dev/null
+++ b/Documentation/devicetree/bindings/endianness/endianness.txt
@@ -0,0 +1,47 @@
+Device-Tree binding for device endianness
+
+The endianness mode of CPU & Device scenarios:
+Index CPU Device Endianess flag for DT bool property
+------------------------------------------------------------
+1 LE LE -
+2 LE BE 'big-endian{,-*}'
+3 BE BE -
+4 BE LE 'little-endian{,-*}'
+
+For one device driver, which will run in different scenarios above
+on different SoCs using the devicetree, we need one way to simplify
+this.
+
+Required properties:
+- {big,little}-endian{,-*}: this is one boolean property.
+
+Examples:
+Scenario 1 : CPU in LE mode & device in LE mode.
+dev: dev@40031000 {
+ compatible = "name";
+ reg = <0x40031000 0x1000>;
+ ...
+};
+
+Scenario 2 : CPU in LE mode & device in BE mode.
+dev: dev@40031000 {
+ compatible = "name";
+ reg = <0x40031000 0x1000>;
+ ...
+ big-endian{,-*};
+};
+
+Scenario 3 : CPU in BE mode & device in BE mode.
+dev: dev@40031000 {
+ compatible = "name";
+ reg = <0x40031000 0x1000>;
+ ...
+};
+
+Scenario 4 : CPU in BE mode & device in LE mode.
+dev: dev@40031000 {
+ compatible = "name";
+ reg = <0x40031000 0x1000>;
+ ...
+ little-endian{,-*};
+};
--
1.8.4
Hi,
On Wed, Apr 30, 2014 at 12:43:49PM +0800, Xiubo Li wrote:
[...]
> diff --git a/drivers/base/regmap/regmap.c b/drivers/base/regmap/regmap.c
> index 8e8cea1..946e901 100644
> --- a/drivers/base/regmap/regmap.c
> +++ b/drivers/base/regmap/regmap.c
> @@ -15,6 +15,7 @@
> #include <linux/export.h>
> #include <linux/mutex.h>
> #include <linux/err.h>
> +#include <linux/of.h>
> #include <linux/rbtree.h>
> #include <linux/sched.h>
>
> @@ -422,6 +423,132 @@ static void regmap_range_exit(struct regmap *map)
> kfree(map->selector_work_buf);
> }
>
> +enum regmap_endian_type {
> + REGMAP_ENDIAN_REG,
> + REGMAP_ENDIAN_VAL,
> +};
> +
> +/**
> + * of_regmap_endian_by_type() - Parse and lookup the endian referenced
> + * by a device node
> + * @np: pointer to clock consumer node
This is not the clock consumer, right?
> + * @type: type of consumer's endian input
> + *
> + * This function parses the device endian property, and uses them to
> + * determine the endian of the registers and values.
> + */
> +static int of_regmap_endian_by_type(struct device_node *np,
> + enum regmap_endian_type type,
> + enum regmap_endian *endian)
> +{
> + if (!endian)
> + return -EINVAL;
> +
> + switch (type) {
> + case REGMAP_ENDIAN_REG:
> + if (of_property_read_bool(np, "big-endian-reg"))
> + *endian = REGMAP_ENDIAN_BIG;
> + else if (of_property_read_bool(np, "little-endian-reg"))
> + *endian = REGMAP_ENDIAN_LITTLE;
> + else
> + *endian = REGMAP_ENDIAN_NATIVE;
You could also return an error code here as there was no DT property
found. This doesn't change to much in the code, just an idea.
Regards,
Markus
> + break;
> + case REGMAP_ENDIAN_VAL:
> + if (of_property_read_bool(np, "big-endian-val"))
> + *endian = REGMAP_ENDIAN_BIG;
> + else if (of_property_read_bool(np, "little-endian-val"))
> + *endian = REGMAP_ENDIAN_LITTLE;
> + else
> + *endian = REGMAP_ENDIAN_NATIVE;
> + break;
> + default:
> + return -EINVAL;
> + }
> +
> + return 0;
> +}
> +
> +static int of_regmap_get_endian(struct device *dev,
> + const struct regmap_bus *bus,
> + const struct regmap_config *config,
> + enum regmap_endian_type type,
> + enum regmap_endian *endian)
> +{
> + int ret;
> +
> + if (!endian || !config)
> + return -EINVAL;
> +
> + /*
> + * Firstly, try to parse the endian from driver's config,
> + * this is to be compatible with the none DT or the old drivers.
> + * From the driver's config the endian value maybe:
> + * REGMAP_ENDIAN_BIG,
> + * REGMAP_ENDIAN_LITTLE,
> + * REGMAP_ENDIAN_NATIVE,
> + * REGMAP_ENDIAN_DEFAULT.
> + */
> + switch (type) {
> + case REGMAP_ENDIAN_REG:
> + *endian = config->reg_format_endian;
> + break;
> + case REGMAP_ENDIAN_VAL:
> + *endian = config->val_format_endian;
> + break;
> + default:
> + return -EINVAL;
> + }
> +
> + /*
> + * If the endian parsing from driver's config is REGMAP_ENDIAN_DEFAULT,
> + * that means maybe we are using the DT node to specify the endianness.
> + */
> + if (*endian != REGMAP_ENDIAN_DEFAULT)
> + return 0;
> +
> + /*
> + * Secondly, try to parse the endian from DT node if the
> + * driver config does not specify it.
> + * From the DT node the endian value maybe:
> + * REGMAP_ENDIAN_BIG,
> + * REGMAP_ENDIAN_LITTLE,
> + * REGMAP_ENDIAN_NATIVE,
> + */
> + if (dev) {
> + ret = of_regmap_endian_by_type(dev->of_node, type, endian);
> + if (ret < 0)
> + return ret;
> + }
> +
> + /*
> + * If the endian parsing from DT node is REGMAP_ENDIAN_NATIVE, that
> + * maybe means the DT does not care the endianness or it should use
> + * the regmap bus's default endianness, then we should try to check
> + * whether the regmap bus has specified the default endianess.
> + */
> + if (*endian != REGMAP_ENDIAN_NATIVE)
> + return 0;
> +
> + /*
> + * Finally, try to parse the endian from regmap bus config
> + * if in device's DT node the endian property is absent.
> + */
> + switch (type) {
> + case REGMAP_ENDIAN_REG:
> + if (bus && bus->reg_format_endian_default)
> + *endian = bus->reg_format_endian_default;
> + break;
> + case REGMAP_ENDIAN_VAL:
> + if (bus && bus->val_format_endian_default)
> + *endian = bus->val_format_endian_default;
> + break;
> + default:
> + return -EINVAL;
> + }
> +
> + return 0;
> +}
> +
> /**
> * regmap_init(): Initialise register map
> *
> @@ -518,17 +645,15 @@ struct regmap *regmap_init(struct device *dev,
> map->reg_read = _regmap_bus_read;
> }
>
> - reg_endian = config->reg_format_endian;
> - if (reg_endian == REGMAP_ENDIAN_DEFAULT)
> - reg_endian = bus->reg_format_endian_default;
> - if (reg_endian == REGMAP_ENDIAN_DEFAULT)
> - reg_endian = REGMAP_ENDIAN_BIG;
> -
> - val_endian = config->val_format_endian;
> - if (val_endian == REGMAP_ENDIAN_DEFAULT)
> - val_endian = bus->val_format_endian_default;
> - if (val_endian == REGMAP_ENDIAN_DEFAULT)
> - val_endian = REGMAP_ENDIAN_BIG;
> + ret = of_regmap_get_endian(dev, bus, config, REGMAP_ENDIAN_REG,
> + ®_endian);
> + if (ret)
> + return ERR_PTR(ret);
> +
> + ret = of_regmap_get_endian(dev, bus, config, REGMAP_ENDIAN_VAL,
> + &val_endian);
> + if (ret)
> + return ERR_PTR(ret);
>
> switch (config->reg_bits + map->reg_shift) {
> case 2:
> --
> 1.8.4
>
>
--
Pengutronix e.K. | |
Industrial Linux Solutions | http://www.pengutronix.de/ |
Peiner Str. 6-8, 31137 Hildesheim, Germany | Phone: +49-5121-206917-0 |
Amtsgericht Hildesheim, HRA 2686 | Fax: +49-5121-206917-5555 |
Shouldn't this go to the arm list and rmk for review, too?
Thanks,
Richard
> > + * of_regmap_endian_by_type() - Parse and lookup the endian referenced
> > + * by a device node
> > + * @np: pointer to clock consumer node
>
> This is not the clock consumer, right?
>
Yes, you are right.
I will fix it.
> > + * @type: type of consumer's endian input
> > + *
> > + * This function parses the device endian property, and uses them to
> > + * determine the endian of the registers and values.
> > + */
> > +static int of_regmap_endian_by_type(struct device_node *np,
> > + enum regmap_endian_type type,
> > + enum regmap_endian *endian)
> > +{
> > + if (!endian)
> > + return -EINVAL;
> > +
> > + switch (type) {
> > + case REGMAP_ENDIAN_REG:
> > + if (of_property_read_bool(np, "big-endian-reg"))
> > + *endian = REGMAP_ENDIAN_BIG;
> > + else if (of_property_read_bool(np, "little-endian-reg"))
> > + *endian = REGMAP_ENDIAN_LITTLE;
> > + else
> > + *endian = REGMAP_ENDIAN_NATIVE;
>
> You could also return an error code here as there was no DT property
> found. This doesn't change to much in the code, just an idea.
>
The properties are all Boolean ones, and returning an error code here
is not proper. Isn't it ?
Returning _NATIVE here means to indicate that the the CPU and DEV are in
the same endianness mode...
Thanks very much,
BRs
Xiubo
> Regards,
>
> Markus
>
> > + break;
> > + case REGMAP_ENDIAN_VAL:
> > + if (of_property_read_bool(np, "big-endian-val"))
> > + *endian = REGMAP_ENDIAN_BIG;
> > + else if (of_property_read_bool(np, "little-endian-val"))
> > + *endian = REGMAP_ENDIAN_LITTLE;
> > + else
> > + *endian = REGMAP_ENDIAN_NATIVE;
> > + break;
> > + default:
> > + return -EINVAL;
> > + }
> > +
> > + return 0;
> > +}
> > +
> > +static int of_regmap_get_endian(struct device *dev,
> > + const struct regmap_bus *bus,
> > + const struct regmap_config *config,
> > + enum regmap_endian_type type,
> > + enum regmap_endian *endian)
> > +{
> > + int ret;
> > +
> > + if (!endian || !config)
> > + return -EINVAL;
> > +
> > + /*
> > + * Firstly, try to parse the endian from driver's config,
> > + * this is to be compatible with the none DT or the old drivers.
> > + * From the driver's config the endian value maybe:
> > + * REGMAP_ENDIAN_BIG,
> > + * REGMAP_ENDIAN_LITTLE,
> > + * REGMAP_ENDIAN_NATIVE,
> > + * REGMAP_ENDIAN_DEFAULT.
> > + */
> > + switch (type) {
> > + case REGMAP_ENDIAN_REG:
> > + *endian = config->reg_format_endian;
> > + break;
> > + case REGMAP_ENDIAN_VAL:
> > + *endian = config->val_format_endian;
> > + break;
> > + default:
> > + return -EINVAL;
> > + }
> > +
> > + /*
> > + * If the endian parsing from driver's config is REGMAP_ENDIAN_DEFAULT,
> > + * that means maybe we are using the DT node to specify the endianness.
> > + */
> > + if (*endian != REGMAP_ENDIAN_DEFAULT)
> > + return 0;
> > +
> > + /*
> > + * Secondly, try to parse the endian from DT node if the
> > + * driver config does not specify it.
> > + * From the DT node the endian value maybe:
> > + * REGMAP_ENDIAN_BIG,
> > + * REGMAP_ENDIAN_LITTLE,
> > + * REGMAP_ENDIAN_NATIVE,
> > + */
> > + if (dev) {
> > + ret = of_regmap_endian_by_type(dev->of_node, type, endian);
> > + if (ret < 0)
> > + return ret;
> > + }
> > +
> > + /*
> > + * If the endian parsing from DT node is REGMAP_ENDIAN_NATIVE, that
> > + * maybe means the DT does not care the endianness or it should use
> > + * the regmap bus's default endianness, then we should try to check
> > + * whether the regmap bus has specified the default endianess.
> > + */
> > + if (*endian != REGMAP_ENDIAN_NATIVE)
> > + return 0;
> > +
> > + /*
> > + * Finally, try to parse the endian from regmap bus config
> > + * if in device's DT node the endian property is absent.
> > + */
> > + switch (type) {
> > + case REGMAP_ENDIAN_REG:
> > + if (bus && bus->reg_format_endian_default)
> > + *endian = bus->reg_format_endian_default;
> > + break;
> > + case REGMAP_ENDIAN_VAL:
> > + if (bus && bus->val_format_endian_default)
> > + *endian = bus->val_format_endian_default;
> > + break;
> > + default:
> > + return -EINVAL;
> > + }
> > +
> > + return 0;
> > +}
> > +
> > /**
> > * regmap_init(): Initialise register map
> > *
> > @@ -518,17 +645,15 @@ struct regmap *regmap_init(struct device *dev,
> > map->reg_read = _regmap_bus_read;
> > }
> >
> > - reg_endian = config->reg_format_endian;
> > - if (reg_endian == REGMAP_ENDIAN_DEFAULT)
> > - reg_endian = bus->reg_format_endian_default;
> > - if (reg_endian == REGMAP_ENDIAN_DEFAULT)
> > - reg_endian = REGMAP_ENDIAN_BIG;
> > -
> > - val_endian = config->val_format_endian;
> > - if (val_endian == REGMAP_ENDIAN_DEFAULT)
> > - val_endian = bus->val_format_endian_default;
> > - if (val_endian == REGMAP_ENDIAN_DEFAULT)
> > - val_endian = REGMAP_ENDIAN_BIG;
> > + ret = of_regmap_get_endian(dev, bus, config, REGMAP_ENDIAN_REG,
> > + ®_endian);
> > + if (ret)
> > + return ERR_PTR(ret);
> > +
> > + ret = of_regmap_get_endian(dev, bus, config, REGMAP_ENDIAN_VAL,
> > + &val_endian);
> > + if (ret)
> > + return ERR_PTR(ret);
> >
> > switch (config->reg_bits + map->reg_shift) {
> > case 2:
> > --
> > 1.8.4
> >
> >
>
> --
> Pengutronix e.K. | |
> Industrial Linux Solutions | http://www.pengutronix.de/ |
> Peiner Str. 6-8, 31137 Hildesheim, Germany | Phone: +49-5121-206917-0 |
> Amtsgericht Hildesheim, HRA 2686 | Fax: +49-5121-206917-5555 |
????{.n?+???????+%?????ݶ??w??{.n?+????{??G?????{ay?ʇڙ?,j??f???h?????????z_??(?階?ݢj"???m??????G????????????&???~???iO???z??v?^?m????????????I?
> Subject: Re: [PATCHv3 0/2] add DT endianness binding support
>
> Shouldn't this go to the arm list and rmk for review, too?
>
Well, yes, I forgot it.
Should I resend them ?
Thanks,
> Thanks,
> Richard
On Wed, Apr 30, 2014 at 07:14:08AM +0000, [email protected] wrote:
>
> > Subject: Re: [PATCHv3 0/2] add DT endianness binding support
> >
> > Shouldn't this go to the arm list and rmk for review, too?
> >
>
> Well, yes, I forgot it.
>
> Should I resend them ?
Please.
Thanks,
Richard
On Wed, Apr 30, 2014 at 07:14:08AM +0000, [email protected] wrote:
>
> > Subject: Re: [PATCHv3 0/2] add DT endianness binding support
> >
> > Shouldn't this go to the arm list and rmk for review, too?
> >
>
> Well, yes, I forgot it.
>
> Should I resend them ?
What I meant was, you should put
<[email protected]>
and
"Russell King <[email protected]>"
onto CC.
Thanks,
Richard
On Wed, Apr 30, 2014 at 09:10:12AM +0200, Richard Cochran wrote:
> Shouldn't this go to the arm list and rmk for review, too?
Is there any particular reason for including rmk? It's generally not
helpful to spam people with serieses without reason, we all get quite a
lot of mail already...
On Wed, Apr 30, 2014 at 11:25:00AM -0700, Mark Brown wrote:
> On Wed, Apr 30, 2014 at 09:10:12AM +0200, Richard Cochran wrote:
> > Shouldn't this go to the arm list and rmk for review, too?
>
> Is there any particular reason for including rmk? It's generally not
> helpful to spam people with serieses without reason, we all get quite a
> lot of mail already...
I recall seeing him writing at length about cpu/peripheral endianness
issues, so I assume he has some expertise here. It would be a shame if
a new DT feature were overlooking something important.
Thanks,
Richard