Перейти к содержанию
    

Allwinner A13 V.S. OMAP-L138. Кто производительнее?

Надо будет покурить на досуге этот DEFE...  Но TCON всёравно будет, так как на нём видео-тайминги.   DEFE как чисто рендерер

Изменено пользователем repstosw

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

On 6/3/2020 at 7:43 AM, sasamy said:

TCON вообще может не использовать Display Engine а напрямую из DRAM  читать данные

 

Нет не может. В описании на TCON отсутствует упоминание о базовом адресе видеопамяти.  Так что работа в составе DEBE.  По крайней мере так сделано в sunxi-linux драйверах.

Если не согласны, то пожалуйста предоставьте пруф в виде псевдо-кода!

 

21 hours ago, mantech said:

ЗЫ. Хотя __inline__  сказал, что он только один слой использует, ему может и подойдет такой режим, если TCON может читать растр прямо из памяти...

 

Не подошёл.  Хотя бы по причине отсутствия входного формата RGB 5:6:5, что есть в DEBE :)

 

Изменено пользователем repstosw

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

1 час назад, __inline__ сказал:

Хотя бы по причине отсутствия входного формата RGB 5:6:5, что есть в DEBE :)

Ну если sasamy прав и DEFE можно не использовать, а DEBE связать напрямую с памятью и TCONом, то все возможно...

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

2 hours ago, __inline__ said:

Нет не может. В описании на TCON отсутствует упоминание о базовом адресе видеопамяти. 

Вы не там смотрите - откройте описание DMA  контроллера и в частности описание выделенных каналов DDMA

DDMA_CFG_REG

Quote

DDMA_DST_DRQ_SEL.
Dedicated DMA Destination DRQ Type

0xE: TCON0

ну и дальше разберетесь надеюсь - где там адрес указывается для источника в SDRAM

DDMA_SRC_ADDR_REG

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

1 hour ago, mantech said:

Ну если sasamy прав и DEFE можно не использовать, а DEBE связать напрямую с памятью и TCONом, то все возможно...

 

DEFE я вообще не трогаю, ввиду того, что мне он по формату не подходит.

А DEBE итак уже связан с TCON0 - в sunxi_display  по крайней мере так.  В DEBE задаются базовые адреса буферов, их логическая ширина и много чего ещё, а TCON забирает буфер с DEBE и гонит развёртку в монитор.

 

47 minutes ago, sasamy said:

Вы не там смотрите - откройте описание DMA  контроллера и в частности описание выделенных каналов DDMA

DDMA_CFG_REG

 

47 minutes ago, sasamy said:

ну и дальше разберетесь надеюсь - где там адрес указывается для источника в SDRAM

DDMA_SRC_ADDR_REG

 

То ли я дурак,  или запутать пытаетесь...  Читаю описание DDMA, вижу, надо задавать адрес источника и приёмника.  Допустим первый - это мой буфер где я строю изображение.  В второй тогда кто???  Приёмный адрес чей?  У TCON0 нету дата-регистра  для приёма данных в него, как это например есть в аудио-кодеке: DAC_TX_DATA_REG.

 Ну и что что там TCON0 DRQ прописан, это вообще триггер на срабатывание ДМА, который  данном случае начнёт работу когда будет VBLANK от дисплея(TCON). 

 

Ещё раз, я не вижу прямое упоминание того,  что в TCON0 можно сыпать данные из DMA.

Выше mantech упомянул о возможности связки DEBE и TCON0, так это итак уже есть и оно работает!

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

 

 

Для внесения ясности, выкладываю картинку всего конвеера, который работает с видеосистемой.  Это то, как сейчас у меня сделано:

 

vga.thumb.jpg.155ff1e663d07e0383c5082ce36bd68a.jpg

 

Если фильтрация изображения не нужна, то конвеер упрощается.   В моей задаче нужна двойная буферизация. Поэтому сделана пересылка DMA из одного в другой буфер.  Можно ещё более упростить - писать сразу в первичный буфер, но тогда придётся постоянно ждать VBLANK.

 

