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

Allwinner T113-s3 уделал HiFi4 DSP. Смеяться или плакать?

On 7/13/2022 at 5:39 AM, sasamy said:

ниразу не видел чтобы кто-то софтовые унтайлеры использовал

 

Используют: https://github.com/milosladni/sunxi-tvin2jpeg_h264/blob/master/tiled_yuv.S

 

Но скорее из-за лени или не знания, что есть аппаратный детайлизатор в VE или DE.

Про него писал здесь, работает намного быстрее, чем написанный на сях:

 

 

---

  

Хочу вывести видеобуфер на TV.

 

У T113-s3 есть TCON_TV  и TVE - какой из них надо использовать, чтобы выводить композитный видео-сигнал на TV с видеобуфера ? 

Без дополнительных микросхем - сразу с ножки TVOUT0...

 

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

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


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

On 7/12/2022 at 11:47 PM, sasamy said:

я не про фантазии говорил - напридумывать всякой мути можно, только не нужно :) какой смысл делать SoC в котором нельзя отобразить декодированные данные, DE для того и нужен чтобы аппаратно их обрабатывать

В f1c преобразование тайлов может делать DEFE-модуль, основной функцией которого является аппаратное масштабирование. Его "выхлоп" записывается либо в память, либо сразу отдается на вход DEBE-модуля, задачей которого является альфа блендинг и цветокоррекция. Сейчас я из этой цепочки исключал DEFE, поэтому детайлизацию делал программно (но даже так производительности с головой хватает, чтобы декодировать пару mjpeg, mpeg потоков).

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


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

On 7/13/2022 at 4:15 AM, repstosw said:

использовали, когда раскуривали sedarx бинари алвинера на алвинеровском ядре. На майнстримном ядре c v4l2 media codec и DRM/KMS  в этом нет смысла

https://linux-sunxi.org/Cedrus

там используют dma-buf для обмена буферами между разными IP на уровне ядра, никто там ничего на CPU не делает

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


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

В 12.07.2022 в 23:47, sasamy сказал:

DE для того и нужен чтобы аппаратно их обрабатывать.

Только вот DE в данном случае именно для отображения, а не обработки, как g2d...

В 12.07.2022 в 23:47, sasamy сказал:

я не про фантазии говорил

А в чем тут фантазия - это реальная задача. Или то, что написал можно как-то по-другому делать? Интересно...

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


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

On 7/13/2022 at 9:14 AM, mantech said:

Только вот DE в данном случае именно для отображения, а не обработки, как g2d...

чтобы отобразить обрабатывать не надо ? разница только в том что при отображении IP блоки объединяются в конвеер через локальные буферы а не через внешнюю память

 

On 7/13/2022 at 9:14 AM, mantech said:

Или то, что написал можно как-то по-другому делать?

и что вам мешает не использовать аппаратный видео декодер для одной маленькой картинки, кроме фантазий

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


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

В 13.07.2022 в 09:29, sasamy сказал:

разница только в том что

при отображении поток идет напрямую во видеопамять, обработка подразумевает операции буфер-буфер, для последующего использования.

В 13.07.2022 в 09:29, sasamy сказал:

и что вам мешает не использовать аппаратный видео декодер

мне ничего не мешает, кроме быстродействия, т.к. 800х600 - это уже не такая уж и маленькая картинка, плюс она может быть не одна.

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


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

On 7/13/2022 at 11:15 AM, repstosw said:

Хочу вывести видеобуфер на TV.

 

У T113-s3 есть TCON_TV  и TVE - какой из них надо использовать, чтобы выводить композитный видео-сигнал на TV с видеобуфера ? 

Без дополнительных микросхем - сразу с ножки TVOUT0...

 

Всё-же наверное TVE нужен.  TCON_TV даёт группы сигналов для микросхем ТВ-мониторов.

Перенес код с Линукса касаемо TVE - не подаёт признаков жизни: телевизор не видит кадра и не детектится подключение штекера.

В даташите такая картинка:

 

 image.thumb.png.94011fe7c58bfa2e736d41b8ab6727cb.png

 

 

Вопрос:  откуда он YUV берёт?  В описании регистров на TVE нет  установки базового адреса буфера кадра.

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


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

On 7/13/2022 at 10:29 AM, repstosw said:

Всё-же наверное TVE нужен.  TCON_TV даёт группы сигналов для микросхем ТВ-мониторов.

В f1c нужны оба. TVE - это чип тв-энкодера (по простому эдакий ЦАП), который получает YUV со всей необходимой растактовкой от TCON.

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


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

On 7/12/2022 at 8:09 PM, GenaSPB said:

Вот у меня DMA0_PKG_IRQ_PEND ни разу не срабатывает...

 

А вы перед тем как записать адрес дескриптора в регистр DMA_DESC_ADDR_REG, сбрасываете с кеша данных в память?  Потом ещё нужно делать проверку чтением из этого регистра. Ну и сбросить биты прерываний не забыть:

 

