This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

DRA829V: PCIe rescan fails

Part Number: DRA829V
Other Parts Discussed in Thread: DRA829

HI,
We use a custom DRA829 board.
Linux version is 5.10
SDK is 8.02

I'm trying to connect a custom board with PCIeSW as RC.
Eight devices are connected to EP of PCIeSW.

PCIeSW releases reset by GPIO after custom board BOOT is finished.

Kernel crashes when PCI rescan is performed after releasing reset.
Attached is the error log and part of the device-tree.

root@j7-evm:/home/root# echo 405 > /sys/class/gpio/export
root@j7-evm:/home/root# echo 406 > /sys/class/gpio/export
root@j7-evm:/home/root# echo high | tee /sys/class/gpio/gpio406/direction  /sys/class/gpio/gpio405/direction
high
root@j7-evm:/home/root# echo 1 > /sys/bus/pci/devices/0000\:00\:00.0/remove
[  925.440265] pci_generic_config_write32: 21 callbacks suppressed
[  925.440272] pci_bus 0000:00: 2-byte config write to 0000:00:00.0 offset 0x84 may corrupt adjacent RW1C bits
[  925.455962] pci_bus 0000:00: 2-byte config write to 0000:00:00.0 offset 0xdc may corrupt adjacent RW1C bits
[  925.465717] pci_bus 0000:00: 2-byte config write to 0000:00:00.0 offset 0x92 may corrupt adjacent RW1C bits
[  925.475435] pci_bus 0000:00: 2-byte config write to 0000:00:00.0 offset 0x9c may corrupt adjacent RW1C bits
[  925.485886] pci_bus 0000:00: 2-byte config write to 0000:00:00.0 offset 0x92 may corrupt adjacent RW1C bits
[  925.495655] pci_bus 0000:00: 2-byte config write to 0000:00:00.0 offset 0x4 may corrupt adjacent RW1C bits
[  925.505371] pci_bus 0000:00: 2-byte config write to 0000:00:00.0 offset 0x4 may corrupt adjacent RW1C bits
[  925.515107] pci_bus 0000:01: busn_res: [bus 01] is released
root@j7-evm:/home/root# echo 1 > /sys/bus/pci/rescan
[ 1000.460264] pci 0000:00:00.0: [104c:b00d] type 01 class 0x060400
[ 1000.466276] pci_bus 0000:00: 2-byte config write to 0000:00:00.0 offset 0x4 may corrupt adjacent RW1C bits
[ 1000.475924] pci_bus 0000:00: 2-byte config write to 0000:00:00.0 offset 0x4 may corrupt adjacent RW1C bits
[ 1000.485599] pci_bus 0000:00: 2-byte config write to 0000:00:00.0 offset 0x92 may corrupt adjacent RW1C bits
[ 1000.495328] pci_bus 0000:00: 2-byte config write to 0000:00:00.0 offset 0xb2 may corrupt adjacent RW1C bits
[ 1000.505083] pci 0000:00:00.0: supports D1
[ 1000.509083] pci 0000:00:00.0: PME# supported from D0 D1 D3hot
[ 1000.514820] pci_bus 0000:00: 2-byte config write to 0000:00:00.0 offset 0x84 may corrupt adjacent RW1C bits
[ 1000.525564] pci_bus 0000:00: 2-byte config write to 0000:00:00.0 offset 0x3e may corrupt adjacent RW1C bits
[ 1000.536461] pci 0000:01:00.0: [12d8:c232] type 01 class 0x060400
[ 1000.542961] pci 0000:01:00.0: reg 0x10: [mem 0x00000000-0x0007ffff]
[ 1000.549528] pci 0000:01:00.0: PME# supported from D0 D3hot D3cold
[ 1000.555755] pci_bus 0000:00: 2-byte config write to 0000:00:00.0 offset 0xe8 may corrupt adjacent RW1C bits
[ 1000.565701] pci_bus 0000:00: 2-byte config write to 0000:00:00.0 offset 0xd0 may corrupt adjacent RW1C bits
[ 1000.575483] pci_bus 0000:00: 2-byte config write to 0000:00:00.0 offset 0xd0 may corrupt adjacent RW1C bits
[ 1000.586087] pci 0000:01:00.0: bridge configuration invalid ([bus 00-00]), reconfiguring
[ 1000.595188] pci_bus 0000:02: busn_res: can not insert [bus 02-01] under [bus 01] (conflicts with (null) [bus 01])
ERROR:   Unhandled External Abort received on 0x80000000 from S-EL1
ERROR:   exception reason=0 syndrome=0xbf000000
Unhandled Exception from EL1
x0             = 0xffff800014610000
x1             = 0x0000000000000000
x2             = 0xffff800014c00008
x3             = 0x0000000000000002
x4             = 0x000000000000000b
x5             = 0xffff000803a46800
x6             = 0xffff800012b6f964
x7             = 0x000000000000ea60
x8             = 0x0000000080b5111d
x9             = 0x00000000c23212d8
x10            = 0xffff8000111e23a0
x11            = 0xffff8000111fa3e0
x12            = 0x00000000ffffffea
x13            = 0xffff0008046df330
x14            = 0x00000000000006b4
x15            = 0xffff0008046dee00
x16            = 0x0000000000000000
x17            = 0x0000000000000000
x18            = 0x0000000000000010
x19            = 0xffff800012b6f8a4
x20            = 0x0000000000000004
x21            = 0xffff000803a44000
x22            = 0x0000000000000087
x23            = 0xffff800012b6f964
x24            = 0x0000000000000000
x25            = 0xffff800011313a98
x26            = 0xffff800010dd31c0
x27            = 0x0000000000000000
x28            = 0x0000000000000000
x29            = 0xffff800012b6f820
x30            = 0xffff8000104f1b3c
scr_el3        = 0x000000000000073d
sctlr_el3      = 0x0000000030cd183f
cptr_el3       = 0x0000000000000000
tcr_el3        = 0x0000000080803520
daif           = 0x00000000000002c0
mair_el3       = 0x00000000004404ff
spsr_el3       = 0x0000000020000085
elr_el3        = 0xffff8000104f1b54
ttbr0_el3      = 0x0000000070010c00
esr_el3        = 0x00000000bf000000
far_el3        = 0x0000000000000000
spsr_el1       = 0x0000000040000005
elr_el1        = 0xffff8000100b2ec0
spsr_abt       = 0x0000000000000000
spsr_und       = 0x0000000000000000
spsr_irq       = 0x0000000000000000
spsr_fiq       = 0x0000000000000000
sctlr_el1      = 0x0000000034d4d91d
actlr_el1      = 0x0000000000000000
cpacr_el1      = 0x0000000000300000
csselr_el1     = 0x0000000000000000
sp_el1         = 0xffff800012b6f820
esr_el1        = 0x0000000056000000
ttbr0_el1      = 0x00000008819b4600
ttbr1_el1      = 0x0a80000082f50000
mair_el1       = 0x000c0400bb44ffff
amair_el1      = 0x0000000000000000
tcr_el1        = 0x00000034f5d07590
tpidr_el1      = 0xffff80086eab0000
tpidr_el0      = 0x0000ffffac503c40
tpidrro_el0    = 0x0000000000000000
par_el1        = 0x0000000000000000
mpidr_el1      = 0x0000000080000000
afsr0_el1      = 0x0000000000000000
afsr1_el1      = 0x0000000000000000
contextidr_el1 = 0x0000000000000000
vbar_el1       = 0xffff800010010800
cntp_ctl_el0   = 0x0000000000000005
cntp_cval_el0  = 0x0000002ed234d87d
cntv_ctl_el0   = 0x0000000000000000
cntv_cval_el0  = 0x0000000000000000
cntkctl_el1    = 0x00000000000000d6
sp_el0         = 0x000000007000a3d0
isr_el1        = 0x0000000000000040
dacr32_el2     = 0x0000000000000000
ifsr32_el2     = 0x0000000000000000
cpuectlr_el1   = 0x0000001b00000040
cpumerrsr_el1  = 0x0000000000000000
l2merrsr_el1   = 0x0000000000000000

arch/arm64/boot/dts/ti/k3-j721e-main.dtsi

		pcie0_rc: pcie@2900000 {
                compatible = "ti,j721e-pcie-host";
                reg = <0x00 0x02900000 0x00 0x1000>,
                      <0x00 0x02907000 0x00 0x400>,
                      <0x00 0x0d000000 0x00 0x00800000>,
                      <0x00 0x10000000 0x00 0x00001000>;
                reg-names = "intd_cfg", "user_cfg", "reg", "cfg";
                interrupt-names = "link_state";
                interrupts = <GIC_SPI 318 IRQ_TYPE_EDGE_RISING>;
                device_type = "pci";
                ti,syscon-pcie-ctrl = <&scm_conf 0x4070>;
                max-link-speed = <3>;
                num-lanes = <2>;
                power-domains = <&k3_pds 239 TI_SCI_PD_EXCLUSIVE>;
                clocks = <&k3_clks 239 1>;
                clock-names = "fck";
                #address-cells = <3>;
                #size-cells = <2>;
                bus-range = <0x0 0xff>;
                vendor-id = <0x104c>;
                device-id = <0xb00d>;
                msi-map = <0x0 &gic_its 0x0 0x10000>;
                dma-coherent;
                ranges = <0x01000000 0x0 0x10001000 0x0 0x10001000 0x0 0x0010000>,
                         <0x02000000 0x0 0x10011000 0x0 0x10011000 0x0 0x7fef000>;
                dma-ranges = <0x02000000 0x0 0x0 0x0 0x0 0x10000 0x0>;
                #interrupt-cells = <1>;
                interrupt-map-mask = <0 0 0 7>;
                interrupt-map = <0 0 0 1 &pcie0_intc 0>, /* INT A */
                                <0 0 0 2 &pcie0_intc 0>, /* INT B */
                                <0 0 0 3 &pcie0_intc 0>, /* INT C */
                                <0 0 0 4 &pcie0_intc 0>; /* INT D */

                pcie0_intc: interrupt-controller {
                        interrupt-controller;
                        #interrupt-cells = <1>;
                        interrupt-parent = <&gic500>;
                        interrupts = <GIC_SPI 312 IRQ_TYPE_EDGE_RISING>;
                };
        };
        
arch/arm64/boot/dts/ti/k3-j721e-common-proc-board.dts

&pcie0_rc {
        phys = <&serdes0_pcie_link>;
        phy-names = "pcie-phy";
        num-lanes = <2>;
};


Please give me a solution or advice.