On 25 Paź, 00:39, Ulf Samuelsson <
ulf_samuels...@invalid.telia.com>
wrote:
> Linux does not set up the Matrix.
> This is (should be) done in at91bootstrap.
> The Atmel at91bootstrap hardly touches the matrix.
> The argument beeing, that only the customer knows
> what the priorities should be.
> I checked in at91bootstrap v2.13 into
openembedded.www.openembedded.org, where I set up the matrix
> for the SAM9263.
> It was done as an example, but I have not verified
> the throughput details.
>
> BR
> Ulf Samuelsson
I have put the matrix setup code into the board initialization code:
(board-mmnet1000c, probably derived from board-sam9260ek.c)
static void __init ek_board_init(void)
{
/* Serial */
at91_add_device_serial();
/* USB Host */
at91_add_device_usbh(&ek_usbh_data);
/* USB Device */
at91_add_device_udc(&ek_udc_data);
/* SPI */
at91_add_device_spi(ek_spi_devices, ARRAY_SIZE(ek_spi_devices));
/* I2S */
at91_add_device_ssc(AT91SAM9260_ID_SSC, ATMEL_SSC_RX);
/* NAND */
at91_add_device_nand(&ek_nand_data);
/* Ethernet */
at91_add_device_eth(&ek_macb_data);
/* MMC */
at91_add_device_mmc(0, &ek_mmc_data);
/* I2C */
at91_add_device_i2c(NULL, 0);
/* LEDs */
at91_gpio_leds(ek_leds, ARRAY_SIZE(ek_leds));
/* Push Buttons */
ek_add_device_buttons();
/* Modify the Bus Matrix settings */
printk("<1>AT91_MATRIX_SCFG0 was %x
\n",at91_sys_read(AT91_MATRIX_SCFG0));
at91_sys_write(AT91_MATRIX_SCFG0, 0x010a0010);
printk("<1>AT91_MATRIX_SCFG1 was %x
\n",at91_sys_read(AT91_MATRIX_SCFG1));
at91_sys_write(AT91_MATRIX_SCFG1, 0x010a0010);
printk("<1>AT91_MATRIX_PRAS0 was %x
\n",at91_sys_read(AT91_MATRIX_PRAS0));
at91_sys_write(AT91_MATRIX_PRAS0, 0x00200300);
printk("<1>AT91_MATRIX_PRAS1 was %x
\n",at91_sys_read(AT91_MATRIX_PRAS1));
at91_sys_write(AT91_MATRIX_PRAS1, 0x00200300);
}
I have also checked, that my ioremapped buffers do not require DMA
synchronization.
Anyway the problem has not been succesfully solved, as the overhead
introduced
by the whole tty related layer of atmel_serial driver is simply to
big.
When I receive data up to ca. 170kB/s everything works fine. When the
data stream
reaches the desired 340kB/s, some data are lost probably not between
the USART and SDC
but due to software buffer overruns.
Probably I should get rid of the whole, very good, but from my point
of view too
sophisticated atmel_serial.c driver, and instead I should write a
minimalistic
DMA based driver passing data directly from DMA buffer to mmapped
memory in the
user space...
Thanks for help in resolving of bus matrix related problems.
--
BR Wojtek