void DMA_Init(u32 dst,u32 src,u32 bc)
{
 DMA_Clock();

#if DMA_CHANNEL < 8
 DMA_IRQ_EN_REG0|=(3<<(DMA_CHANNEL*4));       //DMA 0..7 Interrupts Enable: Half & Full
 DMA_IRQ_PEND_REG0|=(7<<(DMA_CHANNEL*4));     //Reset DMA 0..7 INT
#else
 DMA_IRQ_EN_REG1|=(3<<((DMA_CHANNEL-8)*4));   //DMA 8..15 Interrupts Enable: Half & Full
 DMA_IRQ_PEND_REG1|=(7<<((DMA_CHANNEL-8)*4)); //Reset DMA 8..15 INT
#endif

//                   dw=16   dm=IO   db=8    dd=AC  sw=16  sm=Lin  sb=8 sd=DDR/SRAM
 DMA_Descriptor[0]=(1<<25)|(1<<24)|(2<<22)|(7<<16)|(1<<9)|(0<<8)|(2<<6)|(1<<0);     //DMA Configuration
 DMA_Descriptor[1]=src;                                                             //DMA Source Address
 DMA_Descriptor[2]=dst;                                                             //DMA Destination Address
 DMA_Descriptor[3]=bc;                                                              //DMA Byte Counter
 DMA_Descriptor[4]=0;                                                               //DMA Parameter (Wait Clock Cycles=0)
 DMA_Descriptor[5]=(u32)DMA_Descriptor;                                             //DMA Link

 cache_flush_range((u32)DMA_Descriptor,((u32)DMA_Descriptor)+sizeof(DMA_Descriptor));

 DMA_DESC_ADDR_REG=(u32)DMA_Descriptor;                                             //DMA Descriptor Address

 while(DMA_DESC_ADDR_REG!=(u32)DMA_Descriptor);
}

 

 

On 7/13/2022 at 12:38 AM, GenaSPB said:

А чем вызван выбор 1008 МГц?

 

Ни чем. Просто исторически сложилось.

 

On 7/12/2022 at 6:18 PM, GenaSPB said:

Но. Похоже старшие номера каналов щостурюпны толтко dsp  ядру.  Dmac   более чем 7 не позволяет...

 

Проверил каналы 8-15. Да, не работают с CPU.

 

On 7/13/2022 at 5:00 PM, mantech said:

мне ничего не мешает, кроме быстродействия, т.к. 800х600 - это уже не такая уж и маленькая картинка, плюс она может быть не одна.

 

В вашем случае тогда через G2D:  будет вывод RGB-картинки(или её области) в любое место, с любым размером и с авто-конверсией YUV в RGB.

 

On 7/13/2022 at 6:44 PM, Ozelot said:

В f1c нужны оба. TVE - это чип тв-энкодера (по простому эдакий ЦАП), который получает YUV со всей необходимой растактовкой от TCON.

   

Теперь ясно.  TVE - это не более чем кодер PAL/NTSC наподобие как микросхемы CXA1145 , AD724 и им подобные.  Осталось понять, как на него подать YUV с TCON. И как с DE заводить на TCONTV.

У T113-s3 отдельный TCON для TV.

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

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


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

В 14.07.2022 в 04:38, repstosw сказал:

В вашем случае тогда через G2D:

Похоже, что так. Либо программно, в случае v3s.  Кстати, никто не запускал LVDS для дисплея? Я посл. раз его запускал только в А10\А20, интересно, тут сильно отличается?

 

и второе, до модуля вайфая не добрались?))

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

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


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

On 7/14/2022 at 3:09 PM, mantech said:

Кстати, никто не запускал LVDS для дисплея?

 

Не планируется.

 

On 7/14/2022 at 3:09 PM, mantech said:

и второе, до модуля вайфая не добрались?))

 

Не планируется.

 

Второй день бьюсь над запуском TCON_TV - не хочет падла запускаться.  Выставил тактирование, параметры развёртки, разрешил всё что только можно - счётчик TV_DEBUG_REG не меняется.

У TCON_LCD всё аналогично и работает.

Правда, я сейчас TCON_TV запускаю без DE и TVE.  Но счётчики развёртки должны же идти, а они не идут.

И ещё  в даташите на T113-s3 сбит порядок описания регистров:

 

image.thumb.png.5c9ca0863dc8c6c83784a5a5cd5bd716.png

 

Смотрю тот же блок у H616 и F1C200, всё вроде тоже самое, он отличия как раз в месте где сбито..

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


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

Запустил TCON_TV на T113-s3. :wink: Пока сам по себе: регистр  TV_DEBUG_REG  обновляется,  и TV_GINT0_REG выставляет биты прерываний по отрисованной строке и кадру.

 

С этим узлом всё оказалось ОЧЕНЬ непросто.  Кроме штатного тактирования(через TCONTV_BGR_REG и  TCONTV_CLK_REG ), нужно было дополнительно разрешить тактирование и выбрать источник тактирования в недокументированных регистрах DISPLAY_TOP (0x05460000). Подсмотрел в Линуксе ( de_lcd_type.h ):

 

