void mali_platform_device_unregister(void) { MALI_DEBUG_PRINT(4, ("mali_platform_device_unregister() called\n")); platform_device_unregister(&mali_gpu_device); #if defined(CONFIG_ARCH_REALVIEW) mali_write_phys(0xC0010020, 0x9); /* Restore default (legacy) memory mapping */ #endif }
int mali_platform_device_deinit(struct platform_device *device) { MALI_IGNORE(device); MALI_DEBUG_PRINT(4, ("mali_platform_device_deinit() called\n")); mali_core_scaling_term(); #if defined(CONFIG_ARCH_REALVIEW) mali_write_phys(0xC0010020, 0x9); /* Restore default (legacy) memory mapping */ #endif return 0; }
int mali_platform_device_register(void) { int err = -1; #if defined(CONFIG_ARCH_REALVIEW) u32 m400_gp_version; #endif MALI_DEBUG_PRINT(4, ("mali_platform_device_register() called\n")); /* Detect present Mali GPU and connect the correct resources to the device */ #if defined(CONFIG_ARCH_VEXPRESS) if (mali_read_phys(0xFC020000) == 0x00010100) { MALI_DEBUG_PRINT(4, ("Registering Mali-450 MP8 device\n")); err = platform_device_add_resources(&mali_gpu_device, mali_gpu_resources_m450_mp8, sizeof(mali_gpu_resources_m450_mp8) / sizeof(mali_gpu_resources_m450_mp8[0])); } #elif defined(CONFIG_ARCH_REALVIEW) m400_gp_version = mali_read_phys(0xC000006C); if (m400_gp_version == 0x00000000 && (mali_read_phys(0xC000206c) & 0xFFFF0000) == 0x0A070000) { MALI_DEBUG_PRINT(4, ("Registering Mali-200 device\n")); err = platform_device_add_resources(&mali_gpu_device, mali_gpu_resources_m200, sizeof(mali_gpu_resources_m200) / sizeof(mali_gpu_resources_m200[0])); mali_write_phys(0xC0010020, 0xA); /* Enable direct memory mapping for FPGA */ } else if ((m400_gp_version & 0xFFFF0000) == 0x0C070000) { MALI_DEBUG_PRINT(4, ("Registering Mali-300 device\n")); err = platform_device_add_resources(&mali_gpu_device, mali_gpu_resources_m300, sizeof(mali_gpu_resources_m300) / sizeof(mali_gpu_resources_m300[0])); mali_write_phys(0xC0010020, 0xA); /* Enable direct memory mapping for FPGA */ } else if ((m400_gp_version & 0xFFFF0000) == 0x0B070000) { u32 fpga_fw_version = mali_read_phys(0xC0010000); if (fpga_fw_version == 0x130C008F || fpga_fw_version == 0x110C008F) { /* Mali-400 MP1 r1p0 or r1p1 */ MALI_DEBUG_PRINT(4, ("Registering Mali-400 MP1 device\n")); err = platform_device_add_resources(&mali_gpu_device, mali_gpu_resources_m400_mp1, sizeof(mali_gpu_resources_m400_mp1) / sizeof(mali_gpu_resources_m400_mp1[0])); mali_write_phys(0xC0010020, 0xA); /* Enable direct memory mapping for FPGA */ } else if (fpga_fw_version == 0x130C000F) { /* Mali-400 MP2 r1p1 */ MALI_DEBUG_PRINT(4, ("Registering Mali-400 MP2 device\n")); err = platform_device_add_resources(&mali_gpu_device, mali_gpu_resources_m400_mp2, sizeof(mali_gpu_resources_m400_mp2) / sizeof(mali_gpu_resources_m400_mp2[0])); mali_write_phys(0xC0010020, 0xA); /* Enable direct memory mapping for FPGA */ } } #endif if (0 == err) { err = platform_device_add_data(&mali_gpu_device, &mali_gpu_data, sizeof(mali_gpu_data)); if (0 == err) { /* Register the platform device */ err = platform_device_register(&mali_gpu_device); if (0 == err) { #ifdef CONFIG_PM_RUNTIME #if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,37)) pm_runtime_set_autosuspend_delay(&(mali_gpu_device.dev), 1000); pm_runtime_use_autosuspend(&(mali_gpu_device.dev)); #endif pm_runtime_enable(&(mali_gpu_device.dev)); #endif return 0; } } platform_device_unregister(&mali_gpu_device); } return err; }
/* Register the platform device */ err = platform_device_register(&mali_gpu_device); if (0 == err) { #ifdef CONFIG_PM_RUNTIME #if (LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 37)) pm_runtime_set_autosuspend_delay(&(mali_gpu_device.dev), 1000); pm_runtime_use_autosuspend(&(mali_gpu_device.dev)); #endif pm_runtime_enable(&(mali_gpu_device.dev)); #endif MALI_DEBUG_ASSERT(0 < num_pp_cores); mali_core_scaling_init(num_pp_cores); return 0; } return err; } void mali_platform_device_unregister(void) { MALI_DEBUG_PRINT(4, ("mali_platform_device_unregister() called\n")); mali_core_scaling_term(); platform_device_unregister(&mali_gpu_device); platform_device_put(&mali_gpu_device); #if defined(CONFIG_ARCH_REALVIEW) mali_write_phys(0xC0010020, 0x9); /* Restore default (legacy) memory mapping */ #endif } static void mali_platform_device_release(struct device *device) { MALI_DEBUG_PRINT(4, ("mali_platform_device_release() called\n")); } #else /* CONFIG_MALI_DT */ int mali_platform_device_init(struct platform_device *device) { int num_pp_cores; int err = -1; #if defined(CONFIG_ARCH_REALVIEW) u32 m400_gp_version; #endif /* Detect present Mali GPU and connect the correct resources to the device */ #if defined(CONFIG_ARCH_VEXPRESS) #if defined(CONFIG_ARM64) if (mali_read_phys(0x6F000000) == 0x40601450) { MALI_DEBUG_PRINT(4, ("Registering Mali-450 MP6 device\n")); num_pp_cores = 6; } #else if (mali_read_phys(0xFC000000) == 0x00000450) { MALI_DEBUG_PRINT(4, ("Registering Mali-450 MP8 device\n")); num_pp_cores = 8; } else if (mali_read_phys(0xFC000000) == 0x40400450) { MALI_DEBUG_PRINT(4, ("Registering Mali-450 MP4 device\n")); num_pp_cores = 4; } #endif #elif defined(CONFIG_ARCH_REALVIEW) m400_gp_version = mali_read_phys(0xC000006C); if ((m400_gp_version & 0xFFFF0000) == 0x0C070000) { MALI_DEBUG_PRINT(4, ("Registering Mali-300 device\n")); num_pp_cores = 1; mali_write_phys(0xC0010020, 0xA); /* Enable direct memory mapping for FPGA */ } else if ((m400_gp_version & 0xFFFF0000) == 0x0B070000) { u32 fpga_fw_version = mali_read_phys(0xC0010000); if (fpga_fw_version == 0x130C008F || fpga_fw_version == 0x110C008F) { /* Mali-400 MP1 r1p0 or r1p1 */ MALI_DEBUG_PRINT(4, ("Registering Mali-400 MP1 device\n")); num_pp_cores = 1; mali_write_phys(0xC0010020, 0xA); /* Enable direct memory mapping for FPGA */ } else if (fpga_fw_version == 0x130C000F) { /* Mali-400 MP2 r1p1 */ MALI_DEBUG_PRINT(4, ("Registering Mali-400 MP2 device\n")); num_pp_cores = 2; mali_write_phys(0xC0010020, 0xA); /* Enable direct memory mapping for FPGA */ } } #endif err = platform_device_add_data(device, &mali_gpu_data, sizeof(mali_gpu_data)); if (0 == err) { #ifdef CONFIG_PM_RUNTIME #if (LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 37)) pm_runtime_set_autosuspend_delay(&(device->dev), 1000); pm_runtime_use_autosuspend(&(device->dev)); #endif pm_runtime_enable(&(device->dev)); #endif MALI_DEBUG_ASSERT(0 < num_pp_cores); mali_core_scaling_init(num_pp_cores); } return err; }