i.MX93: Sharing GPIO2 between Linux and Cortex-M33 causes Linux touchscreen to stop

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

i.MX93: Sharing GPIO2 between Linux and Cortex-M33 causes Linux touchscreen to stop

94 Views
bora
Contributor III

I am using an i.MX93 with Linux on the Cortex-A55 and bare-metal MCUXpresso SDK firmware on the Cortex-M33.

I want both cores to use different pins of GPIO2:

Linux: touchscreen and buttons. The touchscreen uses GPIO2_IO11/IO12 for IRQ/reset.
M33: GPIO2_IO22 as an interrupt input (RANin) and GPIO2_IO27 as an output (RANout).
Problem

Without starting the M33 firmware, the Linux touchscreen works, buttons also. When the M33 firmware runs, touch and buttons no longer work, and the touchscreen interrupt counter in /proc/interrupts does not increase:

on M33 I use this configuration:

#define PIN_IN_RGPIO           GPIO2
#define PIN_OUT_RGPIO          GPIO2
#define PIN_IN_RGPIO_PIN       22U
#define PIN_OUT_RGPIO_PIN      27U
#define M33_PIN_MASK ((1U << PIN_OUT_RGPIO_PIN) | (1U << PIN_IN_RGPIO_PIN))
#define EXAMPLE_RGPIO_CLOCK_ROOT kCLOCK_Root_BusWakeup
#define EXAMPLE_RGPIO_CLOCK_GATE kCLOCK_Gpio2
 
const clock_root_config_t rgpioClkCfg = {
    .clockOff = false,
    .mux = 0,
    .div = 1
};
 
CLOCK_SetRootClock(EXAMPLE_RGPIO_CLOCK_ROOT, &rgpioClkCfg);
    CLOCK_EnableClock(EXAMPLE_RGPIO_CLOCK_GATE);
    CLOCK_EnableClock(kCLOCK_Gpio2);
 
PIN_OUT_RGPIO->PCNS &= ~M33_PIN_MASK;
GPIO2->ICNS = 0x0;
 
RGPIO_SetPinInterruptConfig(GPIO2, 22U,
                            kRGPIO_InterruptOutput0,
                            kRGPIO_InterruptRisingEdge);
EnableIRQ(GPIO2_0_IRQn);

 

I would appreciate a support for that.

Bests

Tags (1)
3 Replies

59 Views
JorgeCas
NXP TechSupport
NXP TechSupport

Hello,

This seems to be an issue with the interrupt configuration since you can use different GPIOs from the same group in different cores.

Which interrupt did you configure in Linux device tree?

Best regards.

0 Kudos
Reply

37 Views
bora
Contributor III

Hi,

for my touch I use this

hycon: touchscreen@38 {
		compatible = "hycon,hy4633";
		pinctrl-names = "default";
		pinctrl-0 = <&pinctrl_touchscreen>;
		reg = <0x38>;
		interrupt-parent = <&gpio2>;
		interrupts = <11 IRQ_TYPE_EDGE_FALLING>;
		reset-gpios = <&gpio2 12 GPIO_ACTIVE_LOW>;
		vcc-supply = <&reg_3p3v>;
		touchscreen-size-x = <320>;
	  	touchscreen-size-y = <280>;
    };

 

Tags (1)
0 Kudos
Reply

23 Views
JorgeCas
NXP TechSupport
NXP TechSupport

Hello,

Please try to change the interrupt used by M33 core by changing:

GPIO2->ICNS &= ~(1U << 1U);
EnableIRQ(GPIO2_1_IRQn);

Best regards. 

