GenaSPB 11 26 июня, 2022 Опубликовано 26 июня, 2022 (изменено) · Жалоба Оффтоп тут, но раз тема осуждается задам вопрос... G2D, Allwinner t113-s3 Из линуксовых исходников получил структуру регистров на 0x800 байт. В даташите указан базовый адрес 0x05410000. Но после обычных действий по разрешению подачи тактовой и снятию ресета регистры как-то себя не так ведут... Адрес DMA не поставить, попытка заполнить таблицу трансляции для индексных цветов тоже показывает что там нет регистров. ЧЯДНТ? Spoiler /* * @brief G2D */ /*!< G2D Controller Interface */ typedef struct G2D_Type { __IO uint32_t G2D_CONTROL_REG; /*!< Offset 0x000 Control register */ __IO uint32_t G2D_STATUS_REG; /*!< Offset 0x004 Status register */ __IO uint32_t G2D_SCAN_ORDER_REG; /*!< Offset 0x008 DMA scan order control register */ __IO uint32_t G2D_DMA_HADDR_REG; /*!< Offset 0x00C Input DMA high 4 bits start addr register */ __IO uint32_t G2D_DMA0_LADDR_REG; /*!< Offset 0x010 Input DMA0 low 32 bits start addr register */ __IO uint32_t G2D_DMA1_LADDR_REG; /*!< Offset 0x014 Input DMA1 low 32 bits start addr register */ __IO uint32_t G2D_DMA2_LADDR_REG; /*!< Offset 0x018 Input DMA2 low 32 bits start addr register */ __IO uint32_t G2D_DMA3_LADDR_REG; /*!< Offset 0x01C Input DMA3 low 32 bits start addr register */ __IO uint32_t G2D_DMA0_STRIDE_REG; /*!< Offset 0x020 Input DMA0 line stride register */ __IO uint32_t G2D_DMA1_STRIDE_REG; /*!< Offset 0x024 Input DMA1 line stride register */ __IO uint32_t G2D_DMA2_STRIDE_REG; /*!< Offset 0x028 Input DMA2 line stride register */ __IO uint32_t G2D_DMA3_STRIDE_REG; /*!< Offset 0x02C Input DMA3 line stride register */ __IO uint32_t G2D_DMA0_SIZE_REG; /*!< Offset 0x030 Input DMA0 memory block size register */ __IO uint32_t G2D_DMA1_SIZE_REG; /*!< Offset 0x034 Input DMA1 memory block size register */ __IO uint32_t G2D_DMA2_SIZE_REG; /*!< Offset 0x038 Input DMA2 memory block size register */ __IO uint32_t G2D_DMA3_SIZE_REG; /*!< Offset 0x03C Input DMA3 memory block size register */ __IO uint32_t G2D_DMA0_COOR_REG; /*!< Offset 0x040 Input DMA0 memory block coordinate register */ __IO uint32_t G2D_DMA1_COOR_REG; /*!< Offset 0x044 Input DMA1 memory block coordinate register */ __IO uint32_t G2D_DMA2_COOR_REG; /*!< Offset 0x048 Input DMA2 memory block coordinate register */ __IO uint32_t G2D_DMA3_COOR_REG; /*!< Offset 0x04C Input DMA3 memory block coordinate register */ __IO uint32_t G2D_DMA0_CONTROL_REG; /*!< Offset 0x050 Input DMA0 control register */ __IO uint32_t G2D_DMA1_CONTROL_REG; /*!< Offset 0x054 Input DMA1 control register */ __IO uint32_t G2D_DMA2_CONTROL_REG; /*!< Offset 0x058 Input DMA2 control register */ __IO uint32_t G2D_DMA3_CONTROL_REG; /*!< Offset 0x05C Input DMA3 control register */ __IO uint32_t G2D_DMA0_FILLCOLOR_REG; /*!< Offset 0x060 Input DMA0 fillcolor register */ __IO uint32_t G2D_DMA1_FILLCOLOR_REG; /*!< Offset 0x064 Input DMA1 fillcolor register */ __IO uint32_t G2D_DMA2_FILLCOLOR_REG; /*!< Offset 0x068 Input DMA2 fillcolor register */ __IO uint32_t G2D_DMA3_FILLCOLOR_REG; /*!< Offset 0x06C Input DMA3 fillcolor register */ uint32_t reserved1; /* at 0x070 */ __IO uint32_t G2D_CSC0_CONTROL_REG; /*!< Offset 0x074 Color space converter0 control register */ __IO uint32_t G2D_CSC1_CONTROL_REG; /*!< Offset 0x078 Color space converter1 control register */ uint32_t reserved2; /* at 0x07C */ __IO uint32_t G2D_SCALER_CONTROL_REG; /*!< Offset 0x080 Scaler control register */ __IO uint32_t G2D_SCALER_SIZE_REG; /*!< Offset 0x084 Scaler output size control register */ __IO uint32_t G2D_SCALER_HFACTOR_REG; /*!< Offset 0x088 Scaler horizontal scaling factor register */ __IO uint32_t G2D_SCALER_VFACTOR_REG; /*!< Offset 0x08C Scaler vertical scaling factor register */ __IO uint32_t G2D_SCALER_HPHASE_REG; /*!< Offset 0x090 Scaler horizontal start phase register */ __IO uint32_t G2D_SCALER_VPHASE_REG; /*!< Offset 0x094 Scaler vertical start phase register */ uint32_t reserved3 [0x0006]; /* at 0x098 */ __IO uint32_t G2D_ROP_CONTROL_REG; /*!< Offset 0x0B0 Rop control register */ uint32_t reserved4; /* at 0x0B4 */ __IO uint32_t G2D_ROP_INDEX0_REG; /*!< Offset 0x0B8 Rop index0 control table setting register */ __IO uint32_t G2D_ROP_INDEX1_REG; /*!< Offset 0x0BC Rop index1 control table setting register */ __IO uint32_t G2D_CK_CONTROL_REG; /*!< Offset 0x0C0 Colorkey/alpha control register */ __IO uint32_t G2D_CK_MINCOLOR_REG; /*!< Offset 0x0C4 Colorkey min color control register */ __IO uint32_t G2D_CK_MAXCOLOR_REG; /*!< Offset 0x0C8 Colorkey max color control register */ __IO uint32_t G2D_ROP_FILLCOLOR_REG; /*!< Offset 0x0CC Rop output fillcolor setting register */ __IO uint32_t G2D_CSC2_CONTROL_REG; /*!< Offset 0x0D0 Color space converter2 control register */ uint32_t reserved5 [0x0003]; /* at 0x0D4 */ __IO uint32_t G2D_OUTPUT_CONTROL_REG; /*!< Offset 0x0E0 Output control register */ uint32_t reserved6; /* at 0x0E4 */ __IO uint32_t G2D_OUTPUT_SIZE_REG; /*!< Offset 0x0E8 Output size register */ __IO uint32_t G2D_OUTPUT_HADDR_REG; /*!< Offset 0x0EC Output high 4 bits address control register */ __IO uint32_t G2D_OUTPUT0_LADDR_REG; /*!< Offset 0x0F0 Output low 32 bits address control register */ __IO uint32_t G2D_OUTPUT1_LADDR_REG; /*!< Offset 0x0F4 Output low 32 bits address control register */ __IO uint32_t G2D_OUTPUT2_LADDR_REG; /*!< Offset 0x0F8 Output low 32 bits address control register */ uint32_t reserved7; /* at 0x0FC */ __IO uint32_t G2D_OUTPUT0_STRIDE_REG; /*!< Offset 0x100 Output channel0 line stride control register */ __IO uint32_t G2D_OUTPUT1_STRIDE_REG; /*!< Offset 0x104 Output channel1 line stride control register */ __IO uint32_t G2D_OUTPUT2_STRIDE_REG; /*!< Offset 0x108 Output channel2 line stride control register */ uint32_t reserved8 [0x0005]; /* at 0x10C */ __IO uint32_t G2D_OALPHA_CONTROL_REG; /*!< Offset 0x120 Output alpha control register */ uint32_t reserved9 [0x0003]; /* at 0x124 */ __IO uint32_t G2D_DMA0_MBCTL_REG; /*!< Offset 0x130 Input DMA0 micro block control register */ __IO uint32_t G2D_DMA1_MBCTL_REG; /*!< Offset 0x134 Input DMA1 micro block control register */ __IO uint32_t G2D_DMA2_MBCTL_REG; /*!< Offset 0x138 Input DMA2 micro block control register */ __IO uint32_t G2D_DMA3_MBCTL_REG; /*!< Offset 0x13C Input DMA3 micro block control register */ __IO uint32_t G2D_CMDQ_CTL_REG; /*!< Offset 0x140 command queue control register */ __IO uint32_t G2D_CMDQ_STS_REG; /*!< Offset 0x144 command queue status register */ __IO uint32_t G2D_CMDQ_ADDR_REG; /*!< Offset 0x148 command queue storage start address register */ uint32_t reserved10 [0x000D]; /* at 0x14C */ __IO uint32_t G2D_CSC01_ADDR_REG [0x00C]; /*!< Offset 0x180 CSC0/1 coefficient/constant start addr register0x180-0x1ac) */ uint32_t reserved11 [0x0004]; /* at 0x1B0 */ __IO uint32_t G2D_CSC2_ADDR_REG [0x00C]; /*!< Offset 0x1C0 CSC2 coefficient/constant start addr register0x1c0-0x1ec) */ uint32_t reserved12 [0x0004]; /* at 0x1F0 */ __IO uint32_t G2D_SCALER_HFILTER_REG [0x020]; /*!< Offset 0x200 Scaling horizontal filtering coefficient ram block register0x200-0x27c) */ __IO uint32_t G2D_SCALER_VFILTER_REG [0x020]; /*!< Offset 0x280 Scaling vertical filtering coefficient ram block register0x280-0x2fc) */ uint32_t reserved13 [0x0040]; /* at 0x300 */ __IO uint32_t G2D_PALETTE_TAB_REG [0x100]; /*!< Offset 0x400 Scaling horizontal filtering coefficient ram block register0x400-0x7fc) */ } G2D_TypeDef; /* size of structure = 0x800 */ Что-то в виде намёка что есть G2D_TOP а есть G2D_V0 я вижу, но не очень получается его использовать... Изменено 26 июня, 2022 пользователем GenaSPB Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
mantech 53 26 июня, 2022 Опубликовано 26 июня, 2022 (изменено) · Жалоба В 26.06.2022 в 09:50, GenaSPB сказал: ЧЯДНТ? А всякие клокгейты и пр. установлены? Я как-то в ИМХ6 пока все до посл. клока и энейбла не выставил, все писал как в пустоту... Изменено 26 июня, 2022 пользователем mantech Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
GenaSPB 11 26 июня, 2022 Опубликовано 26 июня, 2022 · Жалоба On 6/26/2022 at 9:50 AM, GenaSPB said: обычных действий по разрешению подачи тактовой и снятию ресета Да PRINTF("arm_hardware_mdma_initialize (G2D)\n"); CCU->MBUS_CLK_REG |= (1uL << 30); // MBUS Reset 1: De-assert reset CCU->MBUS_MAT_CLK_GATING_REG |= (1uL << 10); // Gating MBUS Clock For G2D // CCU->G2D_CLK_REG = // 0x02 * (1uL << 4) | // 0; CCU->G2D_CLK_REG |= (1uL << 31); // G2D_CLK_GATING //CCU->G2D_BGR_REG = 0; CCU->G2D_BGR_REG |= (1uL << 0); /* Enable gating clock for G2D 1: Pass */ //CCU->G2D_BGR_REG &= ~ (1uL << 16); /* G2D reset 0: Assert */ CCU->G2D_BGR_REG |= (1uL << 16); /* G2D reset 1: De-assert */ //memset(G2D, 0xFF, sizeof * G2D); //printhex(G2D_V0, G2D_V0, sizeof * G2D_V0); PRINTF("arm_hardware_mdma_initialize (G2D) done.\n"); Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
mantech 53 26 июня, 2022 Опубликовано 26 июня, 2022 · Жалоба В 26.06.2022 в 13:30, GenaSPB сказал: Да А в линуксовом драйвере процедуру запуска (probe) смотрели, что там подключается? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
GenaSPB 11 26 июня, 2022 Опубликовано 26 июня, 2022 (изменено) · Жалоба G2D_TOP->G2D_SCLK_DIV = (G2D_TOP->G2D_SCLK_DIV & ~ 0xFF) | 3 * (1uL << 4) | 3 * (1uL << 0) | 0; G2D_TOP->G2D_SCLK_GATE |= (1uL << 1) | (1uL << 0); // Gate open: 0x02: rot, 0x01: mixer G2D_TOP->G2D_HCLK_GATE |= (1uL << 1) | (1uL << 0); // Gate open: 0x02: rot, 0x01: mixer G2D_TOP->G2D_AHB_RESET |= (1uL << 1) | (1uL << 0); // De-assert reset: 0x02: rot, 0x01: mixer Интересует где оказывается G2D собственно... Или у меня (выше) не от того процессора registers layout? Изменено 26 июня, 2022 пользователем GenaSPB Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
mantech 53 26 июня, 2022 Опубликовано 26 июня, 2022 · Жалоба В 26.06.2022 в 15:24, GenaSPB сказал: Интересует где оказывается G2D собственно... Согласно даташиту с адреса 0x05410000 если не включена трансляция вирт. адресов... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
GenaSPB 11 26 июня, 2022 Опубликовано 26 июня, 2022 · Жалоба Вроде стало понятнее что у Allwinner t113-s3 g2d версия 2? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
mantech 53 26 июня, 2022 Опубликовано 26 июня, 2022 · Жалоба В 26.06.2022 в 16:45, GenaSPB сказал: у Allwinner t113-s3 g2d версия 2? Х.з. в даташите про это ничего не сказано, отдельного даташита, как на DE2.0 тут нет((( Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
GenaSPB 11 26 июня, 2022 Опубликовано 26 июня, 2022 · Жалоба Я про то, что ранее приведенная структура регшистров в сообщении https://electronix.ru/forum/index.php?app=forums&module=forums&controller=topic&id=157083&do=findComment&comment=1815563 не имеет к моему процессору отношения. Так или нет? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
repstosw 18 26 июня, 2022 Опубликовано 26 июня, 2022 (изменено) · Жалоба On 6/26/2022 at 4:50 PM, GenaSPB said: Оффтоп тут, но раз тема осуждается задам вопрос... G2D, Allwinner t113-s3 Это не оффтоп! Пишите, очень интересно что получится с G2D. Я бы попробовал так: On 6/26/2022 at 8:30 PM, GenaSPB said: CCU->G2D_BGR_REG &= ~ (1uL << 16); //G2D reset Assert CCU->MBUS_MAT_CLK_GATING_REG |= (1uL << 10)|1; //Gating MBUS Clock For G2D and DMA ! CCU->G2D_CLK_REG = (1uL << 31)|(1<<24)|(4-1); //Gating, PLL_Video0(4x), divider 4 = 297 MHz CCU->G2D_BGR_REG |= 1; //Enable gating clock for G2D CCU->G2D_BGR_REG |= (1uL << 16); //G2D reset De-assert On 6/26/2022 at 1:23 AM, mantech said: Проверяли в работе? Если да, насколько в нем копирование и заполнение экранных областей быстрее, чем с НЕОНом? Мне от граф. ускорителя в основном только это и нужно. Пока его не подключал, но в планах. Сейчас памятью занимаюсь. Изменено 26 июня, 2022 пользователем repstosw Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
mantech 53 26 июня, 2022 Опубликовано 26 июня, 2022 · Жалоба В 26.06.2022 в 16:53, GenaSPB сказал: про то, что ранее приведенная структура регшистров А вы откуда ее взяли? Если от Т113, то значит должно быть правильно, если от D1 то не факт... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
GenaSPB 11 26 июня, 2022 Опубликовано 26 июня, 2022 · Жалоба On 6/26/2022 at 5:30 PM, mantech said: А вы откуда ее взяли? Если от Т113, то значит должно быть правильно, если от D1 то не факт... Из тех исходников. Я ссылку где0то сохранил. Специально 113-о нигде нет. зы: вроде начало запполнять как-то Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
GenaSPB 11 26 июня, 2022 Опубликовано 26 июня, 2022 · Жалоба Надо ли включать IOMMU для работы заполнения прямоугольников от G2D? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
mantech 53 26 июня, 2022 Опубликовано 26 июня, 2022 (изменено) · Жалоба В 26.06.2022 в 18:26, GenaSPB сказал: Надо ли включать IOMMU для работы заполнения прямоугольников от G2D? Вообще никогда IOMMU не пользовался, ибо кроме Т-113 его и не было нигде))) Наверно, если не нужна виртуальная IO адресация, то и не нужно. В 26.06.2022 в 17:36, GenaSPB сказал: зы: вроде начало запполнять как-то Что изменили? Изменено 26 июня, 2022 пользователем mantech Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
GenaSPB 11 26 июня, 2022 Опубликовано 26 июня, 2022 (изменено) · Жалоба Сейчас судя по всему что-то выполняется некоторое время, потом бит прерывания появляемся и снимается соответствующей флаг запуска. Эффекта в видеопамяти нет. Причем скорость работы связана с подаваемой тактовой частотой... Изменено 26 июня, 2022 пользователем GenaSPB Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться