PCI Express 64 bit Access in MPC8308

cancel
Showing results for 
Search instead for 
Did you mean: 

PCI Express 64 bit Access in MPC8308

416 Views
Contributor III

Sir

We are using MPC8308 PCI Express x1 connected to  PCI express End device.

PCI express End Device having - 32 address bit Non Prefetchable & 64 address bit Prefetchable.

We are using Linux - 2.6.29 from LTIB.

Note: PCI express adresss is 64 bit nature.Not a data.

Problem

Auto enumeration has been completed properly for Both Region BAR 0 and BAR 2.

request_memory_region also completed properly

ioremap also completed properly.

But, When i started accessing the region using the address provided by ioremap.

KERENL IS CRASHING !

will the MMU of the linux kerenl (2.6.29 ) supports 64 address bit translation?

Pls suggest me

Regards

Ramesh

0 Kudos
2 Replies

10 Views
NXP TechSupport
NXP TechSupport

The MPC8308 core MMU provides 32-bit physical address only. The MPC8308 internal 32-bit physical address is mapped to the 64-bit PCI address in Address Translation Window Unit (ATMU). The attributes of the outbound windows are controlled by the PEX_OWARn registers and the attributes of

the RC inbound windows are controlled by the PEX_RCIWARn registers, residing in the CSB bridge address space.

I.e. the core does not "know" 64-bit addrerss in the PCIe address space. It accesses to the region in the intenal 32-bit space which is mapped to the same size region in the 64-bit PCIe address space by ATMU.

I am not guru in Linux. As I know ioremap does not return "real' address but some like-address value which has to be used by special IOfunctions. "Remember, though, that the addresses returned from ioremap should not be dereferenced directly; instead, accessor functions provided by the kernel should be used."

"The proper way of getting at I/O memory is via a set of functions (defined via <asm/io.h>) provided for that purpose."


0 Kudos

10 Views
Contributor IV

Hello r8070z‌,

I am having exactly the same issue on T1042. Kernel crash with machine check if I use Physical size larger than 4 GB for RC side. And also when I try to use lower than 4 GB, kernel is not crashing but PCIe is not sending data to EP. It's more like sending data to its own memory.

Can you help me about this ? Thanks.

0 Kudos