Date   

Re: Exclusive instruction LDAXR for ARM64 used by Zephyr SMP

Nicolas Pitre
 

Please re-test with the latest upstream. Incidentally, a fix was merged
today to solve this problem.

On Fri, 9 Apr 2021, Jiafei Pan wrote:

Hi, All,

I am debugging Zephyr SMP on ARM64, but currently I found arm64 LDAXR instruction is used in spin lock function, but I found there is different behavior on different platform.

Here is calling line:

__start --> z_arm64_prep_c --> z_arm64_mmu_init --> setup_page_tables --> add_arm_mmu_flat_range --> add_map --> set_mapping --> key = k_spin_lock(&xlat_lock);

The issue is on one ARM A72 platform, there will be "Unknown Exception" (ECR.EC = 000000) with this calling flow, I found the exception is caused by LDAXR instruction, and MMU is disabled when exception occurs. When I enabled MMU firstly and then call LDAXR instruction, there will be no such issue.

But on another A53 platform, there is no such issue both for the case MMU is disabled or enabled.

So I am not sure whether there is some relation with MMU and LDAXR instruction, and I don't find more information in ARM's document, I have worked out one patch to avoid to use LDAXR and STLXR before enable MMU, but I want to find out whether it is the root cause of the issue.

Any comments or suggestion is welcome, thanks.

Best Regards,
Jiafei.







Exclusive instruction LDAXR for ARM64 used by Zephyr SMP

Jiafei Pan
 

Hi, All,

 

I am debugging Zephyr SMP on ARM64, but currently I found arm64 LDAXR instruction is used in spin lock function, but I found there is different behavior on different platform.

 

Here is calling line:

 

__start à z_arm64_prep_c à z_arm64_mmu_init à setup_page_tables à add_arm_mmu_flat_range à add_map à set_mapping à key = k_spin_lock(&xlat_lock);

 

The issue is on one ARM A72 platform, there will be Unknown Exception (ECR.EC = 000000) with this calling flow, I found the exception is caused by LDAXR instruction, and MMU is disabled when exception occurs. When I enabled MMU firstly and then call LDAXR instruction, there will be no such issue.

 

But on another A53 platform, there is no such issue both for the case MMU is disabled or enabled.

 

So I am not sure whether there is some relation with MMU and LDAXR instruction, and I dont find more information in ARMs document, I have worked out one patch to avoid to use LDAXR and STLXR before enable MMU, but I want to find out whether it is the root cause of the issue.

 

Any comments or suggestion is welcome, thanks.

 

Best Regards,

Jiafei.


Exclusive instruction LDAXR for ARM64 used by Zephyr SMP

Jiafei Pan
 

Hi, All,

 

I am debugging Zephyr SMP on ARM64, but currently I found arm64 LDAXR instruction is used in spin lock function, but I found there is different behavior on different platform.

 

Here is calling line:

 

__start à z_arm64_prep_c à z_arm64_mmu_init à setup_page_tables à add_arm_mmu_flat_range à add_map à set_mapping à key = k_spin_lock(&xlat_lock);

 

The issue is on one ARM A72 platform, there will be “Unknown Exception” (ECR.EC = 000000) with this calling flow, I found the exception is caused by LDAXR instruction, and MMU is disabled when exception occurs. When I enabled MMU firstly and then call LDAXR instruction, there will be no such issue.

 

But on another A53 platform, there is no such issue both for the case MMU is disabled or enabled.

 

So I am not sure whether there is some relation with MMU and LDAXR instruction, and I don’t find more information in ARM’s document, I have worked out one patch to avoid to use LDAXR and STLXR before enable MMU, but I want to find out whether it is the root cause of the issue.

 

Any comments or suggestion is welcome, thanks.

 

Best Regards,

Jiafei.

 


Re: Dev-Review Meeting Agenda Apr 8

Bolivar, Marti
 


Zephyr Project: Dev Meeting - Thu, 04/08/2021 3:00pm-4:00pm, Please RSVP #cal-reminder

devel@lists.zephyrproject.org Calendar <devel@...>
 

Reminder: Zephyr Project: Dev Meeting

When: Thursday, 8 April 2021, 3:00pm to 4:00pm, (GMT+00:00) UTC

Where:Microsoft Teams Meeting

An RSVP is requested. Click here to RSVP

Organizer: devel@...

Description:

