ioremap() use with specific mailbox drivers and SCMI

Florian Fainelli f.fainelli at gmail.com
Thu Apr 19 09:35:23 PDT 2018


+Sudeep as originally intended

On 04/19/2018 09:25 AM, Florian Fainelli wrote:
> Hi Sudeep,
> 	
> I am looking at the following files:
> 
> arch/arm64/boot/dts/hisilicon/hi6220-hikey.dts:
>         memory at 0 {
>                 device_type = "memory";
>                 reg = <0x00000000 0x00000000 0x00000000 0x05e00000>,
>                       <0x00000000 0x05f00000 0x00000000 0x00001000>,
>                       <0x00000000 0x05f02000 0x00000000 0x00efd000>,
>                       <0x00000000 0x06e00000 0x00000000 0x0060f000>,
>                       <0x00000000 0x07410000 0x00000000 0x1aaf0000>,
>                       <0x00000000 0x22000000 0x00000000 0x1c000000>;
>         };
> 
> arch/arm64/boot/dts/hisilicon/hi6220.dtsi:
>                 mailbox: mailbox at f7510000 {
>                         compatible = "hisilicon,hi6220-mbox";
>                         reg = <0x0 0xf7510000 0x0 0x1000>, /* IPC_S */
>                               <0x0 0x06dff800 0x0 0x0800>; /* Mailbox
> buffer */
>                         interrupts = <GIC_SPI 94 IRQ_TYPE_LEVEL_HIGH>;
>                         #mbox-cells = <3>;
>                 };
> 
> and this is quite an interesting approach, although it appears to be
> quite fragile and simplistic to me for a number of reasons:
> 
> - if the mailbox at f7510000 was ever to be relocated within a parent "bus"
> node that had a "ranges" property mapping the parent space from
> 0xf000_0000 to produce offset relative nodes, the translation for its
> "reg" properties would apply relative to both cells, which means that
> now, the second cell may no longer point to DRAM anymore. This can be
> worked around by keeping that particular node outside of the "bus" node,
> but it is essentially means we mixed address spaces within the "reg"
> property
> 
> - punching holes in DRAM by omitting this mailbox's shared buffer from
> the top-level memory "reg" property is extremely error prone, and seems
> to be a shortcut/hack to allow the ARM/ARM64 implementations to
> successfully call ioremap() against these regions. I am not commenting
> about the other regions mentioned in the DTS, but pstore is possibly
> another example where using ioremap() is convenient, but still not quite
> correct.
> 
> Using a reserved-memory entry would be far less error prone, would
> clearly show the intents of the specific regions being declared, and
> could, through the use of additional properties (e.g: "map", as opposed
> to "no-map") indicate a possible need to map that DRAM region into
> kernel virtual memory and using e.g: memremap() APIs.
> 
> Also the semantics of ioremap() are not particularly portable from one
> architecture to another whereas memremap() is IMHO.
> 
> Thank you
> 

-- 
Florian



More information about the linux-arm-kernel mailing list