ЗАО «ЗЭО»

Пожалуйста, войдите или зарегистрируйтесь.

Расширенный поиск  

Новости:

Автор Тема: linux-2.6.30 и Тион  (Прочитано 67837 раз)

0 Пользователей и 3 Гостей просматривают эту тему.

faa

  • Jr. Member
  • **
  • Оффлайн Оффлайн
  • Сообщений: 72
linux-2.6.30 и Тион
« : 19 Июня, 2009, 12:35:25 »

Прикрутил свежее ядро 2.6.30 к Тион-у.
Из коробки работает eth, uart, wdt, rtc, gpio, i2c (через gpio), dma (m2p и p2m).
Добавил fb и ts (перенес из 2.6.21.5), ну и char-драйвер для прошивки fpga xilinx.
Патчи лежат тут ftp://ftp.ntcsm.ru/pub/tion9315/linux-2.6.30-tion-eabi-patch.tar.bz2.
march определяет как TION9315 (tion9315  MACH_TION9315  TION9315  1567) - сотв-но надо править uboot (redboot), чтобы отдавал правильный ID машины при загрузке ядра.
RTC через I2C (isl1208) тоже работает.
В процессе nand, keypad.
ide, spi и pcmcia - пока не пользуем.
Записан

asv

  • Hero Member
  • *****
  • Оффлайн Оффлайн
  • Сообщений: 1405
Re: linux-2.6.30 и Тион
« Ответ #1 : 19 Июня, 2009, 15:39:42 »

Здорово

PCMCI на Тионах (EP93xx) не выведено.
NAND тоже нет, есть NOR.
Записан

asv

  • Hero Member
  • *****
  • Оффлайн Оффлайн
  • Сообщений: 1405
Re: linux-2.6.30 и Тион
« Ответ #2 : 19 Июня, 2009, 15:45:05 »

Мое предыдущее сообщение было в смысле одобрения.
Записан

faa

  • Jr. Member
  • **
  • Оффлайн Оффлайн
  • Сообщений: 72
Re: linux-2.6.30 и Тион
« Ответ #3 : 20 Июня, 2009, 10:05:18 »

Здорово

PCMCI на Тионах (EP93xx) не выведено.
NAND тоже нет, есть NOR.

Я в курсе насчет PCMCIA.
А nand мы используем. И keypad тоже. Поэтому придется эти драйверы прикручивать :)
Ну и звук в одном из проектов есть.
Записан

asv

  • Hero Member
  • *****
  • Оффлайн Оффлайн
  • Сообщений: 1405
Re: linux-2.6.30 и Тион
« Ответ #4 : 20 Июня, 2009, 11:10:11 »

keypad был недавно в рассылке arm.linux.org.uk
LCD контроллер тоже был, лучше взять его
IDE был, но в режиме PIO
Записан

faa

  • Jr. Member
  • **
  • Оффлайн Оффлайн
  • Сообщений: 72
Re: linux-2.6.30 и Тион
« Ответ #5 : 20 Июня, 2009, 12:24:43 »

keypad был недавно в рассылке arm.linux.org.uk

keypad на 2.6.21.5 у меня работал. портировать только надо на 2.6.30
а ссылочку попобробнее можно? чтоб не перерывать рассылку :)

LCD контроллер тоже был, лучше взять его
IDE был, но в режиме PIO


LCD работает. портанул с 2.6.21.5. используем разрешение 640х480 и 800х480. акселератор работает.
IDE не используем.
Записан

Snar

  • Newbie
  • *
  • Оффлайн Оффлайн
  • Сообщений: 22
Re: linux-2.6.30 и Тион
« Ответ #7 : 16 Июля, 2009, 17:35:20 »

Кстати где-нибудь можно посмотреть ускоренную реализацию blit?А то всё как-то ограничиваются fill и line
Записан

asv

  • Hero Member
  • *****
  • Оффлайн Оффлайн
  • Сообщений: 1405
Re: linux-2.6.30 и Тион
« Ответ #8 : 16 Июля, 2009, 18:07:10 »

Я не встречал.
Записан

Snar

  • Newbie
  • *
  • Оффлайн Оффлайн
  • Сообщений: 22
Re: linux-2.6.30 и Тион
« Ответ #9 : 16 Июля, 2009, 18:11:04 »

Интересно с чем это связано...может есть грабли? хотя в еррате ни слова...
Записан

faa

  • Jr. Member
  • **
  • Оффлайн Оффлайн
  • Сообщений: 72
Re: linux-2.6.30 и Тион
« Ответ #10 : 20 Июля, 2009, 11:50:23 »

