I am trying to understand concept of LAW & CCSR and difference between LAW and CCSR memory maps but could not clarify my view after reading T1040 RM. For example table 2-3 (LAWs memory map) in T1040 RM says that the IFC is mapped at address 0x80000000 whereas table 2-5 (CCSR memory map) says that the IFC is at 0xFF124000.
Can someone clarify which addresses (LAWs or CCSR) are actually used by drivers to access devices.
Local Access Windows (LAWs) are used to configure, how processor address space is mapped to target interfaces - DDR controller, IFC controller, PCI-E and etc.
CCSR space is space, where internal processor memory-mapped registers are mapped to address space.
Table 2-3 shows IFC as "target" - target devices, connected to IFC controller, can be accessed via this window.
Table 2-5 shows IFC-related memory mapped registers, i.e. registers used to configure IFC controller.
Have a great day,
Alexander
TIC
-----------------------------------------------------------------------------------------------------------------------
Note: If this post answers your question, please click the Correct Answer button. Thank you!
-----------------------------------------------------------------------------------------------------------------------
Thanks alexander.yakovlev. I have somewhat understood the difference theoratically, but what is mentioned in the following device tree snippet of T1042D4RDB board is that the IFC controller (localbus) is @ 0xFFE124000 (CCSR mem map). While the address translation property 'ranges' mentions the parent addresses from LAW address space (The addresses 0xfe8000000, 0xfff800000, 0xfffdf0000 are set for nor, nand and cpld in u-boot's law.c file)
localbus@ffe124000 { reg = <0xf 0xfe124000 0x0 0x2000>; ranges = <0x0 0x0 0xf 0xe8000000 0x8000000 0x2 0x0 0xf 0xff800000 0x10000 0x3 0x0 0xf 0xffdf0000 0x8000>; #address-cells = <0x2>; #size-cells = <0x1>; compatible = "fsl,ifc", "simple-bus"; interrupts = <0x19 0x2 0x0 0x0>; nor@0,0 { #address-cells = <0x1>; #size-cells = <0x1>; compatible = "cfi-flash"; reg = <0x0 0x0 0x8000000>; bank-width = <0x2>; device-width = <0x1>; }; nand@2,0 { #address-cells = <0x1>; #size-cells = <0x1>; compatible = "fsl,ifc-nand"; reg = <0x2 0x0 0x10000>; }; cpld@3,0 { compatible = "fsl,t1040d4rdb-cpld", "fsl,deepsleep-cpld"; reg = <0x3 0x0 0x300>; }; };
I hope you are able to understand what is my point of confusion.
These are base addresses where respective FCM (Flash Control Machines) controllers use. For example nand use SRAM for buffer and with 0xFF800000 you can reach that.