* [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