________________________________________________________________________________
+1 321-558-6518 United States, Orlando (Toll)
Conference ID: 483 314 739#
Local numbers | Reset PIN | Learn more about Teams | Meeting options
 
 
________________________________________________________________________________


Re: how to describe a peripheral with power enable pin

Peter A. Bigot
 

"Si7021-pwr" is not a GPIO device, it's a regulator device.  You don't need to configure the GPIO; the regulator device does that.  Use the `regulator_enable()` and `regulator_disable()` API with the device.


Re: how to describe a peripheral with power enable pin

Rafael Dias
 

ok, ok.

I have to enable the regulator device driver.
Now it is working.

My overlay is as below:
/ {
Si7021_pwr: Si7021-pwr-ctrl {
compatible = "regulator-fixed";
regulator-name = "Si7021 enable pin";
enable-gpios = < &gpiod 9 0 >;
label = "Si7021-pwr";
};
};


But when I'll try to use the pin, I'm getting a EINVAL error after the gpio_pin_config function:   
const struct device* pwr = device_get_binding( "Si7021-pwr" );
if (NULL == pwr )
{
printf( "Could not get pwr port\n" );
return;
}

rc = gpio_pin_configure(pwr, 9, GPIO_OUTPUT_ACTIVE | GPIO_OUTPUT_INIT_HIGH );
if (rc < 0) {
printk("Failed to configure gpio pin\n");
return;
}

if I use the same sequence, but opening the gpiod port, everything works fine:
const struct device* gpiod = device_get_binding( DT_LABEL( DT_NODELABEL( gpiod ) ) );
if (NULL == gpiod )
{
printf( "Could not get gpiod port\n" );
return;
}

rc = gpio_pin_configure(gpiod, 9, GPIO_OUTPUT_ACTIVE | GPIO_OUTPUT_INIT_HIGH );
if (rc < 0) {
printk("Failed to configure gpio pin\n");
return;
}

I don't know where the error is..


On Thu, 8 Apr 2021 at 07:15, Rafael Dias via lists.zephyrproject.org <rdmeneze=gmail.com@...> wrote:
Hi,
I was performing tests with my board, and the label Si7021pwr didn't appear at the device list...

On Thu, 8 Apr 2021 at 06:31, Rafael Dias via lists.zephyrproject.org <rdmeneze=gmail.com@...> wrote:
I found a solution:

/ {
si7021_pwr: si7021-pwr-ctrl {
compatible = "regulator-fixed";
regulator-name = "Si7021 enable pin";
enable-gpios = < &gpiod 9 0 >;
label = "Si7021pwr";
};

si7021_pwr2: si7021-pwr2-ctrl {
compatible = "regulator-fixed";
regulator-name = "Si7021 enable pin";
enable-gpios = < &gpiod 10 0 >;
label = "Si7021pwr2";
};
};

On Thu, 8 Apr 2021 at 06:03, Rafael Dias via lists.zephyrproject.org <rdmeneze=gmail.com@...> wrote:
Hi Peter,
thank you.

I was performing some tests here and I have a question: if I want to enable two or more supply-regulators in device three, how to proceed?

I tried this approach and it doesn't work:

/ {
regulator {
compatible = "regulator-fixed";
regulator-name = "Si7021 enable pin";
enable-gpios = < &gpiod 9 0 >;
label = "Si7021pwr";
};

regulator {
compatible = "regulator-fixed";
regulator-name = "Si7021 enable pin test";
enable-gpios = < &gpiod 10 0 >;
label = "Si7021pwr2";
};
};

Using this declarations, only the second definition,  Si7021pwr2, appears on ./zephyr/include/generated/devicetree_unfixed.h

On Fri, 2 Apr 2021 at 13:08, Peter A. Bigot <pab@...> wrote:
The regulators API was designed for this purpose.  For a simple GPIO you should just be able to use a supply-gpios property in the devicetree node.  See https://docs.zephyrproject.org/latest/reference/peripherals/regulators.html

Peter



--
Rafael Dias Menezes
tel.:
+436507008854



--
Rafael Dias Menezes
tel.:
+436507008854



--
Rafael Dias Menezes
tel.:
+436507008854



--
Rafael Dias Menezes
tel.:
+436507008854


Dev-Review Meeting Agenda Apr 8

Kumar Gala
 

Here’s the agenda topics for this week:


