Skip to contentSkip to conversation

spi: fix mxc_spi_slave structure allocation to clear memory

PATCH New Matt Sealey 2 participants 6 messages Aug 17, 2012 – Aug 20, 2012

Subsystems (2)
lore
Share & tools
lore
#0 lore raw

PATCH 1/2 spi: fix mxc_spi_slave structure allocation to clear memory

Use calloc() instead of malloc() to allocate the mxc_spi_slave structure. Clearing the memory is necessary since most of the time this gets done super early in boot, but on warm reboots, and when SPI probing is done long after the init stages it could actually pick up previously used memory, and things like the chipselect polarity and other data end up being filled with trash data if not explicitly set by the board files.

This solves a semi-random, almost unreproducable error whereby SPI devices act very, very strangly on boot. Tested on Efika MX over several years..

---
 drivers/spi/mxc_spi.c |    2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)
drivers/spi/mxc_spi.c +1 -1
index 2e15318..d1dab18 100644
@@ -408,7 +408,7 @@ struct spi_slave *spi_setup_slave(unsigned int bus, unsigned int cs,
 	if (bus >= ARRAY_SIZE(spi_bases))
 		return NULL;
 
-	mxcs = malloc(sizeof(struct mxc_spi_slave));
+	mxcs = calloc(sizeof(struct mxc_spi_slave), 1);
 	if (!mxcs) {
 		puts("mxc_spi: SPI Slave not allocated !\n");
 		return NULL;
Signature · 1 line
1.7.9.5
#1 lore raw

PATCH 2/2 spi: fix mxs_spi_slave structure allocation to clear memory

Use calloc() instead of malloc() to allocate the mxs_spi_slave structure. Clearing the memory is necessary since most of the time this gets done super early in boot, but on warm reboots, and when SPI probing is done long after the init stages it could actually pick up previously used memory, and things like the chipselect polarity and other data end up being filled with trash data if not explicitly set by the board files.

This solves a semi-random, almost unreproducable error whereby SPI devices act very, very strangly on boot.

---
 drivers/spi/mxs_spi.c |    2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)
drivers/spi/mxs_spi.c +1 -1
index a037c13..5fa7f2b 100644
@@ -91,7 +91,7 @@ struct spi_slave *spi_setup_slave(unsigned int bus, unsigned int cs,
 		return NULL;
 	}
 
-	mxs_slave = malloc(sizeof(struct mxs_spi_slave));
+	mxs_slave = calloc(sizeof(struct mxs_spi_slave), 1);
 	if (!mxs_slave)
 		return NULL;
 
Signature · 1 line
1.7.9.5
#2 lore raw

PATCH 2/2 spi: fix mxs_spi_slave structure allocation to clear memory

Am 17/08/2012 20:15, schrieb Matt Sealey:

Quoted 21 lines

Use calloc() instead of malloc() to allocate the mxs_spi_slave structure. Clearing the memory is necessary since most of the time this gets done super early in boot, but on warm reboots, and when SPI probing is done long after the init stages it could actually pick up previously used memory, and things like the chipselect polarity and other data end up being filled with trash data if not explicitly set by the board files.

This solves a semi-random, almost unreproducable error whereby SPI devices act very, very strangly on boot.

---
 drivers/spi/mxs_spi.c |    2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)
drivers/spi/mxs_spi.c +0 -0
index a037c13..5fa7f2b 100644

drivers/spi/mxs_spi.c struct spi_slave *spi_setup_slave(unsigned int bus, unsigned int cs, · line 97

Quoted 8 lines
drivers/spi/mxs_spi.c +1 -1
@@ -91,7 +91,7 @@ struct spi_slave *spi_setup_slave(unsigned int bus, unsigned int cs,
 		return NULL;
 	}
 
-	mxs_slave = malloc(sizeof(struct mxs_spi_slave));
+	mxs_slave = calloc(sizeof(struct mxs_spi_slave), 1);
 	if (!mxs_slave)
 		return NULL;
 

Best regards,
Stefano Babic

Signature · 5 lines
=====================================================================
DENX Software Engineering GmbH,     MD: Wolfgang Denk & Detlev Zundel
HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany
Phone: +49-8142-66989-0 Fax: +49-8142-66989-80  Email: office at denx.de
=====================================================================
#3 lore raw

PATCH 2/2 spi: fix mxs_spi_slave structure allocation to clear memory

In reply to Matt Sealey
Quoted 21 lines · Matt Sealey

Use calloc() instead of malloc() to allocate the mxs_spi_slave structure. Clearing the memory is necessary since most of the time this gets done super early in boot, but on warm reboots, and when SPI probing is done long after the init stages it could actually pick up previously used memory, and things like the chipselect polarity and other data end up being filled with trash data if not explicitly set by the board files.

This solves a semi-random, almost unreproducable error whereby SPI devices act very, very strangly on boot.

---
 drivers/spi/mxs_spi.c |    2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)
