GenaSPB 11 26 июня, 2022 Опубликовано 26 июня, 2022 (изменено) · Жалоба Вот вроде самое свежее... 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 пока не тот цвет что хочется. Изменено 26 июня, 2022 пользователем GenaSPB Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
repstosw 18 26 июня, 2022 Опубликовано 26 июня, 2022 (изменено) · Жалоба On 6/27/2022 at 2:30 AM, mantech said: Вообще никогда IOMMU не пользовался, ибо кроме Т-113 его и не было нигде))) Наверно, если не нужна виртуальная IO адресация, то и не нужно. Виртуальные адреса можно задавать где расписаны атрибуты регионов памяти (кеширование, и т.п.). Во всяком случае, на ARM9 таблица трансляции адресов у меня работала (TTB). По поводу G2D. Он поддерживает списки? Или FIFO какой-нибудь? Просто толку от него мало будет, когда после очередной команды на отрисовку примитива мы будем ждать флаг завершения перед отправкой следующей команды. В ПК-шных видеокартах есть списки и FIFO. Изменено 26 июня, 2022 пользователем repstosw Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
GenaSPB 11 27 июня, 2022 Опубликовано 27 июня, 2022 (изменено) · Жалоба MMU у меня как можно догадаться используется и запрограммирован на прозрачную трансляцию адресов. Если помните, без MMU не работает кеширование записи. Ждать можно и перед формированием изображения (как например и при программном обслуживании UART или SPI, разумеется с ожиданиями запершение ранее выданной команды перед вмешательством в процесс со стороны). Хотя у меня естественным образов улучшение должно быть - не смотря на ожидание завершения отрисовки, применение аппаратуры ускоряет работу (идущая в прерываниях обработка звукового потока и обслуживание канала связи по USB не будет тормозить отрисовку). On 6/27/2022 at 1:36 AM, repstosw said: По поводу G2D. Он поддерживает списки? Или FIFO какой-нибудь Не нашел. Изменено 27 июня, 2022 пользователем GenaSPB Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
repstosw 18 27 июня, 2022 Опубликовано 27 июня, 2022 (изменено) · Жалоба Удалось избавиться от чемодана без ручки блоба инита DDR для T113-s3. Нашёл в 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. Выложил исходный код на 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 //... Независимый инит DDR работает и тесты успешно завершаются: Несмотря на большой код инита DDR3, в бинарнике он занимает меньше места, чем тот неуклюжий чемодан без ручки блоб и не привязан жёстко к адресу. А что мешало китайцам сделать позиционно-независимым код этого блоба? Флаг -fPIC в линковщике успешно разрешил бы эту ситуацию. P.S. Лог от xfel. Кто-нибудь видит тут опечатку? В исходниках и бинарниках также! 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 Изменено 27 июня, 2022 пользователем repstosw Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
mantech 49 27 июня, 2022 Опубликовано 27 июня, 2022 · Жалоба В 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. Неплохо, я за этот срок только прогу настроил бы наверно))))))) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
GenaSPB 11 27 июня, 2022 Опубликовано 27 июня, 2022 · Жалоба Круто! Затащил в свой проект - работает!!!! Буду понемногу комментарии добавлять и приводить к более обычному виду исходника. СПАСИБО! Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
GenaSPB 11 27 июня, 2022 Опубликовано 27 июня, 2022 (изменено) · Жалоба На данный момент так (для CMSIS): system_allwnr_t113s3.h allwnr_t113s3.h t113_ddr_decompiled.c Изменено 27 июня, 2022 пользователем GenaSPB Обновил файлы Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Ozelot 7 27 июня, 2022 Опубликовано 27 июня, 2022 · Жалоба На счет 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 Или я чего то не допонял? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
GenaSPB 11 27 июня, 2022 Опубликовано 27 июня, 2022 · Жалоба On 6/27/2022 at 11:58 AM, Ozelot said: Или я чего то не допонял? Именно так. Для начала можете глянуть по ссылке, которую вы сами же привели. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
sasamy 1 27 июня, 2022 Опубликовано 27 июня, 2022 · Жалоба 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))(); Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Ozelot 7 27 июня, 2022 Опубликовано 27 июня, 2022 · Жалоба On 6/27/2022 at 12:12 PM, sasamy said: там бинарник только в профиль Виноват. Слона то я и не заметил :) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
repstosw 18 27 июня, 2022 Опубликовано 27 июня, 2022 · Жалоба On 6/27/2022 at 6:22 PM, GenaSPB said: На данный момент так (для CMSIS): Со штатным memcpy() в Abort не кидает? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
GenaSPB 11 27 июня, 2022 Опубликовано 27 июня, 2022 · Жалоба Представьте нет. Разрешить работу VFP/NEON заранее... Ну это все кстати в CMSIS в ините процессора делается Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
repstosw 18 27 июня, 2022 Опубликовано 27 июня, 2022 (изменено) · Жалоба On 6/27/2022 at 7:46 PM, GenaSPB said: Разрешить работу VFP/NEON заранее... Надо будет попробовать. Хотя при отключенном NEON/VFP должно в Undef улетать по логике вещей. С другого форума вопрос: Quote А что по адресу 0x7010000 хранится? В официальной доке не приводятся регистры с этой базой. Изменено 27 июня, 2022 пользователем repstosw Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
GenaSPB 11 27 июня, 2022 Опубликовано 27 июня, 2022 · Жалоба 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 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться