summaryrefslogtreecommitdiffstats
path: root/docs/plat/poplar.rst
blob: 215f551429ce773f39731d345b45433b273999c6 (plain)
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
Poplar
======

Poplar is the first development board compliant with the 96Boards Enterprise
Edition TV Platform specification.

The board features the Hi3798C V200 with an integrated quad-core 64-bit
Arm Cortex A53 processor and high performance Mali T720 GPU, making it capable
of running any commercial set-top solution based on Linux or Android.

It supports a premium user experience with up to H.265 HEVC decoding of 4K
video at 60 frames per second.

::

    SOC Hisilicon Hi3798CV200
    CPU Quad-core Arm Cortex-A53 64 bit
    DRAM DDR3/3L/4 SDRAM interface, maximum 32-bit data width 2 GB
    USB Two USB 2.0 ports One USB 3.0 ports
    CONSOLE USB-micro port for console support
    ETHERNET 1 GBe Ethernet
    PCIE One PCIe 2.0 interfaces
    JTAG 8-Pin JTAG
    EXPANSION INTERFACE Linaro 96Boards Low Speed Expansion slot
    DIMENSION Standard 160×120 mm 96Boards Enterprice Edition form factor
    WIFI 802.11AC 2*2 with Bluetooth
    CONNECTORS One connector for Smart Card One connector for TSI

At the start of the boot sequence, the bootROM executes the so called l-loader
binary whose main role is to change the processor state to 64bit mode. This
must happen prior to invoking Trusted Firmware-A:

::

    l-loader --> Trusted Firmware-A --> u-boot

How to build
------------

Code Locations
~~~~~~~~~~~~~~

-  Trusted Firmware-A:
   `link <https://github.com/ARM-software/arm-trusted-firmware>`__

-  l-loader:
   `link <https://github.com/Linaro/poplar-l-loader.git>`__

-  u-boot:
   `link <http://git.denx.de/u-boot.git>`__

Build Procedure
~~~~~~~~~~~~~~~

-  Fetch all the above 3 repositories into local host.
   Make all the repositories in the same ${BUILD\_PATH}.

-  Prepare the AARCH64 toolchain.

-  Build u-boot using poplar_defconfig

.. code:: bash

       make CROSS_COMPILE=aarch64-linux-gnu- poplar_defconfig
       make CROSS_COMPILE=aarch64-linux-gnu-

-  Build atf providing the previously generated u-boot.bin as the BL33 image

.. code:: bash

       make CROSS_COMPILE=aarch64-linux-gnu-  all fip SPD=none PLAT=poplar
       BL33=u-boot.bin

-  Build l-loader (generated the final fastboot.bin)
       1. copy the atf generated files fip.bin and bl1.bin to l-loader/atf/
       2. export ARM_TRUSTED_FIRMWARE=${ATF_SOURCE_PATH)
       3. make

Install Procedure
-----------------

- Copy l-loader/fastboot.bin to a FAT partition on a USB pen drive.

- Plug the USB pen drive to any of the USB2 ports

- Power the board while keeping S3 pressed (usb_boot)

The system will boot into a u-boot shell which you can then use to write the
working firmware to eMMC.

Boot trace
----------

::

    Bootrom start
    Boot Media: eMMC
    Decrypt auxiliary code ...OK

    lsadc voltage min: 000000FE, max: 000000FF, aver: 000000FE, index: 00000000

    Entry boot auxiliary code

    Auxiliary code - v1.00
    DDR code - V1.1.2 20160205
    Build: Mar 24 2016 - 17:09:44
    Reg Version:  v134
    Reg Time:     2016/03/18 09:44:55
    Reg Name:     hi3798cv2dmb_hi3798cv200_ddr3_2gbyte_8bitx4_4layers.reg

    Boot auxiliary code success
    Bootrom success

    LOADER:  Switched to aarch64 mode
    LOADER:  Entering ARM TRUSTED FIRMWARE
    LOADER:  CPU0 executes at 0x000ce000

    INFO:    BL1: 0xe1000 - 0xe7000 [size = 24576]
    NOTICE:  Booting Trusted Firmware
    NOTICE:  BL1: v1.3(debug):v1.3-372-g1ba9c60
    NOTICE:  BL1: Built : 17:51:33, Apr 30 2017
    INFO:    BL1: RAM 0xe1000 - 0xe7000
    INFO:    BL1: Loading BL2
    INFO:    Loading image id=1 at address 0xe9000
    INFO:    Image id=1 loaded at address 0xe9000, size = 0x5008
    NOTICE:  BL1: Booting BL2
    INFO:    Entry point address = 0xe9000
    INFO:    SPSR = 0x3c5
    NOTICE:  BL2: v1.3(debug):v1.3-372-g1ba9c60
    NOTICE:  BL2: Built : 17:51:33, Apr 30 2017
    INFO:    BL2: Loading BL31
    INFO:    Loading image id=3 at address 0x129000
    INFO:    Image id=3 loaded at address 0x129000, size = 0x8038
    INFO:    BL2: Loading BL33
    INFO:    Loading image id=5 at address 0x37000000
    INFO:    Image id=5 loaded at address 0x37000000, size = 0x58f17
    NOTICE:  BL1: Booting BL31
    INFO:    Entry point address = 0x129000
    INFO:    SPSR = 0x3cd
    INFO:    Boot bl33 from 0x37000000 for 364311 Bytes
    NOTICE:  BL31: v1.3(debug):v1.3-372-g1ba9c60
    NOTICE:  BL31: Built : 17:51:33, Apr 30 2017
    INFO:    BL31: Initializing runtime services
    INFO:    BL31: Preparing for EL3 exit to normal world
    INFO:    Entry point address = 0x37000000
    INFO:    SPSR = 0x3c9


    U-Boot 2017.05-rc2-00130-gd2255b0 (Apr 30 2017 - 17:51:28 +0200)poplar

    Model: HiSilicon Poplar Development Board
    BOARD: Hisilicon HI3798cv200 Poplar
    DRAM:  1 GiB
    MMC:   Hisilicon DWMMC: 0
    In:    serial@f8b00000
    Out:   serial@f8b00000
    Err:   serial@f8b00000
    Net:   Net Initialization Skipped
    No ethernet found.

    Hit any key to stop autoboot:  0
    starting USB...
    USB0:   USB EHCI 1.00
    scanning bus 0 for devices... 1 USB Device(s) found
    USB1:   USB EHCI 1.00
    scanning bus 1 for devices... 4 USB Device(s) found
           scanning usb for storage devices... 1 Storage Device(s) found
           scanning usb for ethernet devices... 1 Ethernet Device(s) found

    USB device 0:
        Device 0: Vendor: SanDisk Rev: 1.00 Prod: Cruzer Blade
                Type: Removable Hard Disk
                Capacity: 7632.0 MB = 7.4 GB (15630336 x 512)
    ... is now current device
    Scanning usb 0:1...
    =>