Hi Greg! ________________________________ From: Greg Gallagher <[email protected]> Sent: Friday, May 15, 2020 1:35 PM To: Joshua Karch <[email protected]> Cc: [email protected] <[email protected]> Subject: Re: Unable to get xeno-gpio-xilinx to work on Zynq Ultrascale + platform
Hi, On Fri, May 15, 2020 at 4:29 PM Joshua Karch via Xenomai <[email protected]> wrote: > > Hello, > > This my first post in 10 years to the Xenomai group, just as the EVL project > comes online! I'm trying to get the xeno-gpio-xilinx driver working but am > encountering the following difficulties: > (1) It seems the standard non Xenomai gpio-xilinx driver SysFS are > prerequisites to making the driver work. Unlike the SJA1000 CAN Drivers I > used in the past which were standalone, I'm seeing a lot of clues that the > Xeno GPIO drivers need to piggyback on top of the core Linux Drivers. I > guess this is a change from when I last worked with Xenomai 10 years ago > where I used xeno-16550A and SJA1000 as RTSER and RTCAN drivers. > > When I attempt to modprobe xeno-gpio-xilinx I receive a message stating: > > modprobe: ERROR: could not insert 'xeno_gpio_xilinx': No such device > Device Tree: > # cat /proc/device-tree/axigpio@a0000000/compatible > xlnx,xps-gpio-1.00.a > > In Xenomai gpio-xilinx.c: > return rtdm_gpiochip_scan_of(NULL, "xlnx,xps-gpio-1.00.a", > RTDM_SUBCLASS_XILINX); > > > I instrumented the Xenomai gpio-xilinx.c and gpio-core.c to see if the > of_find_compatible_node function fails and indeed it does find no such > device. Also I noted that there are no Xilinx specific registers in the > gpio-core.c or in gpio-xilinx.c, making me believe that this driver is > piggybacking on top of the Xilinx driver. > > However: when I modprobe gpio-xilinx the of_find_compatible_node function no > longer fails, so I guess of_find_compatible_node works only with loaded > drivers / GPIO Chips. The issue is, gpio-xilinx has already done the SYSFS > registration, so I get the following errors: Seems the driver wants to use > the same names for RT with SYSFS as non RT. The key error is " > kobject_add_internal failed for !axigpio@a0000000 with -EEXIST, d > on't try to register things with the same name in the same directory. > " > > Thoughts? > > Josh Karch > > > modprobe xeno-gpio-xilinx > [ 55.778656] test probing xilinx gpio rt > [ 55.782753] sysfs: cannot create duplicate filename > '/class/!axigpio@a0000000 > ' > [ 55.789991] CPU: 1 PID: 237 Comm: modprobe Tainted: G W O > 4.19.5 > 5 #8 > [ 55.797470] Hardware name: ZynqMP ZCU102 Rev1.0 (DT) > [ 55.802422] I-pipe domain: Linux > [ 55.805643] Call trace: > [ 55.808090] dump_backtrace+0x0/0x160 > [ 55.811748] show_stack+0x14/0x20 > [ 55.815056] dump_stack+0xcc/0xf4 > [ 55.818363] sysfs_warn_dup+0x60/0x80 > [ 55.822016] sysfs_create_dir_ns+0xcc/0xf0 > [ 55.826106] kobject_add_internal+0xac/0x2a0 > [ 55.830367] kset_register+0x50/0x80 > [ 55.833937] __class_register+0xbc/0x170 > [ 55.837850] __class_create+0x50/0x90 > [ 55.841507] rtdm_gpiochip_add+0x30/0x260 > [ 55.845507] rtdm_gpiochip_alloc+0x50/0xe0 > [ 55.849596] rtdm_gpiochip_scan_of.part.1+0x138/0x1e0 > [ 55.854640] rtdm_gpiochip_scan_of+0x20/0x30 > [ 55.858905] xilinx_gpio_init+0x28/0x1000 [xeno_gpio_xilinx] > [ 55.864554] do_one_initcall+0x74/0x178 > [ 55.868382] do_init_module+0x54/0x1d0 > [ 55.872122] load_module+0x1b90/0x2120 > [ 55.875864] __se_sys_finit_module+0xb8/0xd0 > [ 55.880127] __arm64_sys_finit_module+0x18/0x20 > [ 55.884650] el0_svc_common+0xbc/0x1a0 > [ 55.888390] el0_svc_handler+0x68/0x80 > [ 55.892131] el0_svc+0x8/0x18 > [ 55.895114] kobject_add_internal failed for !axigpio@a0000000 with > -EEXIST, d > on't try to register things with the same name in the same directory. > [ 55.908254] [Xenomai] cannot create sysfs class > [ 55.912796] sysfs: cannot create duplicate filename > '/class/!axigpio@a0000000 > ' > [ 55.920021] CPU: 1 PID: 237 Comm: modprobe Tainted: G W O > 4.19.5 > 5 #8 > [ 55.927500] Hardware name: ZynqMP ZCU102 Rev1.0 (DT) > [ 55.932453] I-pipe domain: Linux > [ 55.935672] Call trace: > [ 55.938115] dump_backtrace+0x0/0x160 > [ 55.941769] show_stack+0x14/0x20 > [ 55.945077] dump_stack+0xcc/0xf4 > [ 55.948384] sysfs_warn_dup+0x60/0x80 > [ 55.952038] sysfs_create_dir_ns+0xcc/0xf0 > [ 55.956127] kobject_add_internal+0xac/0x2a0 > [ 55.960389] kset_register+0x50/0x80 > [ 55.963957] __class_register+0xbc/0x170 > [ 55.967872] __class_create+0x50/0x90 > [ 55.971527] rtdm_gpiochip_add+0x30/0x260 > [ 55.975529] rtdm_gpiochip_alloc+0x50/0xe0 > [ 55.979618] rtdm_gpiochip_scan_of.part.1+0x138/0x1e0 > [ 55.984663] rtdm_gpiochip_scan_of+0x20/0x30 > [ 55.988925] xilinx_gpio_init+0x28/0x1000 [xeno_gpio_xilinx] > [ 55.994576] do_one_initcall+0x74/0x178 > [ 55.998403] do_init_module+0x54/0x1d0 > [ 56.002144] load_module+0x1b90/0x2120 > [ 56.005886] __se_sys_finit_module+0xb8/0xd0 > [ 56.010149] __arm64_sys_finit_module+0x18/0x20 > [ 56.014672] el0_svc_common+0xbc/0x1a0 > [ 56.018412] el0_svc_handler+0x68/0x80 > [ 56.022153] el0_svc+0x8/0x18 > [ 56.025128] kobject_add_internal failed for !axigpio@a0000000 with > -EEXIST, d > on't try to register things with the same name in the same directory. > [ 56.038263] [Xenomai] cannot create sysfs class > [ 56.042798] Xeno Scan returns -17 > # > > > I can take a look. This was working on the Zynq-7000, but I haven't tested it on the Ultrascale. I'll see if I can reproduce. Thanks Greg Thank you for your help with this! The other thing I had to do to make this work was to edit drivers/xenomai/gpio/Kconfig to enable depends on ARCH_ZYNQ || ARCH_ZYNQMP because I assume the AXI driver should be the same for either ZYNQ or ZYNQMP, is that a safe assumption? config XENO_DRIVERS_GPIO_XILINX depends on ARCH_ZYNQ depends on ARCH_ZYNQ || ARCH_ZYNQMP tristate "Support for Xilinx GPIOs" help Best, Josh
