void *page_alloc(size_t pages, int arena) { #if WITH_KERNEL_VM void *result = pmm_alloc_kpages(pages, NULL); return result; #else void *result = novm_alloc_pages(pages, arena); return result; #endif }
/** * @brief Initializes the LCD. * @retval LCD state */ uint8_t BSP_LCD_Init(void) { /* Timing Configuration */ ltdc_handle.Init.HorizontalSync = (RK043FN48H_HSYNC - 1); ltdc_handle.Init.VerticalSync = (RK043FN48H_VSYNC - 1); ltdc_handle.Init.AccumulatedHBP = (RK043FN48H_HSYNC + RK043FN48H_HBP - 1); ltdc_handle.Init.AccumulatedVBP = (RK043FN48H_VSYNC + RK043FN48H_VBP - 1); ltdc_handle.Init.AccumulatedActiveH = (RK043FN48H_HEIGHT + RK043FN48H_VSYNC + RK043FN48H_VBP - 1); ltdc_handle.Init.AccumulatedActiveW = (RK043FN48H_WIDTH + RK043FN48H_HSYNC + RK043FN48H_HBP - 1); ltdc_handle.Init.TotalHeigh = (RK043FN48H_HEIGHT + RK043FN48H_VSYNC + RK043FN48H_VBP + RK043FN48H_VFP - 1); ltdc_handle.Init.TotalWidth = (RK043FN48H_WIDTH + RK043FN48H_HSYNC + RK043FN48H_HBP + RK043FN48H_HFP - 1); /* LCD clock configuration */ BSP_LCD_ClockConfig(<dc_handle, NULL); /* Initialize the LCD pixel width and pixel height */ ltdc_handle.LayerCfg->ImageWidth = RK043FN48H_WIDTH; ltdc_handle.LayerCfg->ImageHeight = RK043FN48H_HEIGHT; /* Background value */ ltdc_handle.Init.Backcolor.Blue = 0; ltdc_handle.Init.Backcolor.Green = 0; ltdc_handle.Init.Backcolor.Red = 0; /* Polarity */ ltdc_handle.Init.HSPolarity = LTDC_HSPOLARITY_AL; ltdc_handle.Init.VSPolarity = LTDC_VSPOLARITY_AL; ltdc_handle.Init.DEPolarity = LTDC_DEPOLARITY_AL; ltdc_handle.Init.PCPolarity = LTDC_PCPOLARITY_IPC; ltdc_handle.Instance = LTDC; if (HAL_LTDC_GetState(<dc_handle) == HAL_LTDC_STATE_RESET) { BSP_LCD_MspInit(<dc_handle, NULL); } HAL_LTDC_Init(<dc_handle); /* allocate the framebuffer */ size_t fb_size_pages = PAGE_ALIGN(RK043FN48H_WIDTH * RK043FN48H_HEIGHT * 4) / PAGE_SIZE; void *fb_address = novm_alloc_pages(fb_size_pages, NOVM_ARENA_SECONDARY); if (!fb_address) panic("failed to allocate framebuffer for LCD\n"); BSP_LCD_LayerDefaultInit(0, (uint32_t)fb_address); BSP_LCD_SelectLayer(0); /* clear framebuffer */ memset((void *)ltdc_handle.LayerCfg[active_layer].FBStartAdress, 0, BSP_LCD_GetXSize() * BSP_LCD_GetYSize() * BSP_LCD_PixelSize()); /* turn the display on */ BSP_LCD_DisplayOn(); return LCD_OK; }