Problem with galcore ( GPU module ) on imx6-Solo

cancel
Showing results for 
Show  only  | Search instead for 
Did you mean: 

Problem with galcore ( GPU module ) on imx6-Solo

3,425 Views
alexberenshtein
Contributor III

Hi.

 Inputs 1: 

- EVB  with i.mx6-DL;

- Custom board with i.mx6-Solo;

- Yocto  2.0  / 2.1 /  2.2;

- galcore.ko;

insmode  galcore.ko - It works perfectly ( I see /dev/galcore )

 Inputs 2: 

- EVB  with i.mx6-DL;

- Custom board with i.mx6-Solo;

- Yocto   2.5 /  2.6 / 2.7 / 2.8 / 2.9 / 3.0  , with kernel 4.9xx / 4.14xx / 4.19xx / 5.xx 

- galcore.ko;

insmode  galcore.ko - does not work ( I do not see /dev/galcore )

On display:

insmod galcore.ko

galcore 130000.gpu: ignoring dependency for device, assuming no driver

I'm trying to debug the kernel with printk  & I see:

In the  file - KERNEL_SOURCE/drivers/base/power/domain.c

In the function  - static struct generic_pm_domain *genpd_get_from_provider( struct of_phandle_args *genpdspec )

I see problem in string :  if ( provider->node == genpdspec->np) . 

Unfortunately I see that -  provider->node !=genpdspec->np

I continue to debug  i.mx6-Solo ( custom board ) & see:

 provider->node->name ---> power-domain
 provider->node->full_name ---> power-domain@0

 genpdspec->np->name ---> power-domain
 genpdspec->np->full_name ---> power-domain@1

 provider->node->full_name &  genpdspec->np->full_name - never matches.

After that, I debug i.mx6-DL , & see:

 provider->node->name ---> power-domain
 provider->node->full_name ---> power-domain@1

 genpdspec->np->name ---> power-domain
 genpdspec->np->full_name ---> power-domain@1

 provider->node->full_name &  genpdspec->np->full_name -  matches. It works perfectly .

After that, I debug  i.mx6-Solo ( Custom board ) , with Kernel 4.1.15 ( Yocto 2.0 / 2.1 / 2.2 )

provider->node->name ---> gpc
provider->node->full_name ---> /soc/aips-bus@02000000/gpc@020dc000
genpdspec->np->name ---> gpc
genpdspec->np->full_name ---> /soc/aips-bus@02000000/gpc@020dc000
provider->node->full_name &  genpdspec->np->full_name -  matches. It works perfectly .

 

The difference between the boards is minimal ( i.mx6-Solo & i.mx6-DL ). Please see 2  *.dtsi file.

Important :

I use 2 identical Image ( Yocto 2.5 / 2.6 / 2.7 / 2.8 / 2.9 / 3.0 ) , on EVB-i.mx6-DL - "galcore" it works perfectly , on Custom board i.mx6-Solo "galcore" - do not work..
In file imx6qdl.dtsi , I see node "gpc" , with power-domain@0 & power-domain@1 , maybe here a problem ?

 

gpc: gpc@20dc000 {
compatible = "fsl,imx6q-gpc";
reg = <0x020dc000 0x4000>;
interrupt-controller;
#interrupt-cells = <3>;
interrupts = <0 89 IRQ_TYPE_LEVEL_HIGH>,
<0 90 IRQ_TYPE_LEVEL_HIGH>;
interrupt-parent = <&intc>;
clocks = <&clks IMX6QDL_CLK_IPG>;
clock-names = "ipg";

pgc {
#address-cells = <1>;
#size-cells = <0>;

power-domain@0 {
reg = <1>; /*0*/
#power-domain-cells = <0>;
};


pd_pu: power-domain@1 {
reg = <1>;
#power-domain-cells = <0>;
power-supply = <&reg_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>;
};
};
};

I hope to help.

Labels (2)
9 Replies

3,103 Views

Hi,

I had the same problem and also debugged it down to the power-domain issue (thanks to you I knew to look there!). I have solved it, at least in my use case.

In short: I enabled CONFIG_I2C_MUX. CONFIG_I2C_MUX_GPIO is the key here.

I found out that the pfuze100-regulator driver (of the pfuze100-regulator on i.MX6) was not probed. This driver is needed in order to probe the power-domain@1. It supplies the vddpu (among others) which is the supply for pd_pu: power-domain@1.

I found out that the pfuze100-regulator is attached to the I2C bus, as described in arch/arm/boot/dts/imx6qdl-qmx6.dtsi. In the device tree, this is under i2cmux, which is controlled by i2c-mux-gpio. I noticed that i2c-mux-gpio driver was not probed either, and in fact, not even in the kernel config!

It was in my defconfig, however it never ended up in the final config because it depends on a "parent" driver, i2c-mux. Once I enabled CONFIG_I2C_MUX, galcore started working.

I hope this helps (at least someone)!

0 Kudos
Reply

2,906 Views
zohanlin
Contributor IV

I have the same problem, my custom board is i.MX 6Quad and my OS is yocto 3.1 Zeus(kernel 5.4.47).

CONFIG_I2C_MUX & CONFIG_I2C_MUX_GPIO in my kernel config have been enabled already.

By the way, the VPU driver doesn't work, too.

 

And I test yocto 2.4 rock (kernel 4.9.88) in my board, the GPU & VPU driver is work well.

0 Kudos
Reply

3,228 Views
alexberenshtein
Contributor III

Hi.

Thank to replay.

Did you explain to say where the problem is?

I do not understand where the problem . 

If possible, please watch these dtsi - files , this is the minimum difference.

Best Regards.

0 Kudos
Reply

3,131 Views

Hi!

It seems that I have reproduced this same issue of power-domain mismatch with galcore on an i.MX6 Dual (on a different board). Any idea what the exact issue in the device tree (or elsewhere) was?

 

Best regards,

Matias Larsson

0 Kudos
Reply

3,228 Views
Bio_TICFSL
NXP TechSupport
NXP TechSupport

Hello Alex,

Sorry and yes the issue is on DTBs.

Regards

0 Kudos
Reply

2,908 Views
zohanlin
Contributor IV

Hello Bio,

I have the same problem, my custom board is i.MX 6Quad and my OS is yocto 3.1 Zeus(kernel 5.4.47).

Could you tell my how to modify the dts to fix the issue?

0 Kudos
Reply

3,134 Views

Hi!

It seems that I have reproduced this same issue of power-domain mismatch with galcore on an i.MX6 Dual. Any idea what the exact issue in the device tree or elsewhere was?

 

Best regards,

Matias Larsson

0 Kudos
Reply

3,102 Views

I solved this, see my other comment on this thread.

0 Kudos
Reply

3,132 Views

I want to add to my message that this is a different board though. Kernel version is 5.4.

0 Kudos
Reply