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

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

Вот вроде самое свежее...
https://github.com/MYIR-ALLWINNER/myir-t5-kernel/blob/e75f862f6fe7af47dd67b5121c517305bd1e2f71/drivers/char/sunxi_g2d/g2d_bsp_v2.c

 

G2D_V2X_SUPPORT

 

upd: прямоугольник предсказуемого размера заполняется. В режиме 32-bit цвета нормально. В RGB565 пока не тот цвет что хочется.

 

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

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


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

On 6/27/2022 at 2:30 AM, mantech said:

Вообще никогда  IOMMU не пользовался, ибо кроме Т-113 его и не было нигде)))  Наверно, если не нужна виртуальная IO адресация, то и не нужно.

 

Виртуальные адреса можно задавать где расписаны атрибуты регионов памяти (кеширование, и т.п.). Во всяком случае, на ARM9 таблица трансляции адресов у меня работала (TTB).

 

По поводу G2D.  Он поддерживает списки? Или FIFO какой-нибудь?   Просто толку от него мало будет, когда после очередной команды на отрисовку примитива мы будем ждать флаг завершения перед отправкой следующей команды.

 

В ПК-шных видеокартах есть списки и FIFO.

 

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

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


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

MMU у меня как можно догадаться используется и запрограммирован на прозрачную трансляцию адресов. Если помните, без MMU не работает кеширование записи.

Ждать можно и перед формированием изображения (как например и при программном обслуживании UART или SPI, разумеется с ожиданиями запершение ранее выданной команды перед вмешательством в процесс со стороны).

Хотя у меня естественным образов улучшение должно быть - не смотря на ожидание завершения отрисовки, применение аппаратуры ускоряет работу (идущая в прерываниях обработка звукового потока и обслуживание канала связи по USB не будет тормозить отрисовку).

On 6/27/2022 at 1:36 AM, repstosw said:

 

По поводу G2D.  Он поддерживает списки? Или FIFO какой-нибудь

Не нашел.

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

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


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

Удалось избавиться от чемодана без ручки блоба инита DDR для T113-s3. :sun_bespectacled:

Нашёл в Tina Linux SDK упоминание об ините памяти функцией init_DRAM в h-файлах. С-исходника этой функции нет, зато есть упоминание имени в следующих файлах:

 

libsun8iw20p1_fes.a

libsun8iw20p1_nand.a

libsun8iw20p1_sboot.a

libsun8iw20p1_sdcard.a

libsun8iw20p1_spinor.a

 

Первым делом, подключил одну из этих библиотек ( libsun8iw20p1_fes.a ) в свой проект. И объявил прототип внешней функции:

extern int init_DRAM( int type, dram_para_t *buff );

 

В линковщик добавил:

-lsun8iw20p1_fes -Wl,-no-enum-size-warning

  

Сразу собрать не получилось, так как данные библиотеки собраны с таргетом без VFP и NEON, что на первых порах меня расстроило.

 Пришлось убрать флаги из компиляции, отвечающие за hardware floating point и NEON:

-mfloat-abi=hard -mfpu=vfpv4-d16 -mfpu=neon

 

Проект успешно собрался, инит DDR заработал.  Сам проект уменьшился в размерах и его снова можно загружать по адресу 0x00028000.  Если использовать чемодан без ручки блоб инита DDR, то он занимает почти 24 кБ, что не позволяет написать свой загрузчик.

 

Можно было пойти по пути подгрузки этого блоба с SD-карты или SPI-Flash. Что и сделано успешно нескоторыми участниками форума. Но жёсткая привязка блоба к адресу 0x28000 меня несколько напрягает.  Напрягает также, что кроме инита DDR там делается куча лишних вещей (об этом ниже).

 

И я решил декомпилировать библиотеку. Взял libsun8iw20p1_fes.a, которая размером меньше всего. Отладочная информация в библиотеке, к великому счастью, оказалась - значит имена всех функций известны, что облегчит анализ. В качестве дизассемблера и декомпилятора использовал китайский IDA Pro 7.5 SP3 + Hex-Rays.

 

За 1,5 дня неспеша удалось полностью декомпилировать и получить рабочий код инита DDR для  T113-s3. :lazy:

 

Выложил исходный код на github:

 

1) Сам модуль с инитом DDR: https://github.com/rep-stosw/t113-ddr-decompiled/blob/main/src/t113_ddr_decompiled.c

2) Тестилка памяти: https://github.com/rep-stosw/t113-ddr-decompiled/tree/main/src/memtest

3) Готовый бинарник для запуска на T113-s3 и скрипт для xfel: https://github.com/rep-stosw/t113-ddr-decompiled/tree/main/output

  

Для использования просто добавить внешний прототип функции:

extern void sys_dram_init(void);

 

И добавить файл в компиляцию/линковку.

Модуль полностью независим от остальных библиотек и не должен вносить зависимости в остальные модули проекта (все объекты статические, а определения дейстуют в пределах модуля) .

 

Следует придерживаться правильной последовательности инита:

// ...

sys_clock_init(); //клоки

PIO_Init();       //GPIO

UART0_init();     //UART

sys_dram_init();  //инит DDR

mmu_system_init(CONFIG_SYS_SDRAM_BASE,(128-1),CONFIG_SYS_SDRAM_BASE+((128-1)*(1024UL*1024UL))); //инит MMU, настройка регионов кеширования

mmu_enable(); //включить MMU

//...

  

:dance4: Независимый инит DDR работает и тесты успешно завершаются: :yes:

 

175852531-85f646aa-53fd-48ec-8a53-08b386

  

 

Несмотря на большой код инита DDR3,  в бинарнике он занимает меньше места, чем тот неуклюжий чемодан без ручки блоб и не привязан жёстко к адресу.