RFC: memory regions from devicetree & explicit code locations
- https://github.com/zephyrproject-rtos/zephyr/pull/33656

[RFC] kernel: rework kobject metadata generation not to use gperf
- https://github.com/zephyrproject-rtos/zephyr/pull/33719

[RFC] kernel: generate placeholders for kobj tables before final build
- https://github.com/zephyrproject-rtos/zephyr/pull/33687

doc: introduce doxyrunner extension
- https://github.com/zephyrproject-rtos/zephyr/pull/33934

https://github.com/zephyrproject-rtos/zephyr/labels/dev-review

* Any topics anyone else has.

- k


Re: how to describe a peripheral with power enable pin

Rafael Dias
 

Hi,
I was performing tests with my board, and the label Si7021pwr didn't appear at the device list...

On Thu, 8 Apr 2021 at 06:31, Rafael Dias via lists.zephyrproject.org <rdmeneze=gmail.com@...> wrote:
I found a solution:

/ {
si7021_pwr: si7021-pwr-ctrl {
compatible = "regulator-fixed";
regulator-name = "Si7021 enable pin";
enable-gpios = < &gpiod 9 0 >;
label = "Si7021pwr";
};

si7021_pwr2: si7021-pwr2-ctrl {
compatible = "regulator-fixed";
regulator-name = "Si7021 enable pin";
enable-gpios = < &gpiod 10 0 >;
label = "Si7021pwr2";
};
};

On Thu, 8 Apr 2021 at 06:03, Rafael Dias via lists.zephyrproject.org <rdmeneze=gmail.com@...> wrote:
Hi Peter,
thank you.

I was performing some tests here and I have a question: if I want to enable two or more supply-regulators in device three, how to proceed?

I tried this approach and it doesn't work:

/ {
regulator {
compatible = "regulator-fixed";
regulator-name = "Si7021 enable pin";
enable-gpios = < &gpiod 9 0 >;
label = "Si7021pwr";
};

regulator {
compatible = "regulator-fixed";
regulator-name = "Si7021 enable pin test";
enable-gpios = < &gpiod 10 0 >;
label = "Si7021pwr2";
};
};

Using this declarations, only the second definition,  Si7021pwr2, appears on ./zephyr/include/generated/devicetree_unfixed.h

On Fri, 2 Apr 2021 at 13:08, Peter A. Bigot <pab@...> wrote:
The regulators API was designed for this purpose.  For a simple GPIO you should just be able to use a supply-gpios property in the devicetree node.  See https://docs.zephyrproject.org/latest/reference/peripherals/regulators.html

Peter



--
Rafael Dias Menezes
tel.:
+436507008854



--
Rafael Dias Menezes
tel.:
+436507008854



--
Rafael Dias Menezes
tel.:
+436507008854


Re: how to describe a peripheral with power enable pin

Rafael Dias
 

I found a solution:

/ {
si7021_pwr: si7021-pwr-ctrl {
compatible = "regulator-fixed";
regulator-name = "Si7021 enable pin";
enable-gpios = < &gpiod 9 0 >;
label = "Si7021pwr";
};

si7021_pwr2: si7021-pwr2-ctrl {
compatible = "regulator-fixed";
regulator-name = "Si7021 enable pin";
enable-gpios = < &gpiod 10 0 >;
label = "Si7021pwr2";
};
};

On Thu, 8 Apr 2021 at 06:03, Rafael Dias via lists.zephyrproject.org <rdmeneze=gmail.com@...> wrote:
Hi Peter,
thank you.

I was performing some tests here and I have a question: if I want to enable two or more supply-regulators in device three, how to proceed?

I tried this approach and it doesn't work:

/ {
regulator {
compatible = "regulator-fixed";
regulator-name = "Si7021 enable pin";
enable-gpios = < &gpiod 9 0 >;
label = "Si7021pwr";
};

regulator {
compatible = "regulator-fixed";
regulator-name = "Si7021 enable pin test";
enable-gpios = < &gpiod 10 0 >;
label = "Si7021pwr2";
};
};

Using this declarations, only the second definition,  Si7021pwr2, appears on ./zephyr/include/generated/devicetree_unfixed.h

On Fri, 2 Apr 2021 at 13:08, Peter A. Bigot <pab@...> wrote:
The regulators API was designed for this purpose.  For a simple GPIO you should just be able to use a supply-gpios property in the devicetree node.  See https://docs.zephyrproject.org/latest/reference/peripherals/regulators.html