2222.thumb.jpg.0dbdf0ecfa299855330a007ae527df6e.jpg

 

Или вообще применить flip-схему.  Пока 1 буфер рисуется, второй отображается. Затем смена во время VBlank.  Так тоже работает, но схема с DMA мне более лучше подходит, так как flip-схема заставляет всегда обновлять страницы.

 

Все три схемы у меня обкатаны и отлично работают на Allwinner A13.

 

333.thumb.jpg.8d7c1aa41eb44b4492589074ddd19f97.jpg

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

43 минуты назад, __inline__ сказал:

DEFE я вообще не трогаю, ввиду того, что мне он по формату не подходит.

А DEBE итак уже связан с TCON0 - в sunxi_display  по крайней мере так.  В DEBE задаются базовые адреса буферов, их логическая ширина и много чего ещё, а TCON забирает буфер с DEBE и гонит развёртку в монитор.

Да я тут честно говоря и не заморачиваюсь, просто интересна озвученная идея использовать нафиг не нужный DEFE в качестве 2Д ДМА, получится или нет - вот в чем вопрос, надо пробовать...

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

11 minutes ago, mantech said:

 просто интересна озвученная идея использовать нафиг не нужный DEFE в качестве 2Д ДМА, получится или нет - вот в чем вопрос, надо пробовать...

 

Мне он показался очень неудобным. Скорее всего это для видео-кодеков пойдёт. например CedarX. Ограниченный выбор пиксел-формата с преобладанием YUV вместо RGB положил конец моему интересу к DEFE.   Много вакуума.  Как настроить те же коэффициенты фильтра? Откуда их брать?   Как связать выходной буфер DEFE с отображением на монтор ? DEFE это неумеет, так как видеотайминги задаются TCON, а сканинг пикселей идёт DEBE.    Так что в чистом виде DEFE не может гнать кадр в дисплей ...

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

2 hours ago, __inline__ said:

То ли я дурак,  или запутать пытаетесь...

запутать я не пытаюсь

 

2 hours ago, __inline__ said:

В второй тогда кто???  Приёмный адрес чей? 

Спросите у производителя, у меня такая же инфа как у вас - мануал

2 hours ago, __inline__ said:

я не вижу прямое упоминание того,  что в TCON0 можно сыпать данные из DMA

 

tcon_dma.png

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

1 hour ago, sasamy said:

Спросите у производителя, у меня такая же инфа как у вас - мануал

 

:biggrin:

В общем с вами всё ясно :)

 

dont-feed-the-trolls.jpg.3f453f4941d1e197584e2fbdc141e199.jpg

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

2 часа назад, __inline__ сказал:

Мне он показался очень неудобным. Скорее всего это для видео-кодеков пойдёт. например CedarX.

Может я конечно ничего не понял в этих извращениях, но если судить по схеме DEFE, то его ДМА может брать данные по некоему адресу источника в памяти, прогонять их через всякие колор-конвертеры и результат может снова закидывать по адресу получателя обратно в память, т.е. если отключить все ненужное, получается что он берет по адресу источника нечто, прогоняет через себя и это же нечто закидывает снова в память по адресу получателя, поэтому не один фиг, что за форматы он перекачивает - это просто данные. Другое дело, может ли он брать и класть одновременно? Или я чего-то не догоняю?

Изменено пользователем mantech

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

1 hour ago, __inline__ said:

В общем с вами всё ясно

я чета не понял - вы боитесь письмо в техподдержку написть с просьбой пояснить работу DMA у TCON ? Хотя понятно что это вам не нужно -  DEBE и TCON по отдельности нафик не нужены. Да и вопрос был по 2D DMA - всё там есть, Непонятно почему  у вас так подгорело от TCON :)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

1 hour ago, mantech said:

Может я конечно ничего не понял в этих извращениях, но если судить по схеме DEFE, то его ДМА может брать данные по некоему адресу источника в памяти, прогонять их через всякие колор-конвертеры и результат может снова закидывать по адресу получателя обратно в память, т.е. если отключить все ненужное, получается что он берет по адресу источника нечто, прогоняет через себя и это же нечто закидывает снова в память по адресу получателя, поэтому не один фиг, что за форматы он перекачивает - это просто данные. Другое дело, может ли он брать и класть одновременно? Или я чего-то не догоняю?

 