struct __de_lcd_top_dev_t {
	/* 0x00 - 0x0c */
	union tcon_tv_setup_reg_t tcon_tv_setup;
	union dsi_src_select_reg_t dsi_src_select;
	union tcon_reservd_reg_t tcon_reg_0008;
	union tcon_reservd_reg_t tcon_reg_000c;
	/* 0x10 - 0x1c */
	union tcon_reservd_reg_t tcon_reg_0010;
	union tcon_reservd_reg_t tcon_reg_0014;
	union tcon_reservd_reg_t tcon_reg_0018;
	union tcon_de_perh_reg_t tcon_de_perh;
	/* 0x20 - 0x2c */
	union tcon_clk_gate_reg_t tcon_clk_gate;
};

s32 tcon1_tv_clk_enable(u32 sel, u32 en)
{
	unsigned int tcon_index = -1;
	if (sel >= DEVICE_NUM)
		return -1;

	if (!de_feat_get_tcon_type(sel))
		return -1;

	tcon_index = de_feat_get_tcon_index(sel);
	if (tcon_index < 0)
		return -1;

	if (tcon_index == 0) {
		lcd_top[0]->tcon_tv_setup.bits.tv0_clk_src = TV_CLK_F_TVE;
		lcd_top[0]->tcon_clk_gate.bits.tv0_clk_gate = en;
	} else if (tcon_index == 1) {
		lcd_top[0]->tcon_tv_setup.bits.tv1_clk_src = TV_CLK_F_TVE;
		lcd_top[0]->tcon_clk_gate.bits.tv1_clk_gate = en;
	}

	return 0;
}

  

Мало того, нужно было включить тактирование для этого DISPLAY_TOP. Регистр называется неочевидно - DPSS_TOP_BGR_REG. Об этом узнал в sun8iw20p1-soc-system.dts :

 

Quote

disp: disp@0x5000000 {
            compatible = "allwinner,sunxi-disp";
            reg = <0x0 0x05000000 0x0 0x3fffff>,    /* de0 */
                  <0x0 0x05460000 0x0 0xfff>,    /*display_if_top*/
                  <0x0 0x05461000 0x0 0xfff>,    /* tcon-lcd0 */
                  <0x0 0x05470000 0x0 0xfff>,    /* tcon-tv */
                  <0x0 0x05450000 0x0 0x1fff>;    /* dsi0*/
            clocks = <&clk_de>,
                 <&clk_dpss_top>,
                 <&clk_tcon_lcd>,
                 <&clk_tcon_tv>,
                 <&clk_lvds>,
                 <&clk_mipi_host0>;

 

После разрешения тактирования для DISPLAY_TOP и установки в его регистрах соответствующих бит, TCON_TV Заработал.

Просмотрел даташиты на H616, v853, D1, F133, F1C200s - инфы по  DISPLAY_TOP  нет. :biggrin:

 

Ребусы приходится разгадывать...  А у вас были в жизни подобного рода ребусы? :)

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

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


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

В 14.07.2022 в 17:06, repstosw сказал:

А у вас были в жизни подобного рода ребусы? :)

Совсем недавно с усб хост на v3s. Китаезы с их "документацией"...

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


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

А у вас были в жизни подобного рода ребусы? :)
Читаю эту нитку как приключенческий роман ;-)
Возникла мысль, ведь есть же завсегдатаи электроникса - резиденты Китая? Джентльмены, почему б вам не скооперироваться и не обратиться к ним за содействием по части "доки"; пусть ихней "киргудой", но подробно. Не может быть, что бы настолько хреново было всё документировано. (вроде гугль тех. текст с "чайного" достойно переводит)

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


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

On 7/15/2022 at 1:19 AM, mantech said:

Совсем недавно с усб хост на v3s. Китаезы с их "документацией"...

 

Что делает USB host? К нему флешку цеплять? Каким образом? Через переходник? (на плате Lichee Pi Zero разъём USB micro).

Вам дали документацию?

  

On 7/15/2022 at 8:10 AM, Obam said:

Не может быть, что бы настолько хреново было всё документировано. (вроде гугль тех. текст с "чайного" достойно переводит)

   

Проблема не в переводе с китайского на английский, а в том, что подробная документация есть только у линуксо-писателей. Меня бы устроил даташит на китайском. Но учитывая, что официальная и куцая бадяга на T113-s3 на 1360 страниц, представляю что в подробной документации будет идти счёт на десятки тысяч...

  

И ещё, у меня сложилось впечатление, что китайцы просто угорают и копипастят разные ядра/их версии в разные модели чипов: захотели в H616 засунули De-interlacer версии 300, потом в T113-s3 засунули версию 110.  В аудио-кодеке - в V3s добавили часть регистров через "узкое бутылочное горлышко", а в A13/T113-s3 их убрали,  но сдвинули оффсеты регистрам, перекрутили позиции битов, добавли новые, часть убрали.

 

Нафига так делать? Это конспирация такая  - усложнить реверс и копания? Или это делается с целью чтоб не опознали ядра/корки как стыренные?

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

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


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

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

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

Гость
К сожалению, ваш контент содержит запрещённые слова. Пожалуйста, отредактируйте контент, чтобы удалить выделенные ниже слова.
Ответить в этой теме...

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

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

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

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

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

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