Hi guys,

we have got a new configurations with iomodule which can be connected to the 
microblaze
cpu and I would like to have proper description for this system
+ more advance configuration below.

Buses:
Microblaze systems have in standard configuration two buses LMB and AXI(in past 
PLB).
We didn't generate LMB even there is placed BRAM (block ram)
but Linux expects that there is any writeable memory at 0x0.
Currently because we can use iomodule which is connected to LMB and we need to 
generate
this bus. I don't expect that there is any problem to have this configuration.

cpus {
        ...
        cpu@0 {
                ...
        }
}
lmb@0 {
        ...
        iomodule@X {
                ...
        }
}
axi@X {
        ...
        nodes
        ...
}

Block ram:
When we generate lmb make sense to also add there this small bram memory
but I expect that is it ok just to added to bus and do not add it to the root.
Currently we have an option to use "mmio-sram" compatibility string for it.

Interrupt controller:
Till now Microblaze uses only one interrupt controller on main bus (AXI or PLB)
and we just find compatible string and we said that this is primary interrupt 
controller.

Based on DTS in the kernel I see that "interrupt-parent" property
reflects which interrupt controller is master and which one is in cascade.

Timer:
System timer was also detected in this way that the first suitable timer was
taken and used. Others were just ignored.


Extend system configuration
We have also got an option to add one more CPU and I would like to have
an option to describe it correctly.

LMB is private cpu bus and two options I have for description is to use
specific names for it
cpus {
        ...
        cpu@0 {
                ...
        }
        cpu@1 {
                ...
        }
}
lmb_cpu0@0 {
        ...
        iomodule0@X {
                ...
        }
}
lmb_cpu1@0 {
        ...
        iomodule1@X {
                ...
        }
}
axi@X {
        ...
        shared nodes
        ...
}


or use bus handles in cpu

cpus {
        ...
        cpu@0 {
                ...
                bus-lmb = <&lmb_cpu0> ;
                bus-handle = <&axi> ;
        }
        cpu@1 {
                ...
                bus-lmb = <&lmb_cpu1> ;
                bus-handle = <&axi> ;
        }
}
lmb_cpu0@0 {
        ...
        iomodule0@X {
                ...
        }
}
lmb_cpu1@0 {
        ...
        iomodule1@X {
                ...
        }
}
axi@X {
        ...
        shared nodes
        ...
}


which is from my point of view better because it supports
options where one cpu doesn't need to have main axi bus
or lmb or both.

It has also connection to interrupt controller description
where is not clear for system with two cpus which interrupt controller
is primary for every cpu.
It can be illustrated on simple example where there are two interrupt
controllers on axi and both are primary for specific cpu
and we can't exchange them.

It means that I would like to have proper description which interrupt
controller is primary one for specific CPU.
I am not sure if make sense to use interrupt-parent also from
this primary interrupt controller which will point to cpu.

cpus {
        ...
        cpu@0 {
                ...
        }
}
axi@X {
        ...
        io_intc: intc@C {
                interrupt-controller ;
                interrupt-parent = <&cpu@0> ;
        }
        ...
}

or better to use interrupt-handle property directly in cpu node.

cpus {
        ...
        cpu@0 {
                interrupt-handle = <&io_intc> ;
                ...
        }
}
axi@X {
        ...
        io_intc: intc@C {
                interrupt-controller ;
        }
        ...
}

We don't have any ARM gic interrupt controller which will be always
primary controller.

Grant, Rob: Can you please comment my proposal for descriptions?

In general I want to have exact bus description + interrupt controller
which can be used by specific cpu. Primary timers can be handled
separately.
Is there any other platform description in the kernel which also requires this?

Thanks,
Michal

-- 
Michal Simek, Ing. (M.Eng), OpenPGP -> KeyID: FE3D1F91
w: www.monstr.eu p: +42-0-721842854
Maintainer of Linux kernel - Microblaze cpu - http://www.monstr.eu/fdt/
Maintainer of Linux kernel - Xilinx Zynq ARM architecture
Microblaze U-BOOT custodian and responsible for u-boot arm zynq platform


Attachment: signature.asc
Description: OpenPGP digital signature

_______________________________________________
devicetree-discuss mailing list
devicetree-discuss@lists.ozlabs.org
https://lists.ozlabs.org/listinfo/devicetree-discuss

Reply via email to