так оно и есть.  DEFE берёт данные из входного буфера, затем производит операцию скейлера (масштабирует) и фильтра (сглаживает изображение), полученное изображение кладёт в выходной буфер.  А на выходной буфер можно натравить на DEBE, который передаст его в монитор(точнее в видео-цап), а TCON сформирует сигналы развёртки (Hsync, VSync, DE, PCLK и др. по необходимости).   Тоесть это некий аппаратный фильтр-скейлер рендерер.

 

Но вся беда в том, что он заточен на YUV или RGBA 8:8:8:8. Поэтому мне он не подходит.

 

Использовать его как ДМА - сомнительное решение.  Так как пиксели будут подвергнуты преобразованию из-за масштабирования и сглаживания.  Даже если подобрать сжатие =1 и отключить сглаживание, то скорее всего из-за ошибок с floating point во внутренних конвеерах выходной буфер будет отличаться от входного.

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

6 минут назад, __inline__ сказал:

выходной буфер будет отличаться от входного.

По идее не должно, проверял подобный модуль на IMX6 не искажалось, но были и приколы, например нужно было выравнивать адреса до 64 и 32 байта мин. пересылка, но это мелочи..

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

16 hours ago, mantech said:

По идее не должно, проверял подобный модуль на IMX6 не искажалось, но были и приколы, например нужно было выравнивать адреса до 64 и 32 байта мин. пересылка, но это мелочи

 

С наскоку попытался DEFE запустить, ничё не вышло.  Не работает что-то.  При этом его Write-Back буфер указал что это буфер отображения TCON/DEBE.   Изменений не последовало, ничего он ненарендерил.

 

В AHB  разрешил тактирование, включил PLL3 для него, глобально разрешил и тотальное бездействие.

Код ниже.

 

#define DEBE_BASE 0x01E60000
#define DEFE_BASE 0x01E00000
#define CCM_BASE  0x01C20000

#define DEBE_LAYFB_L32ADD_REG (*(IO u32*)(DEBE_BASE+0x850))
#define DEBE_LAYFB_H4ADD_REG  (*(IO u32*)(DEBE_BASE+0x860))
  
 #define DEFE_EN_REG           (*(IO u32*)(DEFE_BASE+0x0000)) /* DEFE Module Enable Register                  */
 #define DEFE_FRM_CTRL_REG     (*(IO u32*)(DEFE_BASE+0x0004)) /* DEFE Frame Process Control Register          */
 #define DEFE_WB_ADDR0_REG     (*(IO u32*)(DEFE_BASE+0x0050)) /* DEFE Channel 3 Write Back Address Register   */
 #define DEFE_BUF_ADDR0_REG    (*(IO u32*)(DEFE_BASE+0x0020)) /* DEFE Input Channel 0 Buffer Address Register */
 #define DEFE_BUF_ADDR1_REG    (*(IO u32*)(DEFE_BASE+0x0024)) /* DEFE Input Channel 1 Buffer Address Register */
 #define DEFE_BUF_ADDR2_REG    (*(IO u32*)(DEFE_BASE+0x0028)) /* DEFE Input Channel 2 Buffer Address Register */
 #define DEFE_LINESTRD0_REG    (*(IO u32*)(DEFE_BASE+0x0040)) /* DEFE Channel 0 Line Stride Register          */
 #define DEFE_LINESTRD1_REG    (*(IO u32*)(DEFE_BASE+0x0044)) /* DEFE Channel 1 Line Stride Register          */
 #define DEFE_LINESTRD2_REG    (*(IO u32*)(DEFE_BASE+0x0048)) /* DEFE Channel 2 Line Stride Register          */
 #define DEFE_CH0_INSIZE_REG   (*(IO u32*)(DEFE_BASE+0x0100)) /* DEFE Channel 0 Input Size Register           */
 #define DEFE_CH0_OUTSIZE_REG  (*(IO u32*)(DEFE_BASE+0x0104)) /* DEFE Channel 0 Output Size Register          */
 #define DEFE_CH0_HORZFACT_REG (*(IO u32*)(DEFE_BASE+0x0108)) /* DEFE Channel 0 Horizontal Factor Register    */
 #define DEFE_CH0_VERTFACT_REG (*(IO u32*)(DEFE_BASE+0x010C)) /* DEFE Channel 0 Vertical factor Register      */
 #define DEFE_CH1_INSIZE_REG   (*(IO u32*)(DEFE_BASE+0x0200)) /* DEFE Channel 0 Input Size Register           */
 #define DEFE_CH1_OUTSIZE_REG  (*(IO u32*)(DEFE_BASE+0x0204)) /* DEFE Channel 0 Output Size Register          */
 #define DEFE_CH1_HORZFACT_REG (*(IO u32*)(DEFE_BASE+0x0208)) /* DEFE Channel 0 Horizontal Factor Register    */
 #define DEFE_CH1_VERTFACT_REG (*(IO u32*)(DEFE_BASE+0x020C)) /* DEFE Channel 0 Vertical factor Register      */
 #define DEFE_WB_LINESTRD_EN_REG (*(IO u32*)(DEFE_BASE+0x00D0)) /* DEFE Write Back Line Stride Enable Register    */
 #define DEFE_WB_LINESTRD0_REG   (*(IO u32*)(DEFE_BASE+0x00D4)) /* DEFE Write Back Channel 3 Line Stride Register */
  
 #define FE_CFG_REG   (*(IO u32*)(CCM_BASE+0x10C))
 #define AHB1_CFG_REG (*(IO u32*)(CCM_BASE+0x064))