Peter



--
Rafael Dias Menezes
tel.:
+436507008854



--
Rafael Dias Menezes
tel.:
+436507008854


Re: how to describe a peripheral with power enable pin

Rafael Dias
 

Hi Peter,
thank you.

I was performing some tests here and I have a question: if I want to enable two or more supply-regulators in device three, how to proceed?

I tried this approach and it doesn't work:

/ {
regulator {
compatible = "regulator-fixed";
regulator-name = "Si7021 enable pin";
enable-gpios = < &gpiod 9 0 >;
label = "Si7021pwr";
};

regulator {
compatible = "regulator-fixed";
regulator-name = "Si7021 enable pin test";
enable-gpios = < &gpiod 10 0 >;
label = "Si7021pwr2";
};
};

Using this declarations, only the second definition,  Si7021pwr2, appears on ./zephyr/include/generated/devicetree_unfixed.h

On Fri, 2 Apr 2021 at 13:08, Peter A. Bigot <pab@...> wrote:
The regulators API was designed for this purpose.  For a simple GPIO you should just be able to use a supply-gpios property in the devicetree node.  See https://docs.zephyrproject.org/latest/reference/peripherals/regulators.html

Peter



--
Rafael Dias Menezes
tel.:
+436507008854


Zephyr Project: APIs - Tue, 04/06/2021 4:00pm-5:00pm, Please RSVP #cal-reminder

devel@lists.zephyrproject.org Calendar <devel@...>
 

Reminder: Zephyr Project: APIs

When: Tuesday, 6 April 2021, 4:00pm to 5:00pm, (GMT+00:00) UTC

Where:Microsoft Teams Meeting

An RSVP is requested. Click here to RSVP

Organizer: devel@...

Description:

Meeting decisions/discussions in their respective PRs, tracked here: https://github.com/zephyrproject-rtos/zephyr/projects/18


________________________________________________________________________________
+1 321-558-6518 United States, Orlando (Toll)
Conference ID: 317 990 129#
Local numbers | Reset PIN | Learn more about Teams | Meeting options
 
 
________________________________________________________________________________


Zephyr: Networking Forum - Tue, 04/06/2021 3:00pm-4:00pm, Please RSVP #cal-reminder

devel@lists.zephyrproject.org Calendar <devel@...>
 

Reminder: Zephyr: Networking Forum

When: Tuesday, 6 April 2021, 3:00pm to 4:00pm, (GMT+00:00) UTC

Where:Microsoft Teams Meeting

An RSVP is requested. Click here to RSVP

Organizer: tsc@...

Description:


________________________________________________________________________________
+1 321-558-6518 United States, Orlando (Toll)
Conference ID: 458 216 365#
Local numbers | Reset PIN | Learn more about Teams | Meeting options
 
 
________________________________________________________________________________


API meeting: agenda

Carles Cufi
 


Network forum agenda

Jukka Rissanen
 

Hi all,

There is a network forum meeting tomorrow Tue 6 Apr at 8AM PST / 17.00
CET.

Currently the agenda has one item:

* Network traffic monitoring (demo)

If there are any other network related topics you want to discuss,
please let me know.


Live Agenda/Minutes:
https://docs.google.com/document/d/1qFsOpvbyLzhflJbbv4Vl__497pKHDoUCy9hjAveyCX0/edit?usp=sharing

Shared Folder:
https://drive.google.com/drive/folders/1j6d0FLeOjiMil1Ellb59AsfHdzuWdAAc?usp=sharing