А что мешало китайцам сделать позиционно-независимым код этого блоба?  Флаг -fPIC в линковщике успешно разрешил бы эту ситуацию.

 

 

P.S.  Лог  от xfel.   Кто-нибудь видит тут опечатку? :lol2:  В исходниках и бинарниках также!

 

Quote

[7771]fes begin commit:4d16602
[7774]set pll start
[7780]periph0 has been enabled
[7783]set pll end
[7785][pmu]: bus read error
[7787]board init ok
[7789]beign to init dram
[7792]ZQ value = 0x2f
[7794]get_pmu_exist() = -1
[7796]ddr_efuse_type: 0xa
[7799]trefi:7.8ms
[7801][AUTO DEBUG] single rank and full DQ!
[7805]ddr_efuse_type: 0xa
[7807]trefi:7.8ms
[7810][AUTO DEBUG] rank 0 row = 13
[7813][AUTO DEBUG] rank 0 bank = 8
[7816][AUTO DEBUG] rank 0 page size = 2 KB
[7820]DRAM BOOT DRIVE INFO: V0.33
[7823]DRAM CLK = 792 MHz
[7826]DRAM Type = 3 (2:DDR2,3:DDR3)
[7829]DRAMC read ODT  off.
[7831]DRAM ODT value: 0x42.
[7834]ddr_efuse_type: 0xa
[7837]DRAM SIZE =128 M
[7839]dram_tpr4:0x0
[7841]PLL_DDR_CTRL_REG:0xf8004100
[7844]DRAM_CLK_REG:0xc0000000
[7847][TIMING DEBUG] MR2= 0x18
[7851]DRAM simple test OK.
[7853]rtc standby flag is 0x0, super standby flag is 0x0
[7858]init dram ok

 

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

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


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

В 27.06.2022 в 07:03, repstosw сказал:

Сразу собрать не получилось, так как данные библиотеки собраны с таргетом без VFP и NEON, что на первых порах меня расстроило.

Я в загрузчике тоже его не включаю, зачем он там нужен)))

В 27.06.2022 в 07:03, repstosw сказал:

Если использовать чемодан без ручки блоб инита DDR, то он занимает почти 24 кБ, что не позволяет написать свой загрузчик.

Тут есть один момент, данные чипы идут в виде SCP, т.е. кристалл проца и памяти не один и тот же, и если аллвиннер решит поменять кристалл памяти, то инит придется менять, т.е. все снова перекомпилировать и т.д. Если он в виде блоба, то его можно просто заменить, поэтому какой вариант лучше, неоднозначный ответ...

В 27.06.2022 в 07:03, repstosw сказал:

За 1,5 дня неспеша удалось полностью декомпилировать и получить рабочий код инита DDR для  T113-s3.

Неплохо, я за этот срок только прогу настроил бы наверно)))))))

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


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

Круто!

Затащил в свой проект - работает!!!!

Буду понемногу комментарии добавлять и приводить к более обычному виду исходника.

 

СПАСИБО!

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


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

На данный момент так (для CMSIS):

 

system_allwnr_t113s3.h

 

allwnr_t113s3.h t113_ddr_decompiled.c

Изменено пользователем GenaSPB
Обновил файлы

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


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

На счет DDR, наверно можно было в xboot или xfel все подсмотреть:

https://github.com/xboot/xboot/blob/master/src/arch/arm32/mach-t113s3/sys-dram.c

https://github.com/xboot/xfel/blob/master/chips/r528_t113.c

Или я чего то не допонял?

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


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

On 6/27/2022 at 11:58 AM, Ozelot said:

Или я чего то не допонял?

Именно так. Для начала можете глянуть по ссылке, которую вы сами же привели.

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


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

On 6/27/2022 at 11:58 AM, Ozelot said:

в xboot или xfel все подсмотреть

там бинарник только в профиль

Quote
const uint8_t __attribute__((section (".ddr.bin"))) ddr_bin[] = {

0xf0, 0x00, 0x00, 0xea, 0x65, 0x47, 0x4f, 0x4e, 0x2e, 0x42, 0x54, 0x30,

...

void sys_dram_init(void)

{

...

((void(*)(void))((void *)0x00028000))();

 

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


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

On 6/27/2022 at 12:12 PM, sasamy said:

там бинарник только в профиль

Виноват. Слона то я и не заметил :)

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


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

On 6/27/2022 at 6:22 PM, GenaSPB said:

На данный момент так (для CMSIS):

 

Со штатным memcpy() в Abort не кидает?

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


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

Представьте нет.
Разрешить работу VFP/NEON заранее... Ну это все кстати в CMSIS в ините процессора делается

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


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

On 6/27/2022 at 7:46 PM, GenaSPB said:

Разрешить работу VFP/NEON заранее...

 

Надо будет попробовать.  Хотя при отключенном NEON/VFP должно в Undef улетать по логике вещей.

 

С другого форума вопрос:

 

Quote

А что по адресу 0x7010000 хранится?

 

В официальной доке не приводятся регистры с этой базой.

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

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


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

On 6/27/2022 at 1:44 PM, repstosw said:

В официальной доке не приводятся регистры с этой базой.

Есть только это:
 

//    3.4.2.4 CPU0 Hotplug Process
//
//    The Hotplug Flag Register is 0x070005C0.
//    The Soft Entry Address Register is 0x070005C4.

//    3.4.2.3 NON_CPU0 Boot Process
//
//    The Soft Entry Address Register of CPU0 is 0x070005C4
//    The Soft Entry Address Register of CPU1 is 0x070005C8
 

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


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

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

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

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

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

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

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

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

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

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