Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: проблема с sdram
Форум разработчиков электроники ELECTRONIX.ru > Cистемный уровень проектирования > Операционные системы
andron86
Привет всем!

У меня такая проблема - имею 4 SDRAM чипа 2Mx16x4, проц pxa255, linux 2.6.17 ванила. Так вот SDRAM подключен, по девелопер, 32Bit Bus, 32MB на 1 cs и 32 Mb на другой. Так как на каждый CS 64MB идет то у меня получается дыра 32MB между рамами. Теперь, если boot строку прописываю mem=64M то при работе с файами больше 20MB происходит crash. Так тут я понимаю 2ой ram не доступен.

Пробовал в boot строке прописать mem=32M at 0xa0000000 mem=32M at 0xa0001000 но кернел вообще не грузится.

Пробовал в mashine start добавить :

Код
static void __init fixup_my(struct machine_desc *desc,
                struct tag *tags, char **cmdline, struct meminfo *mi)
{
        mi->bank[0].start = 0xa0000000;
        mi->bank[0].size = (32*1024*1024);
        mi->bank[0].node = 0;

        mi->bank[1].start = 0xa4000000;
        mi->bank[1].size = (32*1024*1024);
        mi->bank[1].node = 1;

        mi->nr_banks=2;
}

MACHINE_START(My, MACHINE_NAME)
        .phys_io        = PXA_PHYS_IO_BASE,
        .io_pg_offst    = (PXA_IO_BASE >> 18) & 0xfffc,
        .fixup          = fixup_my,
        .boot_params    = PHYS_OFFSET+0x1000,
        .map_io         = my_map_io,
        .init_irq       = pxa_init_irq,
        .timer          = &pxa_timer,
        .init_machine   = my_init,
MACHINE_END

но никаких результатов это не приносит. То есть машина грузится, oпредляет 64MB но

Memory: 32MB 32MB = 64MB total
Memory: 29660KB available (2248K code, 415K data, 100K init)

память остаётся прежней, то есть 32MB.
Естественно пробовал:
Код
      unsigned char i;
      for(i=0;i<16;i++){
        //node 0
      mi->bank[i].size = (2*1024*1024);
              if (i<8){
              mi->bank[i].start = 0xa0000000 + i*(4*1024*1024);
              mi->bank[i].node = 0;
              }
              else {
              i-=8;
              mi->bank[i].start = 0xa4000000 + i*(4*1024*1024);
              mi->bank[i].node = 1;
              }
      }
      mi->nr_banks=16;

но результатов это не дало. Где-то вычитал про select ARCH_DISCONTIGMEM_ENABLE флаг, что нужно активировать, но загрузка вешается на:
RedBoot> fis load linux
RedBoot> exec
Using base address 0xa0108000 and length 0x00180000
Uncompressing Linux...........................................................................
............ done, booting the kernel.
Linux version 2.6.17-my (root@linux) (gcc-Version 3.4.3) #1180 Fri Aug 10 09:17:33 CEST 2007
CPU: XScale-PXA255 [69052d06] revision 6 (ARMv5TE)
Machine: My Board
Warning: bad configuration page, trying to continue
Ignoring unrecognised tag 0x00000000
Memory policy: ECC disabled, Data cache writeback
Memory clock: 99.53MHz (*27)
Run Mode clock: 199.07MHz (*2)
Turbo Mode clock: 199.07MHz (*1.0, inactive)
CPU0: D VIVT undefined 5 cache
CPU0: I cache: 32768 bytes, associativity 32, 32 byte lines, 32 sets
CPU0: D cache: 32768 bytes, associativity 32, 32 byte lines, 32 sets
Built 2 zonelists
Kernel command line: init=/linuxrc root=1f02 rootfstype=jffs2 ro console=ttyS2,38400
PID hash table entries: 512 (order: 9, 2048 bytes)
Console: colour dummy device 80x30
Dentry cache hash table entries: 8192 (order: 3, 32768 bytes)
Inode-cache hash table entries: 4096 (order: 2, 16384 bytes)

Может что-то я не правильно делаю, или у кого то есть другие идеи.

Буду благодарен!
andron86
В общем все способы работают. Ошибка была в инициализации rama, то есть не в инициализации, а в configtool. Не компилился wacko.gif хедер где я его инициализировал.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.