Hi NV,
When PCIe C4 is configured as an endpoint, refclk will output 100MCLK after the controller is started。Why?
My modifications are as follows:
bootloader/tegra264-mb1-bct-pinmux-p3834-xxxx-p4071-0000.dtsi
pex_l4_clkreq_n_pd0 { /* zlj+ for c4 ep */
nvidia,pins = "pex_l4_clkreq_n_pd0";
//nvidia,function = "rsvd1";
//nvidia,pull = <TEGRA_PIN_PULL_DOWN>;
//nvidia,tristate = <TEGRA_PIN_ENABLE>;
nvidia,function = "pe4_clkreq_l";
nvidia,pull = <TEGRA_PIN_PULL_NONE>;
nvidia,tristate = <TEGRA_PIN_DISABLE>;
nvidia,enable-input = <TEGRA_PIN_ENABLE>;
nvidia,drv-type = <TEGRA_PIN_1X_DRIVER>;
nvidia,e-io-od = <TEGRA_PIN_ENABLE>;
nvidia,e-lpbk = <TEGRA_PIN_DISABLE>;
};
pex_l4_rst_n_pd1 { /* zlj+ for c4 ep */
nvidia,pins = "pex_l4_rst_n_pd1";
nvidia,function = "rsvd1";
//nvidia,pull = <TEGRA_PIN_PULL_DOWN>;
//nvidia,tristate = <TEGRA_PIN_ENABLE>;
nvidia,pull = <TEGRA_PIN_PULL_NONE>;
nvidia,tristate = <TEGRA_PIN_DISABLE>;
//nvidia,enable-input = <TEGRA_PIN_DISABLE>;
nvidia,enable-input = <TEGRA_PIN_ENABLE>;
nvidia,drv-type = <TEGRA_PIN_1X_DRIVER>;
nvidia,e-io-od = <TEGRA_PIN_ENABLE>;
nvidia,e-lpbk = <TEGRA_PIN_DISABLE>;
};
bootloader/generic/tegra264-bpmp-3834-0008-4071-xxxx.dtb
pcie@4 {
status = "okay";
pcie-id = <0x04>;
pcie-mode = <0x02>; /* c4 ep */
max-link-speed = <0x05>;
};
source/hardware/nvidia/t264/nv-public/nv-platform/tegra264-p4071-0000.dtsi
I don’t know; but if I compare your dt to my live dt my pcie have compatible = "nvidia,tegra264-pcie";
sudo dtc -I fs -O dts -o ~/live.dts /proc/device-tree
grep -i "pcie@a8084" live.dts -A20
pcie@a808400000 {
#address-cells = <0x03>;
dma-coherent;
interconnect-names = "dma-mem\0write";
nvidia,bpmp = <0x02 0x01>;
bus-range = <0x00 0xff>;
interconnects = <0x4e 0xda 0x4f 0x4e 0xdb 0x4f>;
reg-names = "xal\0xtl\0xtl-pri\0xpl\0ecam";
interrupt-map = <0x00 0x00 0x00 0x01 0x01 0x00 0x00 0x00 0x38c 0x04 0x00 0x00 0x00 0x02 0x01 0x00 0x00 0x00 0x38d 0x04 0x00 0x00 0x00 0x03 0x01 0x00 0x00 0x00 0x38e 0x04 0x00 0x00 0x00 0x04 0x01 0x00 0x00 0x00 0x38f 0x04>;
#size-cells = <0x02>;
device_type = "pci";
interrupt-map-mask = <0x00 0x00 0x00 0x07>;
compatible = "nvidia,tegra264-pcie";
ranges = <0x82000000 0x00 0x28000000 0x00 0x28000000 0x00 0x8000000 0xc3000000 0xa8 0xc0000000 0xa8 0xc0000000 0x07 0xc0000000 0x81000000 0x00 0x84000000 0xa8 0x84000000 0x00 0x200000>;
msi-map = <0x00 0x146 0x110000 0x10000>;
#interrupt-cells = <0x01>;
status = "okay";
reg = <0xa8 0x8400000 0x00 0x4000 0xa8 0x8404000 0x00 0x1000 0xa8 0x8405000 0x00 0x1000 0xa8 0x8410000 0x00 0x10000 0xa8 0xb0000000 0x00 0x10000000>;
linux,pci-domain = <0x01>;
iommu-map = <0x00 0x50 0x10000 0x10000>;
};
--
pcie@a808440000 {
#address-cells = <0x03>;
dma-coherent;
interconnect-names = "dma-mem\0write";
nvidia,bpmp = <0x02 0x03>;
bus-range = <0x00 0xff>;
interconnects = <0x4e 0xde 0x4f 0x4e 0xdf 0x4f>;
reg-names = "xal\0xtl\0xtl-pri\0xpl\0ecam";
interrupt-map = <0x00 0x00 0x00 0x01 0x01 0x00 0x00 0x00 0x39e 0x04 0x00 0x00 0x00 0x02 0x01 0x00 0x00 0x00 0x39f 0x04 0x00 0x00 0x00 0x03 0x01 0x00 0x00 0x00 0x3a0 0x04 0x00 0x00 0x00 0x04 0x01 0x00 0x00 0x00 0x3a1 0x04>;
#size-cells = <0x02>;
device_type = "pci";
interrupt-map-mask = <0x00 0x00 0x00 0x07>;
compatible = "nvidia,tegra264-pcie";
ranges = <0x82000000 0x00 0x38000000 0x00 0x38000000 0x00 0x8000000 0xc3000000 0xb8 0xc0000000 0xb8 0xc0000000 0x07 0xc0000000 0x81000000 0x00 0x84000000 0xb8 0x84000000 0x00 0x200000>;
msi-map = <0x00 0x146 0x130000 0x10000>;
#interrupt-cells = <0x01>;
status = "disabled";
reg = <0xa8 0x8440000 0x00 0x4000 0xa8 0x8444000 0x00 0x1000 0xa8 0x8445000 0x00 0x1000 0xa8 0x8450000 0x00 0x10000 0xb8 0xb0000000 0x00 0x10000000>;
linux,pci-domain = <0x03>;
iommu-map = <0x00 0x50 0x30000 0x10000>;
};
--
pcie@a808480000 {
#address-cells = <0x03>;
dma-coherent;
interconnect-names = "dma-mem\0write";
nvidia,bpmp = <0x02 0x05>;
bus-range = <0x00 0xff>;
interconnects = <0x4e 0xe2 0x4f 0x4e 0xe3 0x4f>;
reg-names = "xal\0xtl\0xtl-pri\0xdma\0xpl\0ecam";
interrupt-map = <0x00 0x00 0x00 0x01 0x01 0x00 0x00 0x00 0x3b0 0x04 0x00 0x00 0x00 0x02 0x01 0x00 0x00 0x00 0x3b1 0x04 0x00 0x00 0x00 0x03 0x01 0x00 0x00 0x00 0x3b2 0x04 0x00 0x00 0x00 0x04 0x01 0x00 0x00 0x00 0x3b3 0x04>;
#size-cells = <0x02>;
device_type = "pci";
interrupt-map-mask = <0x00 0x00 0x00 0x07>;
compatible = "nvidia,tegra264-pcie";
ranges = <0x82000000 0x00 0x48000000 0x00 0x48000000 0x00 0x8000000 0xc3000000 0xc8 0xc0000000 0xc8 0xc0000000 0x07 0xc0000000 0x81000000 0x00 0x84000000 0xc8 0x84000000 0x00 0x200000>;
msi-map = <0x00 0x146 0x150000 0x10000>;
#interrupt-cells = <0x01>;
status = "okay";
reg = <0xa8 0x8480000 0x00 0x4000 0xa8 0x8484000 0x00 0x1000 0xa8 0x8485000 0x00 0x1000 0xa8 0x8580000 0x00 0x10000 0xa8 0x8490000 0x00 0x10000 0xc8 0xb0000000 0x00 0x10000000>;
linux,pci-domain = <0x05>;
iommu-map = <0x00 0x50 0x50000 0x10000>;
};
--
pcie@a808420000 {
#address-cells = <0x03>;
dma-coherent;
interconnect-names = "dma-mem\0write";
nvidia,bpmp = <0x02 0x02>;
bus-range = <0x00 0xff>;
interconnects = <0x4e 0xdc 0x4f 0x4e 0xdd 0x4f>;
reg-names = "xal\0xtl\0xtl-pri\0xdma\0xpl\0ecam";
interrupts = <0x05 0x01>;
interrupt-map = <0x00 0x00 0x00 0x01 0x01 0x00 0x00 0x00 0x395 0x04 0x00 0x00 0x00 0x02 0x01 0x00 0x00 0x00 0x396 0x04 0x00 0x00 0x00 0x03 0x01 0x00 0x00 0x00 0x397 0x04 0x00 0x00 0x00 0x04 0x01 0x00 0x00 0x00 0x398 0x04>;
#size-cells = <0x02>;
device_type = "pci";
interrupt-map-mask = <0x00 0x00 0x00 0x07>;
compatible = "nvidia,tegra264-pcie";
ranges = <0x82000000 0x00 0x30000000 0x00 0x30000000 0x00 0x8000000 0xc3000000 0xb0 0xc0000000 0xb0 0xc0000000 0x07 0xc0000000 0x81000000 0x00 0x84000000 0xb0 0x84000000 0x00 0x200000>;
msi-map = <0x00 0x146 0x120000 0x10000>;
#interrupt-cells = <0x01>;
status = "okay";
interrupt-names = "wakeup";
reg = <0xa8 0x8420000 0x00 0x4000 0xa8 0x8424000 0x00 0x1000 0xa8 0x8425000 0x00 0x1000 0xa8 0x8520000 0x00 0x10000 0xa8 0x8430000 0x00 0x10000 0xb0 0xb0000000 0x00 0x10000000>;
linux,pci-domain = <0x02>;
--
pcie@a808460000 {
#address-cells = <0x03>;
dma-coherent;
interconnect-names = "dma-mem\0write";
nvidia,bpmp = <0x02 0x04>;
bus-range = <0x00 0xff>;
interconnects = <0x4e 0xe0 0x4f 0x4e 0xe1 0x4f>;
reg-names = "xal\0xtl\0xtl-pri\0xdma\0xpl\0ecam";
interrupt-map = <0x00 0x00 0x00 0x01 0x01 0x00 0x00 0x00 0x3a7 0x04 0x00 0x00 0x00 0x02 0x01 0x00 0x00 0x00 0x3a8 0x04 0x00 0x00 0x00 0x03 0x01 0x00 0x00 0x00 0x3a9 0x04 0x00 0x00 0x00 0x04 0x01 0x00 0x00 0x00 0x3aa 0x04>;
#size-cells = <0x02>;
device_type = "pci";
interrupt-map-mask = <0x00 0x00 0x00 0x07>;
compatible = "nvidia,tegra264-pcie";
ranges = <0x82000000 0x00 0x40000000 0x00 0x40000000 0x00 0x8000000 0xc3000000 0xc0 0xc0000000 0xc0 0xc0000000 0x07 0xc0000000 0x81000000 0x00 0x84000000 0xc0 0x84000000 0x00 0x200000>;
msi-map = <0x00 0x146 0x140000 0x10000>;
#interrupt-cells = <0x01>;
status = "disabled";
reg = <0xa8 0x8460000 0x00 0x4000 0xa8 0x8464000 0x00 0x1000 0xa8 0x8465000 0x00 0x1000 0xa8 0x8550000 0x00 0x10000 0xa8 0x8470000 0x00 0x10000 0xc0 0xb0000000 0x00 0x10000000>;
linux,pci-domain = <0x04>;
iommu-map = <0x00 0x50 0x40000 0x10000>;
};
Thanks for your reply,
I’ve found the reason:
The dts of BPMP omits the pcie-c4-endpoint-enable