Thread (13 messages) 13 messages, 4 authors, 2012-08-02

Re: Re: Re: Re: nor flash board init code

From: Franck Jullien <hidden>
Date: 2012-07-30 14:28:08

2012/7/30  [off-list ref]:
i always get the response:

m25p@m25p0: unrecognized JEDEC id ffffff

SPI Flah:MX25L8005MC-15G
CPU: imx53

Here is my board init code:

//SPI + FLASH structs
const struct flash_platform_data tx53_flash = {
    .type       = "mx25l8005",
    .name       = "spi_flash",
};


//MX25L8005MC-15G
static const struct spi_board_info mx53_spi_board_info[] = {
        {
                .name = "m25p",
                .max_speed_hz = 30000000,
                .bus_num = 0,
                .chip_select = 0,
                .bits_per_word = 8,
                .mode = SPI_MODE_0,
                .platform_data = &tx53_flash,
        },
};

static struct spi_imx_master tx53_spi = {
                .num_chipselect = 1,
};
I'm not familiar with the IMX spi but in the tx51 or ccxmx51 board
file one can read:

static struct spi_imx_master tx51_spi_0_data = {
	.chipselect = spi_0_cs,
	.num_chipselect = ARRAY_SIZE(spi_0_cs),
};

#define CCXMX51_ECSPI1_CS0	IMX_GPIO_NR(4, 24)
#define CCXMX51_ECSPI1_CS1	IMX_GPIO_NR(4, 25)

static int ecspi_0_cs[] = { CCXMX51_ECSPI1_CS0, CCXMX51_ECSPI1_CS1, };

static struct spi_imx_master ecspi_0_data = {
	.chipselect	= ecspi_0_cs,
	.num_chipselect	= ARRAY_SIZE(ecspi_0_cs),
};

Don't you need to set .chipselect ?


//PIN MUX:
MX53_PAD_EIM_D17__ECSPI1_MISO, //SPI MISO - EEPROM SO
MX53_PAD_EIM_D18__ECSPI1_MOSI, //SPI MOSI - EEPROM SI
MX53_PAD_EIM_D16__ECSPI1_SCLK, //SPI SCLK - EEPROM SCK
MX53_PAD_EIM_EB2__ECSPI1_SS0,  //SPI SS1 - EEPROM CS


//device init code:
 spi_register_board_info(mx53_spi_board_info,
                    ARRAY_SIZE(mx53_spi_board_info));

imx53_add_spi0(&tx53_spi);


Any ideas, whats wrong?

christian


Von:        Franck Jullien [off-list ref]
An:        christian.buettner@rafi.de,
Kopie:        barebox@lists.infradead.org
Datum:        30.07.2012 10:33
Betreff:        Re: Re: Re: nor flash board init code
________________________________



2012/7/30  [off-list ref]:
quoted
Whooosch and it worked!

devinfo
devices:
...
`---- mem1
     `---- 0x00000000-0xfffffffe: /dev/mem
`---- i2c-imx2
`---- imx_spi0
     `---- m25p0
`---- fec_imx0
     `---- miidev0
...

barebox:/ devinfo m25p0
resources:
driver: none

no parameters available
barebox:/

But why is driver in devinfo = none?
It used to work. You need to find why it doesn't work anymore ;)
quoted
christian


Von:        Franck Jullien [off-list ref]
An:        christian.buettner@rafi.de,
Kopie:        barebox@lists.infradead.org
Datum:        30.07.2012 10:07
Betreff:        Re: Re: nor flash board init code
________________________________



Hi,

2012/7/30 [off-list ref]
quoted
Thanks for the code!

Here is my approach:

const struct flash_platform_data tx53_flash = {
    .type       = "mx25l8005",
    .name       = "spi_flash",
};


//MX25L8005MC-15G
static const struct spi_board_info mx53_spi_board_info[] = {
        {
                .name = "mx25l8005",

Here sould be the driver name: .name = "m25p",
quoted
                .max_speed_hz = 70000000,
                .bus_num = 0,
                .chip_select = 0,
                .bits_per_word = 8,
                .mode = SPI_MODE_0,
                .platform_data = &tx53_flash,
        },
};

static struct spi_imx_master tx53_spi = {
                .num_chipselect = 1,
};


init_devices {

...
    spi_register_board_info(mx53_spi_board_info,
                    ARRAY_SIZE(mx53_spi_board_info));

    add_generic_device("m25p",-1,"m25p",MX53_ECSPI1_BASE_ADDR,64 *
1024,IORESOURCE_MEM,&mx53_spi_board_info);
You have to add the SPI master device here. The m25p device will be
probed automagically (AFAIR).

quoted
...
}


When the m25p80.c driver probes i get no spi instance:

static int m25p_probe(struct device_d *dev) {
        struct spi_device *spi = (struct spi_device *)dev->type_data;
        const struct spi_device_id        *id = NULL;
...
}

struct spi_device *spi is always null

Whats wrong here?

christian



Von:        Franck Jullien [off-list ref]
An:        christian.buettner@rafi.de,
Kopie:        barebox@lists.infradead.org
Datum:        27.07.2012 13:33
Betreff:        Re: nor flash board init code
________________________________



2012/7/25 [off-list ref]
quoted
hi all,
is there any example board init code to load the mx25l8005 spi
nor-flash
through the imx53 (TX53 from KARO)?
I want to use the m25p80 driver to read and write.

christian
_______________________________________________
barebox mailing list
barebox@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/barebox
Hi Christian,

This is what I use with the Altera SPI controller + an SPI flash device:



http://www.elec4fun.fr/index.php?option=com_content&view=article&id=10&Itemid=153

static struct spi_altera_master altera_spi_0_data = {
     .num_chipselect = 1,
     .spi_mode = 0,      /* SPI mode of the EPCS flash controller */
     .databits = 8,      /* Data length of the EPCS flash controller */
     .speed = 20000000,  /* EPCS flash controller speed */
};


static struct flash_platform_data epcs_flash = {
     .name = "epcs",    /* Cdev name, optional */
     .type = "m25p40",  /* Device type, required for non JEDEC chips */
};

static struct spi_board_info generic_spi_board_info[] = {
     {
           .name = "m25p",
           .max_speed_hz = 20000000,
           .bus_num = 0,
           .chip_select = 0,
           .bits_per_word = 8,
           .mode = SPI_MODE_0,
           .platform_data = &epcs_flash,
     }
};

static int myboard_devices_init(void) {

...

spi_register_board_info(myboard_spi_board_info,
ARRAY_SIZE(myboard_spi_board_info));

add_generic_device("altera_spi", -1, NULL, NIOS_SOPC_EPCS_BASE, 0x18,
                   IORESOURCE_MEM, &altera_spi_0_data);

...

Franck.
Franck.
Do you have a scope ? This is the easiest way to debug SPI ;)

_______________________________________________
barebox mailing list
barebox@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/barebox
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help