Кстати где-нибудь можно посмотреть ускоренную реализацию blit?А то всё как-то ограничиваются fill и line
Вот тут есть
http://read.pudn.com/downloads55/sourcecode/windows/vxd/190153/ep93xxfb.c__.htm

и вот еще вариант
void ep93xxfb_imageblit(struct fb_info *p, const struct fb_image *image)
{
    unsigned long blkdestwidth,tmp;
    void * pucBlitBuf;
/*    cfb_imageblit( p , image );
    return;
*/
    if ((image->dx >= p->var.xres) ||
        (image->dy >= p->var.yres) ||
        ((image->dx + image->width - 1) >= p->var.xres) ||
        ((image->dy + image->height - 1) >= p->var.yres))
        return;
    if (epinfo.bpp != image->depth )
        return;

    tmp =  (( image->dx + image->width ) * epinfo.bpp );
    blkdestwidth = tmp / 32;
    if(blkdestwidth > 0 && (tmp % 32 == 0))
        blkdestwidth--;
    blkdestwidth = blkdestwidth - (image->dx * epinfo.bpp) / 32;

    pucBlitBuf = kmalloc(1024*8,GFP_KERNEL);
    copy_from_user(pucBlitBuf, image->data, 5000);

    outl( 0x00000000 , BLOCKCTRL);

    outl( 0x00000000, SRCPIXELSTRT);
    outl( virt_to_phys(pucBlitBuf), BLKSRCSTRT);
    outl( (image->width * epinfo.bpp) / 32 , SRCLINELENGTH);
    outl(((image->width - 1) * epinfo.bpp) / 32, BLKSRCWIDTH );

    outl(((image->dx * epinfo.bpp) & 0x1F) |
         ((((image->dx + image->width - 1) * epinfo.bpp ) & 0x1F) << 16)
         , DESTPIXELSTRT);
    outl((epinfo.fb_phys + (image->dy * epinfo.xres * epinfo.bpp ) / 8 +
         (image->dx * epinfo.bpp ) / 8 )
         , BLKDSTSTRT);
    outl( ((epinfo.xres * epinfo.bpp) / 32), DESTLINELENGTH );
    outl( blkdestwidth, BLKDESTWIDTH );
    outl( image->height - 1 , BLKDESTHEIGHT);
    outl(image->fg_color, BLOCKMASK);
    outl(image->bg_color, BACKGROUND);
    outl( epinfo.pixformat | 0x00000003, BLOCKCTRL );
    ep93xxfb_wait();
}
только вызывается через ioctl
int ep93xxfb_ioctl(struct fb_info *info,unsigned int cmd, unsigned long arg)
{
    struct fb_fillrect fill;
    struct fb_copyarea cparea;
    struct fb_image img;
    struct ep93xx_line line;
    struct ep93xx_cursor cursor;

    switch (cmd) {
        case FBIO_EP93XX_CURSOR:
            copy_from_user(&cursor, (void *)arg, sizeof(struct ep93xx_cursor));
            ep93xxfb_cursor(info,&cursor);
            break;
        case FBIO_EP93XX_LINE:
            copy_from_user(&line, (void *)arg, sizeof(struct ep93xx_line));
            ep93xxfb_line(info,&line);
            break;
        case FBIO_EP93XX_FILL:
            copy_from_user(&fill, (void *)arg, sizeof(struct fb_fillrect));
            ep93xxfb_fillrect(info,&fill);
            break;
        case FBIO_EP93XX_BLIT:
            copy_from_user(&img, (void *)arg, sizeof(struct fb_image));
            ep93xxfb_imageblit(info, &img);
            break;
        case FBIO_EP93XX_COPY:
            copy_from_user(&cparea, (void *)arg, sizeof(struct fb_copyarea));
            ep93xxfb_copyarea(info,&cparea);
            break;
        default:
            return -EFAULT;
    }
    return 0;
}

Постараюсь прикрутить на днях к 2.6.30.
Записан

asv

  • Hero Member
  • *****
  • Оффлайн Оффлайн
  • Сообщений: 1405
Re: linux-2.6.30 и Тион
« Ответ #11 : 30 Июля, 2009, 18:18:39 »

Записан

faa

  • Jr. Member
  • **
  • Оффлайн Оффлайн
  • Сообщений: 72
Re: linux-2.6.30 и Тион
« Ответ #12 : 31 Июля, 2009, 14:22:11 »

Почти по теме

http://arm.cirrus.com/forum/viewtopic.php?t=3593


В тему :)
Наблюдаю за процессом с большим интересом.
Записан

scad

  • Newbie
  • *
  • Оффлайн Оффлайн
  • Сообщений: 48
Re: linux-2.6.30 и Тион
« Ответ #13 : 26 Августа, 2009, 14:00:13 »

