Re: [PATCH] imd: imd_calculate_crc32: initialize imd_crc to NULL

2020-09-04 Thread Hubert Feurstein
Am Fr., 4. Sept. 2020 um 12:10 Uhr schrieb Hubert Feurstein
:
> This fixes a NULL pointer dereference in the caller when imd-crc-token is
> not found.
In fact, it is even worse, it is a "uninitialized pointer dereference".

Regards
Hubert

___
barebox mailing list
barebox@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/barebox


[PATCH] imd: imd_calculate_crc32: initialize imd_crc to NULL

2020-09-04 Thread Hubert Feurstein
From: Hubert Feurstein 

This fixes a NULL pointer dereference in the caller when imd-crc-token is
not found.

Signed-off-by: Hubert Feurstein 
---
 common/imd.c | 1 +
 1 file changed, 1 insertion(+)

diff --git a/common/imd.c b/common/imd.c
index 96496514a..0644e6d3b 100644
--- a/common/imd.c
+++ b/common/imd.c
@@ -312,6 +312,7 @@ static int imd_calculate_crc32(void *input, const struct 
imd_header *imd_start,
const struct imd_header *imd;
int length;
int end_ofs = (char *)imd_start - (char *)input + sizeof(char) * 8;
+   *imd_crc = NULL;
 
/* search the checksum imd token */
imd_for_each(imd_start, imd) {
-- 
2.28.0


___
barebox mailing list
barebox@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/barebox


[PATCH] commands: miitool: handle powerdown-flag

2019-12-11 Thread Hubert Feurstein
Signed-off-by: Hubert Feurstein 
---
 commands/miitool.c | 7 ++-
 1 file changed, 6 insertions(+), 1 deletion(-)

diff --git a/commands/miitool.c b/commands/miitool.c
index 4ea6fda34..a87d567ac 100644
--- a/commands/miitool.c
+++ b/commands/miitool.c
@@ -140,7 +140,10 @@ static int show_basic_mii(struct mii_bus *mii, struct 
phy_device *phydev,
}
 
*buf = '\0';
-   if (bmcr & BMCR_ANENABLE) {
+
+   if (bmcr & BMCR_PDOWN) {
+   sprintf(buf, "powerdown, ");
+   } else if (bmcr & BMCR_ANENABLE) {
if (bmsr & BMSR_ANEGCOMPLETE) {
if (advert & lkpar) {
sprintf(buf, "%s%s, ", (lkpar & LPA_LPACK) ?
@@ -192,6 +195,8 @@ static int show_basic_mii(struct mii_bus *mii, struct 
phy_device *phydev,
printf("loopback, ");
if (bmcr & BMCR_ISOLATE)
printf("isolate, ");
+   if (bmcr & BMCR_PDOWN)
+   printf("powerdown, ");
if (bmcr & BMCR_CTST)
printf("collision test, ");
if (bmcr & BMCR_ANENABLE) {
-- 
2.24.0


___
barebox mailing list
barebox@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/barebox


Re: [BUG] imx6qdl: degraded eMMC write performance

2019-12-10 Thread Hubert Feurstein
Am Di., 10. Dez. 2019 um 17:18 Uhr schrieb Sascha Hauer
:
[...]
> > > We could adjust RW_BUF_SIZE (used by copy_file as buffer size) to a full
> > > chunk size (16KiB). Does this give you back some lost performance?
> > No, changing RW_BUF_SIZE did not help.
>
> And I also see why :-/
>
> block_op_write() works around block sizes (512bytes), not around chunk
> sizes. This means we always read before we write. This could probably be
> optimized somehow, but this would only speed up the write case you
> described in your initial mail. It seems what you are more interested in
> is the read performance.
Well, I'm interested in both. Of course the read-performance is important
for booting. But the write-performance is important for production. It simply
matters if you have to wait for another 200 seconds for a device to
get programmed.

Regards
Hubert

___
barebox mailing list
barebox@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/barebox


[PATCH] commands: digest: don't be to restrictive with the length of verification files

2019-12-10 Thread Hubert Feurstein
Otherwise it is not possible to verify against a file created by shaXsum
from linux. Usually there is the filename appended after the hash.

Signed-off-by: Hubert Feurstein 
---
 commands/digest.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/commands/digest.c b/commands/digest.c
index 99b27dcc2..21a091717 100644
--- a/commands/digest.c
+++ b/commands/digest.c
@@ -164,7 +164,7 @@ static int do_digest(int argc, char *argv[])
 
if (sig) {
digestlen = digest_length(d);
-   if (siglen == 2 * digestlen) {
+   if (siglen >= 2 * digestlen) {
if (!tmp_sig)
tmp_sig = xmalloc(digestlen);
 
-- 
2.24.0


___
barebox mailing list
barebox@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/barebox


[PATCH 1/4] led: unify led trigger tables

2019-12-10 Thread Hubert Feurstein
Currently we have two slightly different led-trigger tables. One in the
core module, and the other one in the led-triggers module. The one in the
core module, which is used to parse the device-tree triggers, is lacking
net-rx and net-tx.

Signed-off-by: Hubert Feurstein 
---
 drivers/led/core.c | 46 +++---
 drivers/led/led-triggers.c | 25 -
 2 files changed, 28 insertions(+), 43 deletions(-)

diff --git a/drivers/led/core.c b/drivers/led/core.c
index 431966d06..fec7324e7 100644
--- a/drivers/led/core.c
+++ b/drivers/led/core.c
@@ -256,22 +256,35 @@ void led_unregister(struct led *led)
list_del(>list);
 }
 
-struct led_trg {
-   const char *str;
-   enum led_trigger trg;
+static char *trigger_names[] = {
+   [LED_TRIGGER_PANIC] = "panic",
+   [LED_TRIGGER_HEARTBEAT] = "heartbeat",
+   [LED_TRIGGER_NET_RX] = "net-rx",
+   [LED_TRIGGER_NET_TX] = "net-tx",
+   [LED_TRIGGER_NET_TXRX] = "net",
+   [LED_TRIGGER_DEFAULT_ON] = "default-on",
 };
 
-static struct led_trg triggers[] = {
-   { .str = "heartbeat", LED_TRIGGER_HEARTBEAT, },
-   { .str = "panic", LED_TRIGGER_PANIC, },
-   { .str = "net", LED_TRIGGER_NET_TXRX, },
-   { .str = "default-on", LED_TRIGGER_DEFAULT_ON, },
-};
+const char *trigger_name(enum led_trigger trigger)
+{
+   return trigger_names[trigger];
+}
+
+enum led_trigger trigger_by_name(const char *name)
+{
+   int i;
+
+   for (i = 0; i < LED_TRIGGER_MAX; i++)
+   if (!strcmp(name, trigger_names[i]))
+   return i;
+
+   return LED_TRIGGER_MAX;
+}
 
 void led_of_parse_trigger(struct led *led, struct device_node *np)
 {
+   enum led_trigger trg;
const char *trigger;
-   int i;
 
trigger = of_get_property(np, "linux,default-trigger", NULL);
if (!trigger)
@@ -280,13 +293,10 @@ void led_of_parse_trigger(struct led *led, struct 
device_node *np)
if (!trigger)
return;
 
-   for (i = 0; i < ARRAY_SIZE(triggers); i++) {
-   struct led_trg *trg = [i];
-   if (!strcmp(trg->str, trigger)) {
-   /* disable LED before installing trigger */
-   led_set(led, 0);
-   led_set_trigger(trg->trg, led);
-   return;
-   }
+   trg = trigger_by_name(trigger);
+   if (trg != LED_TRIGGER_MAX) {
+   /* disable LED before installing trigger */
+   led_set(led, 0);
+   led_set_trigger(trg, led);
}
 }
diff --git a/drivers/led/led-triggers.c b/drivers/led/led-triggers.c
index 76a1481e1..216c8639b 100644
--- a/drivers/led/led-triggers.c
+++ b/drivers/led/led-triggers.c
@@ -143,31 +143,6 @@ int led_set_trigger(enum led_trigger trigger, struct led 
*led)
return 0;
 }
 
-static char *trigger_names[] = {
-   [LED_TRIGGER_PANIC] = "panic",
-   [LED_TRIGGER_HEARTBEAT] = "heartbeat",
-   [LED_TRIGGER_NET_RX] = "net-rx",
-   [LED_TRIGGER_NET_TX] = "net-tx",
-   [LED_TRIGGER_NET_TXRX] = "net",
-   [LED_TRIGGER_DEFAULT_ON] = "default-on",
-};
-
-const char *trigger_name(enum led_trigger trigger)
-{
-   return trigger_names[trigger];
-}
-
-enum led_trigger trigger_by_name(const char *name)
-{
-   int i;
-
-   for (i = 0; i < LED_TRIGGER_MAX; i++)
-   if (!strcmp(name, trigger_names[i]))
-   return i;
-
-   return LED_TRIGGER_MAX;
-}
-
 /**
  * led_triggers_show_info - Show information about all registered
  * triggers
-- 
2.24.0


___
barebox mailing list
barebox@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/barebox


[PATCH 4/4] led: parse panic-indicator from device-tree

2019-12-10 Thread Hubert Feurstein
Signed-off-by: Hubert Feurstein 
---
 Documentation/devicetree/bindings/leds/common.rst |  3 +++
 drivers/led/core.c| 11 ---
 2 files changed, 11 insertions(+), 3 deletions(-)

diff --git a/Documentation/devicetree/bindings/leds/common.rst 
b/Documentation/devicetree/bindings/leds/common.rst
index 5a592d67d..911a55f4f 100644
--- a/Documentation/devicetree/bindings/leds/common.rst
+++ b/Documentation/devicetree/bindings/leds/common.rst
@@ -12,3 +12,6 @@ Common leds properties
 
 * ``label``: The label for this LED. If omitted, the label is taken
   from the node name (excluding the unit address).
+
+* ``panic-indicator`` - This property specifies that the LED should be used as 
a
+ panic indicator.
diff --git a/drivers/led/core.c b/drivers/led/core.c
index 4bf19abcc..e727148a2 100644
--- a/drivers/led/core.c
+++ b/drivers/led/core.c
@@ -286,11 +286,16 @@ enum led_trigger trigger_by_name(const char *name)
 
 void led_of_parse_trigger(struct led *led, struct device_node *np)
 {
-   enum led_trigger trg;
+   enum led_trigger trg = LED_TRIGGER_MAX;
const char *trigger;
 
-   trigger = of_get_property(np, "linux,default-trigger", NULL);
-   trg = trigger_by_name(trigger);
+   if (of_property_read_bool(np, "panic-indicator"))
+   trg = LED_TRIGGER_PANIC;
+
+   if (trg == LED_TRIGGER_MAX) {
+   trigger = of_get_property(np, "linux,default-trigger", NULL);
+   trg = trigger_by_name(trigger);
+   }
 
if (trg == LED_TRIGGER_MAX) {
trigger = of_get_property(np, "barebox,default-trigger", NULL);
-- 
2.24.0


___
barebox mailing list
barebox@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/barebox


[PATCH 2/4] led: add documentation for net-tx and net-rx triggers

2019-12-10 Thread Hubert Feurstein
Signed-off-by: Hubert Feurstein 
---
 Documentation/devicetree/bindings/leds/common.rst | 4 +++-
 1 file changed, 3 insertions(+), 1 deletion(-)

diff --git a/Documentation/devicetree/bindings/leds/common.rst 
b/Documentation/devicetree/bindings/leds/common.rst
index 1f5ae42ca..5a592d67d 100644
--- a/Documentation/devicetree/bindings/leds/common.rst
+++ b/Documentation/devicetree/bindings/leds/common.rst
@@ -6,7 +6,9 @@ Common leds properties
 
 * ``heartbeat`` - LED flashes at a constant rate
 * ``panic`` - LED turns on when barebox panics
-* ``net`` - LED indicates network activity
+* ``net`` - LED indicates network activity (tx and rx)
+* ``net-rx`` - LED indicates network activity (rx only)
+* ``net-tx`` - LED indicates network activity (tx only)
 
 * ``label``: The label for this LED. If omitted, the label is taken
   from the node name (excluding the unit address).
-- 
2.24.0


___
barebox mailing list
barebox@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/barebox


[PATCH 3/4] led: check for 'barebox, default-trigger' when 'linux, default-trigger' is not found

2019-12-10 Thread Hubert Feurstein
When the linux,default-trigger is not found by barebox, then also check if
there might be a barebox,default-trigger.

Signed-off-by: Hubert Feurstein 
---
 drivers/led/core.c | 13 -
 1 file changed, 8 insertions(+), 5 deletions(-)

diff --git a/drivers/led/core.c b/drivers/led/core.c
index fec7324e7..4bf19abcc 100644
--- a/drivers/led/core.c
+++ b/drivers/led/core.c
@@ -274,6 +274,9 @@ enum led_trigger trigger_by_name(const char *name)
 {
int i;
 
+   if (!name)
+   return LED_TRIGGER_MAX;
+
for (i = 0; i < LED_TRIGGER_MAX; i++)
if (!strcmp(name, trigger_names[i]))
return i;
@@ -287,13 +290,13 @@ void led_of_parse_trigger(struct led *led, struct 
device_node *np)
const char *trigger;
 
trigger = of_get_property(np, "linux,default-trigger", NULL);
-   if (!trigger)
-   trigger = of_get_property(np, "barebox,default-trigger", NULL);
+   trg = trigger_by_name(trigger);
 
-   if (!trigger)
-   return;
+   if (trg == LED_TRIGGER_MAX) {
+   trigger = of_get_property(np, "barebox,default-trigger", NULL);
+   trg = trigger_by_name(trigger);
+   }
 
-   trg = trigger_by_name(trigger);
if (trg != LED_TRIGGER_MAX) {
/* disable LED before installing trigger */
led_set(led, 0);
-- 
2.24.0


___
barebox mailing list
barebox@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/barebox


Re: [BUG] imx6qdl: degraded eMMC write performance

2019-12-10 Thread Hubert Feurstein
Hi Sascha,

Am Di., 10. Dez. 2019 um 16:10 Uhr schrieb Sascha Hauer
:
[...]
> Well the commit message says it:
> | commit b6fef20c1215c6ef0004f6af4a9c4b77af51dc43
> | Author: Sascha Hauer 
> | Date:   Thu Mar 29 13:49:45 2018 +0200
> |
> | block: Adjust cache sizes
> |
> | Use four times more cache entries and divide the memory for each entry
> | by four. This lowers the linear read throughput somewhat but increases
> | the access speed for filesystems.
Yes, I know. I've read the commit message. But this patch even costs me ~200ms
in boottime (loading kernel and dts from ext4 root partition).

[...]
> We could adjust RW_BUF_SIZE (used by copy_file as buffer size) to a full
> chunk size (16KiB). Does this give you back some lost performance?
No, changing RW_BUF_SIZE did not help.

Regards
Hubert

___
barebox mailing list
barebox@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/barebox


[PATCH 1/1] mci: imx-esdhc: fix termination of statement

2019-12-10 Thread Hubert Feurstein
Use semicolon instead of comma to terminate statement.

Signed-off-by: Hubert Feurstein 
---
 drivers/mci/imx-esdhc.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/drivers/mci/imx-esdhc.c b/drivers/mci/imx-esdhc.c
index db3450a26..4f9fe2996 100644
--- a/drivers/mci/imx-esdhc.c
+++ b/drivers/mci/imx-esdhc.c
@@ -697,7 +697,7 @@ static int fsl_esdhc_probe(struct device_d *dev)
host->mci.card_present = esdhc_card_present;
host->mci.hw_dev = dev;
 
-   dev->detect = fsl_esdhc_detect,
+   dev->detect = fsl_esdhc_detect;
 
rate = clk_get_rate(host->clk);
host->mci.f_min = rate >> 12;
-- 
2.24.0


___
barebox mailing list
barebox@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/barebox


[BUG] imx6qdl: degraded eMMC write performance

2019-12-10 Thread Hubert Feurstein
Hi,

I've updated barebox for our custom platform from v2015.06.0 to
v2019.12.0. With the new version I have noticed a much worse write
performance onto the onboard eMMC.

With v2015.06.0 the indicated progress of the copy command is very
smooth. Calling "cp -v /dev/zero /dev/mmc3.root" takes about 80
seconds for 256MB. But with v2019.12.0 the progress is very bumpy and
the copy takes about 280 seconds.

I've tracked this down to this commit which destroys the performance:
"block: Adjust cache sizes" (b6fef20c1215c6ef0004f6af4a9c4b77af51dc43)

Regards
Hubert

___
barebox mailing list
barebox@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/barebox


bootm: booting of uncompressed uimages broken

2016-02-23 Thread Hubert Feurstein
Hi,

booting of uncompressed uimages is broken since patch "ARM: bootm: fix
default uImage placement" (0839e3f402ffc74202a1ca4fbeaffcadb4336ce1):

This is the change causing the issue:
@@ -138,13 +144,10 @@ static int do_bootm_linux(struct image_data *data)
  return ret;

  /*
- * Put devicetree/initrd at maximum to 128MiB into RAM to not
- * risk to put it outside of lowmem.
+ * put oftree/initrd close behind compressed kernel image to avoid
+ * placing it outside of the kernels lowmem.
  */
- if (mem_size > SZ_256M)
- mem_free = mem_start + SZ_128M;
- else
- mem_free = PAGE_ALIGN(data->os_res->end + SZ_1M);
+ mem_free = PAGE_ALIGN(data->os_res->end + SZ_1M);

  return __do_bootm_linux(data, mem_free, 0);
 }

System Info: iMX6S; 512MB RAM; LoadAddress 0x10008000; Barebox v2015.06.0

Best Regards
Hubert

___
barebox mailing list
barebox@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/barebox


[PATCH v2] led: gpio: add support for default-state dt-property

2015-03-04 Thread Hubert Feurstein
This patch adds support for the default-state device tree property.

Signed-off-by: Hubert Feurstein h.feurst...@gmail.com
---
 drivers/led/led-gpio.c | 8 
 1 file changed, 8 insertions(+)

diff --git a/drivers/led/led-gpio.c b/drivers/led/led-gpio.c
index a1a6617..ae3f13f 100644
--- a/drivers/led/led-gpio.c
+++ b/drivers/led/led-gpio.c
@@ -204,6 +204,7 @@ static int led_gpio_of_probe(struct device_d *dev)
 
for_each_child_of_node(dev-device_node, child) {
struct gpio_led *gled;
+   const char *default_state;
enum of_gpio_flags flags;
int gpio;
const char *label;
@@ -225,6 +226,13 @@ static int led_gpio_of_probe(struct device_d *dev)
 
led_gpio_register(gled);
led_of_parse_trigger(gled-led, child);
+
+   if (!of_property_read_string(child, default-state, 
default_state)) {
+   if (!strcmp(default_state, on))
+   led_gpio_set(gled-led, 1);
+   else if (!strcmp(default_state, off))
+   led_gpio_set(gled-led, 0);
+   }
}
 
return 0;
-- 
2.3.0


___
barebox mailing list
barebox@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/barebox


[PATCHv2] commands/digest: add verify support

2013-04-23 Thread Hubert Feurstein
Signed-off-by: Hubert Feurstein h.feurst...@gmail.com
---
 Changes:
  v2:
- updated according to comments from Sascha
- add support for verify against hash-file

 commands/digest.c | 141 ++
 1 file changed, 131 insertions(+), 10 deletions(-)

diff --git a/commands/digest.c b/commands/digest.c
index c9bb132..a4611d7 100644
--- a/commands/digest.c
+++ b/commands/digest.c
@@ -25,24 +25,122 @@
 #include xfuncs.h
 #include malloc.h
 #include digest.h
+#include linux/ctype.h
+#include getopt.h
+
+static inline unsigned char parse_hexchar(char c)
+{
+   if (!isxdigit(c))
+   return 0;
+
+   return isdigit(c) ? (c - '0') : ((islower(c) ? toupper(c) : c) - 'A' + 
0xA);
+}
+
+static inline unsigned char parse_hexbyte(const char *p)
+{
+   return (parse_hexchar(*p)  4) | parse_hexchar(*(p + 1));
+}
+
+static unsigned char *parse_hash(int hash_len, const char *hexstr)
+{
+   int i;
+   unsigned char *p;
+
+   p = calloc(hash_len, sizeof(unsigned char));
+   if (!p) {
+   perror(calloc);
+   return NULL;
+   }
+
+   for (i = 0; i  hash_len; i++)
+   p[i] = parse_hexbyte(hexstr[i * 2]);
+
+   return p;
+}
 
 static int do_digest(char *algorithm, int argc, char *argv[])
 {
struct digest *d;
int ret = 0;
int i;
-   unsigned char *hash;
+   unsigned char *hash = NULL;
+   int opt;
+   unsigned char *verify_hash = NULL;
+   int verify = 0;
+   int min_argc = 2;
+   void *buf;
+   ssize_t bufsz;
 
d = digest_get_by_name(algorithm);
BUG_ON(!d);
 
-   if (argc  2)
-   return COMMAND_ERROR_USAGE;
+   while ((opt = getopt(argc, argv, v:V:))  0) {
+   switch (opt) {
+   case 'v':
+   if (verify) {
+   ret = COMMAND_ERROR_USAGE;
+   goto out;
+   }
+
+   verify = 1;
+   min_argc += 2;
+
+   if (d-length != (strlen(optarg) / 2)) {
+   printf(invalid hash length (%d chars 
required)\n,
+   d-length * 2);
+   ret = COMMAND_ERROR_USAGE;
+   goto out;
+   }
+
+   verify_hash = parse_hash(d-length, optarg);
+   if (!verify_hash) {
+   ret = -ENOMEM;
+   goto out;
+   }
+
+   break;
+   case 'V':
+   if (verify) {
+   ret = COMMAND_ERROR_USAGE;
+   goto out;
+   }
+
+   verify = 1;
+   min_argc += 2;
+
+   buf = read_file(optarg, bufsz);
+   if (!buf) {
+   ret = -ENOMEM;
+   goto out;
+   }
+
+   if (bufsz  d-length) {
+   free(buf);
+   ret = COMMAND_ERROR_USAGE;
+   goto out;
+   }
+
+   verify_hash = parse_hash(d-length, buf);
+   free(buf);
+   break;
+   default:
+   ret = COMMAND_ERROR_USAGE;
+   goto out;
+   }
+   }
+
+   if (argc  min_argc) {
+   ret = COMMAND_ERROR_USAGE;
+   goto out;
+   }
+
+   argv += min_argc - 2;
 
hash = calloc(d-length, sizeof(unsigned char));
if (!hash) {
perror(calloc);
-   return COMMAND_ERROR_USAGE;
+   ret = -ENOMEM;
+   goto out;
}
 
argv++;
@@ -60,17 +158,32 @@ static int do_digest(char *algorithm, int argc, char 
*argv[])
if (digest_file_window(d, filename, hash, start, size)  0) {
ret = 1;
} else {
-   for (i = 0; i  d-length; i++)
+   for (i = 0; i  d-length; i++) {
printf(%02x, hash[i]);
+   if (verify  0  hash[i] != verify_hash[i])
+   verify = -1;
+   }
 
-   printf(  %s\t0x%08llx ... 0x%08llx\n,
+   printf(  %s\t0x%08llx ... 0x%08llx,
filename, start, start + size);
+
+   if (verify  0) {
+   printf( ** ERROR **);
+   ret = 1;
+   }
+
+   printf(\n);
+
+   if (verify

[PATCH 1/2] mci-core: use dev_* for messages

2013-04-02 Thread Hubert Feurstein
Signed-off-by: Hubert Feurstein h.feurst...@gmail.com
---
 drivers/mci/mci-core.c | 13 -
 1 file changed, 8 insertions(+), 5 deletions(-)

diff --git a/drivers/mci/mci-core.c b/drivers/mci/mci-core.c
index a269aee..49612de 100644
--- a/drivers/mci/mci-core.c
+++ b/drivers/mci/mci-core.c
@@ -430,8 +430,10 @@ static int mmc_change_freq(struct mci *mci)
}
 
/* No high-speed support */
-   if (!mci-ext_csd[EXT_CSD_HS_TIMING])
+   if (!mci-ext_csd[EXT_CSD_HS_TIMING]) {
+   dev_dbg(mci-mci_dev, No high-speed support\n);
return 0;
+   }
 
/* High Speed is set, there are two types: 52MHz and 26MHz */
if (cardtype  EXT_CSD_CARD_TYPE_52)
@@ -669,7 +671,8 @@ static void mci_detect_version_from_csd(struct mci *mci)
mci-version = MMC_VERSION_1_2;
break;
}
-   printf(detected card version %s\n, vstr);
+
+   dev_info(mci-mci_dev, detected card version %s\n, vstr);
}
 }
 
@@ -1169,7 +1172,7 @@ static int mci_sd_read(struct block_device *blk, void 
*buffer, int block,
}
 
if (block  MAX_BUFFER_NUMBER) {
-   pr_err(Cannot handle block number %d. Too large!\n, block);
+   dev_err(mci-mci_dev, Cannot handle block number %d. Too 
large!\n, block);
return -EINVAL;
}
 
@@ -1366,7 +1369,7 @@ static int mci_card_probe(struct mci *mci)
/* start with a host interface reset */
rc = (host-init)(host, mci-mci_dev);
if (rc) {
-   pr_err(Cannot reset the SD/MMC interface\n);
+   dev_err(mci-mci_dev, Cannot reset the SD/MMC interface\n);
return rc;
}
 
@@ -1376,7 +1379,7 @@ static int mci_card_probe(struct mci *mci)
/* reset the card */
rc = mci_go_idle(mci);
if (rc) {
-   pr_warning(Cannot reset the SD/MMC card\n);
+   dev_warn(mci-mci_dev, Cannot reset the SD/MMC card\n);
goto on_error;
}
 
-- 
1.8.1.3


___
barebox mailing list
barebox@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/barebox


[PATCH] imx_spi: fix bus-num setup

2013-02-21 Thread Hubert Feurstein
Signed-off-by: Hubert Feurstein h.feurst...@gmail.com
---
 drivers/spi/imx_spi.c | 1 +
 1 file changed, 1 insertion(+)

diff --git a/drivers/spi/imx_spi.c b/drivers/spi/imx_spi.c
index 71fac3d..950180f 100644
--- a/drivers/spi/imx_spi.c
+++ b/drivers/spi/imx_spi.c
@@ -533,6 +533,7 @@ static int imx_spi_probe(struct device_d *dev)
 
master = imx-master;
master-dev = dev;
+   master-bus_num = dev-id;
 
master-setup = imx_spi_setup;
master-transfer = imx_spi_transfer;
-- 
1.8.1.3


___
barebox mailing list
barebox@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/barebox


[PATCH 1/2] net: fec_imx: ensure constant timeout in fec_halt

2013-02-21 Thread Hubert Feurstein
Signed-off-by: Hubert Feurstein h.feurst...@gmail.com
---
 drivers/net/fec_imx.c | 11 ---
 1 file changed, 8 insertions(+), 3 deletions(-)

diff --git a/drivers/net/fec_imx.c b/drivers/net/fec_imx.c
index 2378a19..6dfb093 100644
--- a/drivers/net/fec_imx.c
+++ b/drivers/net/fec_imx.c
@@ -425,15 +425,20 @@ static int fec_open(struct eth_device *edev)
 static void fec_halt(struct eth_device *dev)
 {
struct fec_priv *fec = (struct fec_priv *)dev-priv;
-   int counter = 0x;
+   uint64_t tmo;
 
/* issue graceful stop command to the FEC transmitter if necessary */
writel(readl(fec-regs + FEC_X_CNTRL) | FEC_ECNTRL_RESET,
fec-regs + FEC_X_CNTRL);
 
/* wait for graceful stop to register */
-   while ((counter--)  (!(readl(fec-regs + FEC_IEVENT)  
FEC_IEVENT_GRA)))
-   ;   /* FIXME ensure time */
+   tmo = get_time_ns();
+   while (!(readl(fec-regs + FEC_IEVENT)  FEC_IEVENT_GRA)) {
+   if (is_timeout(tmo, 1 * SECOND)) {
+   printf(graceful stop timeout\n);
+   break;
+   }
+   }
 
/* Disable SmartDMA tasks */
fec_tx_task_disable(fec);
-- 
1.8.1.3


___
barebox mailing list
barebox@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/barebox


[PATCH 2/2] net: imx_fec: fix RMII support for i.MX6

2013-02-21 Thread Hubert Feurstein
Signed-off-by: Hubert Feurstein h.feurst...@gmail.com
---
 drivers/net/fec_imx.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/drivers/net/fec_imx.c b/drivers/net/fec_imx.c
index 6dfb093..80fb2ce 100644
--- a/drivers/net/fec_imx.c
+++ b/drivers/net/fec_imx.c
@@ -309,7 +309,7 @@ static int fec_init(struct eth_device *dev)
}
 
if (fec-xcv_type == RMII) {
-   if (fec_is_imx28(fec)) {
+   if (fec_is_imx28(fec) || fec_is_imx6(fec)) {
rcntl |= FEC_R_CNTRL_RMII_MODE | FEC_R_CNTRL_FCE |
FEC_R_CNTRL_NO_LGTH_CHECK;
} else {
-- 
1.8.1.3


___
barebox mailing list
barebox@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/barebox


[PATCH 1/2] net: fec_imx: use dev_err and dev_warn instead of printf

2013-02-21 Thread Hubert Feurstein
Signed-off-by: Hubert Feurstein h.feurst...@gmail.com
---
 drivers/net/fec_imx.c | 14 +++---
 1 file changed, 7 insertions(+), 7 deletions(-)

diff --git a/drivers/net/fec_imx.c b/drivers/net/fec_imx.c
index 2cf5008..44a3112 100644
--- a/drivers/net/fec_imx.c
+++ b/drivers/net/fec_imx.c
@@ -86,7 +86,7 @@ static int fec_miibus_read(struct mii_bus *bus, int phyAddr, 
int regAddr)
start = get_time_ns();
while (!(readl(fec-regs + FEC_IEVENT)  FEC_IEVENT_MII)) {
if (is_timeout(start, MSECOND)) {
-   printf(Read MDIO failed...\n);
+   dev_err(fec-edev.dev, Read MDIO failed...\n);
return -1;
}
}
@@ -126,7 +126,7 @@ static int fec_miibus_write(struct mii_bus *bus, int 
phyAddr,
start = get_time_ns();
while (!(readl(fec-regs + FEC_IEVENT)  FEC_IEVENT_MII)) {
if (is_timeout(start, MSECOND)) {
-   printf(Write MDIO failed...\n);
+   dev_err(fec-edev.dev, Write MDIO failed...\n);
return -1;
}
}
@@ -468,12 +468,12 @@ static int fec_send(struct eth_device *dev, void 
*eth_data, int data_length)
 
/* Check for valid length of data. */
if ((data_length  1500) || (data_length = 0)) {
-   printf(Payload (%d) to large!\n, data_length);
+   dev_err(dev-dev, Payload (%d) to large!\n, data_length);
return -1;
}
 
if ((uint32_t)eth_data  (DB_DATA_ALIGNMENT-1))
-   printf(%s: Warning: Transmit data not aligned: %p!\n, 
__FUNCTION__, eth_data);
+   dev_warn(dev-dev, Transmit data not aligned: %p!\n, 
eth_data);
 
/*
 * Setup the transmit buffer
@@ -506,7 +506,7 @@ static int fec_send(struct eth_device *dev, void *eth_data, 
int data_length)
tmo = get_time_ns();
while (readw(fec-tbd_base[fec-tbd_index].status)  FEC_TBD_READY) {
if (is_timeout(tmo, 1 * SECOND)) {
-   printf(transmission timeout\n);
+   dev_err(dev-dev, transmission timeout\n);
break;
}
}
@@ -544,7 +544,7 @@ static int fec_recv(struct eth_device *dev)
/* BABT, Rx/Tx FIFO errors */
fec_halt(dev);
fec_init(dev);
-   printf(some error: 0x%08x\n, ievent);
+   dev_err(dev-dev, some error: 0x%08x\n, ievent);
return 0;
}
if (!fec_is_imx28(fec)) {
@@ -587,7 +587,7 @@ static int fec_recv(struct eth_device *dev)
len = frame_length;
} else {
if (bd_status  FEC_RBD_ERR) {
-   printf(error frame: 0x%p 0x%08x\n, rbd, 
bd_status);
+   dev_warn(dev-dev, error frame: 0x%p 
0x%08x\n, rbd, bd_status);
}
}
/*
-- 
1.8.1.3


___
barebox mailing list
barebox@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/barebox


[PATCH 2/2] net: fec_imx: ensure constant timeout in fec_halt

2013-02-21 Thread Hubert Feurstein
Signed-off-by: Hubert Feurstein h.feurst...@gmail.com
---
 drivers/net/fec_imx.c | 11 ---
 1 file changed, 8 insertions(+), 3 deletions(-)

diff --git a/drivers/net/fec_imx.c b/drivers/net/fec_imx.c
index 44a3112..14889d3 100644
--- a/drivers/net/fec_imx.c
+++ b/drivers/net/fec_imx.c
@@ -425,15 +425,20 @@ static int fec_open(struct eth_device *edev)
 static void fec_halt(struct eth_device *dev)
 {
struct fec_priv *fec = (struct fec_priv *)dev-priv;
-   int counter = 0x;
+   uint64_t tmo;
 
/* issue graceful stop command to the FEC transmitter if necessary */
writel(readl(fec-regs + FEC_X_CNTRL) | FEC_ECNTRL_RESET,
fec-regs + FEC_X_CNTRL);
 
/* wait for graceful stop to register */
-   while ((counter--)  (!(readl(fec-regs + FEC_IEVENT)  
FEC_IEVENT_GRA)))
-   ;   /* FIXME ensure time */
+   tmo = get_time_ns();
+   while (!(readl(fec-regs + FEC_IEVENT)  FEC_IEVENT_GRA)) {
+   if (is_timeout(tmo, 1 * SECOND)) {
+   dev_err(dev-dev, graceful stop timeout\n);
+   break;
+   }
+   }
 
/* Disable SmartDMA tasks */
fec_tx_task_disable(fec);
-- 
1.8.1.3


___
barebox mailing list
barebox@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/barebox


Re: [PATCH v2] ARM i.MX6: Add support for SabreSD board

2013-02-12 Thread Hubert Feurstein
Hi Sascha,

2013/2/11 Sascha Hauer s.ha...@pengutronix.de:
[...]
 +
 +static int sabresd_mem_init(void)
 +{
 + arm_add_mem_device(ram0, 0x1000, SZ_1G);
 +
 + return 0;
 +}
 +mem_initcall(sabresd_mem_init);

 This is not necessary anymore. I removed this while applying. Could you
 verify this still works?
No, it does not. Here's the log:

barebox 2013.02.0-00270-g4bb21a7 #158 Tue Feb 12 09:34:12 CET 2013


Board: SabreSD
mmu: Error: Can't request SDRAM region for ttb
Error: Cannot request SDRAM region for stack
registered netconsole as cs1
imx-esdhc imx-esdhc3: registered as imx-esdhc3
detected card version 4.0
mci mci0: registered disk0
mci mci0: No partition table found
imx-esdhc imx-esdhc1: registered as imx-esdhc1
mci mci1: no card inserted
imx-esdhc imx-esdhc2: registered as imx-esdhc2
mci mci2: registered disk1
mci mci2: No partition table found
BUG: failure at arch/arm/cpu/mmu.c:122/find_pte()!
BUG!
[1781bd3d] (unwind_backtrace+0x1/0x64) from [1780fffd] (panic+0x1d/0x2c)
[1780fffd] (panic+0x1d/0x2c) from [1781c7f5] (remap_range+0x29/0x88)
[1781c7f5] (remap_range+0x29/0x88) from [1781c8a3]
(dma_alloc_coherent+0x2f/0x38)
[1781c8a3] (dma_alloc_coherent+0x2f/0x38) from [178084c3]
(fec_probe+0x8f/0x17c)
[178084c3] (fec_probe+0x8f/0x17c) from [17807d81] (platform_probe+0x9/0xa)
[17807d81] (platform_probe+0x9/0xa) from [17807ba7] (device_probe+0xb/0x38)
[17807ba7] (device_probe+0xb/0x38) from [17807bf3] (match+0x1f/0x30)
[17807bf3] (match+0x1f/0x30) from [17807d05] (register_device+0x81/0xb0)
[17807d05] (register_device+0x81/0xb0) from [17807e11]
(add_generic_device_res+0x2d/0x32)
[17807e11] (add_generic_device_res+0x2d/0x32) from [1781acbb]
(imx_add_fec_imx6+0x1f/0x28)
[1781acbb] (imx_add_fec_imx6+0x1f/0x28) from [178197e9]
(sabresd_devices_init+0x81/0x10c)
[178197e9] (sabresd_devices_init+0x81/0x10c) from [178068d9]
(start_barebox+0x15/0xc0)
[178068d9] (start_barebox+0x15/0xc0) from [1781c237]
(__start.isra.0+0x4b/0x54)
[1781c237] (__start.isra.0+0x4b/0x54) from [1781c24d] (setup_c+0x1/0x48)

Hubert

___
barebox mailing list
barebox@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/barebox


[PATCH v2] ARM i.MX6: Add support for SabreSD board

2013-02-11 Thread Hubert Feurstein
Cc: Sascha Hauer s.ha...@pengutronix.de
Cc: Steffen Trumtrar s.trumt...@pengutronix.de
Signed-off-by: Hubert Feurstein h.feurst...@gmail.com
---
 Changes since V1:
 - rebased on latest master with arm-entry changes
 - use phy_register_fixup_for_uid to register phy fixup
 - register SD4 as first mmc device, so it always becomes disk0
 - add self and env partition
 - GbE is working with patch 'net fec_imx: add support for i.MX6 1000Mbps mode'

 arch/arm/Makefile  |   1 +
 arch/arm/boards/freescale-mx6-sabresd/Makefile |   4 +
 arch/arm/boards/freescale-mx6-sabresd/board.c  | 244 +
 arch/arm/boards/freescale-mx6-sabresd/config.h |   4 +
 .../freescale-mx6-sabresd/env/init/config-board|   7 +
 .../boards/freescale-mx6-sabresd/flash_header.c| 178 +++
 arch/arm/boards/freescale-mx6-sabresd/lowlevel.c   |  10 +
 arch/arm/configs/freescale-mx6-sabresd_defconfig   |  71 ++
 arch/arm/mach-imx/Kconfig  |   5 +
 9 files changed, 524 insertions(+)
 create mode 100644 arch/arm/boards/freescale-mx6-sabresd/Makefile
 create mode 100644 arch/arm/boards/freescale-mx6-sabresd/board.c
 create mode 100644 arch/arm/boards/freescale-mx6-sabresd/config.h
 create mode 100644 arch/arm/boards/freescale-mx6-sabresd/env/init/config-board
 create mode 100644 arch/arm/boards/freescale-mx6-sabresd/flash_header.c
 create mode 100644 arch/arm/boards/freescale-mx6-sabresd/lowlevel.c
 create mode 100644 arch/arm/configs/freescale-mx6-sabresd_defconfig

diff --git a/arch/arm/Makefile b/arch/arm/Makefile
index fcb2969..55290a9 100644
--- a/arch/arm/Makefile
+++ b/arch/arm/Makefile
@@ -157,6 +157,7 @@ board-$(CONFIG_MACH_SABRELITE)  := 
freescale-mx6-sabrelite
 board-$(CONFIG_MACH_TX53)  := karo-tx53
 board-$(CONFIG_MACH_GUF_VINCELL)   := guf-vincell
 board-$(CONFIG_MACH_EFIKA_MX_SMARTBOOK):= efika-mx-smartbook
+board-$(CONFIG_MACH_SABRESD)   := freescale-mx6-sabresd
 
 machdirs := $(patsubst %,arch/arm/mach-%/,$(machine-y))
 
diff --git a/arch/arm/boards/freescale-mx6-sabresd/Makefile 
b/arch/arm/boards/freescale-mx6-sabresd/Makefile
new file mode 100644
index 000..21fb7d9
--- /dev/null
+++ b/arch/arm/boards/freescale-mx6-sabresd/Makefile
@@ -0,0 +1,4 @@
+obj-y += board.o flash_header.o
+pbl-y += flash_header.o
+obj-y += lowlevel.o
+pbl-y += lowlevel.o
diff --git a/arch/arm/boards/freescale-mx6-sabresd/board.c 
b/arch/arm/boards/freescale-mx6-sabresd/board.c
new file mode 100644
index 000..1cdb0aa
--- /dev/null
+++ b/arch/arm/boards/freescale-mx6-sabresd/board.c
@@ -0,0 +1,244 @@
+/*
+ * Copyright (C) 2013 Hubert Feurstein h.feurst...@gmail.com
+ *
+ * based on arch/arm/boards/freescale-mx6-sabrelite/board.c
+ * Copyright (C) 2012 Steffen Trumtrar, Pengutronix
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of
+ * the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ */
+
+#include common.h
+#include init.h
+#include environment.h
+#include mach/imx6-regs.h
+#include fec.h
+#include mach/gpio.h
+#include asm/armlinux.h
+#include generated/mach-types.h
+#include partition.h
+#include linux/phy.h
+#include asm/io.h
+#include asm/mmu.h
+#include mach/generic.h
+#include sizes.h
+#include net.h
+#include mach/imx6.h
+#include mach/devices-imx6.h
+#include mach/iomux-mx6.h
+#include mach/gpio.h
+#include spi/spi.h
+#include mach/spi.h
+#include mach/usb.h
+
+#define PHY_ID_AR8031  0x004dd074
+#define AR_PHY_ID_MASK 0x
+
+#define SABRESD_SD2_CD IMX_GPIO_NR(2, 2)
+#define SABRESD_SD2_WP IMX_GPIO_NR(2, 3)
+
+#define SABRESD_SD3_CD IMX_GPIO_NR(2, 0)
+#define SABRESD_SD3_WP IMX_GPIO_NR(2, 1)
+
+static iomux_v3_cfg_t sabresd_pads[] = {
+   /* UART1 */
+   MX6Q_PAD_CSI0_DAT11__UART1_RXD,
+   MX6Q_PAD_CSI0_DAT10__UART1_TXD,
+
+   /* Ethernet */
+   MX6Q_PAD_ENET_MDC__ENET_MDC,
+   MX6Q_PAD_ENET_MDIO__ENET_MDIO,
+   MX6Q_PAD_ENET_REF_CLK__ENET_TX_CLK,
+
+   MX6Q_PAD_RGMII_TXC__ENET_RGMII_TXC,
+   MX6Q_PAD_RGMII_TD0__ENET_RGMII_TD0,
+   MX6Q_PAD_RGMII_TD1__ENET_RGMII_TD1,
+   MX6Q_PAD_RGMII_TD2__ENET_RGMII_TD2,
+   MX6Q_PAD_RGMII_TD3__ENET_RGMII_TD3,
+   MX6Q_PAD_RGMII_TX_CTL__ENET_RGMII_TX_CTL,
+
+   MX6Q_PAD_RGMII_RXC__ENET_RGMII_RXC,
+   MX6Q_PAD_RGMII_RD0__ENET_RGMII_RD0,
+   MX6Q_PAD_RGMII_RD1__ENET_RGMII_RD1,
+   MX6Q_PAD_RGMII_RD2__ENET_RGMII_RD2,
+   MX6Q_PAD_RGMII_RD3__ENET_RGMII_RD3,
+   MX6Q_PAD_RGMII_RX_CTL__ENET_RGMII_RX_CTL

Re: [PATCH] net fec_imx: add support for i.MX6 1000Mbps mode

2013-02-08 Thread Hubert Feurstein
Any comments on this?

2013/2/7 Hubert Feurstein h.feurst...@gmail.com:
 Signed-off-by: Hubert Feurstein h.feurst...@gmail.com
 ---
  drivers/net/fec_imx.c | 14 ++
  drivers/net/fec_imx.h |  1 +
  2 files changed, 11 insertions(+), 4 deletions(-)

 diff --git a/drivers/net/fec_imx.c b/drivers/net/fec_imx.c
 index 2378a19..7320f07 100644
 --- a/drivers/net/fec_imx.c
 +++ b/drivers/net/fec_imx.c
 @@ -361,12 +361,18 @@ static int fec_init(struct eth_device *dev)
  static void fec_update_linkspeed(struct eth_device *edev)
  {
 struct fec_priv *fec = (struct fec_priv *)edev-priv;
 +   int speed = edev-phydev-speed;
 +   u32 rcntl = readl(fec-regs + FEC_R_CNTRL)  ~FEC_R_CNTRL_RMII_10T;
 +   u32 ecntl = readl(fec-regs + FEC_ECNTRL)  ~FEC_ECNTRL_SPEED;

 -   if (edev-phydev-speed == SPEED_10) {
 -   u32 rcntl = readl(fec-regs + FEC_R_CNTRL);
 +   if (speed == SPEED_10)
 rcntl |= FEC_R_CNTRL_RMII_10T;
 -   writel(rcntl, fec-regs + FEC_R_CNTRL);
 -   }
 +
 +   if (speed == SPEED_1000)
 +   ecntl |= FEC_ECNTRL_SPEED;
 +
 +   writel(rcntl, fec-regs + FEC_R_CNTRL);
 +   writel(ecntl, fec-regs + FEC_ECNTRL);
  }

  /**
 diff --git a/drivers/net/fec_imx.h b/drivers/net/fec_imx.h
 index 1eb1eba..29aea85 100644
 --- a/drivers/net/fec_imx.h
 +++ b/drivers/net/fec_imx.h
 @@ -92,6 +92,7 @@

  #define FEC_ECNTRL_RESET0x0001 /** reset the FEC */
  #define FEC_ECNTRL_ETHER_EN 0x0002 /** enable the FEC */
 +#define FEC_ECNTRL_SPEED0x0020 /** i.MX6: enable 
 1000Mbps mode */

  /**
   * @brief Descriptor buffer alignment
 --
 1.8.1


___
barebox mailing list
barebox@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/barebox


[PATCH] net fec_imx: add support for i.MX6 1000Mbps mode

2013-02-07 Thread Hubert Feurstein
Signed-off-by: Hubert Feurstein h.feurst...@gmail.com
---
 drivers/net/fec_imx.c | 14 ++
 drivers/net/fec_imx.h |  1 +
 2 files changed, 11 insertions(+), 4 deletions(-)

diff --git a/drivers/net/fec_imx.c b/drivers/net/fec_imx.c
index 2378a19..7320f07 100644
--- a/drivers/net/fec_imx.c
+++ b/drivers/net/fec_imx.c
@@ -361,12 +361,18 @@ static int fec_init(struct eth_device *dev)
 static void fec_update_linkspeed(struct eth_device *edev)
 {
struct fec_priv *fec = (struct fec_priv *)edev-priv;
+   int speed = edev-phydev-speed;
+   u32 rcntl = readl(fec-regs + FEC_R_CNTRL)  ~FEC_R_CNTRL_RMII_10T;
+   u32 ecntl = readl(fec-regs + FEC_ECNTRL)  ~FEC_ECNTRL_SPEED;
 
-   if (edev-phydev-speed == SPEED_10) {
-   u32 rcntl = readl(fec-regs + FEC_R_CNTRL);
+   if (speed == SPEED_10)
rcntl |= FEC_R_CNTRL_RMII_10T;
-   writel(rcntl, fec-regs + FEC_R_CNTRL);
-   }
+
+   if (speed == SPEED_1000)
+   ecntl |= FEC_ECNTRL_SPEED;
+
+   writel(rcntl, fec-regs + FEC_R_CNTRL);
+   writel(ecntl, fec-regs + FEC_ECNTRL);
 }
 
 /**
diff --git a/drivers/net/fec_imx.h b/drivers/net/fec_imx.h
index 1eb1eba..29aea85 100644
--- a/drivers/net/fec_imx.h
+++ b/drivers/net/fec_imx.h
@@ -92,6 +92,7 @@
 
 #define FEC_ECNTRL_RESET0x0001 /** reset the FEC */
 #define FEC_ECNTRL_ETHER_EN 0x0002 /** enable the FEC */
+#define FEC_ECNTRL_SPEED0x0020 /** i.MX6: enable 
1000Mbps mode */
 
 /**
  * @brief Descriptor buffer alignment
-- 
1.8.1


___
barebox mailing list
barebox@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/barebox


[PATCH] ARM i.MX6: Add support for SabreSD board

2013-02-07 Thread Hubert Feurstein
Signed-off-by: Hubert Feurstein h.feurst...@gmail.com
---
 arch/arm/Makefile  |   1 +
 arch/arm/boards/freescale-mx6-sabresd/Makefile |   2 +
 arch/arm/boards/freescale-mx6-sabresd/board.c  | 236 +
 arch/arm/boards/freescale-mx6-sabresd/config.h |   4 +
 .../freescale-mx6-sabresd/env/init/config-board|   7 +
 .../boards/freescale-mx6-sabresd/flash_header.c| 178 
 arch/arm/boards/freescale-mx6-sabresd/lowlevel.c   |  10 +
 arch/arm/configs/freescale-mx6-sabresd_defconfig   |  71 +++
 arch/arm/mach-imx/Kconfig  |   5 +
 9 files changed, 514 insertions(+)
 create mode 100644 arch/arm/boards/freescale-mx6-sabresd/Makefile
 create mode 100644 arch/arm/boards/freescale-mx6-sabresd/board.c
 create mode 100644 arch/arm/boards/freescale-mx6-sabresd/config.h
 create mode 100644 arch/arm/boards/freescale-mx6-sabresd/env/init/config-board
 create mode 100644 arch/arm/boards/freescale-mx6-sabresd/flash_header.c
 create mode 100644 arch/arm/boards/freescale-mx6-sabresd/lowlevel.c
 create mode 100644 arch/arm/configs/freescale-mx6-sabresd_defconfig

diff --git a/arch/arm/Makefile b/arch/arm/Makefile
index fcb2969..55290a9 100644
--- a/arch/arm/Makefile
+++ b/arch/arm/Makefile
@@ -157,6 +157,7 @@ board-$(CONFIG_MACH_SABRELITE)  := 
freescale-mx6-sabrelite
 board-$(CONFIG_MACH_TX53)  := karo-tx53
 board-$(CONFIG_MACH_GUF_VINCELL)   := guf-vincell
 board-$(CONFIG_MACH_EFIKA_MX_SMARTBOOK):= efika-mx-smartbook
+board-$(CONFIG_MACH_SABRESD)   := freescale-mx6-sabresd
 
 machdirs := $(patsubst %,arch/arm/mach-%/,$(machine-y))
 
diff --git a/arch/arm/boards/freescale-mx6-sabresd/Makefile 
b/arch/arm/boards/freescale-mx6-sabresd/Makefile
new file mode 100644
index 000..11199d2
--- /dev/null
+++ b/arch/arm/boards/freescale-mx6-sabresd/Makefile
@@ -0,0 +1,2 @@
+obj-y += board.o flash_header.o
+pbl-y += flash_header.o
diff --git a/arch/arm/boards/freescale-mx6-sabresd/board.c 
b/arch/arm/boards/freescale-mx6-sabresd/board.c
new file mode 100644
index 000..f660cdf
--- /dev/null
+++ b/arch/arm/boards/freescale-mx6-sabresd/board.c
@@ -0,0 +1,236 @@
+/*
+ * Copyright (C) 2013 Hubert Feurstein h.feurst...@gmail.com
+ *
+ * based on arch/arm/boards/freescale-mx6-sabrelite/board.c
+ * Copyright (C) 2012 Steffen Trumtrar, Pengutronix
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of
+ * the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ */
+
+#include common.h
+#include init.h
+#include environment.h
+#include mach/imx6-regs.h
+#include fec.h
+#include mach/gpio.h
+#include asm/armlinux.h
+#include generated/mach-types.h
+#include partition.h
+#include linux/phy.h
+#include asm/io.h
+#include asm/mmu.h
+#include mach/generic.h
+#include sizes.h
+#include net.h
+#include mach/imx6.h
+#include mach/devices-imx6.h
+#include mach/iomux-mx6.h
+#include mach/gpio.h
+#include spi/spi.h
+#include mach/spi.h
+#include mach/usb.h
+
+#define SABRESD_SD2_CD IMX_GPIO_NR(2, 2)
+#define SABRESD_SD2_WP IMX_GPIO_NR(2, 3)
+
+#define SABRESD_SD3_CD IMX_GPIO_NR(2, 0)
+#define SABRESD_SD3_WP IMX_GPIO_NR(2, 1)
+
+static iomux_v3_cfg_t sabresd_pads[] = {
+   /* UART1 */
+   MX6Q_PAD_CSI0_DAT11__UART1_RXD,
+   MX6Q_PAD_CSI0_DAT10__UART1_TXD,
+
+   /* Ethernet */
+   MX6Q_PAD_ENET_MDC__ENET_MDC,
+   MX6Q_PAD_ENET_MDIO__ENET_MDIO,
+   MX6Q_PAD_ENET_REF_CLK__ENET_TX_CLK,
+
+   MX6Q_PAD_RGMII_TXC__ENET_RGMII_TXC,
+   MX6Q_PAD_RGMII_TD0__ENET_RGMII_TD0,
+   MX6Q_PAD_RGMII_TD1__ENET_RGMII_TD1,
+   MX6Q_PAD_RGMII_TD2__ENET_RGMII_TD2,
+   MX6Q_PAD_RGMII_TD3__ENET_RGMII_TD3,
+   MX6Q_PAD_RGMII_TX_CTL__ENET_RGMII_TX_CTL,
+
+   MX6Q_PAD_RGMII_RXC__ENET_RGMII_RXC,
+   MX6Q_PAD_RGMII_RD0__ENET_RGMII_RD0,
+   MX6Q_PAD_RGMII_RD1__ENET_RGMII_RD1,
+   MX6Q_PAD_RGMII_RD2__ENET_RGMII_RD2,
+   MX6Q_PAD_RGMII_RD3__ENET_RGMII_RD3,
+   MX6Q_PAD_RGMII_RX_CTL__ENET_RGMII_RX_CTL,
+
+   MX6Q_PAD_ENET_CRS_DV__GPIO_1_25,/* AR8031 PHY Reset */
+   MX6Q_PAD_GPIO_16__ENET_ANATOP_ETHERNET_REF_OUT,
+
+   /* SD2 */
+   MX6Q_PAD_SD2_CLK__USDHC2_CLK,
+   MX6Q_PAD_SD2_CMD__USDHC2_CMD,
+   MX6Q_PAD_SD2_DAT0__USDHC2_DAT0,
+   MX6Q_PAD_SD2_DAT1__USDHC2_DAT1,
+   MX6Q_PAD_SD2_DAT2__USDHC2_DAT2,
+   MX6Q_PAD_SD2_DAT3__USDHC2_DAT3,
+   MX6Q_PAD_NANDF_D4__USDHC2_DAT4,
+   MX6Q_PAD_NANDF_D5__USDHC2_DAT5,
+   MX6Q_PAD_NANDF_D6__USDHC2_DAT6

[RFC PATCH] ARM i.MX6: Add support for SabreSD board

2013-02-05 Thread Hubert Feurstein
Signed-off-by: Hubert Feurstein h.feurst...@gmail.com
---
 Ethernet is not working yet. I took over the initialisation from u-boot.
 Phy access seems to work, but I don't get any data out. 
 So some help is very appreciated ...

 Best regards
 Hubert

 arch/arm/Makefile  |   1 +
 arch/arm/boards/freescale-mx6-sabresd/Makefile |   4 +
 arch/arm/boards/freescale-mx6-sabresd/board.c  | 271 +
 arch/arm/boards/freescale-mx6-sabresd/config.h |   4 +
 .../freescale-mx6-sabresd/env/init/config-board|   7 +
 .../boards/freescale-mx6-sabresd/flash_header.c| 181 ++
 arch/arm/boards/freescale-mx6-sabresd/lowlevel.c   |  10 +
 arch/arm/configs/freescale-mx6-sabresd_defconfig   |  71 ++
 arch/arm/mach-imx/Kconfig  |   5 +
 9 files changed, 554 insertions(+)
 create mode 100644 arch/arm/boards/freescale-mx6-sabresd/Makefile
 create mode 100644 arch/arm/boards/freescale-mx6-sabresd/board.c
 create mode 100644 arch/arm/boards/freescale-mx6-sabresd/config.h
 create mode 100644 arch/arm/boards/freescale-mx6-sabresd/env/init/config-board
 create mode 100644 arch/arm/boards/freescale-mx6-sabresd/flash_header.c
 create mode 100644 arch/arm/boards/freescale-mx6-sabresd/lowlevel.c
 create mode 100644 arch/arm/configs/freescale-mx6-sabresd_defconfig

diff --git a/arch/arm/Makefile b/arch/arm/Makefile
index fcb2969..55290a9 100644
--- a/arch/arm/Makefile
+++ b/arch/arm/Makefile
@@ -157,6 +157,7 @@ board-$(CONFIG_MACH_SABRELITE)  := 
freescale-mx6-sabrelite
 board-$(CONFIG_MACH_TX53)  := karo-tx53
 board-$(CONFIG_MACH_GUF_VINCELL)   := guf-vincell
 board-$(CONFIG_MACH_EFIKA_MX_SMARTBOOK):= efika-mx-smartbook
+board-$(CONFIG_MACH_SABRESD)   := freescale-mx6-sabresd
 
 machdirs := $(patsubst %,arch/arm/mach-%/,$(machine-y))
 
diff --git a/arch/arm/boards/freescale-mx6-sabresd/Makefile 
b/arch/arm/boards/freescale-mx6-sabresd/Makefile
new file mode 100644
index 000..21fb7d9
--- /dev/null
+++ b/arch/arm/boards/freescale-mx6-sabresd/Makefile
@@ -0,0 +1,4 @@
+obj-y += board.o flash_header.o
+pbl-y += flash_header.o
+obj-y += lowlevel.o
+pbl-y += lowlevel.o
diff --git a/arch/arm/boards/freescale-mx6-sabresd/board.c 
b/arch/arm/boards/freescale-mx6-sabresd/board.c
new file mode 100644
index 000..d341cf9
--- /dev/null
+++ b/arch/arm/boards/freescale-mx6-sabresd/board.c
@@ -0,0 +1,271 @@
+/*
+ * Copyright (C) 2013 Hubert Feurstein h.feurst...@gmail.com
+ *
+ * based on arch/arm/boards/freescale-mx6-sabrelite/board.c
+ * Copyright (C) 2012 Steffen Trumtrar, Pengutronix
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of
+ * the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ */
+
+#include common.h
+#include init.h
+#include environment.h
+#include mach/imx6-regs.h
+#include fec.h
+#include mach/gpio.h
+#include asm/armlinux.h
+#include generated/mach-types.h
+#include partition.h
+#include linux/phy.h
+#include asm/io.h
+#include asm/mmu.h
+#include mach/generic.h
+#include sizes.h
+#include net.h
+#include mach/imx6.h
+#include mach/devices-imx6.h
+#include mach/iomux-mx6.h
+#include mach/gpio.h
+#include spi/spi.h
+#include mach/spi.h
+#include mach/usb.h
+
+#define SABRESD_SD2_CD IMX_GPIO_NR(2, 2)
+#define SABRESD_SD2_WP IMX_GPIO_NR(2, 3)
+
+#define SABRESD_SD3_CD IMX_GPIO_NR(2, 0)
+#define SABRESD_SD3_WP IMX_GPIO_NR(2, 1)
+
+static iomux_v3_cfg_t sabresd_pads[] = {
+   /* UART1 */
+   MX6Q_PAD_CSI0_DAT11__UART1_RXD,
+   MX6Q_PAD_CSI0_DAT10__UART1_TXD,
+
+   /* SD2 */
+   MX6Q_PAD_SD2_CLK__USDHC2_CLK,
+   MX6Q_PAD_SD2_CMD__USDHC2_CMD,
+   MX6Q_PAD_SD2_DAT0__USDHC2_DAT0,
+   MX6Q_PAD_SD2_DAT1__USDHC2_DAT1,
+   MX6Q_PAD_SD2_DAT2__USDHC2_DAT2,
+   MX6Q_PAD_SD2_DAT3__USDHC2_DAT3,
+   MX6Q_PAD_NANDF_D4__USDHC2_DAT4,
+   MX6Q_PAD_NANDF_D5__USDHC2_DAT5,
+   MX6Q_PAD_NANDF_D6__USDHC2_DAT6,
+   MX6Q_PAD_NANDF_D7__USDHC2_DAT7,
+   MX6Q_PAD_NANDF_D2__GPIO_2_2,/* CD */
+   MX6Q_PAD_NANDF_D3__GPIO_2_3,/* WP */
+
+   /* SD3 */
+   MX6Q_PAD_SD3_CMD__USDHC3_CMD,
+   MX6Q_PAD_SD3_CLK__USDHC3_CLK,
+   MX6Q_PAD_SD3_DAT0__USDHC3_DAT0,
+   MX6Q_PAD_SD3_DAT1__USDHC3_DAT1,
+   MX6Q_PAD_SD3_DAT2__USDHC3_DAT2,
+   MX6Q_PAD_SD3_DAT3__USDHC3_DAT3,
+   MX6Q_PAD_SD3_DAT4__USDHC3_DAT4,
+   MX6Q_PAD_SD3_DAT5__USDHC3_DAT5,
+   MX6Q_PAD_SD3_DAT6__USDHC3_DAT6,
+   MX6Q_PAD_SD3_DAT7__USDHC3_DAT7,
+   MX6Q_PAD_NANDF_D0__GPIO_2_0,/* CD