Dear Members,
I am working on to bring up 3.14.30 linux kernel on custom i.MX6 solo based platform. I have added all the required code from 3.14.28 (i.e. 3.14.28_1.0.0_ga release) to
3.14.30 and with this kernel hangs while booting just after loading the "galcore" vivante graphics driver. I tried making "galcore.ko" as a module and it also hangs while
loading. Just for information my LCD and HDMI display are working fine (tested with fb application).
I have also tested platform with (3.14.28_1.0.0_ga release + our custom changes) and gpu works fine there.
Could someone give some pointers what might be going wrong here? or Has anyone faced similar issues on some other kernel?
Waiting for your suggestion/comments/ideas to fix this.
See kernel log:
[ 1.491087] imx sema4 driver is registered.
[ 1.495367] [drm] Initialized drm 1.1.0 20060810
[ 1.499994] [platform_device_alloc][line216]
[ 1.504290] name=Vivante GCCore id =-1
[ 1.508139] pdev->name Vivante GCCore pdev->id -1
[ 1.512694] pdev->name Vivante GCCore pdev->num_resources 0[ 1.518286] Registering platform device 'Vivante GCCore'. Parent at platform
[ 1.525714] [drm] Initialized vivante 1.0.0 20120216 on minor 0
[ 1.534868] loop: module loaded
[ 1.538718] snvs_rtc 20cc034.snvs-rtc-lp: rtc core: registered 20cc034.snvs-rtc-lp as rtc0
[ 1.547150] i2c /dev entries driver
[ 1.551426] sdhci: Secure Digital Host Controller Interface driver
[ 1.557615] sdhci: Copyright(c) Pierre Ossman
[ 1.561999] sdhci-pltfm: SDHCI platform and OF driver helper
[ 1.569822] mmc0: no vqmmc regulator found
[ 1.573965] mmc0: no vmmc regulator found
[ 1.581715] mxc_hdmi 20e0000.hdmi_video: create default modelist
[ 1.621400] mmc0: SDHCI controller on 2194000.usdhc [2194000.usdhc] using ADMA
[ 1.622117] mmc1: no vqmmc regulator found
[ 1.622123] mmc1: no vmmc regulator found
[ 1.625401] imx-ipuv3 2400000.ipu: IPU DMFC DP HIGH RESOLUTION: 1(0,1), 5B(2~5), 5F(6,7)
[ 1.705972] mmc1: SDHCI controller on 2198000.usdhc [2198000.usdhc] using ADMA
[ 1.710630] mmc2: no vqmmc regulator found
[ 1.710636] mmc2: no vmmc regulator found
[ 1.842992] mmc2: SDHCI controller on 219c000.usdhc [219c000.usdhc] using ADMA
[ 1.845600] galcore: clk_get vg clock failed, disable vg!
[ 1.845624] Galcore version 5.0.11.25762
[ 1.924703] mmc1: BKOPS_EN bit is not set
[ 1.935351] mmc1: new high speed DDR MMC card at address 0001
[ 1.935689] mmcblk0: mmc1:0001 MMC08G 7.32 GiB
[ 1.935851] mmcblk0boot0: mmc1:0001 MMC08G partition 1 2.00 MiB
[ 1.935950] mmcblk0boot1: mmc1:0001 MMC08G partition 2 2.00 MiB
[ 1.936046] mmcblk0rpmb: mmc1:0001 MMC08G partition 3 128 KiB
[ 1.941216] mmcblk0: p1 p2 p3 p4 < p5 p6 p7 p8 >
[ 1.944268] mmcblk0boot1: unknown partition table
[ 1.945429] mmcblk0boot0: unknown partition table
[ 8.764510] random: nonblocking pool is initialized
Thanks & Regards,
Vikash
Hi vikash,
Make sure galcore matches the kernel you compile. Check the file / drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_version.h
Regards
Hi,
drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_version.h looks like. I am also compiling galcore withing new kernel. What do you mean by galcore should match the kernel?
#ifndef __gc_hal_version_h_
#define __gc_hal_version_h_
#define gcvVERSION_MAJOR 5
#define gcvVERSION_MINOR 0
#define gcvVERSION_PATCH 11
#define gcvVERSION_BUILD 25762
#define gcvVERSION_STRING "5.0.11.p4.25762"
#define gcvVERSION_DATE __DATE__
#define gcvVERSION_TIME __TIME__
#endif /* __gc_hal_version_h_ */
Regards,
Vikash
Hi vikash,
The gc_hal_version should math the major kernel version that you are using in this case is correct for 3.14 as statement in the release note.
If in any case you tried to load the gpu driver with modprobe vivante or modprobe galcore and still received a kernel crash, I suggest to check your dtb setting for the GPU clock instead.
Hope this helps
Please check which device tree you are using? ldo by pass or ldo enable.
Hi Biyong Sun,
Thanks for the reply.
Yes I am also thinking there is some issue with the configuration as it looks GPU not powering up and galcore is stuck in _ResetGPU() function.
I have following entries in our custom dts and dtsi and it works with 3.14.28 kernel. How to check if I am using ldo by pass or ldo enable?
gpu@00130000 {
compatible = "fsl,imx6dl-gpu", "fsl,imx6q-gpu";
reg = <0x00130000 0x4000>, <0x00134000 0x4000>,
<0x0 0x0>;
reg-names = "iobase_3d", "iobase_2d",
"phys_baseaddr";
interrupts = <0 9 IRQ_TYPE_LEVEL_HIGH>,
<0 10 IRQ_TYPE_LEVEL_HIGH>;
interrupt-names = "irq_3d", "irq_2d";
clocks = <&clks IMX6QDL_CLK_OPENVG_AXI>, <&clks IMX6QDL_CLK_GPU3D_AXI>,
<&clks IMX6QDL_CLK_GPU2D_CORE>, <&clks IMX6QDL_CLK_GPU3D_CORE>,
<&clks IMX6QDL_CLK_DUMMY>;
clock-names = "gpu2d_axi_clk", "gpu3d_axi_clk",
"gpu2d_clk", "gpu3d_clk",
"gpu3d_shader_clk";
resets = <&src 0>, <&src 3>;
reset-names = "gpu3d", "gpu2d";
power-domains = <&gpc 1>;
};
gpc: gpc@020dc000 {
compatible = "fsl,imx6q-gpc";
reg = <0x020dc000 0x4000>;
interrupts = <0 89 IRQ_TYPE_LEVEL_HIGH>,
<0 90 IRQ_TYPE_LEVEL_HIGH>;
pu-supply = <®_pu>;
clocks = <&clks IMX6QDL_CLK_GPU3D_CORE>,
<&clks IMX6QDL_CLK_GPU3D_SHADER>,
<&clks IMX6QDL_CLK_GPU2D_CORE>,
<&clks IMX6QDL_CLK_GPU2D_AXI>,
<&clks IMX6QDL_CLK_OPENVG_AXI>,
<&clks IMX6QDL_CLK_VPU_AXI>;
#power-domain-cells = <1>;
};
&gpc {
// use ldo-bypass, u-boot will check it and configure
fsl,ldo-bypass = <1>;
fsl,wdog-reset = <2>;
};
Thanks & Regards,
Vikash
If you have read i.MX_Linux_Release_Notes.pdf, you will find
For example:
ldo bypass: imx6q-sabresd.dts
ldo enable :imx6q-sabresd-ldo.dts
This dts ldo bypass needs uboot to support.
cpu.c
void arch_preboot_os(void)
{
#if defined(CONFIG_LDO_BYPASS_CHECK)
ldo_mode_set(check_ldo_bypass());
#endif
#if defined(CONFIG_VIDEO_IPUV3)
/* disable video before launching O/S */
ipuv3_fb_shutdown();
#endif
#ifdef CONFIG_VIDEO_GIS
/* Entry for GIS */
mxc_disable_gis();
#endif
#ifdef CONFIG_VIDEO_MXS
lcdif_power_down();
#endif
}