0 Kudos
Reply
%3CLINGO-SUB%20id%3D%22lingo-sub-2418427%22%20slang%3D%22en-US%22%20mode%3D%22CREATE%22%3Ei.MX93%3A%20Sharing%20GPIO2%20between%20Linux%20and%20Cortex-M33%20causes%20Linux%20touchscreen%20to%20stop%3C%2FLINGO-SUB%3E%3CLINGO-BODY%20id%3D%22lingo-body-2418427%22%20slang%3D%22en-US%22%20mode%3D%22CREATE%22%3E%3CP%3EI%20am%20using%20an%20i.MX93%20with%20Linux%20on%20the%20Cortex-A55%20and%20bare-metal%20MCUXpresso%20SDK%20firmware%20on%20the%20Cortex-M33.%3C%2FP%3E%3CP%3EI%20want%20both%20cores%20to%20use%20different%20pins%20of%20GPIO2%3A%3C%2FP%3E%3CP%3E%3CSTRONG%3ELinux%3C%2FSTRONG%3E%3A%20touchscreen%20and%20buttons.%20The%20touchscreen%20uses%20GPIO2_IO11%2FIO12%20for%20IRQ%2Freset.%3CBR%20%2F%3E%3CSTRONG%3EM33%3C%2FSTRONG%3E%3A%20GPIO2_IO22%20as%20an%20interrupt%20input%20(RANin)%20and%20GPIO2_IO27%20as%20an%20output%20(RANout).%3CBR%20%2F%3EProblem%3C%2FP%3E%3CP%3EWithout%20starting%20the%20M33%20firmware%2C%20the%20Linux%20touchscreen%20works%2C%20buttons%20also.%20When%20the%20M33%20firmware%20runs%2C%20touch%20and%20buttons%20no%20longer%20work%2C%20and%20the%20touchscreen%20interrupt%20counter%20in%20%2Fproc%2Finterrupts%20does%20not%20increase%3A%3CBR%20%2F%3E%3CBR%20%2F%3Eon%20M33%20I%20use%20this%20configuration%3A%3C%2FP%3E%3CPRE%20class%3D%22lia-code-sample%20language-markup%22%3E%3CCODE%3E%23define%20PIN_IN_RGPIO%20%20%20%20%20%20%20%20%20%20%20GPIO2%0A%23define%20PIN_OUT_RGPIO%20%20%20%20%20%20%20%20%20%20GPIO2%0A%23define%20PIN_IN_RGPIO_PIN%20%20%20%20%20%20%2022U%0A%23define%20PIN_OUT_RGPIO_PIN%20%20%20%20%20%2027U%0A%23define%20M33_PIN_MASK%20((1U%20%26lt%3B%26lt%3B%20PIN_OUT_RGPIO_PIN)%20%7C%20(1U%20%26lt%3B%26lt%3B%20PIN_IN_RGPIO_PIN))%0A%23define%20EXAMPLE_RGPIO_CLOCK_ROOT%20kCLOCK_Root_BusWakeup%0A%23define%20EXAMPLE_RGPIO_CLOCK_GATE%20kCLOCK_Gpio2%0A%20%0Aconst%20clock_root_config_t%20rgpioClkCfg%20%3D%20%7B%0A%20%20%20%20.clockOff%20%3D%20false%2C%0A%20%20%20%20.mux%20%3D%200%2C%0A%20%20%20%20.div%20%3D%201%0A%7D%3B%0A%20%0ACLOCK_SetRootClock(EXAMPLE_RGPIO_CLOCK_ROOT%2C%20%26amp%3BrgpioClkCfg)%3B%0A%20%20%20%20CLOCK_EnableClock(EXAMPLE_RGPIO_CLOCK_GATE)%3B%0A%20%20%20%20CLOCK_EnableClock(kCLOCK_Gpio2)%3B%0A%20%0APIN_OUT_RGPIO-%26gt%3BPCNS%20%26amp%3B%3D%20~M33_PIN_MASK%3B%0AGPIO2-%26gt%3BICNS%20%3D%200x0%3B%0A%20%0ARGPIO_SetPinInterruptConfig(GPIO2%2C%2022U%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20kRGPIO_InterruptOutput0%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20kRGPIO_InterruptRisingEdge)%3B%0AEnableIRQ(GPIO2_0_IRQn)%3B%0A%3C%2FCODE%3E%3C%2FPRE%3E%3CBR%20%2F%3E%3CP%3EI%20would%20appreciate%20a%20support%20for%20that.%3C%2FP%3E%3CP%3EBests%3C%2FP%3E%3C%2FLINGO-BODY%3E%3CLINGO-SUB%20id%3D%22lingo-sub-2418665%22%20slang%3D%22en-US%22%20mode%3D%22CREATE%22%20translate%3D%22no%22%3ERe%3A%20i.MX93%3A%20Sharing%20GPIO2%20between%20Linux%20and%20Cortex-M33%20causes%20Linux%20touchscreen%20to%20stop%3C%2FLINGO-SUB%3E%3CLINGO-BODY%20id%3D%22lingo-body-2418665%22%20slang%3D%22en-US%22%20mode%3D%22CREATE%22%3E%3CP%3EHi%2C%3C%2FP%3E%3CP%3Efor%20my%20touch%20I%20use%20this%3C%2FP%3E%3CPRE%20class%3D%22lia-code-sample%20language-markup%22%3E%3CCODE%3Ehycon%3A%20touchscreen%4038%20%7B%0A%09%09compatible%20%3D%20%22hycon%2Chy4633%22%3B%0A%09%09pinctrl-names%20%3D%20%22default%22%3B%0A%09%09pinctrl-0%20%3D%20%26lt%3B%26amp%3Bpinctrl_touchscreen%26gt%3B%3B%0A%09%09reg%20%3D%20%26lt%3B0x38%26gt%3B%3B%0A%09%09interrupt-parent%20%3D%20%26lt%3B%26amp%3Bgpio2%26gt%3B%3B%0A%09%09interrupts%20%3D%20%26lt%3B11%20IRQ_TYPE_EDGE_FALLING%26gt%3B%3B%0A%09%09reset-gpios%20%3D%20%26lt%3B%26amp%3Bgpio2%2012%20GPIO_ACTIVE_LOW%26gt%3B%3B%0A%09%09vcc-supply%20%3D%20%26lt%3B%26amp%3Breg_3p3v%26gt%3B%3B%0A%09%09touchscreen-size-x%20%3D%20%26lt%3B320%26gt%3B%3B%0A%09%20%20%09touchscreen-size-y%20%3D%20%26lt%3B280%26gt%3B%3B%0A%20%20%20%20%7D%3B%3C%2FCODE%3E%3C%2FPRE%3E%3CBR%20%2F%3E%3C%2FLINGO-BODY%3E%3CLINGO-SUB%20id%3D%22lingo-sub-2418507%22%20slang%3D%22en-US%22%20mode%3D%22CREATE%22%20translate%3D%22no%22%3ERe%3A%20i.MX93%3A%20Sharing%20GPIO2%20between%20Linux%20and%20Cortex-M33%20causes%20Linux%20touchscreen%20to%20stop%3C%2FLINGO-SUB%3E%3CLINGO-BODY%20id%3D%22lingo-body-2418507%22%20slang%3D%22en-US%22%20mode%3D%22CREATE%22%3E%3CP%3EHello%2C%3C%2FP%3E%0A%3CP%3EThis%20seems%20to%20be%20an%20issue%20with%20the%20interrupt%20configuration%20since%20you%20can%20use%20different%20GPIOs%20from%20the%20same%20group%20in%20different%20cores.%3C%2FP%3E%0A%3CP%3EWhich%20interrupt%20did%20you%20configure%20in%20Linux%20device%20tree%3F%3C%2FP%3E%0A%3CP%3EBest%20regards.%3C%2FP%3E%3C%2FLINGO-BODY%3E%3CLINGO-SUB%20id%3D%22lingo-sub-2418818%22%20slang%3D%22en-US%22%20mode%3D%22CREATE%22%20translate%3D%22no%22%3ERe%3A%20i.MX93%3A%20Sharing%20GPIO2%20between%20Linux%20and%20Cortex-M33%20causes%20Linux%20touchscreen%20to%20stop%3C%2FLINGO-SUB%3E%3CLINGO-BODY%20id%3D%22lingo-body-2418818%22%20slang%3D%22en-US%22%20mode%3D%22CREATE%22%3E%3CP%3EHello%2C%3C%2FP%3E%0A%3CP%3EPlease%20try%20to%20change%20the%20interrupt%20used%20by%20M33%20core%20by%20changing%3A%3C%2FP%3E%0A%3CPRE%20class%3D%22lia-code-sample%20language-c%22%3E%3CCODE%3EGPIO2-%26gt%3BICNS%20%26amp%3B%3D%20~(1U%20%26lt%3B%26lt%3B%201U)%3B%0AEnableIRQ(GPIO2_1_IRQn)%3B%3C%2FCODE%3E%3C%2FPRE%3E%0A%3CP%3EBest%20regards.%26nbsp%3B%3C%2FP%3E%3C%2FLINGO-BODY%3E