Кстати где-нибудь можно посмотреть ускоренную реализацию blit?А то всё как-то ограничиваются fill и line
Вот тут есть
http://read.pudn.com/downloads55/sourcecode/windows/vxd/190153/ep93xxfb.c__.htm

и вот еще вариант
void ep93xxfb_imageblit(struct fb_info *p, const struct fb_image *image)
{
    unsigned long blkdestwidth,tmp;
    void * pucBlitBuf;
/*    cfb_imageblit( p , image );
    return;
*/
    if ((image->dx >= p->var.xres) ||
        (image->dy >= p->var.yres) ||
        ((image->dx + image->width - 1) >= p->var.xres) ||
        ((image->dy + image->height - 1) >= p->var.yres))
        return;
    if (epinfo.bpp != image->depth )
        return;

    tmp =  (( image->dx + image->width ) * epinfo.bpp );
    blkdestwidth = tmp / 32;
    if(blkdestwidth > 0 && (tmp % 32 == 0))
        blkdestwidth--;
    blkdestwidth = blkdestwidth - (image->dx * epinfo.bpp) / 32;

    pucBlitBuf = kmalloc(1024*8,GFP_KERNEL);
    copy_from_user(pucBlitBuf, image->data, 5000);

    outl( 0x00000000 , BLOCKCTRL);

    outl( 0x00000000, SRCPIXELSTRT);
    outl( virt_to_phys(pucBlitBuf), BLKSRCSTRT);
    outl( (image->width * epinfo.bpp) / 32 , SRCLINELENGTH);
    outl(((image->width - 1) * epinfo.bpp) / 32, BLKSRCWIDTH );

    outl(((image->dx * epinfo.bpp) & 0x1F) |
         ((((image->dx + image->width - 1) * epinfo.bpp ) & 0x1F) << 16)
         , DESTPIXELSTRT);
    outl((epinfo.fb_phys + (image->dy * epinfo.xres * epinfo.bpp ) / 8 +
         (image->dx * epinfo.bpp ) / 8 )
         , BLKDSTSTRT);
    outl( ((epinfo.xres * epinfo.bpp) / 32), DESTLINELENGTH );
    outl( blkdestwidth, BLKDESTWIDTH );
    outl( image->height - 1 , BLKDESTHEIGHT);
    outl(image->fg_color, BLOCKMASK);
    outl(image->bg_color, BACKGROUND);
    outl( epinfo.pixformat | 0x00000003, BLOCKCTRL );
    ep93xxfb_wait();
}
только вызывается через ioctl
int ep93xxfb_ioctl(struct fb_info *info,unsigned int cmd, unsigned long arg)
{
    struct fb_fillrect fill;
    struct fb_copyarea cparea;
    struct fb_image img;
    struct ep93xx_line line;
    struct ep93xx_cursor cursor;

    switch (cmd) {
        case FBIO_EP93XX_CURSOR:
            copy_from_user(&cursor, (void *)arg, sizeof(struct ep93xx_cursor));
            ep93xxfb_cursor(info,&cursor);
            break;
        case FBIO_EP93XX_LINE:
            copy_from_user(&line, (void *)arg, sizeof(struct ep93xx_line));
            ep93xxfb_line(info,&line);
            break;
        case FBIO_EP93XX_FILL:
            copy_from_user(&fill, (void *)arg, sizeof(struct fb_fillrect));
            ep93xxfb_fillrect(info,&fill);
            break;
        case FBIO_EP93XX_BLIT:
            copy_from_user(&img, (void *)arg, sizeof(struct fb_image));
            ep93xxfb_imageblit(info, &img);
            break;
        case FBIO_EP93XX_COPY:
            copy_from_user(&cparea, (void *)arg, sizeof(struct fb_copyarea));
            ep93xxfb_copyarea(info,&cparea);
            break;
        default:
            return -EFAULT;
    }
    return 0;
}

Постараюсь прикрутить на днях к 2.6.30.

Попытался использовать приведенный выше код в ядре 2.6.20.4. Разницу при работе с Opie как-то не ощутил. Есть ли программы тестирования производительности графики для ТИОН? Как определить что графический акселератор включен?
Записан

asv

  • Hero Member
  • *****
  • Оффлайн Оффлайн
  • Сообщений: 1405
Re: linux-2.6.30 и Тион
« Ответ #14 : 26 Августа, 2009, 14:08:24 »

> Есть ли программы тестирования производительности графики для ТИОН?

В QT (или в Opie) есть пример, который рисует что-то на экране и считает сколько успел нарисовать.

> Как определить что графический акселератор включен?

Посмотреть, что эти функции действительно вызваются.
Наверное можно strace'ом, будет показывать системные вызовы (т.е. и ioctl).
Записан