drivers/spi/mxs_spi.c +0 -0
index a037c13..5fa7f2b 100644

drivers/spi/mxs_spi.c struct spi_slave *spi_setup_slave(unsigned int bus, unsigned int cs, · line 97

Quoted 8 lines
drivers/spi/mxs_spi.c +1 -1
@@ -91,7 +91,7 @@ struct spi_slave *spi_setup_slave(unsigned int bus, unsigned int cs,
 		return NULL;
 	}
 
-	mxs_slave = malloc(sizeof(struct mxs_spi_slave));
+	mxs_slave = calloc(sizeof(struct mxs_spi_slave), 1);
 	if (!mxs_slave)
 		return NULL;
 

Applied to u-boot-imx, thanks.

Best regards,
Stefano Babic

Signature · 5 lines
=====================================================================
DENX Software Engineering GmbH,     MD: Wolfgang Denk & Detlev Zundel
HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany
Phone: +49-8142-66989-53 Fax: +49-8142-66989-80 Email: sbabic at denx.de
=====================================================================
#4 lore raw

PATCH 1/2 spi: fix mxc_spi_slave structure allocation to clear memory

In reply to Matt Sealey

Am 17/08/2012 20:15, schrieb Matt Sealey:

Quoted 21 lines

Use calloc() instead of malloc() to allocate the mxc_spi_slave structure. Clearing the memory is necessary since most of the time this gets done super early in boot, but on warm reboots, and when SPI probing is done long after the init stages it could actually pick up previously used memory, and things like the chipselect polarity and other data end up being filled with trash data if not explicitly set by the board files.

This solves a semi-random, almost unreproducable error whereby SPI devices act very, very strangly on boot. Tested on Efika MX over several years..

---
 drivers/spi/mxc_spi.c |    2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)
drivers/spi/mxc_spi.c +0 -0
index 2e15318..d1dab18 100644

drivers/spi/mxc_spi.c struct spi_slave *spi_setup_slave(unsigned int bus, unsigned int cs, · line 414

Quoted 8 lines
drivers/spi/mxc_spi.c +1 -1
@@ -408,7 +408,7 @@ struct spi_slave *spi_setup_slave(unsigned int bus, unsigned int cs,
 	if (bus >= ARRAY_SIZE(spi_bases))
 		return NULL;
 
-	mxcs = malloc(sizeof(struct mxc_spi_slave));
+	mxcs = calloc(sizeof(struct mxc_spi_slave), 1);
 	if (!mxcs) {
 		puts("mxc_spi: SPI Slave not allocated !\n");
 		return NULL;

Agree, the structure must be zeroed.

Best regards,
Stefano Babic

Signature · 5 lines
=====================================================================
DENX Software Engineering GmbH,     MD: Wolfgang Denk & Detlev Zundel
HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany
Phone: +49-8142-66989-0 Fax: +49-8142-66989-80  Email: office at denx.de
=====================================================================
#5 lore raw

PATCH 1/2 spi: fix mxc_spi_slave structure allocation to clear memory

In reply to Matt Sealey
Quoted 21 lines · Matt Sealey

Use calloc() instead of malloc() to allocate the mxc_spi_slave structure. Clearing the memory is necessary since most of the time this gets done super early in boot, but on warm reboots, and when SPI probing is done long after the init stages it could actually pick up previously used memory, and things like the chipselect polarity and other data end up being filled with trash data if not explicitly set by the board files.

This solves a semi-random, almost unreproducable error whereby SPI devices act very, very strangly on boot. Tested on Efika MX over several years..

---
 drivers/spi/mxc_spi.c |    2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)
drivers/spi/mxc_spi.c +0 -0
index 2e15318..d1dab18 100644

drivers/spi/mxc_spi.c struct spi_slave *spi_setup_slave(unsigned int bus, unsigned int cs, · line 414

Quoted 8 lines
drivers/spi/mxc_spi.c +1 -1
@@ -408,7 +408,7 @@ struct spi_slave *spi_setup_slave(unsigned int bus, unsigned int cs,
 	if (bus >= ARRAY_SIZE(spi_bases))
 		return NULL;
 
-	mxcs = malloc(sizeof(struct mxc_spi_slave));
+	mxcs = calloc(sizeof(struct mxc_spi_slave), 1);
 	if (!mxcs) {
 		puts("mxc_spi: SPI Slave not allocated !\n");
 		return NULL;

Applied to u-boot-imx, thanks.

Best regards,
Stefano Babic

Signature · 5 lines
=====================================================================
DENX Software Engineering GmbH,     MD: Wolfgang Denk & Detlev Zundel
HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany
Phone: +49-8142-66989-53 Fax: +49-8142-66989-80 Email: sbabic at denx.de
=====================================================================