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

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

Оффтоп тут, но раз тема осуждается задам вопрос...
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 я вижу, но не очень получается его использовать...
 

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

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


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

В 26.06.2022 в 09:50, GenaSPB сказал:

ЧЯДНТ?

А всякие клокгейты и пр. установлены? Я как-то в ИМХ6 пока все до посл. клока и энейбла не выставил, все писал как в пустоту...

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

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


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

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");

 

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


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

В 26.06.2022 в 13:30, GenaSPB сказал:

Да

А в линуксовом драйвере процедуру запуска (probe) смотрели, что там подключается?

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


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

	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?

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

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


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

В 26.06.2022 в 15:24, GenaSPB сказал:

Интересует где оказывается G2D собственно...

Согласно даташиту с адреса 0x05410000 если не включена трансляция вирт. адресов...

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


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

В 26.06.2022 в 16:45, GenaSPB сказал:

у Allwinner t113-s3 g2d версия 2?

Х.з.  в даташите про это ничего не сказано, отдельного даташита, как на DE2.0 тут нет(((

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


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

Я про то, что ранее приведенная структура регшистров в сообщении https://electronix.ru/forum/index.php?app=forums&module=forums&controller=topic&id=157083&do=findComment&comment=1815563 не имеет к моему процессору отношения. Так или нет?

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


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

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:

Проверяли в работе? Если да, насколько в нем копирование и заполнение экранных областей быстрее, чем с НЕОНом?  Мне от граф. ускорителя в основном только это и нужно.

 

Пока его не подключал, но в планах.

Сейчас памятью занимаюсь.

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

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


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

В 26.06.2022 в 16:53, GenaSPB сказал:

про то, что ранее приведенная структура регшистров

А вы откуда ее взяли? Если от Т113, то значит должно быть правильно, если от D1 то не факт...

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


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

On 6/26/2022 at 5:30 PM, mantech said:

А вы откуда ее взяли? Если от Т113, то значит должно быть правильно, если от D1 то не факт...

Из тех исходников. Я ссылку где0то сохранил. Специально 113-о нигде нет.
зы: вроде начало запполнять как-то

 

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


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

Надо ли включать IOMMU для работы заполнения прямоугольников от G2D?

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


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

В 26.06.2022 в 18:26, GenaSPB сказал:

Надо ли включать IOMMU для работы заполнения прямоугольников от G2D?

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

В 26.06.2022 в 17:36, GenaSPB сказал:

зы: вроде начало запполнять как-то

Что изменили?

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

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


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

Сейчас судя по всему что-то выполняется некоторое время, потом бит прерывания появляемся и снимается соответствующей флаг запуска. Эффекта в видеопамяти нет.

Причем скорость работы связана с подаваемой тактовой частотой... 

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

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


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

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

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

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

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

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

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

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

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

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