* [PATCH] can: sja1000: use cpu endian
@ 2013-04-08 13:48 Christoph Fritz
2013-04-08 13:57 ` Marc Kleine-Budde
0 siblings, 1 reply; 10+ messages in thread
From: Christoph Fritz @ 2013-04-08 13:48 UTC (permalink / raw)
To: Wolfgang Grandegger, Marc Kleine-Budde, Grant Likely, Rob Herring,
Bill Pemberton, Andreas Larsson, linux-can,
netdev@vger.kernel.org, Hans J. Koch, Daniel Mack
Signed-off-by: Christoph Fritz <chf.fritz@googlemail.com>
---
drivers/net/can/sja1000/sja1000_of_platform.c | 26 ++++++++++++------------
1 files changed, 13 insertions(+), 13 deletions(-)
diff --git a/drivers/net/can/sja1000/sja1000_of_platform.c b/drivers/net/can/sja1000/sja1000_of_platform.c
index 6433b81..83a13d2 100644
--- a/drivers/net/can/sja1000/sja1000_of_platform.c
+++ b/drivers/net/can/sja1000/sja1000_of_platform.c
@@ -97,7 +97,7 @@ static int sja1000_ofp_probe(struct platform_device *ofdev)
struct sja1000_priv *priv;
struct resource res;
const u32 *prop;
- int err, irq, res_size, prop_size;
+ int err, irq, res_size;
void __iomem *base;
err = of_address_to_resource(np, 0, &res);
@@ -138,27 +138,27 @@ static int sja1000_ofp_probe(struct platform_device *ofdev)
priv->read_reg = sja1000_ofp_read_reg;
priv->write_reg = sja1000_ofp_write_reg;
- prop = of_get_property(np, "nxp,external-clock-frequency", &prop_size);
- if (prop && (prop_size == sizeof(u32)))
- priv->can.clock.freq = *prop / 2;
+ prop = of_get_property(np, "nxp,external-clock-frequency", NULL);
+ if (prop)
+ priv->can.clock.freq = be32_to_cpup(prop) / 2;
else
priv->can.clock.freq = SJA1000_OFP_CAN_CLOCK; /* default */
- prop = of_get_property(np, "nxp,tx-output-mode", &prop_size);
- if (prop && (prop_size == sizeof(u32)))
- priv->ocr |= *prop & OCR_MODE_MASK;
+ prop = of_get_property(np, "nxp,tx-output-mode", NULL);
+ if (prop)
+ priv->ocr |= be32_to_cpup(prop) & OCR_MODE_MASK;
else
priv->ocr |= OCR_MODE_NORMAL; /* default */
- prop = of_get_property(np, "nxp,tx-output-config", &prop_size);
- if (prop && (prop_size == sizeof(u32)))
- priv->ocr |= (*prop << OCR_TX_SHIFT) & OCR_TX_MASK;
+ prop = of_get_property(np, "nxp,tx-output-config", NULL);
+ if (prop)
+ priv->ocr |= (be32_to_cpup(prop) << OCR_TX_SHIFT) & OCR_TX_MASK;
else
priv->ocr |= OCR_TX0_PULLDOWN; /* default */
- prop = of_get_property(np, "nxp,clock-out-frequency", &prop_size);
- if (prop && (prop_size == sizeof(u32)) && *prop) {
- u32 divider = priv->can.clock.freq * 2 / *prop;
+ prop = of_get_property(np, "nxp,clock-out-frequency", NULL);
+ if (prop) {
+ u32 divider = priv->can.clock.freq * 2 / be32_to_cpup(prop);
if (divider > 1)
priv->cdr |= divider / 2 - 1;
--
1.7.2.5
^ permalink raw reply related [flat|nested] 10+ messages in thread
* Re: [PATCH] can: sja1000: use cpu endian
2013-04-08 13:48 [PATCH] can: sja1000: use cpu endian Christoph Fritz
@ 2013-04-08 13:57 ` Marc Kleine-Budde
2013-04-11 18:44 ` [PATCH v2] can: sja1000: fix endian on arm Christoph Fritz
0 siblings, 1 reply; 10+ messages in thread
From: Marc Kleine-Budde @ 2013-04-08 13:57 UTC (permalink / raw)
To: Christoph Fritz
Cc: Wolfgang Grandegger, Grant Likely, Rob Herring, Bill Pemberton,
Andreas Larsson, linux-can, netdev@vger.kernel.org, Hans J. Koch,
Daniel Mack
[-- Attachment #1: Type: text/plain, Size: 2987 bytes --]
On 04/08/2013 03:48 PM, Christoph Fritz wrote:
Please add a patch description to the patch, as some subsystem
maintainers don't take patches without it.
What about using of_property_read_u32, instead of open coding it?
Marc
> Signed-off-by: Christoph Fritz <chf.fritz@googlemail.com>
> ---
> drivers/net/can/sja1000/sja1000_of_platform.c | 26 ++++++++++++------------
> 1 files changed, 13 insertions(+), 13 deletions(-)
>
> diff --git a/drivers/net/can/sja1000/sja1000_of_platform.c b/drivers/net/can/sja1000/sja1000_of_platform.c
> index 6433b81..83a13d2 100644
> --- a/drivers/net/can/sja1000/sja1000_of_platform.c
> +++ b/drivers/net/can/sja1000/sja1000_of_platform.c
> @@ -97,7 +97,7 @@ static int sja1000_ofp_probe(struct platform_device *ofdev)
> struct sja1000_priv *priv;
> struct resource res;
> const u32 *prop;
> - int err, irq, res_size, prop_size;
> + int err, irq, res_size;
> void __iomem *base;
>
> err = of_address_to_resource(np, 0, &res);
> @@ -138,27 +138,27 @@ static int sja1000_ofp_probe(struct platform_device *ofdev)
> priv->read_reg = sja1000_ofp_read_reg;
> priv->write_reg = sja1000_ofp_write_reg;
>
> - prop = of_get_property(np, "nxp,external-clock-frequency", &prop_size);
> - if (prop && (prop_size == sizeof(u32)))
> - priv->can.clock.freq = *prop / 2;
> + prop = of_get_property(np, "nxp,external-clock-frequency", NULL);
> + if (prop)
> + priv->can.clock.freq = be32_to_cpup(prop) / 2;
> else
> priv->can.clock.freq = SJA1000_OFP_CAN_CLOCK; /* default */
>
> - prop = of_get_property(np, "nxp,tx-output-mode", &prop_size);
> - if (prop && (prop_size == sizeof(u32)))
> - priv->ocr |= *prop & OCR_MODE_MASK;
> + prop = of_get_property(np, "nxp,tx-output-mode", NULL);
> + if (prop)
> + priv->ocr |= be32_to_cpup(prop) & OCR_MODE_MASK;
> else
> priv->ocr |= OCR_MODE_NORMAL; /* default */
>
> - prop = of_get_property(np, "nxp,tx-output-config", &prop_size);
> - if (prop && (prop_size == sizeof(u32)))
> - priv->ocr |= (*prop << OCR_TX_SHIFT) & OCR_TX_MASK;
> + prop = of_get_property(np, "nxp,tx-output-config", NULL);
> + if (prop)
> + priv->ocr |= (be32_to_cpup(prop) << OCR_TX_SHIFT) & OCR_TX_MASK;
> else
> priv->ocr |= OCR_TX0_PULLDOWN; /* default */
>
> - prop = of_get_property(np, "nxp,clock-out-frequency", &prop_size);
> - if (prop && (prop_size == sizeof(u32)) && *prop) {
> - u32 divider = priv->can.clock.freq * 2 / *prop;
> + prop = of_get_property(np, "nxp,clock-out-frequency", NULL);
> + if (prop) {
> + u32 divider = priv->can.clock.freq * 2 / be32_to_cpup(prop);
>
> if (divider > 1)
> priv->cdr |= divider / 2 - 1;
>
--
Pengutronix e.K. | Marc Kleine-Budde |
Industrial Linux Solutions | Phone: +49-231-2826-924 |
Vertretung West/Dortmund | Fax: +49-5121-206917-5555 |
Amtsgericht Hildesheim, HRA 2686 | http://www.pengutronix.de |
[-- Attachment #2: OpenPGP digital signature --]
[-- Type: application/pgp-signature, Size: 263 bytes --]
^ permalink raw reply [flat|nested] 10+ messages in thread
* [PATCH v2] can: sja1000: fix endian on arm
2013-04-08 13:57 ` Marc Kleine-Budde
@ 2013-04-11 18:44 ` Christoph Fritz
2013-04-11 18:47 ` Marc Kleine-Budde
0 siblings, 1 reply; 10+ messages in thread
From: Christoph Fritz @ 2013-04-11 18:44 UTC (permalink / raw)
To: Wolfgang Grandegger, Marc Kleine-Budde, Rob Herring, Grant Likely,
linux-can, netdev@vger.kernel.org, Andreas Larsson, Hans J. Koch,
Bill Pemberton, Daniel Mack
To get correct endian on arm cpus while reading device tree properties,
this patch replaces of_get_property() with of_property_read_u32().
Signed-off-by: Christoph Fritz <chf.fritz@googlemail.com>
---
drivers/net/can/sja1000/sja1000_of_platform.c | 32 ++++++++++++-------------
1 file changed, 16 insertions(+), 16 deletions(-)
diff --git a/drivers/net/can/sja1000/sja1000_of_platform.c b/drivers/net/can/sja1000/sja1000_of_platform.c
index 6433b81..dd8b031 100644
--- a/drivers/net/can/sja1000/sja1000_of_platform.c
+++ b/drivers/net/can/sja1000/sja1000_of_platform.c
@@ -96,8 +96,8 @@ static int sja1000_ofp_probe(struct platform_device *ofdev)
struct net_device *dev;
struct sja1000_priv *priv;
struct resource res;
- const u32 *prop;
- int err, irq, res_size, prop_size;
+ u32 prop;
+ int err, irq, res_size;
void __iomem *base;
err = of_address_to_resource(np, 0, &res);
@@ -138,27 +138,27 @@ static int sja1000_ofp_probe(struct platform_device *ofdev)
priv->read_reg = sja1000_ofp_read_reg;
priv->write_reg = sja1000_ofp_write_reg;
- prop = of_get_property(np, "nxp,external-clock-frequency", &prop_size);
- if (prop && (prop_size == sizeof(u32)))
- priv->can.clock.freq = *prop / 2;
+ err = of_property_read_u32(np, "nxp,external-clock-frequency", &prop);
+ if (!err)
+ priv->can.clock.freq = prop / 2;
else
priv->can.clock.freq = SJA1000_OFP_CAN_CLOCK; /* default */
- prop = of_get_property(np, "nxp,tx-output-mode", &prop_size);
- if (prop && (prop_size == sizeof(u32)))
- priv->ocr |= *prop & OCR_MODE_MASK;
+ err = of_property_read_u32(np, "nxp,tx-output-mode", &prop);
+ if (!err)
+ priv->ocr |= prop & OCR_MODE_MASK;
else
priv->ocr |= OCR_MODE_NORMAL; /* default */
- prop = of_get_property(np, "nxp,tx-output-config", &prop_size);
- if (prop && (prop_size == sizeof(u32)))
- priv->ocr |= (*prop << OCR_TX_SHIFT) & OCR_TX_MASK;
+ err = of_property_read_u32(np, "nxp,tx-output-config", &prop);
+ if (!err)
+ priv->ocr |= (prop << OCR_TX_SHIFT) & OCR_TX_MASK;
else
priv->ocr |= OCR_TX0_PULLDOWN; /* default */
- prop = of_get_property(np, "nxp,clock-out-frequency", &prop_size);
- if (prop && (prop_size == sizeof(u32)) && *prop) {
- u32 divider = priv->can.clock.freq * 2 / *prop;
+ err = of_property_read_u32(np, "nxp,clock-out-frequency", &prop);
+ if (!err) {
+ u32 divider = priv->can.clock.freq * 2 / prop;
if (divider > 1)
priv->cdr |= divider / 2 - 1;
@@ -168,8 +168,8 @@ static int sja1000_ofp_probe(struct platform_device *ofdev)
priv->cdr |= CDR_CLK_OFF; /* default */
}
- prop = of_get_property(np, "nxp,no-comparator-bypass", NULL);
- if (!prop)
+ err = of_property_read_u32(np, "nxp,no-comparator-bypass", &prop);
+ if (err)
priv->cdr |= CDR_CBP; /* default */
priv->irq_flags = IRQF_SHARED;
--
1.7.10.4
^ permalink raw reply related [flat|nested] 10+ messages in thread
* Re: [PATCH v2] can: sja1000: fix endian on arm
2013-04-11 18:44 ` [PATCH v2] can: sja1000: fix endian on arm Christoph Fritz
@ 2013-04-11 18:47 ` Marc Kleine-Budde
2013-04-11 18:53 ` Christoph Fritz
0 siblings, 1 reply; 10+ messages in thread
From: Marc Kleine-Budde @ 2013-04-11 18:47 UTC (permalink / raw)
To: Christoph Fritz
Cc: Wolfgang Grandegger, Rob Herring, Grant Likely, linux-can,
netdev@vger.kernel.org, Andreas Larsson, Hans J. Koch,
Bill Pemberton, Daniel Mack
[-- Attachment #1: Type: text/plain, Size: 3441 bytes --]
On 04/11/2013 08:44 PM, Christoph Fritz wrote:
> To get correct endian on arm cpus while reading device tree properties,
> this patch replaces of_get_property() with of_property_read_u32().
>
> Signed-off-by: Christoph Fritz <chf.fritz@googlemail.com>
looks good, one nitpick inline
> ---
> drivers/net/can/sja1000/sja1000_of_platform.c | 32 ++++++++++++-------------
> 1 file changed, 16 insertions(+), 16 deletions(-)
>
> diff --git a/drivers/net/can/sja1000/sja1000_of_platform.c b/drivers/net/can/sja1000/sja1000_of_platform.c
> index 6433b81..dd8b031 100644
> --- a/drivers/net/can/sja1000/sja1000_of_platform.c
> +++ b/drivers/net/can/sja1000/sja1000_of_platform.c
> @@ -96,8 +96,8 @@ static int sja1000_ofp_probe(struct platform_device *ofdev)
> struct net_device *dev;
> struct sja1000_priv *priv;
> struct resource res;
> - const u32 *prop;
> - int err, irq, res_size, prop_size;
> + u32 prop;
> + int err, irq, res_size;
> void __iomem *base;
>
> err = of_address_to_resource(np, 0, &res);
> @@ -138,27 +138,27 @@ static int sja1000_ofp_probe(struct platform_device *ofdev)
> priv->read_reg = sja1000_ofp_read_reg;
> priv->write_reg = sja1000_ofp_write_reg;
>
> - prop = of_get_property(np, "nxp,external-clock-frequency", &prop_size);
> - if (prop && (prop_size == sizeof(u32)))
> - priv->can.clock.freq = *prop / 2;
> + err = of_property_read_u32(np, "nxp,external-clock-frequency", &prop);
> + if (!err)
> + priv->can.clock.freq = prop / 2;
> else
> priv->can.clock.freq = SJA1000_OFP_CAN_CLOCK; /* default */
>
> - prop = of_get_property(np, "nxp,tx-output-mode", &prop_size);
> - if (prop && (prop_size == sizeof(u32)))
> - priv->ocr |= *prop & OCR_MODE_MASK;
> + err = of_property_read_u32(np, "nxp,tx-output-mode", &prop);
> + if (!err)
> + priv->ocr |= prop & OCR_MODE_MASK;
> else
> priv->ocr |= OCR_MODE_NORMAL; /* default */
>
> - prop = of_get_property(np, "nxp,tx-output-config", &prop_size);
> - if (prop && (prop_size == sizeof(u32)))
> - priv->ocr |= (*prop << OCR_TX_SHIFT) & OCR_TX_MASK;
> + err = of_property_read_u32(np, "nxp,tx-output-config", &prop);
> + if (!err)
> + priv->ocr |= (prop << OCR_TX_SHIFT) & OCR_TX_MASK;
> else
> priv->ocr |= OCR_TX0_PULLDOWN; /* default */
>
> - prop = of_get_property(np, "nxp,clock-out-frequency", &prop_size);
> - if (prop && (prop_size == sizeof(u32)) && *prop) {
> - u32 divider = priv->can.clock.freq * 2 / *prop;
> + err = of_property_read_u32(np, "nxp,clock-out-frequency", &prop);
> + if (!err) {
> + u32 divider = priv->can.clock.freq * 2 / prop;
>
> if (divider > 1)
> priv->cdr |= divider / 2 - 1;
> @@ -168,8 +168,8 @@ static int sja1000_ofp_probe(struct platform_device *ofdev)
> priv->cdr |= CDR_CLK_OFF; /* default */
> }
>
> - prop = of_get_property(np, "nxp,no-comparator-bypass", NULL);
> - if (!prop)
> + err = of_property_read_u32(np, "nxp,no-comparator-bypass", &prop);
What about using of_property_read_bool instead?
> + if (err)
> priv->cdr |= CDR_CBP; /* default */
>
> priv->irq_flags = IRQF_SHARED;
>
Marc
--
Pengutronix e.K. | Marc Kleine-Budde |
Industrial Linux Solutions | Phone: +49-231-2826-924 |
Vertretung West/Dortmund | Fax: +49-5121-206917-5555 |
Amtsgericht Hildesheim, HRA 2686 | http://www.pengutronix.de |
[-- Attachment #2: OpenPGP digital signature --]
[-- Type: application/pgp-signature, Size: 263 bytes --]
^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: [PATCH v2] can: sja1000: fix endian on arm
2013-04-11 18:47 ` Marc Kleine-Budde
@ 2013-04-11 18:53 ` Christoph Fritz
2013-04-11 19:14 ` [PATCH v3] " Christoph Fritz
0 siblings, 1 reply; 10+ messages in thread
From: Christoph Fritz @ 2013-04-11 18:53 UTC (permalink / raw)
To: Marc Kleine-Budde
Cc: Wolfgang Grandegger, Rob Herring, Grant Likely, linux-can,
netdev@vger.kernel.org, Andreas Larsson, Hans J. Koch,
Bill Pemberton, Daniel Mack
On Thu, 2013-04-11 at 20:47 +0200, Marc Kleine-Budde wrote:
> On 04/11/2013 08:44 PM, Christoph Fritz wrote:
> > To get correct endian on arm cpus while reading device tree properties,
> > this patch replaces of_get_property() with of_property_read_u32().
> >
> > Signed-off-by: Christoph Fritz <chf.fritz@googlemail.com>
>
> looks good, one nitpick inline
>
> > ---
> > drivers/net/can/sja1000/sja1000_of_platform.c | 32 ++++++++++++-------------
> > 1 file changed, 16 insertions(+), 16 deletions(-)
> >
> > diff --git a/drivers/net/can/sja1000/sja1000_of_platform.c b/drivers/net/can/sja1000/sja1000_of_platform.c
> > @@ -168,8 +168,8 @@ static int sja1000_ofp_probe(struct platform_device *ofdev)
> > priv->cdr |= CDR_CLK_OFF; /* default */
> > }
> >
> > - prop = of_get_property(np, "nxp,no-comparator-bypass", NULL);
> > - if (!prop)
> > + err = of_property_read_u32(np, "nxp,no-comparator-bypass", &prop);
>
> What about using of_property_read_bool instead?
Yeah, that would be better, thanks - let me re-roll this.
^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: [PATCH v3] can: sja1000: fix endian on arm
2013-04-11 18:53 ` Christoph Fritz
@ 2013-04-11 19:14 ` Christoph Fritz
2013-04-11 19:21 ` Marc Kleine-Budde
0 siblings, 1 reply; 10+ messages in thread
From: Christoph Fritz @ 2013-04-11 19:14 UTC (permalink / raw)
To: Marc Kleine-Budde, Wolfgang Grandegger, Grant Likely, Rob Herring,
Andreas Larsson, Hans J. Koch, netdev@vger.kernel.org,
Bill Pemberton, linux-can, Daniel Mack
To get correct endian on arm cpus while reading device tree properties,
this patch replaces of_get_property() with of_property_read_u32().
Signed-off-by: Christoph Fritz <chf.fritz@googlemail.com>
---
drivers/net/can/sja1000/sja1000_of_platform.c | 31 ++++++++++++-------------
1 file changed, 15 insertions(+), 16 deletions(-)
diff --git a/drivers/net/can/sja1000/sja1000_of_platform.c b/drivers/net/can/sja1000/sja1000_of_platform.c
index 6433b81..f2d2f78 100644
--- a/drivers/net/can/sja1000/sja1000_of_platform.c
+++ b/drivers/net/can/sja1000/sja1000_of_platform.c
@@ -96,8 +96,8 @@ static int sja1000_ofp_probe(struct platform_device *ofdev)
struct net_device *dev;
struct sja1000_priv *priv;
struct resource res;
- const u32 *prop;
- int err, irq, res_size, prop_size;
+ u32 prop;
+ int err, irq, res_size;
void __iomem *base;
err = of_address_to_resource(np, 0, &res);
@@ -138,27 +138,27 @@ static int sja1000_ofp_probe(struct platform_device *ofdev)
priv->read_reg = sja1000_ofp_read_reg;
priv->write_reg = sja1000_ofp_write_reg;
- prop = of_get_property(np, "nxp,external-clock-frequency", &prop_size);
- if (prop && (prop_size == sizeof(u32)))
- priv->can.clock.freq = *prop / 2;
+ err = of_property_read_u32(np, "nxp,external-clock-frequency", &prop);
+ if (!err)
+ priv->can.clock.freq = prop / 2;
else
priv->can.clock.freq = SJA1000_OFP_CAN_CLOCK; /* default */
- prop = of_get_property(np, "nxp,tx-output-mode", &prop_size);
- if (prop && (prop_size == sizeof(u32)))
- priv->ocr |= *prop & OCR_MODE_MASK;
+ err = of_property_read_u32(np, "nxp,tx-output-mode", &prop);
+ if (!err)
+ priv->ocr |= prop & OCR_MODE_MASK;
else
priv->ocr |= OCR_MODE_NORMAL; /* default */
- prop = of_get_property(np, "nxp,tx-output-config", &prop_size);
- if (prop && (prop_size == sizeof(u32)))
- priv->ocr |= (*prop << OCR_TX_SHIFT) & OCR_TX_MASK;
+ err = of_property_read_u32(np, "nxp,tx-output-config", &prop);
+ if (!err)
+ priv->ocr |= (prop << OCR_TX_SHIFT) & OCR_TX_MASK;
else
priv->ocr |= OCR_TX0_PULLDOWN; /* default */
- prop = of_get_property(np, "nxp,clock-out-frequency", &prop_size);
- if (prop && (prop_size == sizeof(u32)) && *prop) {
- u32 divider = priv->can.clock.freq * 2 / *prop;
+ err = of_property_read_u32(np, "nxp,clock-out-frequency", &prop);
+ if (!err) {
+ u32 divider = priv->can.clock.freq * 2 / prop;
if (divider > 1)
priv->cdr |= divider / 2 - 1;
@@ -168,8 +168,7 @@ static int sja1000_ofp_probe(struct platform_device *ofdev)
priv->cdr |= CDR_CLK_OFF; /* default */
}
- prop = of_get_property(np, "nxp,no-comparator-bypass", NULL);
- if (!prop)
+ if (!of_property_read_bool(np, "nxp,no-comparator-bypass"))
priv->cdr |= CDR_CBP; /* default */
priv->irq_flags = IRQF_SHARED;
--
1.7.10.4
^ permalink raw reply related [flat|nested] 10+ messages in thread
* Re: [PATCH v3] can: sja1000: fix endian on arm
2013-04-11 19:14 ` [PATCH v3] " Christoph Fritz
@ 2013-04-11 19:21 ` Marc Kleine-Budde
2013-04-11 19:32 ` [PATCH v4] " Christoph Fritz
0 siblings, 1 reply; 10+ messages in thread
From: Marc Kleine-Budde @ 2013-04-11 19:21 UTC (permalink / raw)
To: Christoph Fritz
Cc: Wolfgang Grandegger, Grant Likely, Rob Herring, Andreas Larsson,
Hans J. Koch, netdev@vger.kernel.org, Bill Pemberton, linux-can,
Daniel Mack
[-- Attachment #1: Type: text/plain, Size: 989 bytes --]
On 04/11/2013 09:14 PM, Christoph Fritz wrote:
> To get correct endian on arm cpus while reading device tree properties,
> this patch replaces of_get_property() with of_property_read_u32().
>
> Signed-off-by: Christoph Fritz <chf.fritz@googlemail.com>
[...]
> - prop = of_get_property(np, "nxp,clock-out-frequency", &prop_size);
> - if (prop && (prop_size == sizeof(u32)) && *prop) {
> - u32 divider = priv->can.clock.freq * 2 / *prop;
> + err = of_property_read_u32(np, "nxp,clock-out-frequency", &prop);
> + if (!err) {
What about checking for "prop != 0" as the original code does?
> + u32 divider = priv->can.clock.freq * 2 / prop;
To prevent a potential div-by-zero here?
Marc
--
Pengutronix e.K. | Marc Kleine-Budde |
Industrial Linux Solutions | Phone: +49-231-2826-924 |
Vertretung West/Dortmund | Fax: +49-5121-206917-5555 |
Amtsgericht Hildesheim, HRA 2686 | http://www.pengutronix.de |
[-- Attachment #2: OpenPGP digital signature --]
[-- Type: application/pgp-signature, Size: 263 bytes --]
^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: [PATCH v4] can: sja1000: fix endian on arm
2013-04-11 19:21 ` Marc Kleine-Budde
@ 2013-04-11 19:32 ` Christoph Fritz
2013-04-11 19:38 ` Marc Kleine-Budde
2013-04-12 11:18 ` Marc Kleine-Budde
0 siblings, 2 replies; 10+ messages in thread
From: Christoph Fritz @ 2013-04-11 19:32 UTC (permalink / raw)
To: Marc Kleine-Budde, Wolfgang Grandegger, Grant Likely,
Andreas Larsson, Rob Herring, Bill Pemberton, linux-can,
netdev@vger.kernel.org, Daniel Mack, Hans J. Koch
To get correct endian on arm cpus while reading device tree properties,
this patch replaces of_get_property() with of_property_read_u32().
Signed-off-by: Christoph Fritz <chf.fritz@googlemail.com>
---
drivers/net/can/sja1000/sja1000_of_platform.c | 31 ++++++++++++-------------
1 file changed, 15 insertions(+), 16 deletions(-)
diff --git a/drivers/net/can/sja1000/sja1000_of_platform.c b/drivers/net/can/sja1000/sja1000_of_platform.c
index 6433b81..d023707 100644
--- a/drivers/net/can/sja1000/sja1000_of_platform.c
+++ b/drivers/net/can/sja1000/sja1000_of_platform.c
@@ -96,8 +96,8 @@ static int sja1000_ofp_probe(struct platform_device *ofdev)
struct net_device *dev;
struct sja1000_priv *priv;
struct resource res;
- const u32 *prop;
- int err, irq, res_size, prop_size;
+ u32 prop;
+ int err, irq, res_size;
void __iomem *base;
err = of_address_to_resource(np, 0, &res);
@@ -138,27 +138,27 @@ static int sja1000_ofp_probe(struct platform_device *ofdev)
priv->read_reg = sja1000_ofp_read_reg;
priv->write_reg = sja1000_ofp_write_reg;
- prop = of_get_property(np, "nxp,external-clock-frequency", &prop_size);
- if (prop && (prop_size == sizeof(u32)))
- priv->can.clock.freq = *prop / 2;
+ err = of_property_read_u32(np, "nxp,external-clock-frequency", &prop);
+ if (!err && prop != 0)
+ priv->can.clock.freq = prop / 2;
else
priv->can.clock.freq = SJA1000_OFP_CAN_CLOCK; /* default */
- prop = of_get_property(np, "nxp,tx-output-mode", &prop_size);
- if (prop && (prop_size == sizeof(u32)))
- priv->ocr |= *prop & OCR_MODE_MASK;
+ err = of_property_read_u32(np, "nxp,tx-output-mode", &prop);
+ if (!err)
+ priv->ocr |= prop & OCR_MODE_MASK;
else
priv->ocr |= OCR_MODE_NORMAL; /* default */
- prop = of_get_property(np, "nxp,tx-output-config", &prop_size);
- if (prop && (prop_size == sizeof(u32)))
- priv->ocr |= (*prop << OCR_TX_SHIFT) & OCR_TX_MASK;
+ err = of_property_read_u32(np, "nxp,tx-output-config", &prop);
+ if (!err)
+ priv->ocr |= (prop << OCR_TX_SHIFT) & OCR_TX_MASK;
else
priv->ocr |= OCR_TX0_PULLDOWN; /* default */
- prop = of_get_property(np, "nxp,clock-out-frequency", &prop_size);
- if (prop && (prop_size == sizeof(u32)) && *prop) {
- u32 divider = priv->can.clock.freq * 2 / *prop;
+ err = of_property_read_u32(np, "nxp,clock-out-frequency", &prop);
+ if (!err) {
+ u32 divider = priv->can.clock.freq * 2 / prop;
if (divider > 1)
priv->cdr |= divider / 2 - 1;
@@ -168,8 +168,7 @@ static int sja1000_ofp_probe(struct platform_device *ofdev)
priv->cdr |= CDR_CLK_OFF; /* default */
}
- prop = of_get_property(np, "nxp,no-comparator-bypass", NULL);
- if (!prop)
+ if (!of_property_read_bool(np, "nxp,no-comparator-bypass"))
priv->cdr |= CDR_CBP; /* default */
priv->irq_flags = IRQF_SHARED;
--
1.7.10.4
^ permalink raw reply related [flat|nested] 10+ messages in thread
* Re: [PATCH v4] can: sja1000: fix endian on arm
2013-04-11 19:32 ` [PATCH v4] " Christoph Fritz
@ 2013-04-11 19:38 ` Marc Kleine-Budde
2013-04-12 11:18 ` Marc Kleine-Budde
1 sibling, 0 replies; 10+ messages in thread
From: Marc Kleine-Budde @ 2013-04-11 19:38 UTC (permalink / raw)
To: Christoph Fritz
Cc: Wolfgang Grandegger, Grant Likely, Andreas Larsson, Rob Herring,
Bill Pemberton, linux-can, netdev@vger.kernel.org, Daniel Mack,
Hans J. Koch
[-- Attachment #1: Type: text/plain, Size: 3502 bytes --]
On 04/11/2013 09:32 PM, Christoph Fritz wrote:
> To get correct endian on arm cpus while reading device tree properties,
> this patch replaces of_get_property() with of_property_read_u32().
>
> Signed-off-by: Christoph Fritz <chf.fritz@googlemail.com>
> ---
> drivers/net/can/sja1000/sja1000_of_platform.c | 31 ++++++++++++-------------
> 1 file changed, 15 insertions(+), 16 deletions(-)
>
> diff --git a/drivers/net/can/sja1000/sja1000_of_platform.c b/drivers/net/can/sja1000/sja1000_of_platform.c
> index 6433b81..d023707 100644
> --- a/drivers/net/can/sja1000/sja1000_of_platform.c
> +++ b/drivers/net/can/sja1000/sja1000_of_platform.c
> @@ -96,8 +96,8 @@ static int sja1000_ofp_probe(struct platform_device *ofdev)
> struct net_device *dev;
> struct sja1000_priv *priv;
> struct resource res;
> - const u32 *prop;
> - int err, irq, res_size, prop_size;
> + u32 prop;
> + int err, irq, res_size;
> void __iomem *base;
>
> err = of_address_to_resource(np, 0, &res);
> @@ -138,27 +138,27 @@ static int sja1000_ofp_probe(struct platform_device *ofdev)
> priv->read_reg = sja1000_ofp_read_reg;
> priv->write_reg = sja1000_ofp_write_reg;
>
> - prop = of_get_property(np, "nxp,external-clock-frequency", &prop_size);
> - if (prop && (prop_size == sizeof(u32)))
> - priv->can.clock.freq = *prop / 2;
> + err = of_property_read_u32(np, "nxp,external-clock-frequency", &prop);
> + if (!err && prop != 0)
> + priv->can.clock.freq = prop / 2;
No need to check for prop != 0 here....
> else
> priv->can.clock.freq = SJA1000_OFP_CAN_CLOCK; /* default */
>
> - prop = of_get_property(np, "nxp,tx-output-mode", &prop_size);
> - if (prop && (prop_size == sizeof(u32)))
> - priv->ocr |= *prop & OCR_MODE_MASK;
> + err = of_property_read_u32(np, "nxp,tx-output-mode", &prop);
> + if (!err)
> + priv->ocr |= prop & OCR_MODE_MASK;
> else
> priv->ocr |= OCR_MODE_NORMAL; /* default */
>
> - prop = of_get_property(np, "nxp,tx-output-config", &prop_size);
> - if (prop && (prop_size == sizeof(u32)))
> - priv->ocr |= (*prop << OCR_TX_SHIFT) & OCR_TX_MASK;
> + err = of_property_read_u32(np, "nxp,tx-output-config", &prop);
> + if (!err)
> + priv->ocr |= (prop << OCR_TX_SHIFT) & OCR_TX_MASK;
> else
> priv->ocr |= OCR_TX0_PULLDOWN; /* default */
>
> - prop = of_get_property(np, "nxp,clock-out-frequency", &prop_size);
> - if (prop && (prop_size == sizeof(u32)) && *prop) {
> - u32 divider = priv->can.clock.freq * 2 / *prop;
> + err = of_property_read_u32(np, "nxp,clock-out-frequency", &prop);
> + if (!err) {
> + u32 divider = priv->can.clock.freq * 2 / prop;
....but here, because of the possibility of devide-by-zero.
>
> if (divider > 1)
> priv->cdr |= divider / 2 - 1;
> @@ -168,8 +168,7 @@ static int sja1000_ofp_probe(struct platform_device *ofdev)
> priv->cdr |= CDR_CLK_OFF; /* default */
> }
>
> - prop = of_get_property(np, "nxp,no-comparator-bypass", NULL);
> - if (!prop)
> + if (!of_property_read_bool(np, "nxp,no-comparator-bypass"))
> priv->cdr |= CDR_CBP; /* default */
>
> priv->irq_flags = IRQF_SHARED;
No need to resend, I'll fix it while applying.
Marc
--
Pengutronix e.K. | Marc Kleine-Budde |
Industrial Linux Solutions | Phone: +49-231-2826-924 |
Vertretung West/Dortmund | Fax: +49-5121-206917-5555 |
Amtsgericht Hildesheim, HRA 2686 | http://www.pengutronix.de |
[-- Attachment #2: OpenPGP digital signature --]
[-- Type: application/pgp-signature, Size: 263 bytes --]
^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: [PATCH v4] can: sja1000: fix endian on arm
2013-04-11 19:32 ` [PATCH v4] " Christoph Fritz
2013-04-11 19:38 ` Marc Kleine-Budde
@ 2013-04-12 11:18 ` Marc Kleine-Budde
1 sibling, 0 replies; 10+ messages in thread
From: Marc Kleine-Budde @ 2013-04-12 11:18 UTC (permalink / raw)
To: Christoph Fritz
Cc: Wolfgang Grandegger, Grant Likely, Andreas Larsson, Rob Herring,
Bill Pemberton, linux-can, netdev@vger.kernel.org, Daniel Mack,
Hans J. Koch
[-- Attachment #1: Type: text/plain, Size: 695 bytes --]
On 04/11/2013 09:32 PM, Christoph Fritz wrote:
> To get correct endian on arm cpus while reading device tree properties,
> this patch replaces of_get_property() with of_property_read_u32().
>
> Signed-off-by: Christoph Fritz <chf.fritz@googlemail.com>
I've fixed the potential div-by-zero problem and tweaked the commit
message a bit. The patch is included in my latest pull request to david.
Thanks,
Marc
--
Pengutronix e.K. | Marc Kleine-Budde |
Industrial Linux Solutions | Phone: +49-231-2826-924 |
Vertretung West/Dortmund | Fax: +49-5121-206917-5555 |
Amtsgericht Hildesheim, HRA 2686 | http://www.pengutronix.de |
[-- Attachment #2: OpenPGP digital signature --]
[-- Type: application/pgp-signature, Size: 263 bytes --]
^ permalink raw reply [flat|nested] 10+ messages in thread
end of thread, other threads:[~2013-04-12 11:18 UTC | newest]
Thread overview: 10+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2013-04-08 13:48 [PATCH] can: sja1000: use cpu endian Christoph Fritz
2013-04-08 13:57 ` Marc Kleine-Budde
2013-04-11 18:44 ` [PATCH v2] can: sja1000: fix endian on arm Christoph Fritz
2013-04-11 18:47 ` Marc Kleine-Budde
2013-04-11 18:53 ` Christoph Fritz
2013-04-11 19:14 ` [PATCH v3] " Christoph Fritz
2013-04-11 19:21 ` Marc Kleine-Budde
2013-04-11 19:32 ` [PATCH v4] " Christoph Fritz
2013-04-11 19:38 ` Marc Kleine-Budde
2013-04-12 11:18 ` Marc Kleine-Budde
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).