___________________________________________________________
Join Microsoft Teams Meeting (
https://teams.microsoft.com/l/meetup-join/19%3ameeting_NDU5ODRkNzktZDBmNC00MDg5LWI2OWEtNzM0MGZjMDU0Yjgw%40thread.v2/0?context=%7b%22Tid%22%3a%22af0096d9-700c-411a-b795-b3dd7122bad2%22%2c%22Oid%22%3a%22841a7c92-7816-4faf-9887-5e334e88f6d8%22%7d
)
+1 321-558-6518 ( tel:+1 321-558-6518,,458216365# ) United States,
Orlando (Toll)
Conference ID: 458 216 365#
Local numbers (
https://dialin.teams.microsoft.com/325d775d-c910-441e-90d0-353ebaa56cdd?id=458216365
) | Reset PIN ( https://mysettings.lync.com/pstnconferencing ) | Learn
more about Teams ( https://aka.ms/JoinTeamsMeeting ) | Meeting options
(
https://teams.microsoft.com/meetingOptions/?organizerId=841a7c92-7816-4faf-9887-5e334e88f6d8&;tenantId=af0096d9-700c-411a-b795-b3dd7122bad2&threadId=19_meeting_NDU5ODRkNzktZDBmNC00MDg5LWI2OWEtNzM0MGZjMDU0Yjgw@thread.v2&messageId=0&language=en-US
)


Cheers,
Jukka


Cancelled Event: Zephyr: Toolchain Working Group - Monday, 5 April 2021 #cal-cancelled

devel@lists.zephyrproject.org Calendar <noreply@...>
 

Cancelled: Zephyr: Toolchain Working Group

This event has been cancelled.

When:
Monday, 5 April 2021
3:00pm to 4:00pm
(UTC+00:00) UTC

Where:
Microsoft Teams Meeting

Organizer: Torsten Rasmussen

Description:

________________________________________________________________________________
+1 321-558-6518 United States, Orlando (Toll)
Conference ID: 682 738 030#
Local numbers | Reset PIN | Learn more about Teams | Meeting options
 
 


Re: how to describe a peripheral with power enable pin

Peter A. Bigot
 

The regulators API was designed for this purpose.  For a simple GPIO you should just be able to use a supply-gpios property in the devicetree node.  See https://docs.zephyrproject.org/latest/reference/peripherals/regulators.html

Peter


how to describe a peripheral with power enable pin

Rafael Dias
 

Hi!
I'm starting with ZephyrProject and I'm playing with the development kit slstk3401a.

After implementing a very basic blinky app, I decided to use the si7021 sensor present at the board. I wrote an .overlay file with the definition of an I2C bus that is connected to the sensor but I'd like  also to define the GPIO that enables/disables the sensor operation. Bellow I share the circuit connection:

slstk3401a_tempsensor.png
And here is my overlay:

/ {
};

&i2c0 {
        status = "okay";
        si7021@40{
                compatible = "silabs,si7006";
                reg = <0x40>;
                label = "Si7021";
                status = "okay";
        };
};

Well, I don't know how to define the SENSOR_ENABLE pin at device three. I tried everything:
  • include a section called "resources":
/ {
resources {
power_en {
status = "okay";
compatible = "gpio-leds";
Si7021_power: Si7021_pwd0 {
gpios = <&gpiod 9 0>;
label = "Si7021_pwr";
};
};
};
};

  • include the section "resources" without "power_en":
/ {
resources {
status = "okay";
compatible = "gpio-leds";
Si7021_power: Si7021_pwd0 {
gpios = <&gpiod 9 0>;
label = "Si7021_pwr";
};
};
};

With these nodes, my firmware compiles, but when I call the function device_get_binding , I get a NULL return.

I solved this by the following code:
	const struct device* gpiod = device_get_binding( DT_LABEL( DT_NODELABEL( gpiod ) ) );
if (NULL == gpiod )
{
printf( "Could not get gpiod port\n" );
return;
} rc = gpio_pin_configure(gpiod, 9, GPIO_OUTPUT_ACTIVE | GPIO_OUTPUT_INIT_HIGH );
if (rc < 0) {
printk("Failed to configure gpio pin\n");
return;
}

I don't know, but I think that it isn't the beautiful way to do this.

Does anyone have advice on how to do this?

best regards,

--
Rafael Dias Menezes
tel.:
+436507008854


Re: Dev-Review Meeting Agenda Apr 1

Bolivar, Marti
 


Zephyr Project: Dev Meeting - Thu, 04/01/2021 3:00pm-4:00pm, Please RSVP #cal-reminder

devel@lists.zephyrproject.org Calendar <devel@...>
 

Reminder: Zephyr Project: Dev Meeting

When: Thursday, 1 April 2021, 3:00pm to 4:00pm, (GMT+00:00) UTC

Where:Microsoft Teams Meeting

An RSVP is requested. Click here to RSVP

Organizer: devel@...

Description:

________________________________________________________________________________
+1 321-558-6518 United States, Orlando (Toll)
Conference ID: 483 314 739#
Local numbers | Reset PIN | Learn more about Teams | Meeting options
 
 
________________________________________________________________________________

1 - 20 of 7678