I've made this change in the spi-bcm63xx module

@@ -103,7 +103,7 @@
 {
        u8 bits_per_word;

-       bits_per_word = (t) ? t->bits_per_word : spi->bits_per_word;
+       bits_per_word = (t && t->bits_per_word) ? t->bits_per_word :
spi->bits_per_word;
        if (bits_per_word != 8) {
                dev_err(&spi->dev, "%s, unsupported bits_per_word=%d\n",
                        __func__, bits_per_word);

Some dmesg:

root@OpenWrt:/# dmesg |grep 'spi\|mmc'
[    0.500000] bcm63xx-spi bcm63xx-spi: registered master spi0
[    0.500000] spi spi0.0: bcm63xx_spi_setup, mode 0, 8 bits/w, 0 nsec/bit
[    0.500000] spi spi0.0: setup mode 0, 8 bits/w, 20000000 Hz max --> 0
[    0.504000] bcm63xx-spi bcm63xx-spi: registered child spi0.0
[    0.504000] bcm63xx-spi bcm63xx-spi: at 0xfffe0c00 (irq 9, FIFOs
size 63) v0.1.2
[    0.580000] mmc_spi spi0.0: bcm63xx_spi_setup, mode 0, 8 bits/w, 0 nsec/bit
[    0.580000] mmc_spi spi0.0: setup mode 0, 8 bits/w, 20000000 Hz max --> 0
[    0.580000] mmc_spi spi0.0: ASSUMING 3.2-3.4 V slot power
[    0.588000] mmc_spi spi0.0: SD/MMC host mmc0, no DMA, no WP, no poweroff
[    0.628000] mmc_spi spi0.0: Setting clock register to 01 (hz 0)
[    0.628000] mmc_spi spi0.0: txrx: tx 8093de00, rx 8093ef00, len 29
[    0.656000] mmc_spi spi0.0: Setting clock register to 01 (hz 0)
[    0.656000] mmc_spi spi0.0: txrx: tx 8093de00, rx 8093ef00, len 10
[    0.660000] mmc_spi spi0.0: setup: unsupported mode bits 4
[    0.664000] mmc_spi spi0.0: can't change chip-select polarity
[    0.672000] mmc_spi spi0.0: bcm63xx_spi_setup, mode 0, 8 bits/w, 0 nsec/bit
[    0.672000] mmc_spi spi0.0: setup mode 0, 8 bits/w, 400000 Hz max --> 0
[    0.696000] mmc_spi spi0.0: Setting clock register to 01 (hz 0)
[    0.696000] mmc_spi spi0.0: txrx: tx 8093ef00, rx 8093ef00, len 18
[    0.940000] mmc_spi spi0.0: bcm63xx_spi_setup, mode 0, 8 bits/w, 0 nsec/bit
[    0.940000] mmc_spi spi0.0: setup mode 0, 8 bits/w, 400000 Hz max --> 0
[    0.940000] mmc_spi spi0.0: Setting clock register to 01 (hz 0)
[    0.940000] mmc_spi spi0.0: txrx: tx 8093ef00, rx 8093ef00, len 18
[    0.940000] mmc_spi spi0.0: bcm63xx_spi_setup, mode 0, 8 bits/w, 0 nsec/bit
[    0.940000] mmc_spi spi0.0: setup mode 0, 8 bits/w, 400000 Hz max --> 0
[    0.940000] mmc_spi spi0.0: Setting clock register to 01 (hz 0)
[    0.940000] mmc_spi spi0.0: txrx: tx 8093ef00, rx 8093ef00, len 17
[    0.944000] mmc_spi spi0.0: bcm63xx_spi_setup, mode 0, 8 bits/w, 0 nsec/bit
[    0.944000] mmc_spi spi0.0: setup mode 0, 8 bits/w, 400000 Hz max --> 0
[    0.944000] mmc_spi spi0.0: Setting clock register to 01 (hz 0)
[    0.944000] mmc_spi spi0.0: txrx: tx 8093ef00, rx 8093ef00, len 21
[    0.952000] mmc_spi spi0.0: bcm63xx_spi_setup, mode 0, 8 bits/w, 0 nsec/bit
[    0.952000] mmc_spi spi0.0: setup mode 0, 8 bits/w, 400000 Hz max --> 0
[    0.952000] mmc_spi spi0.0: Setting clock register to 01 (hz 0)
[    0.952000] mmc_spi spi0.0: txrx: tx 8093ef00, rx 8093ef00, len 21
[    0.992000] mmc_spi spi0.0: bcm63xx_spi_setup, mode 0, 8 bits/w, 0 nsec/bit
[    0.992000] mmc_spi spi0.0: setup mode 0, 8 bits/w, 400000 Hz max --> 0
[    0.992000] mmc_spi spi0.0: Setting clock register to 01 (hz 0)
[    0.992000] mmc_spi spi0.0: txrx: tx 8093ef00, rx 8093ef00, len 17
[    1.276000] mmc_spi spi0.0: bcm63xx_spi_setup, mode 0, 8 bits/w, 0 nsec/bit
[    1.276000] mmc_spi spi0.0: setup mode 0, 8 bits/w, 400000 Hz max --> 0
[    1.516000] mmc_spi spi0.0: Setting clock register to 01 (hz 0)
[    1.516000] mmc_spi spi0.0: txrx: tx 8093ef00, rx 8093ef00, len 17
[    1.548000] mmc_spi spi0.0: bcm63xx_spi_setup, mode 0, 8 bits/w, 0 nsec/bit
[    1.548000] mmc_spi spi0.0: setup mode 0, 8 bits/w, 400000 Hz max --> 0
[    1.552000] mmc_spi spi0.0: Setting clock register to 01 (hz 0)
[    1.552000] mmc_spi spi0.0: txrx: tx 8093ef00, rx 8093ef00, len 17
[    1.744000] mmc_spi spi0.0: bcm63xx_spi_setup, mode 0, 8 bits/w, 0 nsec/bit
[    1.744000] mmc_spi spi0.0: setup mode 0, 8 bits/w, 400000 Hz max --> 0
[    2.212000] mmc_spi spi0.0: Setting clock register to 01 (hz 0)
[    2.216000] mmc_spi spi0.0: txrx: tx 8093ef00, rx 8093ef00, len 21
[    2.228000] mmc_spi spi0.0: bcm63xx_spi_setup, mode 0, 8 bits/w, 0 nsec/bit
[    2.228000] mmc_spi spi0.0: setup mode 0, 8 bits/w, 400000 Hz max --> 0
[    2.228000] mmc_spi spi0.0: Setting clock register to 01 (hz 0)
[    2.228000] mmc_spi spi0.0: txrx: tx 8093ef00, rx 8093ef00, len 17
[    2.328000] mmc_spi spi0.0: bcm63xx_spi_setup, mode 0, 8 bits/w, 0 nsec/bit
[    2.328000] mmc_spi spi0.0: setup mode 0, 8 bits/w, 400000 Hz max --> 0
[    2.620000] mmc_spi spi0.0: Setting clock register to 01 (hz 0)
[    2.620000] mmc_spi spi0.0: txrx: tx 8093ef00, rx 8093ef00, len 21
[    2.620000] mmc_spi spi0.0: bcm63xx_spi_setup, mode 0, 8 bits/w, 0 nsec/bit
[    2.620000] mmc_spi spi0.0: setup mode 0, 8 bits/w, 400000 Hz max --> 0
[    2.620000] mmc_spi spi0.0: Setting clock register to 01 (hz 0)
[    2.620000] mmc_spi spi0.0: txrx: tx 8093ef00, rx 8093ef00, len 17
[    2.620000] mmc_spi spi0.0: bcm63xx_spi_setup, mode 0, 8 bits/w, 0 nsec/bit
[    2.620000] mmc_spi spi0.0: setup mode 0, 8 bits/w, 400000 Hz max --> 0
[    2.620000] mmc_spi spi0.0: Setting clock register to 01 (hz 0)
[    2.620000] mmc_spi spi0.0: txrx: tx 8093ef00, rx 8093ef00, len 17
[    2.620000] mmc_spi spi0.0: bcm63xx_spi_setup, mode 0, 8 bits/w, 0 nsec/bit
[    2.620000] mmc_spi spi0.0: setup mode 0, 8 bits/w, 400000 Hz max --> 0
[    2.636000] mmc_spi spi0.0: Setting clock register to 01 (hz 0)
[    2.636000] mmc_spi spi0.0: txrx: tx 8093ef00, rx 8093ef00, len 17
[    2.636000] mmc_spi spi0.0: bcm63xx_spi_setup, mode 0, 8 bits/w, 0 nsec/bit
[    2.636000] mmc_spi spi0.0: setup mode 0, 8 bits/w, 400000 Hz max --> 0
[    2.636000] mmc_spi spi0.0: Setting clock register to 01 (hz 0)
[    2.636000] mmc_spi spi0.0: txrx: tx 8093ef00, rx 8093ef00, len 17
[    2.636000] mmc_spi spi0.0: bcm63xx_spi_setup, mode 0, 8 bits/w, 0 nsec/bit
[    2.636000] mmc_spi spi0.0: setup mode 0, 8 bits/w, 400000 Hz max --> 0
[    2.652000] mmc_spi spi0.0: Setting clock register to 01 (hz 0)
[    2.652000] mmc_spi spi0.0: txrx: tx 8093ef00, rx 8093ef00, len 17
[    2.652000] mmc_spi spi0.0: bcm63xx_spi_setup, mode 0, 8 bits/w, 0 nsec/bit
[    2.652000] mmc_spi spi0.0: setup mode 0, 8 bits/w, 400000 Hz max --> 0
[    2.652000] mmc_spi spi0.0: Setting clock register to 01 (hz 0)
[    2.652000] mmc_spi spi0.0: txrx: tx 8093ef00, rx 8093ef00, len 17
[    2.652000] mmc_spi spi0.0: bcm63xx_spi_setup, mode 0, 8 bits/w, 0 nsec/bit
[    2.652000] mmc_spi spi0.0: setup mode 0, 8 bits/w, 400000 Hz max --> 0
[    2.668000] mmc_spi spi0.0: Setting clock register to 01 (hz 0)
[    2.668000] mmc_spi spi0.0: txrx: tx 8093ef00, rx 8093ef00, len 17
[    2.668000] mmc_spi spi0.0: bcm63xx_spi_setup, mode 0, 8 bits/w, 0 nsec/bit
[    2.668000] mmc_spi spi0.0: setup mode 0, 8 bits/w, 400000 Hz max --> 0
[    2.668000] mmc_spi spi0.0: Setting clock register to 01 (hz 0)
[    2.668000] mmc_spi spi0.0: txrx: tx 8093ef00, rx 8093ef00, len 17
[    2.668000] mmc_spi spi0.0: bcm63xx_spi_setup, mode 0, 8 bits/w, 0 nsec/bit
[    2.668000] mmc_spi spi0.0: setup mode 0, 8 bits/w, 400000 Hz max --> 0
[    2.668000] mmc_spi spi0.0: Setting clock register to 01 (hz 0)
[    2.668000] mmc_spi spi0.0: txrx: tx 8093ef00, rx 8093ef00, len 9
[    2.668000] mmc_spi spi0.0: Setting clock register to 01 (hz 0)
[    2.668000] mmc_spi spi0.0: txrx: tx 8093de00, rx 8093ef00, len 1
[    2.668000] mmc_spi spi0.0: Setting clock register to 01 (hz 0)
[    2.668000] mmc_spi spi0.0: txrx: tx 8093de00, rx 8093ef00, len 1
[    2.668000] mmc_spi spi0.0: bcm63xx_spi_setup, mode 0, 8 bits/w, 0 nsec/bit
[    2.668000] mmc_spi spi0.0: setup mode 0, 8 bits/w, 400000 Hz max --> 0
[    2.672000] mmc0: error -14 whilst initialising SD card
[    2.676000] mmc_spi spi0.0: Setting clock register to 01 (hz 0)
[    2.676000] mmc_spi spi0.0: txrx: tx 8093ef00, rx 8093ef00, len 17
[    2.684000] mmc_spi spi0.0: bcm63xx_spi_setup, mode 0, 8 bits/w, 0 nsec/bit
[    2.684000] mmc_spi spi0.0: setup mode 0, 8 bits/w, 400000 Hz max --> 0
[    2.684000] mmc_spi spi0.0: Setting clock register to 01 (hz 0)
[    2.684000] mmc_spi spi0.0: txrx: tx 8093ef00, rx 8093ef00, len 21
[    2.684000] mmc_spi spi0.0: bcm63xx_spi_setup, mode 0, 8 bits/w, 0 nsec/bit
[    2.684000] mmc_spi spi0.0: setup mode 0, 8 bits/w, 400000 Hz max --> 0
[    2.684000] mmc_spi spi0.0: Setting clock register to 01 (hz 0)
[    2.684000] mmc_spi spi0.0: txrx: tx 8093ef00, rx 8093ef00, len 17
[    2.684000] mmc_spi spi0.0: bcm63xx_spi_setup, mode 0, 8 bits/w, 0 nsec/bit
[    2.684000] mmc_spi spi0.0: setup mode 0, 8 bits/w, 400000 Hz max --> 0
[    2.688000] mmc_spi spi0.0: Setting clock register to 01 (hz 0)
[    2.688000] mmc_spi spi0.0: txrx: tx 8093ef00, rx 8093ef00, len 17
[    2.692000] mmc_spi spi0.0: bcm63xx_spi_setup, mode 0, 8 bits/w, 0 nsec/bit
[    2.692000] mmc_spi spi0.0: setup mode 0, 8 bits/w, 400000 Hz max --> 0
[    2.708000] mmc_spi spi0.0: Setting clock register to 01 (hz 0)
[    2.708000] mmc_spi spi0.0: txrx: tx 8093ef00, rx 8093ef00, len 17
[    2.708000] mmc_spi spi0.0: bcm63xx_spi_setup, mode 0, 8 bits/w, 0 nsec/bit
[    2.708000] mmc_spi spi0.0: setup mode 0, 8 bits/w, 400000 Hz max --> 0
[    2.724000] mmc_spi spi0.0: Setting clock register to 01 (hz 0)
[    2.724000] mmc_spi spi0.0: txrx: tx 8093ef00, rx 8093ef00, len 17
[    2.724000] mmc_spi spi0.0: bcm63xx_spi_setup, mode 0, 8 bits/w, 0 nsec/bit
[    2.724000] mmc_spi spi0.0: setup mode 0, 8 bits/w, 400000 Hz max --> 0
[    2.724000] mmc_spi spi0.0: Setting clock register to 01 (hz 0)
[    2.724000] mmc_spi spi0.0: txrx: tx 8093ef00, rx 8093ef00, len 17
[    2.724000] mmc_spi spi0.0: bcm63xx_spi_setup, mode 0, 8 bits/w, 0 nsec/bit
[    2.724000] mmc_spi spi0.0: setup mode 0, 8 bits/w, 400000 Hz max --> 0
[    2.724000] mmc_spi spi0.0: Setting clock register to 01 (hz 0)
[    2.724000] mmc_spi spi0.0: txrx: tx 8093ef00, rx 8093ef00, len 9
[    2.724000] mmc_spi spi0.0: Setting clock register to 01 (hz 0)
[    2.724000] mmc_spi spi0.0: txrx: tx 8093de00, rx 8093ef00, len 1
[    2.724000] mmc_spi spi0.0: Setting clock register to 01 (hz 0)
[    2.724000] mmc_spi spi0.0: txrx: tx 8093de00, rx 8093ef00, len 1
[    2.724000] mmc_spi spi0.0: bcm63xx_spi_setup, mode 0, 8 bits/w, 0 nsec/bit
[    2.728000] mmc_spi spi0.0: setup mode 0, 8 bits/w, 400000 Hz max --> 0
[    2.728000] mmc0: error -14 whilst initialising MMC card

At least now it doesn't complain about "mmc_spi spi0.0:
bcm63xx_spi_check_transfer, unsupported"

I still don't know if something missing in the code or just a problem
of hardware (should I add pullup resistors?).

Regards


2012/9/27 Florian Fainelli <flor...@openwrt.org>:
> On Wednesday 26 September 2012 22:35:00 dani wrote:
>> Ok, I started again with a clean kernel. These are exactly the changes I've
> made
>>
>>
>> --- board_livebox 1.c 2012-09-26 21:25:19.000000000 +0200
>> +++ board_livebox.c   2012-09-26 22:13:01.095795124 +0200
>> @@ -17,6 +17,7 @@
>>  #include <linux/gpio_keys.h>
>>  #include <linux/input.h>
>>  #include <linux/spi/spi.h>
>> + #include <linux/spi/mmc_spi.h>
>>  #include <asm/addrspace.h>
>>  #include <bcm63xx_board.h>
>>  #include <bcm63xx_cpu.h>
>> @@ -43,6 +44,19 @@
>>  /*
>>   * known 6348 boards
>>   */
>> +static struct mmc_spi_platform_data blue5g_mmc_spi_pdata = {
>> +     .detect_delay = 1000,
>> +};
>> +
>> +static struct spi_board_info blue5g_spi_devices[] = {
>> +     {
>> +     .modalias = "mmc_spi",
>> +     .max_speed_hz = 20000000,
>> +     .bus_num = 0,
>> +     .platform_data = &blue5g_mmc_spi_pdata
>> +     }
>> +};
>> +
>>  #ifdef CONFIG_BCM63XX_CPU_6348
>>  static struct board_info __initdata board_livebox_blue5g = {
>>       .name                           = "Livebox-blue-5g",
>> @@ -118,6 +132,8 @@
>>               },
>>
>>       },
>> +     .spis = blue5g_spi_devices,
>> +     .num_spis = ARRAY_SIZE(blue5g_spi_devices),
>>  };
>>  #endif
>>
>>
>> I've enabled also
>> <*> Broadcom BCM63xx SPI controller
>> in the kernel since the BCM63XX HS SPI controller driver seem to be
>> for SoC > bcm6348
>> And
>> <*> MMC block device driver
>> (8) Number of minors per block device
>> [*] Use bounce buffer for simple hosts
>> <*> MMC/SD/SDIO over SPI
>> Also some related debug stuff.
>>
>> This is again the dmesg (more verbose):
>>
>> root@OpenWrt:/# dmesg |grep 'spi\|mmc'
>> [ 0.500000] bcm63xx-spi bcm63xx-spi: registered master spi0
>> [ 0.500000] spi spi0.0: bcm63xx_spi_setup, mode 0, 8 bits/w, 0 nsec/bit
>> [ 0.500000] spi spi0.0: setup mode 0, 8 bits/w, 20000000 Hz max --> 0
>> [ 0.504000] bcm63xx-spi bcm63xx-spi: registered child spi0.0
>> [ 0.504000] bcm63xx-spi bcm63xx-spi: at 0xfffe0c00 (irq 9, FIFOs size 63)
> v0.1.2
>> [ 0.584000] mmc_spi spi0.0: bcm63xx_spi_setup, mode 0, 8 bits/w, 0 nsec/bit
>> [ 0.584000] mmc_spi spi0.0: setup mode 0, 8 bits/w, 20000000 Hz max --> 0
>> [ 0.584000] mmc_spi spi0.0: ASSUMING 3.2-3.4 V slot power
>> [ 0.592000] mmc0: clock 0Hz busmode 0 powermode 0 cs 0 Vdd 0 width 0 timing
> 0
>> [ 0.592000] mmc_spi spi0.0: SD/MMC host mmc0, no DMA, no WP, no poweroff
>> [ 0.600000] mmc0: mmc_rescan_try_freq: trying to init card at 400000 Hz
>> [ 0.608000] mmc0: clock 0Hz busmode 2 powermode 1 cs 1 Vdd 21 width 0 timing
> 0
>> [ 0.608000] mmc_spi spi0.0: mmc_spi: power up (21)
>> [ 0.636000] mmc0: clock 400000Hz busmode 2 powermode 2 cs 1 Vdd 21
>> width 0 timing 0
>> [ 0.640000] mmc_spi spi0.0: mmc_spi: power on (21)
>> [ 0.640000] mmc_spi spi0.0: bcm63xx_spi_check_transfer, unsupported
>> bits_per_word=0
>> [ 0.652000] mmc_spi spi0.0: bcm63xx_spi_check_transfer, unsupported
>> bits_per_word=0
>> [ 0.660000] mmc_spi spi0.0: setup: unsupported mode bits 4
>> [ 0.664000] mmc_spi spi0.0: can't change chip-select polarity
>> [ 0.672000] mmc_spi spi0.0: bcm63xx_spi_setup, mode 0, 8 bits/w, 0 nsec/bit
>> [ 0.672000] mmc_spi spi0.0: setup mode 0, 8 bits/w, 400000 Hz max --> 0
>> [ 0.672000] mmc_spi spi0.0: mmc_spi: clock to 400000 Hz, 0
>> [ 0.696000] mmc0: starting CMD52 arg 00000c00 flags 00000195
>> [ 0.696000] mmc_spi spi0.0: mmc_spi: CMD52, resp R2/R5
>> [ 0.696000] mmc_spi spi0.0: bcm63xx_spi_check_transfer, unsupported
>> bits_per_word=0
>> [ 0.724000] mmc_spi spi0.0: ... write returned -22
>> [ 0.724000] mmc0: req done (CMD52): -22: 00000000 00000000 00000000 00000000
>> [ 0.724000] mmc0: starting CMD52 arg 80000c08 flags 00000195
>> [ 0.724000] mmc_spi spi0.0: mmc_spi: CMD52, resp R2/R5
>> [ 0.724000] mmc_spi spi0.0: bcm63xx_spi_check_transfer, unsupported
>> bits_per_word=0
>> [ 0.740000] mmc_spi spi0.0: ... write returned -22
>> [ 0.740000] mmc0: req done (CMD52): -22: 00000000 00000000 00000000 00000000
>> [ 0.740000] mmc0: starting CMD0 arg 00000000 flags 000000c0
>> [ 0.740000] mmc_spi spi0.0: mmc_spi: CMD0, resp R1
>> [ 0.744000] mmc_spi spi0.0: bcm63xx_spi_check_transfer, unsupported
>> bits_per_word=0
>> [ 0.752000] mmc_spi spi0.0: ... write returned -22
>> [ 0.752000] mmc0: req done (CMD0): -22: 00000000 00000000 00000000 00000000
>> [ 0.752000] mmc0: starting CMD8 arg 000001aa flags 000002f5
>> [ 0.752000] mmc_spi spi0.0: mmc_spi: CMD8, resp R3/R4/R7
>> [ 0.992000] mmc_spi spi0.0: bcm63xx_spi_check_transfer, unsupported
>> bits_per_word=0
>> [ 1.000000] mmc_spi spi0.0: ... write returned -22
>> [ 1.000000] mmc0: req done (CMD8): -22: 00000000 00000000 00000000 00000000
>> [ 1.000000] mmc0: starting CMD5 arg 00000000 flags 000002e1
>> [ 1.000000] mmc_spi spi0.0: mmc_spi: CMD5, resp R3/R4/R7
>> [ 1.004000] mmc_spi spi0.0: bcm63xx_spi_check_transfer, unsupported
>> bits_per_word=0
>> [ 1.012000] mmc_spi spi0.0: ... write returned -22
>> [ 1.012000] mmc0: req failed (CMD5): -22, retrying...
>> [ 1.012000] mmc_spi spi0.0: mmc_spi: CMD5, resp R3/R4/R7
>> [ 1.012000] mmc_spi spi0.0: bcm63xx_spi_check_transfer, unsupported
>> bits_per_word=0
>> [ 1.020000] mmc_spi spi0.0: ... write returned -22
>> [ 1.020000] mmc0: req failed (CMD5): -22, retrying...
>> [ 1.020000] mmc_spi spi0.0: mmc_spi: CMD5, resp R3/R4/R7
>> [ 1.020000] mmc_spi spi0.0: bcm63xx_spi_check_transfer, unsupported
>> bits_per_word=0
>> [ 1.028000] mmc_spi spi0.0: ... write returned -22
>> [ 1.028000] mmc0: req failed (CMD5): -22, retrying...
>> [ 1.028000] mmc_spi spi0.0: mmc_spi: CMD5, resp R3/R4/R7
>> [ 1.028000] mmc_spi spi0.0: bcm63xx_spi_check_transfer, unsupported
>> bits_per_word=0
>> [ 1.036000] mmc_spi spi0.0: ... write returned -22
>> [ 1.036000] mmc0: req done (CMD5): -22: 00000000 00000000 00000000 00000000
>> [ 1.036000] mmc0: starting CMD55 arg 00000000 flags 000000f5
>> [ 1.036000] mmc_spi spi0.0: mmc_spi: CMD55, resp R1
>> [ 1.036000] mmc_spi spi0.0: bcm63xx_spi_check_transfer, unsupported
>> bits_per_word=0
>> [ 1.044000] mmc_spi spi0.0: ... write returned -22
>> [ 1.044000] mmc0: req done (CMD55): -22: 00000000 00000000 00000000 00000000
>> [ 1.044000] mmc0: starting CMD55 arg 00000000 flags 000000f5
>> [ 1.044000] mmc_spi spi0.0: mmc_spi: CMD55, resp R1
>> [ 1.044000] mmc_spi spi0.0: bcm63xx_spi_check_transfer, unsupported
>> bits_per_word=0
>> [ 1.052000] mmc_spi spi0.0: ... write returned -22
>> [ 1.052000] mmc0: req done (CMD55): -22: 00000000 00000000 00000000 00000000
>> [ 1.052000] mmc0: starting CMD55 arg 00000000 flags 000000f5
>> [ 1.052000] mmc_spi spi0.0: mmc_spi: CMD55, resp R1
>> [ 1.052000] mmc_spi spi0.0: bcm63xx_spi_check_transfer, unsupported
>> bits_per_word=0
>> [ 1.060000] mmc_spi spi0.0: ... write returned -22
>> [ 1.060000] mmc0: req done (CMD55): -22: 00000000 00000000 00000000 00000000
>> [ 1.060000] mmc0: starting CMD55 arg 00000000 flags 000000f5
>> [ 1.060000] mmc_spi spi0.0: mmc_spi: CMD55, resp R1
>> [ 1.060000] mmc_spi spi0.0: bcm63xx_spi_check_transfer, unsupported
>> bits_per_word=0
>> [ 1.068000] mmc_spi spi0.0: ... write returned -22
>> [ 1.068000] mmc0: req done (CMD55): -22: 00000000 00000000 00000000 00000000
>> [ 1.068000] mmc0: starting CMD1 arg 00000000 flags 000000e1
>> [ 1.068000] mmc_spi spi0.0: mmc_spi: CMD1, resp R1
>> [ 1.068000] mmc_spi spi0.0: bcm63xx_spi_check_transfer, unsupported
>> bits_per_word=0
>> [ 1.080000] mmc_spi spi0.0: ... write returned -22
>> [ 1.080000] mmc0: req done (CMD1): -22: 00000000 00000000 00000000 00000000
>> [ 1.080000] mmc0: clock 0Hz busmode 2 powermode 0 cs 1 Vdd 0 width 0 timing
> 0
>> [ 1.080000] mmc_spi spi0.0: mmc_spi: power off (0)
>>
>>
>> Did anybody ever used the bcm6348 spi interface in these boards?. I
>> think nobody really tested it.
>
> It is used by a couple of people that I know about, and they actually helped
> me a lot debugging the driver on BCM6348.
>
>>
>> I'm afraid the SPI controler Openwrt code is broken for bcm6348.
>
> It is not broken, now please dig a little further to understand how you can
> get into bcm63xx_spi_check_transfer() with either the transfer->bits_per_word
> of the spi_device->bits_per_word set to 0.
>
>>
>>
>>
>>
>>
>>
>> 2012/9/26 Florian Fainelli <flor...@openwrt.org>
>> >
>> > Hello,
>> >
>> > On Wednesday 26 September 2012 14:41:51 dani wrote:
>> > > Hi, I'm trying to make a micro sd card work connected to a bcm6348 board
>> > > (livebox 1) SPI pins. I guessed the platform file of my device should be
>> > > modified in order to make the kernel comunicate with the mmc_spi and
>> > > recognice the microsd card.
>> > >
>> > > I added this code in my platform data file (board_livebox.c):
>> > >
>> >
> ---------------------------------------------------------------------------------------------------------
>> > > static struct mmc_spi_platform_data blue5g_mmc_spi_pdata = {
>> > > .detect_delay = 1000,
>> > > };
>> > >
>> > > static struct bcm63xx_spi_pdata mmc_spi_chip_info = {
>> > > .msg_ctl_width = 8,
>> > > .msg_type_shift = 6,
>> > > .num_chipselect = 1,
>> > > };
>> > >
>> > > static struct spi_board_info blue5g_spi_devices[] = {
>> > > {
>> > > .modalias = "mmc_spi",
>> > > .max_speed_hz = 20000000,
>> > > .bus_num = 0,
>> > > .controller_data = &mmc_spi_chip_info,
>> >
>> > I do not think this belongs here. dev-spi.c already takes care of properly
>> > registering the SPI controller with the appropriate msg_ctl_width and
>> > msg_type_shift.
>> >
>> > > .platform_data = &blue5g_mmc_spi_pdata
>> > > }
>> > > };
>> > >
>> > > etc.
>> > >
>> >
> ---------------------------------------------------------------------------------------------------------
>> > >
>> > > I get this kernel messages when booting OpenWrt:
>> > >
>> > > root@OpenWrt:/# dmesg |grep spi
>> > > [ 0.500000] bcm63xx-spi bcm63xx-spi: registered master spi0
>> > > [ 0.500000] spi spi0.0: bcm63xx_spi_setup, mode 0, 8 bits/w, 0 nsec/bit
>> > > [ 0.500000] spi spi0.0: setup mode 0, 8 bits/w, 20000000 Hz max --> 0
>> > > [ 0.504000] bcm63xx-spi bcm63xx-spi: registered child spi0.0
>> > > [ 0.504000] bcm63xx-spi bcm63xx-spi: at 0xfffe0c00 (irq 9, FIFOs size 63)
>> > > v0.1.2
>> > > [ 0.580000] mmc_spi spi0.0: bcm63xx_spi_setup, mode 0, 8 bits/w, 0
> nsec/bit
>> > > [ 0.580000] mmc_spi spi0.0: setup mode 0, 8 bits/w, 20000000 Hz max -->
> 0
>> > > [ 0.580000] mmc_spi spi0.0: ASSUMING 3.2-3.4 V slot power
>> > > [ 0.588000] mmc_spi spi0.0: SD/MMC host mmc0, no DMA, no WP, no poweroff
>> > > [ 0.628000] mmc_spi spi0.0: bcm63xx_spi_check_transfer, unsupported
>> > > bits_per_word=0
>> > > [ 0.664000] mmc_spi spi0.0: bcm63xx_spi_check_transfer, unsupported
>> > > bits_per_word=0
>> > > [ 0.672000] mmc_spi spi0.0: setup: unsupported mode bits 4
>> > > [ 0.680000] mmc_spi spi0.0: can't change chip-select polarity
>> > > [ 0.684000] mmc_spi spi0.0: bcm63xx_spi_setup, mode 0, 8 bits/w, 0
> nsec/bit
>> > > [ 0.684000] mmc_spi spi0.0: setup mode 0, 8 bits/w, 400000 Hz max --> 0
>> > > [ 0.704000] mmc_spi spi0.0: bcm63xx_spi_check_transfer, unsupported
>> > > bits_per_word=0
>> >
>> > This does not look good, since the mmc_spi driver explicitely sets
>> > bits_per_word to 8, but for some reason the spi_transfer does not inherit
> from
>> > this, and we end up refusing the transfer.
>> >
>> > > [ 0.724000] mmc_spi spi0.0: bcm63xx_spi_check_transfer, unsupported
>> > > bits_per_word=0
>> > > [ 0.972000] mmc_spi spi0.0: bcm63xx_spi_check_transfer, unsupported
>> > > bits_per_word=0
>> > > [ 0.980000] mmc_spi spi0.0: bcm63xx_spi_check_transfer, unsupported
>> > > bits_per_word=0
>> > > [ 0.988000] mmc_spi spi0.0: bcm63xx_spi_check_transfer, unsupported
>> > > bits_per_word=0
>> > > [ 0.996000] mmc_spi spi0.0: bcm63xx_spi_check_transfer, unsupported
>> > > bits_per_word=0
>> > > [ 1.008000] mmc_spi spi0.0: bcm63xx_spi_check_transfer, unsupported
>> > > bits_per_word=0
>> > > [ 1.016000] mmc_spi spi0.0: bcm63xx_spi_check_transfer, unsupported
>> > > bits_per_word=0
>> > > [ 1.024000] mmc_spi spi0.0: bcm63xx_spi_check_transfer, unsupported
>> > > bits_per_word=0
>> > > [ 1.032000] mmc_spi spi0.0: bcm63xx_spi_check_transfer, unsupported
>> > > bits_per_word=0
>> > > [ 1.040000] mmc_spi spi0.0: bcm63xx_spi_check_transfer, unsupported
>> > > bits_per_word=0
>> > > [ 1.048000] mmc_spi spi0.0: bcm63xx_spi_check_transfer, unsupported
>> > > bits_per_word=0
>> > > [ 1.056000] mmc_spi spi0.0: bcm63xx_spi_check_transfer, unsupported
>> > > bits_per_word=0
>> > >
>> > > I tried different values/variables in the previous code, but with almost
>> > > the same result always. Isn't the mmc_spi supported by this particular
>> > > SoC?. Any bug? or did I miss something?
>> >
>> > I do not think you have posted every change you made
>> >
>> > >
>> > > I use a 8GB Kingston SDHC (Class 4) microSD which seems to be tested OK
> in
>> > > a RB433AH acordingly to:
>> > > http://wiki.mikrotik.com/wiki/Supported_Hardware#Memory_cards
>> > >
>> > > The pins are soldered directly fom the card to CS, MOSI, MISO, CLK spi
> pins
>> > > at the SoC. No gpio used for CS.
>> > >
>> > > Regards.
>> _______________________________________________
>> openwrt-devel mailing list
>> openwrt-devel@lists.openwrt.org
>> https://lists.openwrt.org/mailman/listinfo/openwrt-devel
> --
> Florian
_______________________________________________
openwrt-devel mailing list
openwrt-devel@lists.openwrt.org
https://lists.openwrt.org/mailman/listinfo/openwrt-devel

Reply via email to