This repository has been archived by the owner on Oct 25, 2022. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathREADME
executable file
·833 lines (618 loc) · 29.2 KB
/
README
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
NXP S32G BSP
1. About this document
======================
This document describes the common and non-hardware specific information.
Please refer to README.hardware for hardware specific information.
Dependencies
------------
This layer depends on the oe-core version supplied with linux-yocto kernel.
Maintenance
-----------
This layer is maintained by Wind River Systems, Inc.
Contact <[email protected]> or your support representative for more
information on submitting changes.
Building the nxp-s32g layer
---------------------------
This layer should be added to bblayers.conf. This is done automatically
when using the Wind River setup.sh wrapper.
License
-------
Copyright (C) 2018-2020 Wind River Systems, Inc.
Source code included in the tree for individual recipes is under the LICENSE
stated in the associated recipe (.bb file) unless otherwise stated.
The metadata is under the following license unless otherwise stated.
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in
all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
THE SOFTWARE.
2. BSP Kernel and Distros
=========================
The following table summarizes the valid Wind River Linux distros for this BSP.
'Y' in each content cell stands for supported; 'N' stands for not supported:
+--------------+-------------+-------------+-------------+
| valid/distro | wrlinux | wrlinux-cgl | wrlinux-ovp |
+--------------+-------------+-------------+-------------+
| valid | Y | N | N |
+--------------+-------------+-------------+-------------+
For the supported kernel type for this BSP, please check the TARGET_SUPPORTED_KTYPES
by running 'bitbake -e virtual/kernel | grep "^TARGET_SUPPORTED_KTYPES="'.
Note: The preempt-rt ktype is available for this BSP/Machine at this time.
3. Board Specific Patches
=========================
To get a list of patches applied to the kernel specific to this BSP along with
patch descriptions use git-whatchanged on the default kernel. For example:
%> cd tmp-glibc/work-shared/<bsp_name>/kernel-source
%> git whatchanged <kernel_version>/standard/base..<kernel_version>/standard/<bsp_name>
4. Boot Instructions
====================
The typical u-boot settings apply to these boards. You will need to use
setenv, printenv and saveenv, to configure, display and store respectively
your network configuration details and kernel command line. In order to
TFTP a kernel, you need at a minimum to set the following:
- ipaddr
- gatewayip
- netmask
- serverip
- loadaddr
- dtbfile
- dtbaddr
- ethaddr
- eth1addr
Your board may ship with the values for the MAC address of
the Ethernet interfaces set to the defaults compiled into the
u-boot image. You should set the ethaddr, eth1addr and so on
as per the manufacturer assigned values, usually indicated with
a sticker on the board.
Target specifics are usually set in the "bootargs" variable, and the
kernel image is set in the "bootfile" variable. Don't forget that if you
want these values to be available after a power cycle you will need to run
the saveenv command.
Typically convenience macros exist that will create a complete bootargs
command line for the kernel based on variables that contain individual
settings. Since these macros exist as env variables themselves, they
may or may not be present depending on who installed and configured
u-boot for the board.
The console device for the board is ttyLF0 at 115200 baud. For the DTB
address, 0x8FE00000 was used with success by Wind River. The load address
must be high enough to not interfere with kernel decompression. A value
of 0x8A080000 was used with success for all kernels tested by Wind River.
4.1 NFS Root File System
------------------------
Example settings for the monitor (u-boot) are shown below:
nfsboot=setenv bootargs root=/dev/nfs rw nfsroot=$serverip:$rootpath \
ip=$ipaddr:$serverip:$gatewayip:$netmask:$hostname:$netdev:off \
console=$consoledev,$baudrate $othbootargs;tftp $loadaddr $bootfile; \
tftp $fdtaddr $fdtfile;booti $loadaddr - $fdtaddr
ethaddr=00:04:9F:02:00:FD
eth1addr=00:04:9F:02:01:FD
eth2addr=00:04:9F:02:02:FD
loadaddr=0x8A080000
fdtaddr=0x8FE00000
gatewayip=192.168.1.1
netmask=255.255.255.0
ipaddr=192.168.1.100
serverip=192.168.1.2
netdev=eth0
bootfile=Image
fdtfile=fsl-s32g274a-evb.dtb or fsl-s32g274a-rdb2.dtb
rootpath=/tftpboot/rootfs
consoledev=ttyLF0
baudrate=115200
Note:
By default, in u-boot eth0 is occupied by PFE mode. When in non-PFE mode
in order to switch eth0 to the GMAC by explicitly disabling and enabling
the GMAC driver. Run below commands in u-boot:
# s32ccgmac disable
# s32ccgmac enable
# setenv ethact eth_eqos
5. Creating Partitioned Images(WIC)
===================================
User can use the OpenEmbedded Image Creator, wic, to create the properly
partitioned image on a SD card. The wic command
generates partitioned images from existing OpenEmbedded build artifacts.
User can refer to the below URL to get more WIC details:
https://docs.yoctoproject.org/singleindex.html#creating-partitioned-images-using-wic
This BSP supports disk images for SD card.
After build the project, user will get a WIC image under the directory
tmp-glibc/deploy/images/<bsp name>/ ,such as:
tmp-glibc/deploy/images/nxp-s32g/wrlinux-image-<rootfs_type>-nxp-s32g-<board>.wic
Then user can write the output image to a SD card:
5.1 Burn images to SD card
--------------------------
To burn WIC image to SD card, user only need to execute the below command:
For S32G274A-EVB:
# dd if=wrlinux-image-small-nxp-s32g-evb.wic of=/dev/your_sd_dev
For S32G274A-RDB2:
# dd if=wrlinux-image-small-nxp-s32g-rdb2.wic of=/dev/your_sd_dev
5.2 Set uboot env
-----------------
Board can boot automatically by set the below uboot environment variables:
=> setenv bootfile Image; setenv fdtfile <fsl-s32g274a-evb.dtb or fsl-s32g274a-rdb2.dtb>; setenv loadaddr 0x8A080000; setenv fdtaddr 0x8FE00000;
=> setenv bootargs console=ttyLF0,115200n8 root=/dev/mmcblk0p2 rw
=> setenv bootcmd 'fatload mmc 0:1 $loadaddr $bootfile; fatload mmc 0:1 $fdtaddr $fdtfile; booti $loadaddr - $fdtaddr'
=> saveenv; run bootcmd;
Note:
Because PFE and Ethernet GMAC ports are mutually exclusive, in order to enable
PFE or Ethernet GMAC ports on WIC image need to run u-boot commands first
before "run bootcmd":
To use Ethernet GMAC ports:
=> s32ccgmac disable;s32ccgmac enable;setenv ethact eth_eqos;
To use PFE ports:
=> pfeng stop
6. Features
===========
6.1 FLEXCAN
-----------
Detail verification commands as below:
# ip link set can0 up type can bitrate 800000 dbitrate 8000000 fd on
# ip link set can1 up type can bitrate 800000 dbitrate 8000000 fd on
# candump can0 &
# cansend can1 5A1#11.22.33.44.55.66.77.88
# ip -d -s link show can0
# ip -d -s link show can1
If can0 dumps data from can1, FLEXCAN feature works fine.
Note:
For S32G274A-EVB, can0 is the J79 on the S32G-PROCEVB-S board, can1 & can2 are the J19 & J20
on the S32GRV-PLATEVB board.
For S32G274A-RDB2, can0 & can1 are on the J6 on the S32G-VNP-RDB2 board and validated,
can 2 & can3 are no external interfaces and no validation.
6.2 HSE
-------
The NXP HSE (Hardware Security Engine) is a security subsystem aimed at running
relevant security functions for applications with stringent confidentiality and
authenticity requirements. This chapter describes the supported HSE features for
the S32G274 board. Detailed information can refer to "HSE Reference Manual".
HSE is a component of S32G274A SOC. It must be installed with the firmware to use.
HSE firmware is not shipped with SDK. It is released through NXP's Flexera, customers
have to contact NXP to get the access to Flexera.
6.2.1 HSE firmware
------------------
Before to use the HSE, HSE firmware must be installed and the key catalogs must
be formatted.
If you get permission to use HSE, you can get packages "HSE_FW_S32G274_0_0_8_5.exe"
and "HSE_FW_DEMO_APP_S32G274_0_0_8_5.exe" from NXP's official website. you can find
the HSE firmware pink image from "HSE_FW_S32G274_0_0_8_5.exe"
6.2.2 HSE Demo
--------------
The demo application is provided separately and contains details on how to
provision HSE FW on virgin devices and demonstrates common use cases of its
security features.
The HSE Demo is from the package "HSE_FW_DEMO_APP_S32G274_0_0_8_5.exe" of
NXP's official website.
Frist step in installing the HSE FW on a device is to generate the blob image,
the blob image is a binary image which defines the layout of external flash memory.
Contains all images used by BootRom/HSE FW to boot and configure the system at start-up.
Below steps is an example about how to verify the HSE function on M7 cores,
detailed information can refer to the document of "HSE_FW_DEMO_APP_S32G274_0_0_8_5_ReadMe.pdf"
1) Generate the blob image using scripts\blob.py script:
%> set PLATFORM=s32g2xx
%> cd demo_security_installer\scripts
%> python3 blob.py -o new -j json/s32g2xx_new_blob.json -b images/blob_s32g2xx_sd.bin -i sd
2) Flashing the blob image:
%> dd if=blob_s32g2xx_sd.bin of=/dev/your_sd_dev
3) Boot target from SD:
There will be a display below on the serial to confirm HSE is up and running.
HSE FW Version: 0.1.0_0.8.5
HSE FW up and running! Status:
HSE_STATUS_RNG_INIT_OK
HSE_STATUS_INIT_OK
HSE_STATUS_CUST_SUPER_USER
NOTICE:
the script uses rev2 version HSE firmware to create the new blob
image by dedault, if user's board is rev1 version, please modify the
json/s32g2xx_new_blob.json
file to be compatible with the HSE version.
6.2.3 HSE linux
---------------
For linux, there have a demo to verify HSE and it provides PKCS#11 functionality.
The steps are as following:
1. Build project with HSE built-in into WIC image
If users want to use HSE feature in linux, please specify the location
of HSE firmware, like the following:
HSE_LOCAL_FIRMWARE_EVB_BIN = "/path/to/hse/firmware/of/evb/board"
in the project <build-dir>/conf/local.conf.
Then build the project as normal:
bitbake wrlinux-image-std
after build finish, HSE firmware has been put into the WIC image.
2. Initialize HSE firmware and format key stores
After step1, using the SD card to boot the board, and in U-Boot stage,
using the following command to format HSE key stores:
hse_keystore_format
If succeed, it should shows:
MMC read: dev # 0, block # 0, count 1 ...1 blocks read: OK
Formatting NVM and RAM key stores...
Generating SYS_IMG...
Writing SYS_IMG to SDcard...
MMC write: dev # 0, block # 905, count 128...128 blocks written: OK
Updating SYS_IMG pointer...
MMC write: dev # 0, block # 0, count 1...1 blocks written: OK
MMC write: dev # 0, block # 8, count 1...1 blocks written: OK
then boot the board as normal.
3. Run the HSE & PKCS#11 demo
When the linux starts up, run the following command:
pkcs-keyop /usr/lib64/libpkcs11-hse.so.1.0
If succeed, the messages should like:
root@nxp-s32g:~# pkcs-keyop /usr/lib64/libpkcs11-hse.so.1.0
hse: UIO device open
1 slots available
Using token:
Manufacturer......: NXP Semiconductors
Description.......: NXP HSE Slot
Token label.......: NXP HSE Token
Key pair stored
Keys available: 1
Enumerated key label: HSE Key Pair
Key removed
hse: UIO device closed
root@nxp-s32g:~#
NOTICE:
The linux HSE & PKCS#11 demo supports S32G274AEVB board only for now,
because the RDB2 board does not include the HSE related configurations
and dts node in U-Boot. And this will be fixed in future. Moreover,
there will be "hse-rng: no data available" message shown with HSE 0.8.5
version firmware, and using 1.0.0 version HSE firmware can fix it.
6.2.4 Known issues
------------------
For HSE feature, due to the board boot flow changed from uboot to ATF by
default, and HSE enablement flow changed accordingly, such that HSE is not
available for now, and its support status will be updated when NXP SDK bsp32
officially released.
6.3 PFE
-------
The NXP PFE (Packet Forwarding Engine) offloads the processing of Ethernet packets
from the host cores, yielding higher performance and lower power than pure software
processing can achieve.
PFE is a component of S32G274A SOC. It must be installed with the firmware to use.
PFE firmware is not shipped with SDK, customers have to contact NXP to get permission
and download the PFE firmware.
6.3.1 PFE firmware
------------------
PFE is a firmware-based module. Load the firmware before using PFE.
The firmwares name are "s32g_pfe_class.fw" and "s32g_pfe_util.fw" with
version 1.1.1, which have to be downloaded from NXP Software.
6.3.2 Steps to verify
---------------------
1. Add the "pfe" package to the system through including the
following line in your local.conf:
IMAGE_INSTALL_append_nxp-s32g = " pfe"
PFE_LOCAL_FIRMWARE_DIR = "<The firmwares fully directory path, eg: lib/firmware/>"
The variable PFE_LOCAL_FIRMWARE_DIR indicates the location where can
get the firmwares s32g_pfe_class.fw and s32g_pfe_util.fw.
And after setting the above variables, the firmwares can be installed
into WIC image's first boot partition automatically when build WIC image.
2. Built and install them:
# bitbake wrlinux-image-<small/std>
Normally the PFE feature should use the WIC booting system to verify instead of
using NFS, the u-boot will default use the eth_pfeng Ethernet port mode and boot
the wrlinux. You can set the ip address for the pfe port to do a simple test
in the wrlinux. More complex usage and testing can refer to the document
"S32G Linux PFE Driver User’s Manual".
About the detailed pfe port map information can refer to the chapter "Ethernet Hardware Support on S32G2"
of the document "S32G2_LinuxBSP_31.0_User_Manual.pdf".
Note:
1. Same as NXP SDK, only the "pfe1" interface for S32G274A-EVB board and
"pfe2" interface for S32G274A-RDB2 board are verified fine. Others pfe ports
connected with "SJA1105Q" or "SJA1110A" don't work.
2. In order to use the Ethernet port with GMAC active instead of pfe in u-boot, you can
remove the s32g_pfe_class.fw and s32g_pfe_util.fw from sdcard first boot partition,
3. For S32G274A-EVB board, since the "pfe1" and GMAC Ethernet port share the same physical
port, and u-boot will force the GMAC to be disabled if detecting the pfe
firmware. So the GMAC will not be usable at this time, you can use the WIC method to
test the pfe feature or adding a PCIe Ethernet port as a replacement.
4. For S32G274A-RDB2 board, if using NFS to verify the PFE feature. You should
first switch eth to GMAC in u-boot, please refer to above chapter "4.1 NFS Root File System"
to switch eth to GMAC.
5. For S32G274A-EVB board, the connection over the SJA1105 automotive switch requires
firmware to be preloaded to the switch on every reboot:
=> sja probe 5:0
=> sja speed -,-,-,1G,1G 5:0
If the s32g_pfe_class.fw is not loaded, u-boot will print the following failure logs:
Failed to change the clock source of mux 6 to 55 (CGM = 0000000044018000)
Failed to enable clock: 20005
Failed to enable 93 clock
Failed to enable mac2_rx_rgmii clock
6.4 LLCE
--------
NXP LLCE (Low Latency Communication Engine) is an autonomous accelerator
designed to offload communication tasks on the CAN, LIN and Flexray
Protocols. It is a self-contained module, separate from the application
cores that would run applications (host cores). For now, LLCE CAN has
been supported, LIN and Flexray are not, same as SDK.
LLCE is a component of S32G274A SOC. It must be installed with the firmwares
to use. LLCE firmwares are not shipped with SDK. It is released through NXP's
Flexera, customers have to contact NXP to get the access to Flexera.
6.4.1 LLCE firmwares
--------------------
LLCE is a firmware-based module. Load the firmwares before using it.
There are 4 LLCE firmwares:
dte.bin
frpe.bin
ppe_tx.bin
ppe_rx.bin
with version 1.0.3 to be downloaded from NXP Software.
6.4.2 LLCE CAN verify steps
---------------------------
If users want to verify LLCE CAN feature, please add the following lines in
<build-dir>/conf/local.conf of wrlinux project:
PNWHITELIST_wr-nxp-s32g += "llce"
IMAGE_INSTALL_append_nxp-s32g = " llce"
LLCE_LOCAL_FIRMWARE_DIR = "<path-to-llce-firmwares-for-s32g2-boards>"
LLCE_LOCAL_FIRMWARE_DIR_S32G3 = "<path-to-llce-firmwares-for-s32g3-boards>"
the variable LLCE_LOCAL_FIRMWARE_DIR indecates the firmwares(dte.bin,
frpe.bin, ppe_tx.bin and ppe_rx.bin) location.
then build the project as usual. Boot up the board with the new built WIC
image, make sure that the test llcecan ports are connected. As an example,
using llcecan0 and llcecan14 to verify. steps as following:
1. configure llcecan0 and llcecan14 interfaces
ip link set up llcecan0 type can bitrate 500000 dbitrate 5000000 fd on
ip link set up llcecan14 type can bitrate 500000 dbitrate 5000000 fd on
2. capture can messages
candump any,0:0,#FFFFFFFF > llce_can.log &
3. send a packet using llcecan14
cansend llcecan14 15575555##300112233445566778899aabbcceedd112233
4. verify the capture output
cat llce_can.log
If succeed, it should output like:
root@nxp-s32g:~# cat llce_can.log
llcecan0 15575555 [20] 00 11 22 33 44 55 66 77 88 99 AA BB CC EE DD 11 22 33 00 00
llcecan14 15575555 [20] 00 11 22 33 44 55 66 77 88 99 AA BB CC EE DD 11 22 33 00 00
6.5 ATF
-------
The ARM Trusted Firmware (ATF, or TF-A) is a software component of
the linux BSP with a double role as a bootloader and Secure Monitor.
As a bootloader, it runs before U-Boot on the A53 boot core and takes
over some of the core and SoC initializations such as clocks or MC_ME
partitions (mostly for those peripherals and subsystems that the ATF
needs). As a Secure Monitor, the TF-A provides power management services
to other software components, via a standard API/ABI called PSCI. For
details of ATF, please refer to the sections
"21 ARM Trusted Firmware"
and
"19 Power Management"
in "S32G2_LinuxBSP_31.0_User_Manual.pdf".
NOTICE:
For hardware reasons, the power management features are only supported
on S32G274A RDB REV B2 or newer boards.
6.5.1 Prerequirement
--------------------
Currentlly, the ATF is an optional template feature, if users want to enable
it, please adding the following line in <build-dir>/conf/local.conf of the
project:
WRTEMPLATE = "feature/atf-s32g"
This will enable the ATF feature and compile and install the related files
into WIC image.
6.5.2 STR verify steps
----------------------
STR(Sleep To Ram) is a complex power management feature and is a high-level
concept, implemented by the linux kernel and the ATF, and underlaid by the
S32G SoC’s Standby state. With ATF enabled, users can verify STR using the
following command after the board boot up:
rtcwake -d rtc0 -m mem -s 10
this command will excute STR and try to wakeup the system with RTC after
10 seconds. If succeed, the output messages should like the following:
root@nxp-s32g:~# rtcwake -d rtc0 -m mem -s 5
rtcwake: assuming RTC uses UTC ...
rtcwake: wakeup from "mem" using rtc0 at Thu Jan 1 00:27:29 1970
PM: suspend entry (deep)
Filesystems sync: 0.000 seconds
Freezing user space processes ... (elapsed 0.001 seconds) done.
OOM killer disabled.
Freezing remaining freezable tasks ... (elapsed 0.001 seconds) done.
printk: Suspending console(s) (use no_console_suspend to debug)
NOTICE: S32G TF-A: s32g_pwr_domain_off
NOTICE: S32G TF-A: s32g_pwr_domain_off_down_wfi: cpu = 1
NOTICE: S32G TF-A: s32g_pwr_domain_pwr_down_wfi: cpu = 2
TICE: S32G TF-A: s32g_pwr_domain_off
NOTICE: S32G TF-A: s32g_pwr_domain_pwr_down_wfi: OTICE: S32G TF-A: s32g_get_sys_suspend_power_state
NOTICE: S32G TF-A: s32g_pwr_domain_suspend_pwrdown_early
NOTICE: S32G TF-A: s32g_pwr_domain_suspend
NOTICE: S32G TF-A: s32g_pwr_domain_pwr_down_wfi: cpu = 0
NOTICE: S32G TF-A: s32g_pwr_domain_suspend_finish
NOTICE: S32G TF-A: s32g_pwr_domain_on: booting up core 1
NOTICE: S32G TF-A: s32g_pwr_domain_on_finish: cpu 1 running
NOTICE: S32G TF-A: s32g_pwr_domain_on: booting up core 2
NOTICE: S32G TF-A: s32g_pwr_domain_on_finish: cpu 2 running
NOTICE: S32G TF-A: s32g_pwr_domain_on: booting up core 3
NOTICE: S32G TF-A: s32g_pwr_domain_on_finish: cpu 3 running
s32cc-dwmac 4033c000.ethernet eth0: Link is Down
s32cc-dwmac 4033c000.ethernet: Set TX clock to 125M
s32cc-dwmac 4033c000.ethernet eth0: Link is Up - 1Gbps/Full - flow control rx/tx
s32cc-dwmac 4033c000.ethernet eth0: Link is Down
fsl-edma 40144000.dma-controller: WARN: There is non-idle channel.
Disabling non-boot CPUs ...
IRQ78: set affinity failed(-22).
CPU1: shutdown
psci: CPU1 killed (polled 4 ms)
IRQ78: set affinity failed(-22).
CPU2: shutdown
psci: CPU2 killed (polled 4 ms)
IRQ78: set affinity failed(-22).
CPU3: shutdown
psci: CPU3 killed (polled 4 ms)
Enabling non-boot CPUs ...
Detected VIPT I-cache on CPU1
GICv3: CPU1: found redistributor 1 region 0:0x00000000508a0000
CPU1: Booted secondary processor 0x0000000001 [0x410fd034]
CPU1 is up
Detected VIPT I-cache on CPU2
GICv3: CPU2: found redistributor 100 region 0:0x00000000508c0000
CPU2: Booted secondary processor 0x0000000100 [0x410fd034]
CPU2 is up
Detected VIPT I-cache on CPU3
GICv3: CPU3: found redistributor 101 region 0:0x00000000508e0000
CPU3: Booted secondary processor 0x0000000101 [0x410fd034]
CPU3 is up
s32cc-dwmac 4033c000.ethernet: phy mode set to RGMII
s32cc-dwmac 4033c000.ethernet: Failed to reset the dma
s32cc-dwmac 4033c000.ethernet eth0: stmmac_hw_setup: DMA engine initialization failed
s32cc-dwmac 4033c000.ethernet eth0: configuring for phy/rgmii link mode
OOM killer enabled.
Restarting tasks ... done.
PM: suspend exit
root@nxp-s32g:~#
6.5.2 CPU Hotplug verify steps
------------------------------
With ATF enabled, CPU Hotplug is supported, below is the steps
to verify this feature:
1. check current online cpu numbers
root@nxp-s32g:~# nproc
4
2. offline cpu1
root@nxp-s32g:~# echo 0 > /sys/devices/system/cpu/cpu1/online
NOTICE: SIRQ78: set affinity failed(-22).
process 201 (rngd) no longer affine to cpu1
process 199 (rngd) no longer affine to cpu1
CPU1: shutdown
psci: CPU1 killed (polled 0 ms)
root@nxp-s32g:~# nproc
3
3. online cpu1
root@nxp-s32g:~# echo 1 > /sys/devices/system/cpu/cpu1/online
NOTICE: S32G TF-A: s32g_pwr_domain_on: booting up core 1
NOTICE: S32G TF-A: s32g_pwr_domain_on_finish: cpu 1 running
Detected VIPT I-cache on CPU1
GICv3: CPU1: found redistributor 1 region 0:0x00000000508a0000
CPU1: Booted secondary processor 0x0000000001 [0x410fd034]
root@nxp-s32g:~#
root@nxp-s32g:~# nproc
4
root@nxp-s32g:~#
6.5.3 Known issues
------------------
For ATF feature, there are some known issues.
1. USB devices can not be identified after STR
Same as SDK, the usb devices can not be identified after STR, because
the USB driver does not support STR currentlly, there is a STR supported
driver list in section:
"19.3 Suspend to RAM" in "S32G2_LinuxBSP_31.0_User_Manual.pdf"
And this list will be updated in future.
6.5.4 Build ATF
---------------
By default, the atf image is compiled and installed. If you want atf to be manually
compiled separately, use the following command:
# bitbake atf-s32g
6.6 IPCF
--------
IPCF is short for "Inter-Platform Communication Framework" on NXP S32G
platform, it is designed to work on various hardware platforms and operating
systems. Prior to being used it needs to be integrated in the operating
systems running on each platform. For S32G, to use this feature, users need
to manually prepare application for M7 cores(refer to the following section
6.6.1 "IPCF application on M7 side"), and the A53 linux side components
have already integrated into wrlinux(please refer to the following section
6.6.2 "Enable IPCF feature in wrlinux").
6.6.1 IPCF application on M7 side
---------------------------------
Please note that, application on M7 side is not a pre-built binary file, it
should be built manually, as preparation, the following(all of them can be
found on Flexera) shoul be setup in the following order on user's local host
machine:
1. S32 Design Studio 3.4
2. S32 Design Studio 3.4 Development Packages for Offline Use,
Support for S32G Family
3. Real Time Drivers (RTD) 4.4 version 3.0.0 D2112 (use file
with _updatesite.zip in the name and install through
Extensions and Updates in S32 Design Studio)
4. IPCF version 4.5.0 D2201 (use file with _updatesite.zip in
the name and install through Extensions and Updates in
S32 Design Studio)
For detail informations about the above packages setup, installation and
build steps, please refer to the documents:
"S32DS_Installation_Guide_3.4.0.pdf"
"SW32_RTD_4.4_3.0.0_D2112_ReleaseNotes.pdf"
"SW32G_IPCF_4.5.0_D2201_ReleaseNotes.pdf"
and etc., which can be found in related packages downloaded from flexra.
And if the IPCF application on M7 side build successfully following the
related documents, then users can find the binary files:
"IPCF_Example_S32G274.bin" and "IPCF_Example_S32G399_M7_0.bin"
from S32DS IPCF example project.
6.6.2 Enable IPCF feature in wrlinux
------------------------------------
If users want to enable IPCF feature on A53 side linux system, please add
the following lines in the <project-build-dir>/conf/local.conf:
IPCF_M7_APP_BIN_DIR = "/path/to/your-ipcf-m7-app/"
IMAGE_INSTALL_append = ' ipc-shm'
then build the project as normal:
bitbake wrlinux-image-std
the IPCF related drivers and M7 side app binaries(IPCF_Example_S32G274.bin and
IPCF_Example_S32G399_M7_0.bin) will be built into WIC image.
NOTICE:
The M7 side binary default names are IPCF_Example_S32G274.bin and
IPCF_Example_S32G399_M7_0.bin, and they are defined by two variables
IPCF_M7_APP_BIN_NAME and IPCF_M7_APP_BIN_NAME_S32G3 respectively, users can
use different binary names by modifying these variables, or set related
variable(s) to empty if it is unneeded for users.
6.6.3 IPCF verify steps
-----------------------
If both the IPCF application on M7 side and IPCF related drivers in linux
are all build successfully, then users can follow the below steps to verify
this feature:
1. dd WIC image(build following 6.6.2 section) into one SD-card
2. using the SD-card to bootup the board
3. stop in u-boot stage, and excute following commands
a> disable Data Cache from uboot:
=>dcache off
b> zero-set SRAM shared memory used by both sample apps:
=>mw.q 0x34000000 0x0 0x100000
c> load IPCF binary in SRAM:
for S32G2:
=>fatload mmc 0:1 0x80000000 IPCF_Example_S32G274_M7_0.bin
for S32G3:
=>fatload mmc 0:1 0x80000000 IPCF_Example_S32G399_M7_0.bin
then:
=>cp.q 0x80000000 0x34300000 0x30000
=>dcache on;
d> start M7 core (the argument is the address of the Interrupt Vector):
for S32G2:
=>startm7 0x34401000;
for S32G3:
=>startm7 0x34381000;
e> boot Linux:
=>boot
4. after linux system startup, enable ipcf driver support on linux
modprobe ipc-shm-sample
5. run ipcf test command
echo 10 > /sys/kernel/ipc-shm-sample/ping
If all the above steps succeed, the result messages should be like:
root@nxp-s32g:~# echo 10 > /sys/kernel/ipc-shm-sample/ping
ipc-shm-sample: starting demo...
ipc-shm-sample: ch 0 >> 20 bytes: SENDING MESSAGES: 10
ipc-shm-sample: ch 1 >> 32 bytes: #0 HELLO WORLD! from KERNEL
ipc-shm-sample: ch 1 << 32 bytes: #0 HELLO WORLD! from CORE 4
ipc-shm-sample: ch 2 >> 32 bytes: #1 HELLO WORLD! from KERNEL
ipc-shm-sample: ch 2 << 32 bytes: #1 HELLO WORLD! from CORE 4
ipc-shm-sample: ch 1 >> 32 bytes: #2 HELLO WORLD! from KERNEL
ipc-shm-sample: ch 1 << 32 bytes: #2 HELLO WORLD! from CORE 4
ipc-shm-sample: ch 2 >> 32 bytes: #3 HELLO WORLD! from KERNEL
ipc-shm-sample: ch 2 << 32 bytes: #3 HELLO WORLD! from CORE 4
ipc-shm-sample: ch 1 >> 32 bytes: #4 HELLO WORLD! from KERNEL
ipc-shm-sample: ch 1 << 32 bytes: #4 HELLO WORLD! from CORE 4
ipc-shm-sample: ch 2 >> 32 bytes: #5 HELLO WORLD! from KERNEL
ipc-shm-sample: ch 2 << 32 bytes: #5 HELLO WORLD! from CORE 4
ipc-shm-sample: ch 1 >> 32 bytes: #6 HELLO WORLD! from KERNEL
ipc-shm-sample: ch 1 << 32 bytes: #6 HELLO WORLD! from CORE 4
ipc-shm-sample: ch 2 >> 32 bytes: #7 HELLO WORLD! from KERNEL
ipc-shm-sample: ch 2 << 32 bytes: #7 HELLO WORLD! from CORE 4
ipc-shm-sample: ch 1 >> 32 bytes: #8 HELLO WORLD! from KERNEL
ipc-shm-sample: ch 1 << 32 bytes: #8 HELLO WORLD! from CORE 4
ipc-shm-sample: ch 2 >> 32 bytes: #9 HELLO WORLD! from KERNEL
ipc-shm-sample: ch 0 << 20 bytes: REPLIED MESSAGES: 10
ipc-shm-sample: ch 2 << 32 bytes: #9 HELLO WORLD! from CORE 4
ipc-shm-sample: exit demo
root@nxp-s32g:~#
6.7 Build U-Boot
----------------
By default, the u-boot image is compiled and installed. If you want u-boot to be manually
compiled separately, use the following command:
# bitbake u-boot-s32