main()
{
  video_hw_init(); //инитим TCON и DEBE
  
  //базовый адрес видеопамяти DEBE
  DEBE_LAYFB_L32ADD_REG=0x5FE00000UL<< 3; //Low
  DEBE_LAYFB_H4ADD_REG =0x5FE00000UL>>29; //High
  
 AHB1_CFG_REG|=(1<<14);        //разрешаем тактирование DEFE
 FE_CFG_REG=(1<<31);          //разрешаем CLK, выбор PLL3
  
 DEFE_WB_ADDR0_REG=0x5FE00000;               //это  адрес выходного буфера - тут рендерер кладёт готовую картинку. Совпадает с видеопамятью

 DEFE_BUF_ADDR0_REG=0x5FD00000;              //входный буфера.  Тут мусор. YUV составляющие
 DEFE_BUF_ADDR1_REG=0x5FD00000+0x40000;
 DEFE_BUF_ADDR2_REG=0x5FD00000+0x80000;
  
 DEFE_LINESTRD0_REG=400; //ширина в пикселах на каждую компоненту YUV
 DEFE_LINESTRD1_REG=400;
 DEFE_LINESTRD2_REG=400;
  
 DEFE_WB_LINESTRD_EN_REG=1; //разрешить установку ширины на выходной буфер
  
 DEFE_WB_LINESTRD0_REG=800; //ширина выходного буфера
  
 DEFE_CH0_INSIZE_REG=((240-1)<<16)|(400-1); //размер входного кадра
 DEFE_CH0_OUTSIZE_REG=((480-1)<<16)|(800-1); //..выходного
  
 DEFE_CH0_HORZFACT_REG=(0<<16)|5; //масштабный коэффициент 0.5
 DEFE_CH0_VERTFACT_REG=(0<<16)|5;
  
 DEFE_CH1_INSIZE_REG=((240-1)<<16)|(400-1);   //тоже для компонент UV
 DEFE_CH1_OUTSIZE_REG=((480-1)<<16)|(800-1);
 DEFE_CH1_HORZFACT_REG=(0<<16)|5;
 DEFE_CH1_VERTFACT_REG=(0<<16)|5;
  
 DEFE_EN_REG=1;                                       //enable DEFE
 DEFE_FRM_CTRL_REG=(1<<23)|(1<<16)|(1<<11)|(1<<2)|1; //start.....
  
  //.......  и нифига

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...