[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [RFC PATCH] xen/arm: arm32: Enable smpboot on Arm32 based systems



Hi Ayan,

On 04/05/2023 09:57, Ayan Kumar Halder wrote:
On 03/05/2023 18:43, Julien Grall wrote:
Hi Ayan,
Hi Julien,
On 03/05/2023 17:49, Ayan Kumar Halder wrote:
On 03/05/2023 08:40, Julien Grall wrote:
Hi,
Hi Julien,
Title: Did you mean "Enable spin table"?
Yes, that would be more concrete.
On 02/05/2023 11:58, Ayan Kumar Halder wrote:
On some of the Arm32 based systems (eg Cortex-R52), smpboot is supported.
Same here.
Yes
In these systems PSCI may not always be supported. In case of Cortex-R52, there is no EL3 or secure mode. Thus, PSCI is not supported as it requires EL3.
Thus, we use 'spin-table' mechanism to boot the secondary cpus. The 
primary
cpu provides the startup address of the secondary cores. This 
address is
provided using the 'cpu-release-addr' property.

To support smpboot, we have copied the code from xen/arch/arm/arm64/smpboot.c
I would rather prefer if we don't duplicate the code but instead 
move the logic in common code.
Ack
with the following changes :-

1. 'enable-method' is an optional property. Refer to the comment in
https://www.kernel.org/doc/Documentation/devicetree/bindings/arm/cpus.yaml
"      # On ARM 32-bit systems this property is optional"
Looking at this list, "spin-table" doesn't seem to be supported
for 32-bit systems.
However, looking at 
https://developer.arm.com/documentation/den0013/d/Multi-core-processors/Booting-SMP-systems/SMP-boot-in-Linux , it seems "spin-table" is a valid boot mechanism for Armv7 cpus.
I am not able to find the associated code in Linux 32-bit. Do you have 
any pointer?
Unfortunately, no.

I see that in linux, "spin-table" support is added in arch/arm64/kernel/smp_spin_table.c. So, there seems to be no Arm32 support for this.

Can you point me to the discussion/patch where this would be added?
Actually, this is the first discussion I am having with regards to 
adding a "spin-table" support on Arm32.
I was asking for the discussion on the Device-Tree/Linux ML or code.
I don't really want to do a "spin-table" support if this is not even supported in Linux.
I see your point. But that brings me to my next question, how do I parse 
cpu node specific properties for Arm32 cpus.
I was probably not very clear in my previous message. What I don't want 
is for Xen to use unofficial bindings.
IOW, if the existing binding doesn't allow the spin-table on arm32 (IMHO 
it is not clear) and it makes sense to use them, then we should first 
consider to send a patch against the documentation and merge it before 
Xen can use the properties.
In 
https://www.kernel.org/doc/Documentation/devicetree/bindings/arm/cpus.yaml , I see some of the properties valid for Arm32 cpus.
For example:-

secondary-boot-reg
rockchip,pmu

Also, it says "additionalProperties: true" which means I can add platform specific properties under the cpu node.
For clarification, are you saying the bindings below is not yet 
official? If so, then this should be first discussed with the 
Device-Tree folks.
Please correct me if mistaken.
My cpu nodes will look like this :-

         cpu@1 {
             device_type = "cpu";
             compatible = "arm,armv8";
             reg = <0x00 0x01>;
             enable-method = "spin-table";
The enable-method "spin-table" is generic and expect property like 
cpu-release-addr. Yet...
            amd-cpu-release-addr = <0xEB58C010>; /* might also use "secondary-boot-reg" */
             amd-cpu-reset-addr = <0xEB58C000>;
             amd-cpu-reset-delay = <0xF00000>;
             amd-cpu-re
... these are all AMD properties. What are the reasons to not use the 
generic "spin-table" bindings?
If you can't use it, then I think you should define a new type of 
enable-method.
             phandle = <0x03>;
         };

         cpu@2 {
             device_type = "cpu";
             compatible = "arm,armv8";
             reg = <0x00 0x02>;
             enable-method = "spin-table";
            amd-cpu-release-addr = <0xEB59C010>; /* might also use "secondary-boot-reg" */
             amd-cpu-reset-addr = <0xEB59C000>;
             amd-cpu-reset-delay = <0xF00000>;
             amd-cpu-re
             phandle = <0x03>;
         };

If the reasoning makes sense, then does the following proposed change looks sane ?
I would first like to understand a bit more about how the bindings were 
created and whether this was discussed with the Device-Tree community.
Cheers,

--
Julien Grall



 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.