mirror of
https://github.com/AsahiLinux/u-boot
synced 2024-12-01 08:59:33 +00:00
Prepare v2022.01-rc3
-----BEGIN PGP SIGNATURE----- iQGzBAABCgAdFiEEGjx/cOCPqxcHgJu/FHw5/5Y0tywFAmGk/4sACgkQFHw5/5Y0 tyyjtgwAo0jCRa1Vyc5z2RrINGdARoPhNcCnBNMYEVTjH9uP0/Mzlpo4i1IWX5qP nEuVmP01KjtWDRNy7Cpr45/j2PkTZ0THqXGZKpTG/yALdUKZw0wbzeh/CMllWh0A 9yJfMbv2/IV79rbb6osxItjusSr5PnrU5fHsR+zUfC8NRZpzWGfpH8a6NpfGvGYo 3OUKNJrGv930C3MqVnUEHPIuz+vL9fWLSs/rK/JHVZt+ALU45uYtz4cKycMoElVd IUJe3mhKhw0k8dO8R+p3UAEFrP+LZdcBLgCt8wRQK6Yl4lcxYOtZgYuJuM9Kp20s abqIuky3TWwFjpNM60Gmo63Yf967jOeI/lfITq2juZ5TBlNKOO6Z/NRVUsHkNKFG 7qJC14/NxuSdN4u9s2h+rJBBGYc+BzWVO/ikigHnsCeFQYfafJpGTnPSJr55OU5X eeB6l3blx6jwxOPAz0JhLecZb4e027R+eKionirMEnVPENtnJjF1d+CulkekahUO LvdqKaBE =h4j5 -----END PGP SIGNATURE----- Merge tag 'v2022.01-rc3' into next Prepare v2022.01-rc3 Signed-off-by: Tom Rini <trini@konsulko.com>
This commit is contained in:
commit
2402c93130
77 changed files with 2130 additions and 344 deletions
13
MAINTAINERS
13
MAINTAINERS
|
@ -668,6 +668,7 @@ F: drivers/mtd/jedec_flash.c
|
||||||
|
|
||||||
CLOCK
|
CLOCK
|
||||||
M: Lukasz Majewski <lukma@denx.de>
|
M: Lukasz Majewski <lukma@denx.de>
|
||||||
|
M: Sean Anderson <seanga2@gmail.com>
|
||||||
S: Maintained
|
S: Maintained
|
||||||
T: git https://source.denx.de/u-boot/custodians/u-boot-clk.git
|
T: git https://source.denx.de/u-boot/custodians/u-boot-clk.git
|
||||||
F: drivers/clk/
|
F: drivers/clk/
|
||||||
|
@ -768,6 +769,18 @@ S: Maintained
|
||||||
F: doc/usage/environment.rst
|
F: doc/usage/environment.rst
|
||||||
F: scripts/env2string.awk
|
F: scripts/env2string.awk
|
||||||
|
|
||||||
|
FASTBOOT
|
||||||
|
S: Orphaned
|
||||||
|
F: cmd/fastboot.c
|
||||||
|
F: doc/android/fastboot*.rst
|
||||||
|
F: include/fastboot.h
|
||||||
|
F: include/fastboot-internal.h
|
||||||
|
F: include/net/fastboot.h
|
||||||
|
F: drivers/fastboot/
|
||||||
|
F: drivers/usb/gadget/f_fastboot.c
|
||||||
|
F: net/fastboot.c
|
||||||
|
F: test/dm/fastboot.c
|
||||||
|
|
||||||
FPGA
|
FPGA
|
||||||
M: Michal Simek <michal.simek@xilinx.com>
|
M: Michal Simek <michal.simek@xilinx.com>
|
||||||
S: Maintained
|
S: Maintained
|
||||||
|
|
4
Makefile
4
Makefile
|
@ -3,7 +3,7 @@
|
||||||
VERSION = 2022
|
VERSION = 2022
|
||||||
PATCHLEVEL = 01
|
PATCHLEVEL = 01
|
||||||
SUBLEVEL =
|
SUBLEVEL =
|
||||||
EXTRAVERSION = -rc2
|
EXTRAVERSION = -rc3
|
||||||
NAME =
|
NAME =
|
||||||
|
|
||||||
# *DOCUMENTATION*
|
# *DOCUMENTATION*
|
||||||
|
@ -1247,7 +1247,7 @@ binary_size_check: u-boot-nodtb.bin FORCE
|
||||||
echo "u-boot.map shows a binary size of $$map_size" >&2 ; \
|
echo "u-boot.map shows a binary size of $$map_size" >&2 ; \
|
||||||
echo " but u-boot-nodtb.bin shows $$file_size" >&2 ; \
|
echo " but u-boot-nodtb.bin shows $$file_size" >&2 ; \
|
||||||
exit 1; \
|
exit 1; \
|
||||||
fi \
|
fi; \
|
||||||
fi
|
fi
|
||||||
|
|
||||||
ifeq ($(CONFIG_INIT_SP_RELATIVE)$(CONFIG_OF_SEPARATE),yy)
|
ifeq ($(CONFIG_INIT_SP_RELATIVE)$(CONFIG_OF_SEPARATE),yy)
|
||||||
|
|
|
@ -319,6 +319,7 @@ dtb-$(CONFIG_ARCH_ZYNQMP) += \
|
||||||
avnet-ultra96-rev1.dtb \
|
avnet-ultra96-rev1.dtb \
|
||||||
avnet-ultrazedev-cc-v1.0-ultrazedev-som-v1.0.dtb \
|
avnet-ultrazedev-cc-v1.0-ultrazedev-som-v1.0.dtb \
|
||||||
zynqmp-a2197-revA.dtb \
|
zynqmp-a2197-revA.dtb \
|
||||||
|
zynqmp-dlc21-revA.dtb \
|
||||||
zynqmp-e-a2197-00-revA.dtb \
|
zynqmp-e-a2197-00-revA.dtb \
|
||||||
zynqmp-g-a2197-00-revA.dtb \
|
zynqmp-g-a2197-00-revA.dtb \
|
||||||
zynqmp-m-a2197-01-revA.dtb \
|
zynqmp-m-a2197-01-revA.dtb \
|
||||||
|
|
221
arch/arm/dts/zynqmp-dlc21-revA.dts
Normal file
221
arch/arm/dts/zynqmp-dlc21-revA.dts
Normal file
|
@ -0,0 +1,221 @@
|
||||||
|
// SPDX-License-Identifier: GPL-2.0
|
||||||
|
/*
|
||||||
|
* dts file for Xilinx ZynqMP DLC21 revA
|
||||||
|
*
|
||||||
|
* (C) Copyright 2019 - 2021, Xilinx, Inc.
|
||||||
|
*
|
||||||
|
* Michal Simek <michal.simek@xilinx.com>
|
||||||
|
*/
|
||||||
|
/dts-v1/;
|
||||||
|
|
||||||
|
#include "zynqmp.dtsi"
|
||||||
|
#include "zynqmp-clk-ccf.dtsi"
|
||||||
|
#include <dt-bindings/gpio/gpio.h>
|
||||||
|
#include <dt-bindings/phy/phy.h>
|
||||||
|
#include <include/dt-bindings/gpio/gpio.h>
|
||||||
|
|
||||||
|
/ {
|
||||||
|
model = "Smartlynq+ DLC21 RevA";
|
||||||
|
compatible = "xlnx,zynqmp-dlc21-revA", "xlnx,zynqmp-dlc21",
|
||||||
|
"xlnx,zynqmp";
|
||||||
|
|
||||||
|
aliases {
|
||||||
|
ethernet0 = &gem0;
|
||||||
|
gpio0 = &gpio;
|
||||||
|
i2c0 = &i2c0;
|
||||||
|
mmc0 = &sdhci0;
|
||||||
|
mmc1 = &sdhci1;
|
||||||
|
rtc0 = &rtc;
|
||||||
|
serial0 = &uart0;
|
||||||
|
serial2 = &dcc;
|
||||||
|
usb0 = &usb0;
|
||||||
|
usb1 = &usb1;
|
||||||
|
spi0 = &spi0;
|
||||||
|
nvmem0 = &eeprom;
|
||||||
|
};
|
||||||
|
|
||||||
|
chosen {
|
||||||
|
bootargs = "earlycon";
|
||||||
|
stdout-path = "serial0:115200n8";
|
||||||
|
};
|
||||||
|
|
||||||
|
memory@0 {
|
||||||
|
device_type = "memory";
|
||||||
|
reg = <0 0 0 0x80000000>, <0x8 0 0x3 0x80000000>;
|
||||||
|
};
|
||||||
|
|
||||||
|
si5332_1: si5332_1 { /* clk0_sgmii - u142 */
|
||||||
|
compatible = "fixed-clock";
|
||||||
|
#clock-cells = <0>;
|
||||||
|
clock-frequency = <125000000>;
|
||||||
|
};
|
||||||
|
|
||||||
|
si5332_2: si5332_2 { /* clk1_usb - u142 */
|
||||||
|
compatible = "fixed-clock";
|
||||||
|
#clock-cells = <0>;
|
||||||
|
clock-frequency = <26000000>;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
&sdhci0 { /* emmc MIO 13-23 - with some settings 16GB */
|
||||||
|
status = "okay";
|
||||||
|
non-removable;
|
||||||
|
disable-wp;
|
||||||
|
bus-width = <8>;
|
||||||
|
xlnx,mio_bank = <0>;
|
||||||
|
};
|
||||||
|
|
||||||
|
&sdhci1 { /* sd1 MIO45-51 cd in place */
|
||||||
|
status = "okay";
|
||||||
|
no-1-8-v;
|
||||||
|
disable-wp;
|
||||||
|
xlnx,mio_bank = <1>;
|
||||||
|
};
|
||||||
|
|
||||||
|
&psgtr {
|
||||||
|
status = "okay";
|
||||||
|
/* sgmii, usb3 */
|
||||||
|
clocks = <&si5332_1>, <&si5332_2>;
|
||||||
|
clock-names = "ref0", "ref1";
|
||||||
|
};
|
||||||
|
|
||||||
|
&uart0 { /* uart0 MIO38-39 */
|
||||||
|
status = "okay";
|
||||||
|
u-boot,dm-pre-reloc;
|
||||||
|
};
|
||||||
|
|
||||||
|
&gem0 {
|
||||||
|
status = "okay";
|
||||||
|
phy-handle = <&phy0>;
|
||||||
|
phy-mode = "sgmii"; /* DTG generates this properly 1512 */
|
||||||
|
is-internal-pcspma;
|
||||||
|
/* phy-reset-gpios = <&gpio 142 GPIO_ACTIVE_LOW>; */
|
||||||
|
phy0: ethernet-phy@0 {
|
||||||
|
reg = <0>;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
&gpio {
|
||||||
|
status = "okay";
|
||||||
|
gpio-line-names = "", "", "", "", "", /* 0 - 4 */
|
||||||
|
"", "", "", "", "", /* 5 - 9 */
|
||||||
|
"", "", "", "EMMC_DAT0", "EMMC_DAT1", /* 10 - 14 */
|
||||||
|
"EMMC_DAT2", "EMMC_DAT3", "EMMC_DAT4", "EMMC_DAT5", "EMMC_DAT6", /* 15 - 19 */
|
||||||
|
"EMMC_DAT7", "EMMC_CMD", "EMMC_CLK", "EMMC_RST_B", "", /* 20 - 24 */
|
||||||
|
"", "DISP_SCL", "DISP_DC_B", "DISP_RES_B", "DISP_CS_B", /* 25 - 29 */
|
||||||
|
"", "DISP_SDI", "SYSTEM_RST_R_B", "", "I2C0_SCL", /* 30 - 34 */
|
||||||
|
"I2C0_SDA", "", "", "UART0_RXD_IN", "UART0_TXD_OUT", /* 35 - 39 */
|
||||||
|
"", "", "ETH_RESET_B", "", "", /* 40 - 44 */
|
||||||
|
"SD1_CD_B", "SD1_DATA0", "SD1_DATA1", "SD1_DATA2", "SD1_DATA3", /* 45 - 49 */
|
||||||
|
"SD1_CMD", "SD1_CLK", "USB0_CLK", "USB0_DIR", "USB0_DATA2", /* 50 - 54 */
|
||||||
|
"USB0_NXT", "USB0_DATA0", "USB0_DATA1", "USB0_STP", "USB0_DATA3", /* 55 - 59 */
|
||||||
|
"USB0_DATA4", "USB0_DATA5", "USB0_DATA6", "USB0_DATA7", "USB1_CLK", /* 60 - 64 */
|
||||||
|
"USB1_DIR", "USB1_DATA2", "USB1_NXT", "USB1_DATA0", "USB1_DATA1", /* 65 - 69 */
|
||||||
|
"USB1_STP", "USB1_DATA3", "USB1_DATA4", "USB1_DATA5", "USB1_DATA6", /* 70 - 74 */
|
||||||
|
"USB1_DATA7", "ETH_MDC", "ETH_MDIO", /* 75 - 77, MIO end and EMIO start */
|
||||||
|
"", "", /* 78 - 79 */
|
||||||
|
"", "", "", "", "", /* 80 - 84 */
|
||||||
|
"", "", "", "", "", /* 85 -89 */
|
||||||
|
"", "", "", "", "", /* 90 - 94 */
|
||||||
|
"", "VCCO_500_RBIAS", "VCCO_501_RBIAS", "VCCO_502_RBIAS", "VCCO_500_RBIAS_LED", /* 95 - 99 */
|
||||||
|
"VCCO_501_RBIAS_LED", "VCCO_502_RBIAS_LED", "SYSCTLR_VCCINT_EN", "SYSCTLR_VCC_IO_SOC_EN", "SYSCTLR_VCC_PMC_EN", /* 100 - 104 */
|
||||||
|
"", "", "", "", "", /* 105 - 109 */
|
||||||
|
"SYSCTLR_VCCO_500_EN", "SYSCTLR_VCCO_501_EN", "SYSCTLR_VCCO_502_EN", "SYSCTLR_VCCO_503_EN", "SYSCTLR_VCC1V8_EN", /* 110 - 114 */
|
||||||
|
"SYSCTLR_VCC3V3_EN", "SYSCTLR_VCC1V2_DDR4_EN", "SYSCTLR_VCC1V1_LP4_EN", "SYSCTLR_VDD1_1V8_LP4_EN", "SYSCTLR_VADJ_FMC_EN", /* 115 - 119 */
|
||||||
|
"", "", "", "SYSCTLR_UTIL_1V13_EN", "SYSCTLR_UTIL_1V8_EN", /* 120 - 124 */
|
||||||
|
"SYSCTLR_UTIL_2V5_EN", "", "", "", "", /* 125 - 129 */
|
||||||
|
"", "", "SYSCTLR_USBC_SBU1", "SYSCTLR_USBC_SBU2", "", /* 130 - 134 */
|
||||||
|
"", "SYSCTLR_MIC2005_EN_B", "SYSCTLR_MIC2005_FAULT_B", "SYSCTLR_TUSB320_INT_B", "SYSCTLR_TUSB320_ID", /* 135 - 139 */
|
||||||
|
"", "", "SYSCTLR_ETH_RESET_B", "", "", /* 140 - 144 */
|
||||||
|
"", "", "", "", "", /* 145 - 149 */
|
||||||
|
"", "", "", "", "", /* 150 - 154 */
|
||||||
|
"", "", "", "", "", /* 155 - 159 */
|
||||||
|
"", "", "", "", "", /* 160 - 164 */
|
||||||
|
"", "", "", "", "", /* 165 - 169 */
|
||||||
|
"", "", "", ""; /* 170 - 174 */
|
||||||
|
};
|
||||||
|
|
||||||
|
&i2c0 { /* MIO34/35 */
|
||||||
|
status = "okay";
|
||||||
|
clock-frequency = <400000>;
|
||||||
|
|
||||||
|
jtag_vref: mcp4725@62 {
|
||||||
|
compatible = "microchip,mcp4725";
|
||||||
|
reg = <0x62>;
|
||||||
|
vref-millivolt = <3300>;
|
||||||
|
};
|
||||||
|
|
||||||
|
eeprom: eeprom@50 { /* u46 */
|
||||||
|
compatible = "atmel,24c32";
|
||||||
|
reg = <0x50>;
|
||||||
|
};
|
||||||
|
/* u138 - TUSB320IRWBR - for USB-C */
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
&usb0 {
|
||||||
|
status = "okay";
|
||||||
|
xlnx,usb-polarity = <0>;
|
||||||
|
xlnx,usb-reset-mode = <0>;
|
||||||
|
};
|
||||||
|
|
||||||
|
&dwc3_0 {
|
||||||
|
status = "okay";
|
||||||
|
dr_mode = "peripheral";
|
||||||
|
snps,dis_u2_susphy_quirk;
|
||||||
|
snps,dis_u3_susphy_quirk;
|
||||||
|
maximum-speed = "super-speed";
|
||||||
|
phy-names = "usb3-phy";
|
||||||
|
phys = <&psgtr 1 PHY_TYPE_USB3 0 1>;
|
||||||
|
};
|
||||||
|
|
||||||
|
&usb1 {
|
||||||
|
status = "disabled"; /* Any unknown issue with USB-C */
|
||||||
|
xlnx,usb-polarity = <0>;
|
||||||
|
xlnx,usb-reset-mode = <0>;
|
||||||
|
};
|
||||||
|
|
||||||
|
&dwc3_1 {
|
||||||
|
/delete-property/ phy-names ;
|
||||||
|
/delete-property/ phys ;
|
||||||
|
dr_mode = "host";
|
||||||
|
maximum-speed = "high-speed";
|
||||||
|
snps,dis_u2_susphy_quirk ;
|
||||||
|
snps,dis_u3_susphy_quirk ;
|
||||||
|
status = "okay";
|
||||||
|
};
|
||||||
|
|
||||||
|
&xilinx_ams {
|
||||||
|
status = "okay";
|
||||||
|
};
|
||||||
|
|
||||||
|
&ams_ps {
|
||||||
|
status = "okay";
|
||||||
|
};
|
||||||
|
|
||||||
|
&ams_pl {
|
||||||
|
status = "okay";
|
||||||
|
};
|
||||||
|
|
||||||
|
&spi0 {
|
||||||
|
status = "okay";
|
||||||
|
is-decoded-cs = <0>;
|
||||||
|
num-cs = <1>;
|
||||||
|
u-boot,dm-pre-reloc;
|
||||||
|
displayspi@0 {
|
||||||
|
compatible = "syncoam,seps525";
|
||||||
|
u-boot,dm-pre-reloc;
|
||||||
|
reg = <0>;
|
||||||
|
status = "okay";
|
||||||
|
spi-max-frequency = <10000000>;
|
||||||
|
spi-cpol;
|
||||||
|
spi-cpha;
|
||||||
|
rotate = <0>;
|
||||||
|
fps = <50>;
|
||||||
|
buswidth = <8>;
|
||||||
|
txbuflen = <64000>;
|
||||||
|
reset-gpios = <&gpio 0x1c GPIO_ACTIVE_LOW>;
|
||||||
|
dc-gpios = <&gpio 0x1b GPIO_ACTIVE_HIGH>;
|
||||||
|
debug = <0>;
|
||||||
|
};
|
||||||
|
};
|
|
@ -46,7 +46,7 @@
|
||||||
si5332_1: si5332_1 { /* clk0_sgmii - u142 */
|
si5332_1: si5332_1 { /* clk0_sgmii - u142 */
|
||||||
compatible = "fixed-clock";
|
compatible = "fixed-clock";
|
||||||
#clock-cells = <0>;
|
#clock-cells = <0>;
|
||||||
clock-frequency = <33333333>; /* FIXME */
|
clock-frequency = <125000000>;
|
||||||
};
|
};
|
||||||
|
|
||||||
si5332_2: si5332_2 { /* clk1_usb - u142 */
|
si5332_2: si5332_2 { /* clk1_usb - u142 */
|
||||||
|
|
|
@ -108,6 +108,10 @@ ENTRY(_main)
|
||||||
bic sp, x0, #0xf /* 16-byte alignment for ABI compliance */
|
bic sp, x0, #0xf /* 16-byte alignment for ABI compliance */
|
||||||
ldr x18, [x18, #GD_NEW_GD] /* x18 <- gd->new_gd */
|
ldr x18, [x18, #GD_NEW_GD] /* x18 <- gd->new_gd */
|
||||||
|
|
||||||
|
/* Skip relocation in case gd->gd_flags & GD_FLG_SKIP_RELOC */
|
||||||
|
ldr x0, [x18, #GD_FLAGS] /* x0 <- gd->flags */
|
||||||
|
tbnz x0, 11, relocation_return /* GD_FLG_SKIP_RELOC is bit 11 */
|
||||||
|
|
||||||
adr lr, relocation_return
|
adr lr, relocation_return
|
||||||
#if CONFIG_POSITION_INDEPENDENT
|
#if CONFIG_POSITION_INDEPENDENT
|
||||||
/* Add in link-vs-runtime offset */
|
/* Add in link-vs-runtime offset */
|
||||||
|
|
|
@ -210,7 +210,7 @@ ENTRY(memcpy)
|
||||||
orr r9, r9, ip, lspush #\push
|
orr r9, r9, ip, lspush #\push
|
||||||
mov ip, ip, lspull #\pull
|
mov ip, ip, lspull #\pull
|
||||||
orr ip, ip, lr, lspush #\push
|
orr ip, ip, lr, lspush #\push
|
||||||
str8w r0, r3, r4, r5, r6, r7, r8, r9, ip, , abort=19f
|
str8w r0, r3, r4, r5, r6, r7, r8, r9, ip, abort=19f
|
||||||
bge 12b
|
bge 12b
|
||||||
PLD( cmn r2, #96 )
|
PLD( cmn r2, #96 )
|
||||||
PLD( bge 13b )
|
PLD( bge 13b )
|
||||||
|
|
|
@ -569,7 +569,7 @@ config TARGET_KP_IMX6Q_TPC
|
||||||
imply CMD_SPL
|
imply CMD_SPL
|
||||||
|
|
||||||
config TARGET_TQMA6
|
config TARGET_TQMA6
|
||||||
bool "TQ Systems TQMa6 board"
|
bool "TQ-Systems TQMa6 board"
|
||||||
select BOARD_EARLY_INIT_F
|
select BOARD_EARLY_INIT_F
|
||||||
select BOARD_LATE_INIT
|
select BOARD_LATE_INIT
|
||||||
select MXC_SPI
|
select MXC_SPI
|
||||||
|
@ -688,7 +688,7 @@ source "board/somlabs/visionsom-6ull/Kconfig"
|
||||||
source "board/technexion/pico-imx6/Kconfig"
|
source "board/technexion/pico-imx6/Kconfig"
|
||||||
source "board/technexion/pico-imx6ul/Kconfig"
|
source "board/technexion/pico-imx6ul/Kconfig"
|
||||||
source "board/tbs/tbs2910/Kconfig"
|
source "board/tbs/tbs2910/Kconfig"
|
||||||
source "board/tqc/tqma6/Kconfig"
|
source "board/tq/tqma6/Kconfig"
|
||||||
source "board/toradex/apalis_imx6/Kconfig"
|
source "board/toradex/apalis_imx6/Kconfig"
|
||||||
source "board/toradex/colibri_imx6/Kconfig"
|
source "board/toradex/colibri_imx6/Kconfig"
|
||||||
source "board/toradex/colibri-imx6ull/Kconfig"
|
source "board/toradex/colibri-imx6ull/Kconfig"
|
||||||
|
|
|
@ -25,6 +25,7 @@ config SPL_SPI
|
||||||
default y if ZYNQ_QSPI
|
default y if ZYNQ_QSPI
|
||||||
|
|
||||||
config SYS_BOARD
|
config SYS_BOARD
|
||||||
|
string "Board name"
|
||||||
default "zynqmp"
|
default "zynqmp"
|
||||||
|
|
||||||
config SYS_VENDOR
|
config SYS_VENDOR
|
||||||
|
@ -149,6 +150,14 @@ config SPL_ZYNQMP_ALT_BOOTMODE_ENABLED
|
||||||
Overwrite bootmode selected via boot mode pins to tell SPL what should
|
Overwrite bootmode selected via boot mode pins to tell SPL what should
|
||||||
be the next boot device.
|
be the next boot device.
|
||||||
|
|
||||||
|
config SPL_ZYNQMP_RESTORE_JTAG
|
||||||
|
bool "Restore JTAG"
|
||||||
|
depends on SPL
|
||||||
|
help
|
||||||
|
Booting SPL in secure mode causes the CSU to disable the JTAG interface
|
||||||
|
even if no eFuses were burnt. This option restores the interface if
|
||||||
|
possible.
|
||||||
|
|
||||||
config ZYNQ_SDHCI_MAX_FREQ
|
config ZYNQ_SDHCI_MAX_FREQ
|
||||||
default 200000000
|
default 200000000
|
||||||
|
|
||||||
|
|
|
@ -39,20 +39,26 @@
|
||||||
#define RESET_REASON_INTERNAL BIT(1)
|
#define RESET_REASON_INTERNAL BIT(1)
|
||||||
#define RESET_REASON_EXTERNAL BIT(0)
|
#define RESET_REASON_EXTERNAL BIT(0)
|
||||||
|
|
||||||
|
#define CRLAPB_DBG_LPD_CTRL_SETUP_CLK 0x01002002
|
||||||
|
#define CRLAPB_RST_LPD_DBG_RESET 0
|
||||||
|
|
||||||
struct crlapb_regs {
|
struct crlapb_regs {
|
||||||
u32 reserved0[36];
|
u32 reserved0[36];
|
||||||
u32 cpu_r5_ctrl; /* 0x90 */
|
u32 cpu_r5_ctrl; /* 0x90 */
|
||||||
u32 reserved1[37];
|
u32 reserved1[7];
|
||||||
|
u32 dbg_lpd_ctrl; /* 0xB0 */
|
||||||
|
u32 reserved2[29];
|
||||||
u32 timestamp_ref_ctrl; /* 0x128 */
|
u32 timestamp_ref_ctrl; /* 0x128 */
|
||||||
u32 reserved2[53];
|
u32 reserved3[53];
|
||||||
u32 boot_mode; /* 0x200 */
|
u32 boot_mode; /* 0x200 */
|
||||||
u32 reserved3_0[7];
|
u32 reserved4_0[7];
|
||||||
u32 reset_reason; /* 0x220 */
|
u32 reset_reason; /* 0x220 */
|
||||||
u32 reserved3_1[6];
|
u32 reserved4_1[6];
|
||||||
u32 rst_lpd_top; /* 0x23C */
|
u32 rst_lpd_top; /* 0x23C */
|
||||||
u32 reserved4[4];
|
u32 rst_lpd_dbg; /* 0x240 */
|
||||||
|
u32 reserved5[3];
|
||||||
u32 boot_pin_ctrl; /* 0x250 */
|
u32 boot_pin_ctrl; /* 0x250 */
|
||||||
u32 reserved5[21];
|
u32 reserved6[21];
|
||||||
};
|
};
|
||||||
|
|
||||||
#define crlapb_base ((struct crlapb_regs *)ZYNQMP_CRL_APB_BASEADDR)
|
#define crlapb_base ((struct crlapb_regs *)ZYNQMP_CRL_APB_BASEADDR)
|
||||||
|
@ -141,12 +147,23 @@ struct apu_regs {
|
||||||
#define ZYNQMP_SILICON_VER_MASK 0xF
|
#define ZYNQMP_SILICON_VER_MASK 0xF
|
||||||
#define ZYNQMP_SILICON_VER_SHIFT 0
|
#define ZYNQMP_SILICON_VER_SHIFT 0
|
||||||
|
|
||||||
|
#define CSU_JTAG_SEC_GATE_DISABLE GENMASK(7, 0)
|
||||||
|
#define CSU_JTAG_DAP_ENABLE_DEBUG GENMASK(7, 0)
|
||||||
|
#define CSU_JTAG_CHAIN_WR_SETUP GENMASK(1, 0)
|
||||||
|
#define CSU_PCAP_PROG_RELEASE_PL BIT(0)
|
||||||
|
|
||||||
struct csu_regs {
|
struct csu_regs {
|
||||||
u32 reserved0[4];
|
u32 reserved0[4];
|
||||||
u32 multi_boot;
|
u32 multi_boot;
|
||||||
u32 reserved1[11];
|
u32 reserved1[7];
|
||||||
|
u32 jtag_chain_status_wr;
|
||||||
|
u32 jtag_chain_status;
|
||||||
|
u32 jtag_sec;
|
||||||
|
u32 jtag_dap_cfg;
|
||||||
u32 idcode;
|
u32 idcode;
|
||||||
u32 version;
|
u32 version;
|
||||||
|
u32 reserved2[3055];
|
||||||
|
u32 pcap_prog;
|
||||||
};
|
};
|
||||||
|
|
||||||
#define csu_base ((struct csu_regs *)ZYNQMP_CSU_BASEADDR)
|
#define csu_base ((struct csu_regs *)ZYNQMP_CSU_BASEADDR)
|
||||||
|
|
|
@ -434,8 +434,10 @@ void __efi_runtime EFIAPI efi_reset_system(
|
||||||
efi_status_t reset_status,
|
efi_status_t reset_status,
|
||||||
unsigned long data_size, void *reset_data)
|
unsigned long data_size, void *reset_data)
|
||||||
{
|
{
|
||||||
os_fd_restore();
|
if (reset_type == EFI_RESET_SHUTDOWN)
|
||||||
os_relaunch(os_argv);
|
sandbox_exit();
|
||||||
|
else
|
||||||
|
sandbox_reset();
|
||||||
}
|
}
|
||||||
|
|
||||||
void sandbox_reset(void)
|
void sandbox_reset(void)
|
||||||
|
|
|
@ -2,4 +2,3 @@
|
||||||
|
|
||||||
obj-$(CONFIG_SYS_MTDPARTS_RUNTIME) += qemu_mtdparts.o
|
obj-$(CONFIG_SYS_MTDPARTS_RUNTIME) += qemu_mtdparts.o
|
||||||
obj-$(CONFIG_SET_DFU_ALT_INFO) += qemu_dfu.o
|
obj-$(CONFIG_SET_DFU_ALT_INFO) += qemu_dfu.o
|
||||||
obj-$(CONFIG_EFI_CAPSULE_FIRMWARE_MANAGEMENT) += qemu_capsule.o
|
|
||||||
|
|
|
@ -82,6 +82,8 @@ int board_init(void)
|
||||||
{
|
{
|
||||||
gd->bd->bi_boot_params = CONFIG_SYS_LOAD_ADDR + LOAD_OFFSET;
|
gd->bd->bi_boot_params = CONFIG_SYS_LOAD_ADDR + LOAD_OFFSET;
|
||||||
|
|
||||||
|
gd->env_addr = (ulong)&default_environment[0];
|
||||||
|
|
||||||
synquacer_setup_scbm_smmu();
|
synquacer_setup_scbm_smmu();
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
|
|
|
@ -4,7 +4,7 @@ config SYS_BOARD
|
||||||
default "tqma6"
|
default "tqma6"
|
||||||
|
|
||||||
config SYS_VENDOR
|
config SYS_VENDOR
|
||||||
default "tqc"
|
default "tq"
|
||||||
|
|
||||||
config SYS_CONFIG_NAME
|
config SYS_CONFIG_NAME
|
||||||
default "tqma6"
|
default "tqma6"
|
||||||
|
@ -89,8 +89,8 @@ config SYS_TEXT_BASE
|
||||||
default 0x4fc00000 if TQMA6Q || TQMA6DL
|
default 0x4fc00000 if TQMA6Q || TQMA6DL
|
||||||
|
|
||||||
config IMX_CONFIG
|
config IMX_CONFIG
|
||||||
default "board/tqc/tqma6/tqma6q.cfg" if TQMA6Q
|
default "board/tq/tqma6/tqma6q.cfg" if TQMA6Q
|
||||||
default "board/tqc/tqma6/tqma6dl.cfg" if TQMA6DL
|
default "board/tq/tqma6/tqma6dl.cfg" if TQMA6DL
|
||||||
default "board/tqc/tqma6/tqma6s.cfg" if TQMA6S
|
default "board/tq/tqma6/tqma6s.cfg" if TQMA6S
|
||||||
|
|
||||||
endif
|
endif
|
|
@ -1,6 +1,6 @@
|
||||||
TQ SYSTEMS TQMA6 BOARD
|
TQ-SYSTEMS TQMA6 BOARD
|
||||||
M: Markus Niebel <Markus.Niebel@tq-group.com>
|
M: Markus Niebel <Markus.Niebel@tq-group.com>
|
||||||
S: Maintained
|
S: Maintained
|
||||||
F: board/tqc/tqma6/
|
F: board/tq/tqma6/
|
||||||
F: include/configs/tqma6.h
|
F: include/configs/tqma6.h
|
||||||
F: configs/tqma6*_defconfig
|
F: configs/tqma6*_defconfig
|
|
@ -1,7 +1,7 @@
|
||||||
U-Boot for the TQ Systems TQMa6 modules
|
U-Boot for the TQ-Systems TQMa6 modules
|
||||||
|
|
||||||
This file contains information for the port of
|
This file contains information for the port of
|
||||||
U-Boot to the TQ Systems TQMa6 modules.
|
U-Boot to the TQ-Systems TQMa6 modules.
|
||||||
|
|
||||||
1. Boot source
|
1. Boot source
|
||||||
--------------
|
--------------
|
||||||
|
@ -14,7 +14,7 @@ The following boot source is supported:
|
||||||
2. Building
|
2. Building
|
||||||
------------
|
------------
|
||||||
|
|
||||||
To build U-Boot for the TQ Systems TQMa6 modules:
|
To build U-Boot for the TQ-Systems TQMa6 modules:
|
||||||
|
|
||||||
make tqma6<x>_<baseboard>_<boot>_config
|
make tqma6<x>_<baseboard>_<boot>_config
|
||||||
make
|
make
|
|
@ -3,7 +3,7 @@
|
||||||
* Copyright (C) 2012 Freescale Semiconductor, Inc.
|
* Copyright (C) 2012 Freescale Semiconductor, Inc.
|
||||||
* Author: Fabio Estevam <fabio.estevam@freescale.com>
|
* Author: Fabio Estevam <fabio.estevam@freescale.com>
|
||||||
*
|
*
|
||||||
* Copyright (C) 2013, 2014 TQ Systems (ported SabreSD to TQMa6x)
|
* Copyright (C) 2013, 2014 TQ-Systems (ported SabreSD to TQMa6x)
|
||||||
* Author: Markus Niebel <markus.niebel@tq-group.com>
|
* Author: Markus Niebel <markus.niebel@tq-group.com>
|
||||||
*/
|
*/
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
/* SPDX-License-Identifier: GPL-2.0+ */
|
/* SPDX-License-Identifier: GPL-2.0+ */
|
||||||
/*
|
/*
|
||||||
* Copyright (C) 2013, 2014 TQ Systems
|
* Copyright (C) 2013, 2014 TQ-Systems
|
||||||
* Author: Markus Niebel <markus.niebel@tq-group.com>
|
* Author: Markus Niebel <markus.niebel@tq-group.com>
|
||||||
*/
|
*/
|
||||||
|
|
|
@ -3,7 +3,7 @@
|
||||||
* Copyright (C) 2012 Freescale Semiconductor, Inc.
|
* Copyright (C) 2012 Freescale Semiconductor, Inc.
|
||||||
* Author: Fabio Estevam <fabio.estevam@freescale.com>
|
* Author: Fabio Estevam <fabio.estevam@freescale.com>
|
||||||
*
|
*
|
||||||
* Copyright (C) 2013, 2014 TQ Systems (ported SabreSD to TQMa6x)
|
* Copyright (C) 2013, 2014 TQ-Systems (ported SabreSD to TQMa6x)
|
||||||
* Author: Markus Niebel <markus.niebel@tq-group.com>
|
* Author: Markus Niebel <markus.niebel@tq-group.com>
|
||||||
*/
|
*/
|
||||||
|
|
|
@ -3,7 +3,7 @@
|
||||||
* Copyright (C) 2012 Freescale Semiconductor, Inc.
|
* Copyright (C) 2012 Freescale Semiconductor, Inc.
|
||||||
* Author: Fabio Estevam <fabio.estevam@freescale.com>
|
* Author: Fabio Estevam <fabio.estevam@freescale.com>
|
||||||
*
|
*
|
||||||
* Copyright (C) 2013, 2014 TQ Systems (ported SabreSD to TQMa6x)
|
* Copyright (C) 2013, 2014 TQ-Systems (ported SabreSD to TQMa6x)
|
||||||
* Author: Markus Niebel <markus.niebel@tq-group.com>
|
* Author: Markus Niebel <markus.niebel@tq-group.com>
|
||||||
*
|
*
|
||||||
* Copyright (C) 2015 Stefan Roese <sr@denx.de>
|
* Copyright (C) 2015 Stefan Roese <sr@denx.de>
|
922
board/xilinx/zynqmp/zynqmp-dlc21-revA/psu_init_gpl.c
Normal file
922
board/xilinx/zynqmp/zynqmp-dlc21-revA/psu_init_gpl.c
Normal file
|
@ -0,0 +1,922 @@
|
||||||
|
// SPDX-License-Identifier: GPL-2.0+
|
||||||
|
/*
|
||||||
|
* (c) Copyright 2015 Xilinx, Inc. All rights reserved.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <asm/arch/psu_init_gpl.h>
|
||||||
|
#include <xil_io.h>
|
||||||
|
|
||||||
|
static unsigned long psu_pll_init_data(void)
|
||||||
|
{
|
||||||
|
psu_mask_write(0xFF5E0034, 0xFE7FEDEFU, 0x7E4B0C62U);
|
||||||
|
psu_mask_write(0xFF5E0030, 0x00717F00U, 0x00014000U);
|
||||||
|
psu_mask_write(0xFF5E0030, 0x00000008U, 0x00000008U);
|
||||||
|
psu_mask_write(0xFF5E0030, 0x00000001U, 0x00000001U);
|
||||||
|
psu_mask_write(0xFF5E0030, 0x00000001U, 0x00000000U);
|
||||||
|
mask_poll(0xFF5E0040, 0x00000002U);
|
||||||
|
psu_mask_write(0xFF5E0030, 0x00000008U, 0x00000000U);
|
||||||
|
psu_mask_write(0xFF5E0048, 0x00003F00U, 0x00000200U);
|
||||||
|
psu_mask_write(0xFF5E0038, 0x8000FFFFU, 0x00000000U);
|
||||||
|
psu_mask_write(0xFF5E0108, 0x013F3F07U, 0x01012300U);
|
||||||
|
psu_mask_write(0xFF5E0024, 0xFE7FEDEFU, 0x7E4B0C82U);
|
||||||
|
psu_mask_write(0xFF5E0020, 0x00717F00U, 0x00015A00U);
|
||||||
|
psu_mask_write(0xFF5E0020, 0x00000008U, 0x00000008U);
|
||||||
|
psu_mask_write(0xFF5E0020, 0x00000001U, 0x00000001U);
|
||||||
|
psu_mask_write(0xFF5E0020, 0x00000001U, 0x00000000U);
|
||||||
|
mask_poll(0xFF5E0040, 0x00000001U);
|
||||||
|
psu_mask_write(0xFF5E0020, 0x00000008U, 0x00000000U);
|
||||||
|
psu_mask_write(0xFF5E0044, 0x00003F00U, 0x00000300U);
|
||||||
|
psu_mask_write(0xFF5E0028, 0x8000FFFFU, 0x00000000U);
|
||||||
|
psu_mask_write(0xFD1A0024, 0xFE7FEDEFU, 0x7E4B0C62U);
|
||||||
|
psu_mask_write(0xFD1A0020, 0x00717F00U, 0x00014800U);
|
||||||
|
psu_mask_write(0xFD1A0020, 0x00000008U, 0x00000008U);
|
||||||
|
psu_mask_write(0xFD1A0020, 0x00000001U, 0x00000001U);
|
||||||
|
psu_mask_write(0xFD1A0020, 0x00000001U, 0x00000000U);
|
||||||
|
mask_poll(0xFD1A0044, 0x00000001U);
|
||||||
|
psu_mask_write(0xFD1A0020, 0x00000008U, 0x00000000U);
|
||||||
|
psu_mask_write(0xFD1A0048, 0x00003F00U, 0x00000300U);
|
||||||
|
psu_mask_write(0xFD1A0028, 0x8000FFFFU, 0x00000000U);
|
||||||
|
psu_mask_write(0xFD1A0030, 0xFE7FEDEFU, 0x7E4B0C62U);
|
||||||
|
psu_mask_write(0xFD1A002C, 0x00717F00U, 0x00014000U);
|
||||||
|
psu_mask_write(0xFD1A002C, 0x00000008U, 0x00000008U);
|
||||||
|
psu_mask_write(0xFD1A002C, 0x00000001U, 0x00000001U);
|
||||||
|
psu_mask_write(0xFD1A002C, 0x00000001U, 0x00000000U);
|
||||||
|
mask_poll(0xFD1A0044, 0x00000002U);
|
||||||
|
psu_mask_write(0xFD1A002C, 0x00000008U, 0x00000000U);
|
||||||
|
psu_mask_write(0xFD1A004C, 0x00003F00U, 0x00000200U);
|
||||||
|
psu_mask_write(0xFD1A0034, 0x8000FFFFU, 0x00000000U);
|
||||||
|
psu_mask_write(0xFD1A003C, 0xFE7FEDEFU, 0x7E4B0C62U);
|
||||||
|
psu_mask_write(0xFD1A0038, 0x00717F00U, 0x00014000U);
|
||||||
|
psu_mask_write(0xFD1A0038, 0x00000008U, 0x00000008U);
|
||||||
|
psu_mask_write(0xFD1A0038, 0x00000001U, 0x00000001U);
|
||||||
|
psu_mask_write(0xFD1A0038, 0x00000001U, 0x00000000U);
|
||||||
|
mask_poll(0xFD1A0044, 0x00000004U);
|
||||||
|
psu_mask_write(0xFD1A0038, 0x00000008U, 0x00000000U);
|
||||||
|
psu_mask_write(0xFD1A0050, 0x00003F00U, 0x00000200U);
|
||||||
|
psu_mask_write(0xFD1A0040, 0x8000FFFFU, 0x00000000U);
|
||||||
|
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
static unsigned long psu_clock_init_data(void)
|
||||||
|
{
|
||||||
|
psu_mask_write(0xFF5E0050, 0x063F3F07U, 0x06013C00U);
|
||||||
|
psu_mask_write(0xFF180360, 0x00000003U, 0x00000001U);
|
||||||
|
psu_mask_write(0xFF180308, 0x00000006U, 0x00000006U);
|
||||||
|
psu_mask_write(0xFF5E0100, 0x013F3F07U, 0x01010600U);
|
||||||
|
psu_mask_write(0xFF5E0060, 0x023F3F07U, 0x02010600U);
|
||||||
|
psu_mask_write(0xFF5E0064, 0x023F3F07U, 0x02010600U);
|
||||||
|
psu_mask_write(0xFF5E004C, 0x023F3F07U, 0x02031900U);
|
||||||
|
psu_mask_write(0xFF5E006C, 0x013F3F07U, 0x01010800U);
|
||||||
|
psu_mask_write(0xFF5E0070, 0x013F3F07U, 0x01010800U);
|
||||||
|
psu_mask_write(0xFF18030C, 0x00020003U, 0x00000000U);
|
||||||
|
psu_mask_write(0xFF5E0074, 0x013F3F07U, 0x01010F00U);
|
||||||
|
psu_mask_write(0xFF5E0120, 0x013F3F07U, 0x01010F00U);
|
||||||
|
psu_mask_write(0xFF5E007C, 0x013F3F07U, 0x01010702U);
|
||||||
|
psu_mask_write(0xFF5E0090, 0x01003F07U, 0x01000302U);
|
||||||
|
psu_mask_write(0xFF5E009C, 0x01003F07U, 0x01000400U);
|
||||||
|
psu_mask_write(0xFF5E00A4, 0x01003F07U, 0x01000800U);
|
||||||
|
psu_mask_write(0xFF5E00A8, 0x01003F07U, 0x01000200U);
|
||||||
|
psu_mask_write(0xFF5E00AC, 0x01003F07U, 0x01000F02U);
|
||||||
|
psu_mask_write(0xFF5E00B0, 0x01003F07U, 0x01000602U);
|
||||||
|
psu_mask_write(0xFF5E00B8, 0x01003F07U, 0x01000200U);
|
||||||
|
psu_mask_write(0xFF5E00C0, 0x013F3F07U, 0x01010502U);
|
||||||
|
psu_mask_write(0xFF5E00C4, 0x013F3F07U, 0x01010802U);
|
||||||
|
psu_mask_write(0xFF5E00C8, 0x013F3F07U, 0x01010402U);
|
||||||
|
psu_mask_write(0xFF5E00CC, 0x013F3F07U, 0x01030A00U);
|
||||||
|
psu_mask_write(0xFF5E0108, 0x013F3F07U, 0x01011E02U);
|
||||||
|
psu_mask_write(0xFF5E0104, 0x00000007U, 0x00000000U);
|
||||||
|
psu_mask_write(0xFF5E0128, 0x01003F07U, 0x01000104U);
|
||||||
|
psu_mask_write(0xFD1A0060, 0x03003F07U, 0x03000100U);
|
||||||
|
psu_mask_write(0xFD1A0068, 0x01003F07U, 0x01000200U);
|
||||||
|
psu_mask_write(0xFD1A0080, 0x00003F07U, 0x00000200U);
|
||||||
|
psu_mask_write(0xFD1A0084, 0x07003F07U, 0x07000100U);
|
||||||
|
psu_mask_write(0xFD1A00B8, 0x01003F07U, 0x01000203U);
|
||||||
|
psu_mask_write(0xFD1A00BC, 0x01003F07U, 0x01000203U);
|
||||||
|
psu_mask_write(0xFD1A00C0, 0x01003F07U, 0x01000202U);
|
||||||
|
psu_mask_write(0xFD1A00C4, 0x01003F07U, 0x01000502U);
|
||||||
|
psu_mask_write(0xFD1A00F8, 0x00003F07U, 0x00000200U);
|
||||||
|
psu_mask_write(0xFF180380, 0x000000FFU, 0x00000000U);
|
||||||
|
psu_mask_write(0xFD610100, 0x00000001U, 0x00000000U);
|
||||||
|
psu_mask_write(0xFF180300, 0x00000001U, 0x00000000U);
|
||||||
|
psu_mask_write(0xFF410050, 0x00000001U, 0x00000000U);
|
||||||
|
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
static unsigned long psu_ddr_init_data(void)
|
||||||
|
{
|
||||||
|
psu_mask_write(0xFD1A0108, 0x00000008U, 0x00000008U);
|
||||||
|
psu_mask_write(0xFD070000, 0xE30FBE3DU, 0x43041010U);
|
||||||
|
psu_mask_write(0xFD070010, 0x8000F03FU, 0x00000030U);
|
||||||
|
psu_mask_write(0xFD070020, 0x000003F3U, 0x00000200U);
|
||||||
|
psu_mask_write(0xFD070024, 0xFFFFFFFFU, 0x00800000U);
|
||||||
|
psu_mask_write(0xFD070030, 0x0000007FU, 0x00000008U);
|
||||||
|
psu_mask_write(0xFD070034, 0x00FFFF1FU, 0x00408410U);
|
||||||
|
psu_mask_write(0xFD070050, 0x00F1F1F4U, 0x00210000U);
|
||||||
|
psu_mask_write(0xFD070054, 0x0FFF0FFFU, 0x00000000U);
|
||||||
|
psu_mask_write(0xFD070060, 0x00000073U, 0x00000001U);
|
||||||
|
psu_mask_write(0xFD070064, 0x0FFF83FFU, 0x00818126U);
|
||||||
|
psu_mask_write(0xFD070070, 0x00000017U, 0x00000010U);
|
||||||
|
psu_mask_write(0xFD070074, 0x00000003U, 0x00000000U);
|
||||||
|
psu_mask_write(0xFD0700C4, 0x3F000391U, 0x10000200U);
|
||||||
|
psu_mask_write(0xFD0700C8, 0x01FF1F3FU, 0x0040051FU);
|
||||||
|
psu_mask_write(0xFD0700D0, 0xC3FF0FFFU, 0x00020106U);
|
||||||
|
psu_mask_write(0xFD0700D4, 0x01FF7F0FU, 0x00020000U);
|
||||||
|
psu_mask_write(0xFD0700D8, 0x0000FF0FU, 0x00002305U);
|
||||||
|
psu_mask_write(0xFD0700DC, 0xFFFFFFFFU, 0x07300501U);
|
||||||
|
psu_mask_write(0xFD0700E0, 0xFFFFFFFFU, 0x00200200U);
|
||||||
|
psu_mask_write(0xFD0700E4, 0x00FF03FFU, 0x00210004U);
|
||||||
|
psu_mask_write(0xFD0700E8, 0xFFFFFFFFU, 0x00000700U);
|
||||||
|
psu_mask_write(0xFD0700EC, 0xFFFF0000U, 0x08190000U);
|
||||||
|
psu_mask_write(0xFD0700F0, 0x0000003FU, 0x00000010U);
|
||||||
|
psu_mask_write(0xFD0700F4, 0x00000FFFU, 0x0000066FU);
|
||||||
|
psu_mask_write(0xFD070100, 0x7F3F7F3FU, 0x110C2412U);
|
||||||
|
psu_mask_write(0xFD070104, 0x001F1F7FU, 0x0004041CU);
|
||||||
|
psu_mask_write(0xFD070108, 0x3F3F3F3FU, 0x0708060DU);
|
||||||
|
psu_mask_write(0xFD07010C, 0x3FF3F3FFU, 0x0050400CU);
|
||||||
|
psu_mask_write(0xFD070110, 0x1F0F0F1FU, 0x08030309U);
|
||||||
|
psu_mask_write(0xFD070114, 0x0F0F3F1FU, 0x06060403U);
|
||||||
|
psu_mask_write(0xFD070118, 0x0F0F000FU, 0x01010004U);
|
||||||
|
psu_mask_write(0xFD07011C, 0x00000F0FU, 0x00000606U);
|
||||||
|
psu_mask_write(0xFD070120, 0x7F7F7F7FU, 0x04040D0BU);
|
||||||
|
psu_mask_write(0xFD070124, 0x40070F3FU, 0x0002020BU);
|
||||||
|
psu_mask_write(0xFD07012C, 0x7F1F031FU, 0x1607010EU);
|
||||||
|
psu_mask_write(0xFD070130, 0x00030F1FU, 0x00020608U);
|
||||||
|
psu_mask_write(0xFD070180, 0xF7FF03FFU, 0x81000040U);
|
||||||
|
psu_mask_write(0xFD070184, 0x3FFFFFFFU, 0x020196E5U);
|
||||||
|
psu_mask_write(0xFD070190, 0x1FBFBF3FU, 0x048B820BU);
|
||||||
|
psu_mask_write(0xFD070194, 0xF31F0F0FU, 0x00030304U);
|
||||||
|
psu_mask_write(0xFD070198, 0x0FF1F1F1U, 0x07000101U);
|
||||||
|
psu_mask_write(0xFD07019C, 0x000000F1U, 0x00000021U);
|
||||||
|
psu_mask_write(0xFD0701A0, 0xC3FF03FFU, 0x00400003U);
|
||||||
|
psu_mask_write(0xFD0701A4, 0x00FF00FFU, 0x00C800FFU);
|
||||||
|
psu_mask_write(0xFD0701B0, 0x00000007U, 0x00000000U);
|
||||||
|
psu_mask_write(0xFD0701B4, 0x00003F3FU, 0x00000909U);
|
||||||
|
psu_mask_write(0xFD0701C0, 0x00000007U, 0x00000001U);
|
||||||
|
psu_mask_write(0xFD070200, 0x0000001FU, 0x00000018U);
|
||||||
|
psu_mask_write(0xFD070204, 0x001F1F1FU, 0x001F0909U);
|
||||||
|
psu_mask_write(0xFD070208, 0x0F0F0F0FU, 0x01010101U);
|
||||||
|
psu_mask_write(0xFD07020C, 0x0F0F0F0FU, 0x0F010101U);
|
||||||
|
psu_mask_write(0xFD070210, 0x00000F0FU, 0x00000F0FU);
|
||||||
|
psu_mask_write(0xFD070214, 0x0F0F0F0FU, 0x070F0707U);
|
||||||
|
psu_mask_write(0xFD070218, 0x8F0F0F0FU, 0x07070707U);
|
||||||
|
psu_mask_write(0xFD07021C, 0x00000F0FU, 0x00000F07U);
|
||||||
|
psu_mask_write(0xFD070220, 0x00001F1FU, 0x00000700U);
|
||||||
|
psu_mask_write(0xFD070224, 0x0F0F0F0FU, 0x07070707U);
|
||||||
|
psu_mask_write(0xFD070228, 0x0F0F0F0FU, 0x07070707U);
|
||||||
|
psu_mask_write(0xFD07022C, 0x0000000FU, 0x00000007U);
|
||||||
|
psu_mask_write(0xFD070240, 0x0F1F0F7CU, 0x06000600U);
|
||||||
|
psu_mask_write(0xFD070244, 0x00003333U, 0x00000201U);
|
||||||
|
psu_mask_write(0xFD070250, 0x7FFF3F07U, 0x01002001U);
|
||||||
|
psu_mask_write(0xFD070264, 0xFF00FFFFU, 0x08000040U);
|
||||||
|
psu_mask_write(0xFD07026C, 0xFF00FFFFU, 0x08000040U);
|
||||||
|
psu_mask_write(0xFD070280, 0xFFFFFFFFU, 0x00000000U);
|
||||||
|
psu_mask_write(0xFD070284, 0xFFFFFFFFU, 0x00000000U);
|
||||||
|
psu_mask_write(0xFD070288, 0xFFFFFFFFU, 0x00000000U);
|
||||||
|
psu_mask_write(0xFD07028C, 0xFFFFFFFFU, 0x00000000U);
|
||||||
|
psu_mask_write(0xFD070290, 0x0000FFFFU, 0x00000000U);
|
||||||
|
psu_mask_write(0xFD070294, 0x00000001U, 0x00000001U);
|
||||||
|
psu_mask_write(0xFD070300, 0x00000011U, 0x00000001U);
|
||||||
|
psu_mask_write(0xFD07030C, 0x80000033U, 0x00000000U);
|
||||||
|
psu_mask_write(0xFD070320, 0x00000001U, 0x00000000U);
|
||||||
|
psu_mask_write(0xFD070400, 0x00000111U, 0x00000101U);
|
||||||
|
psu_mask_write(0xFD070404, 0x000073FFU, 0x0000200FU);
|
||||||
|
psu_mask_write(0xFD070408, 0x000073FFU, 0x0000200FU);
|
||||||
|
psu_mask_write(0xFD070490, 0x00000001U, 0x00000001U);
|
||||||
|
psu_mask_write(0xFD070494, 0x0033000FU, 0x0020000BU);
|
||||||
|
psu_mask_write(0xFD070498, 0x07FF07FFU, 0x00000000U);
|
||||||
|
psu_mask_write(0xFD0704B4, 0x000073FFU, 0x0000200FU);
|
||||||
|
psu_mask_write(0xFD0704B8, 0x000073FFU, 0x0000200FU);
|
||||||
|
psu_mask_write(0xFD070540, 0x00000001U, 0x00000001U);
|
||||||
|
psu_mask_write(0xFD070544, 0x03330F0FU, 0x02000B03U);
|
||||||
|
psu_mask_write(0xFD070548, 0x07FF07FFU, 0x00000000U);
|
||||||
|
psu_mask_write(0xFD070564, 0x000073FFU, 0x0000200FU);
|
||||||
|
psu_mask_write(0xFD070568, 0x000073FFU, 0x0000200FU);
|
||||||
|
psu_mask_write(0xFD0705F0, 0x00000001U, 0x00000001U);
|
||||||
|
psu_mask_write(0xFD0705F4, 0x03330F0FU, 0x02000B03U);
|
||||||
|
psu_mask_write(0xFD0705F8, 0x07FF07FFU, 0x00000000U);
|
||||||
|
psu_mask_write(0xFD070614, 0x000073FFU, 0x0000200FU);
|
||||||
|
psu_mask_write(0xFD070618, 0x000073FFU, 0x0000200FU);
|
||||||
|
psu_mask_write(0xFD0706A0, 0x00000001U, 0x00000001U);
|
||||||
|
psu_mask_write(0xFD0706A4, 0x0033000FU, 0x00100003U);
|
||||||
|
psu_mask_write(0xFD0706A8, 0x07FF07FFU, 0x0000004FU);
|
||||||
|
psu_mask_write(0xFD0706AC, 0x0033000FU, 0x00100003U);
|
||||||
|
psu_mask_write(0xFD0706B0, 0x000007FFU, 0x0000004FU);
|
||||||
|
psu_mask_write(0xFD0706C4, 0x000073FFU, 0x0000200FU);
|
||||||
|
psu_mask_write(0xFD0706C8, 0x000073FFU, 0x0000200FU);
|
||||||
|
psu_mask_write(0xFD070750, 0x00000001U, 0x00000001U);
|
||||||
|
psu_mask_write(0xFD070754, 0x0033000FU, 0x00100003U);
|
||||||
|
psu_mask_write(0xFD070758, 0x07FF07FFU, 0x0000004FU);
|
||||||
|
psu_mask_write(0xFD07075C, 0x0033000FU, 0x00100003U);
|
||||||
|
psu_mask_write(0xFD070760, 0x000007FFU, 0x0000004FU);
|
||||||
|
psu_mask_write(0xFD070774, 0x000073FFU, 0x0000200FU);
|
||||||
|
psu_mask_write(0xFD070778, 0x000073FFU, 0x0000200FU);
|
||||||
|
psu_mask_write(0xFD070800, 0x00000001U, 0x00000001U);
|
||||||
|
psu_mask_write(0xFD070804, 0x0033000FU, 0x00100003U);
|
||||||
|
psu_mask_write(0xFD070808, 0x07FF07FFU, 0x0000004FU);
|
||||||
|
psu_mask_write(0xFD07080C, 0x0033000FU, 0x00100003U);
|
||||||
|
psu_mask_write(0xFD070810, 0x000007FFU, 0x0000004FU);
|
||||||
|
psu_mask_write(0xFD070F04, 0x000001FFU, 0x00000000U);
|
||||||
|
psu_mask_write(0xFD070F08, 0x000000FFU, 0x00000000U);
|
||||||
|
psu_mask_write(0xFD070F0C, 0x000001FFU, 0x00000010U);
|
||||||
|
psu_mask_write(0xFD070F10, 0x000000FFU, 0x0000000FU);
|
||||||
|
psu_mask_write(0xFD072190, 0x1FBFBF3FU, 0x07828002U);
|
||||||
|
psu_mask_write(0xFD1A0108, 0x0000000CU, 0x00000000U);
|
||||||
|
psu_mask_write(0xFD080010, 0xFFFFFFFFU, 0x07001E00U);
|
||||||
|
psu_mask_write(0xFD080018, 0xFFFFFFFFU, 0x00F10010U);
|
||||||
|
psu_mask_write(0xFD08001C, 0xFFFFFFFFU, 0x55AA5480U);
|
||||||
|
psu_mask_write(0xFD080024, 0xFFFFFFFFU, 0x010100F4U);
|
||||||
|
psu_mask_write(0xFD080040, 0xFFFFFFFFU, 0x42C21590U);
|
||||||
|
psu_mask_write(0xFD080044, 0xFFFFFFFFU, 0xD05512C0U);
|
||||||
|
psu_mask_write(0xFD080068, 0xFFFFFFFFU, 0x01100000U);
|
||||||
|
psu_mask_write(0xFD080090, 0xFFFFFFFFU, 0x02A04161U);
|
||||||
|
psu_mask_write(0xFD0800C0, 0xFFFFFFFFU, 0x00000000U);
|
||||||
|
psu_mask_write(0xFD0800C4, 0xFFFFFFFFU, 0x000000E0U);
|
||||||
|
psu_mask_write(0xFD080100, 0xFFFFFFFFU, 0x0800040CU);
|
||||||
|
psu_mask_write(0xFD080110, 0xFFFFFFFFU, 0x06240F08U);
|
||||||
|
psu_mask_write(0xFD080114, 0xFFFFFFFFU, 0x28170008U);
|
||||||
|
psu_mask_write(0xFD080118, 0xFFFFFFFFU, 0x000F0300U);
|
||||||
|
psu_mask_write(0xFD08011C, 0xFFFFFFFFU, 0x83000800U);
|
||||||
|
psu_mask_write(0xFD080120, 0xFFFFFFFFU, 0x024B2B07U);
|
||||||
|
psu_mask_write(0xFD080124, 0xFFFFFFFFU, 0x00370F08U);
|
||||||
|
psu_mask_write(0xFD080128, 0xFFFFFFFFU, 0x00000E0FU);
|
||||||
|
psu_mask_write(0xFD080140, 0xFFFFFFFFU, 0x08400020U);
|
||||||
|
psu_mask_write(0xFD080144, 0xFFFFFFFFU, 0x00000C80U);
|
||||||
|
psu_mask_write(0xFD080150, 0xFFFFFFFFU, 0x00000000U);
|
||||||
|
psu_mask_write(0xFD080154, 0xFFFFFFFFU, 0x00000200U);
|
||||||
|
psu_mask_write(0xFD080180, 0xFFFFFFFFU, 0x00000630U);
|
||||||
|
psu_mask_write(0xFD080184, 0xFFFFFFFFU, 0x00000501U);
|
||||||
|
psu_mask_write(0xFD080188, 0xFFFFFFFFU, 0x00000020U);
|
||||||
|
psu_mask_write(0xFD08018C, 0xFFFFFFFFU, 0x00000200U);
|
||||||
|
psu_mask_write(0xFD080190, 0xFFFFFFFFU, 0x00000000U);
|
||||||
|
psu_mask_write(0xFD080194, 0xFFFFFFFFU, 0x00000700U);
|
||||||
|
psu_mask_write(0xFD080198, 0xFFFFFFFFU, 0x00000819U);
|
||||||
|
psu_mask_write(0xFD0801AC, 0xFFFFFFFFU, 0x00000000U);
|
||||||
|
psu_mask_write(0xFD0801B0, 0xFFFFFFFFU, 0x0000004DU);
|
||||||
|
psu_mask_write(0xFD0801B4, 0xFFFFFFFFU, 0x00000008U);
|
||||||
|
psu_mask_write(0xFD0801B8, 0xFFFFFFFFU, 0x0000004DU);
|
||||||
|
psu_mask_write(0xFD0801D8, 0xFFFFFFFFU, 0x00000000U);
|
||||||
|
psu_mask_write(0xFD080200, 0xFFFFFFFFU, 0x810091C7U);
|
||||||
|
psu_mask_write(0xFD080204, 0xFFFFFFFFU, 0x00030236U);
|
||||||
|
psu_mask_write(0xFD080240, 0xFFFFFFFFU, 0x00141054U);
|
||||||
|
psu_mask_write(0xFD080250, 0xFFFFFFFFU, 0x00088000U);
|
||||||
|
psu_mask_write(0xFD080414, 0xFFFFFFFFU, 0x12344000U);
|
||||||
|
psu_mask_write(0xFD0804F4, 0xFFFFFFFFU, 0x00000005U);
|
||||||
|
psu_mask_write(0xFD080500, 0xFFFFFFFFU, 0x30000028U);
|
||||||
|
psu_mask_write(0xFD080508, 0xFFFFFFFFU, 0x00000000U);
|
||||||
|
psu_mask_write(0xFD08050C, 0xFFFFFFFFU, 0x00000005U);
|
||||||
|
psu_mask_write(0xFD080510, 0xFFFFFFFFU, 0x00000000U);
|
||||||
|
psu_mask_write(0xFD080520, 0xFFFFFFFFU, 0x0300B0CEU);
|
||||||
|
psu_mask_write(0xFD080528, 0xFFFFFFFFU, 0xF9032019U);
|
||||||
|
psu_mask_write(0xFD08052C, 0xFFFFFFFFU, 0x07F001E3U);
|
||||||
|
psu_mask_write(0xFD080544, 0xFFFFFFFFU, 0x00000000U);
|
||||||
|
psu_mask_write(0xFD080548, 0xFFFFFFFFU, 0x00000000U);
|
||||||
|
psu_mask_write(0xFD080558, 0xFFFFFFFFU, 0x00000000U);
|
||||||
|
psu_mask_write(0xFD08055C, 0xFFFFFFFFU, 0x00000000U);
|
||||||
|
psu_mask_write(0xFD080560, 0xFFFFFFFFU, 0x00000000U);
|
||||||
|
psu_mask_write(0xFD080564, 0xFFFFFFFFU, 0x00000000U);
|
||||||
|
psu_mask_write(0xFD080680, 0xFFFFFFFFU, 0x008AAA58U);
|
||||||
|
psu_mask_write(0xFD080684, 0xFFFFFFFFU, 0x000079DDU);
|
||||||
|
psu_mask_write(0xFD080694, 0xFFFFFFFFU, 0x01E10210U);
|
||||||
|
psu_mask_write(0xFD080698, 0xFFFFFFFFU, 0x01E10000U);
|
||||||
|
psu_mask_write(0xFD0806A4, 0xFFFFFFFFU, 0x000879DBU);
|
||||||
|
psu_mask_write(0xFD080700, 0xFFFFFFFFU, 0x40800604U);
|
||||||
|
psu_mask_write(0xFD080704, 0xFFFFFFFFU, 0x00007FFFU);
|
||||||
|
psu_mask_write(0xFD08070C, 0xFFFFFFFFU, 0x3F000008U);
|
||||||
|
psu_mask_write(0xFD080710, 0xFFFFFFFFU, 0x0E00B03CU);
|
||||||
|
psu_mask_write(0xFD080714, 0xFFFFFFFFU, 0x09094F4FU);
|
||||||
|
psu_mask_write(0xFD080718, 0xFFFFFFFFU, 0x09092B2BU);
|
||||||
|
psu_mask_write(0xFD080800, 0xFFFFFFFFU, 0x40800604U);
|
||||||
|
psu_mask_write(0xFD080804, 0xFFFFFFFFU, 0x00007FFFU);
|
||||||
|
psu_mask_write(0xFD08080C, 0xFFFFFFFFU, 0x3F000008U);
|
||||||
|
psu_mask_write(0xFD080810, 0xFFFFFFFFU, 0x0E00B03CU);
|
||||||
|
psu_mask_write(0xFD080814, 0xFFFFFFFFU, 0x09094F4FU);
|
||||||
|
psu_mask_write(0xFD080818, 0xFFFFFFFFU, 0x09092B2BU);
|
||||||
|
psu_mask_write(0xFD080900, 0xFFFFFFFFU, 0x40800604U);
|
||||||
|
psu_mask_write(0xFD080904, 0xFFFFFFFFU, 0x00007FFFU);
|
||||||
|
psu_mask_write(0xFD08090C, 0xFFFFFFFFU, 0x3F000008U);
|
||||||
|
psu_mask_write(0xFD080910, 0xFFFFFFFFU, 0x0E00B00CU);
|
||||||
|
psu_mask_write(0xFD080914, 0xFFFFFFFFU, 0x09094F4FU);
|
||||||
|
psu_mask_write(0xFD080918, 0xFFFFFFFFU, 0x09092B2BU);
|
||||||
|
psu_mask_write(0xFD080A00, 0xFFFFFFFFU, 0x40800604U);
|
||||||
|
psu_mask_write(0xFD080A04, 0xFFFFFFFFU, 0x00007FFFU);
|
||||||
|
psu_mask_write(0xFD080A0C, 0xFFFFFFFFU, 0x3F000008U);
|
||||||
|
psu_mask_write(0xFD080A10, 0xFFFFFFFFU, 0x0E00B00CU);
|
||||||
|
psu_mask_write(0xFD080A14, 0xFFFFFFFFU, 0x09094F4FU);
|
||||||
|
psu_mask_write(0xFD080A18, 0xFFFFFFFFU, 0x09092B2BU);
|
||||||
|
psu_mask_write(0xFD080B00, 0xFFFFFFFFU, 0x80803660U);
|
||||||
|
psu_mask_write(0xFD080B04, 0xFFFFFFFFU, 0x55556000U);
|
||||||
|
psu_mask_write(0xFD080B08, 0xFFFFFFFFU, 0xAAAAAAAAU);
|
||||||
|
psu_mask_write(0xFD080B0C, 0xFFFFFFFFU, 0x0029A4A4U);
|
||||||
|
psu_mask_write(0xFD080B10, 0xFFFFFFFFU, 0x0C00B000U);
|
||||||
|
psu_mask_write(0xFD080B14, 0xFFFFFFFFU, 0x09094F4FU);
|
||||||
|
psu_mask_write(0xFD080B18, 0xFFFFFFFFU, 0x09092B2BU);
|
||||||
|
psu_mask_write(0xFD080C00, 0xFFFFFFFFU, 0x80803660U);
|
||||||
|
psu_mask_write(0xFD080C04, 0xFFFFFFFFU, 0x55556000U);
|
||||||
|
psu_mask_write(0xFD080C08, 0xFFFFFFFFU, 0xAAAAAAAAU);
|
||||||
|
psu_mask_write(0xFD080C0C, 0xFFFFFFFFU, 0x0029A4A4U);
|
||||||
|
psu_mask_write(0xFD080C10, 0xFFFFFFFFU, 0x0C00B000U);
|
||||||
|
psu_mask_write(0xFD080C14, 0xFFFFFFFFU, 0x09094F4FU);
|
||||||
|
psu_mask_write(0xFD080C18, 0xFFFFFFFFU, 0x09092B2BU);
|
||||||
|
psu_mask_write(0xFD080D00, 0xFFFFFFFFU, 0x80803660U);
|
||||||
|
psu_mask_write(0xFD080D04, 0xFFFFFFFFU, 0x55556000U);
|
||||||
|
psu_mask_write(0xFD080D08, 0xFFFFFFFFU, 0xAAAAAAAAU);
|
||||||
|
psu_mask_write(0xFD080D0C, 0xFFFFFFFFU, 0x0029A4A4U);
|
||||||
|
psu_mask_write(0xFD080D10, 0xFFFFFFFFU, 0x0C00B000U);
|
||||||
|
psu_mask_write(0xFD080D14, 0xFFFFFFFFU, 0x09094F4FU);
|
||||||
|
psu_mask_write(0xFD080D18, 0xFFFFFFFFU, 0x09092B2BU);
|
||||||
|
psu_mask_write(0xFD080E00, 0xFFFFFFFFU, 0x80803660U);
|
||||||
|
psu_mask_write(0xFD080E04, 0xFFFFFFFFU, 0x55556000U);
|
||||||
|
psu_mask_write(0xFD080E08, 0xFFFFFFFFU, 0xAAAAAAAAU);
|
||||||
|
psu_mask_write(0xFD080E0C, 0xFFFFFFFFU, 0x0029A4A4U);
|
||||||
|
psu_mask_write(0xFD080E10, 0xFFFFFFFFU, 0x0C00B000U);
|
||||||
|
psu_mask_write(0xFD080E14, 0xFFFFFFFFU, 0x09094F4FU);
|
||||||
|
psu_mask_write(0xFD080E18, 0xFFFFFFFFU, 0x09092B2BU);
|
||||||
|
psu_mask_write(0xFD080F00, 0xFFFFFFFFU, 0x80803660U);
|
||||||
|
psu_mask_write(0xFD080F04, 0xFFFFFFFFU, 0x55556000U);
|
||||||
|
psu_mask_write(0xFD080F08, 0xFFFFFFFFU, 0xAAAAAAAAU);
|
||||||
|
psu_mask_write(0xFD080F0C, 0xFFFFFFFFU, 0x0029A4A4U);
|
||||||
|
psu_mask_write(0xFD080F10, 0xFFFFFFFFU, 0x0C00B000U);
|
||||||
|
psu_mask_write(0xFD080F14, 0xFFFFFFFFU, 0x09094F4FU);
|
||||||
|
psu_mask_write(0xFD080F18, 0xFFFFFFFFU, 0x09092B2BU);
|
||||||
|
psu_mask_write(0xFD081400, 0xFFFFFFFFU, 0x2A019FFEU);
|
||||||
|
psu_mask_write(0xFD081404, 0xFFFFFFFFU, 0x01100000U);
|
||||||
|
psu_mask_write(0xFD08141C, 0xFFFFFFFFU, 0x01264300U);
|
||||||
|
psu_mask_write(0xFD08142C, 0xFFFFFFFFU, 0x00041800U);
|
||||||
|
psu_mask_write(0xFD081430, 0xFFFFFFFFU, 0x70800000U);
|
||||||
|
psu_mask_write(0xFD081440, 0xFFFFFFFFU, 0x2A019FFEU);
|
||||||
|
psu_mask_write(0xFD081444, 0xFFFFFFFFU, 0x01100000U);
|
||||||
|
psu_mask_write(0xFD08145C, 0xFFFFFFFFU, 0x01264300U);
|
||||||
|
psu_mask_write(0xFD08146C, 0xFFFFFFFFU, 0x00041800U);
|
||||||
|
psu_mask_write(0xFD081470, 0xFFFFFFFFU, 0x70800000U);
|
||||||
|
psu_mask_write(0xFD081480, 0xFFFFFFFFU, 0x15019FFEU);
|
||||||
|
psu_mask_write(0xFD081484, 0xFFFFFFFFU, 0x21100000U);
|
||||||
|
psu_mask_write(0xFD08149C, 0xFFFFFFFFU, 0x01266300U);
|
||||||
|
psu_mask_write(0xFD0814AC, 0xFFFFFFFFU, 0x00041800U);
|
||||||
|
psu_mask_write(0xFD0814B0, 0xFFFFFFFFU, 0x70400000U);
|
||||||
|
psu_mask_write(0xFD0814C0, 0xFFFFFFFFU, 0x15019FFEU);
|
||||||
|
psu_mask_write(0xFD0814C4, 0xFFFFFFFFU, 0x21100000U);
|
||||||
|
psu_mask_write(0xFD0814DC, 0xFFFFFFFFU, 0x01266300U);
|
||||||
|
psu_mask_write(0xFD0814EC, 0xFFFFFFFFU, 0x00041800U);
|
||||||
|
psu_mask_write(0xFD0814F0, 0xFFFFFFFFU, 0x70400000U);
|
||||||
|
psu_mask_write(0xFD081500, 0xFFFFFFFFU, 0x15019FFEU);
|
||||||
|
psu_mask_write(0xFD081504, 0xFFFFFFFFU, 0x21100000U);
|
||||||
|
psu_mask_write(0xFD08151C, 0xFFFFFFFFU, 0x01266300U);
|
||||||
|
psu_mask_write(0xFD08152C, 0xFFFFFFFFU, 0x00041800U);
|
||||||
|
psu_mask_write(0xFD081530, 0xFFFFFFFFU, 0x70400000U);
|
||||||
|
psu_mask_write(0xFD0817DC, 0xFFFFFFFFU, 0x012643C4U);
|
||||||
|
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
static unsigned long psu_ddr_qos_init_data(void)
|
||||||
|
{
|
||||||
|
psu_mask_write(0xFD360008, 0x0000000FU, 0x00000000U);
|
||||||
|
psu_mask_write(0xFD36001C, 0x0000000FU, 0x00000000U);
|
||||||
|
psu_mask_write(0xFD370008, 0x0000000FU, 0x00000000U);
|
||||||
|
psu_mask_write(0xFD37001C, 0x0000000FU, 0x00000000U);
|
||||||
|
psu_mask_write(0xFD380008, 0x0000000FU, 0x00000000U);
|
||||||
|
psu_mask_write(0xFD38001C, 0x0000000FU, 0x00000000U);
|
||||||
|
psu_mask_write(0xFD390008, 0x0000000FU, 0x00000000U);
|
||||||
|
psu_mask_write(0xFD39001C, 0x0000000FU, 0x00000000U);
|
||||||
|
psu_mask_write(0xFD3A0008, 0x0000000FU, 0x00000000U);
|
||||||
|
psu_mask_write(0xFD3A001C, 0x0000000FU, 0x00000000U);
|
||||||
|
psu_mask_write(0xFD3B0008, 0x0000000FU, 0x00000000U);
|
||||||
|
psu_mask_write(0xFD3B001C, 0x0000000FU, 0x00000000U);
|
||||||
|
psu_mask_write(0xFF9B0008, 0x0000000FU, 0x00000000U);
|
||||||
|
psu_mask_write(0xFF9B001C, 0x0000000FU, 0x00000000U);
|
||||||
|
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
static unsigned long psu_mio_init_data(void)
|
||||||
|
{
|
||||||
|
psu_mask_write(0xFF180034, 0x000000FEU, 0x00000008U);
|
||||||
|
psu_mask_write(0xFF180038, 0x000000FEU, 0x00000008U);
|
||||||
|
psu_mask_write(0xFF18003C, 0x000000FEU, 0x00000008U);
|
||||||
|
psu_mask_write(0xFF180040, 0x000000FEU, 0x00000008U);
|
||||||
|
psu_mask_write(0xFF180044, 0x000000FEU, 0x00000008U);
|
||||||
|
psu_mask_write(0xFF180048, 0x000000FEU, 0x00000008U);
|
||||||
|
psu_mask_write(0xFF18004C, 0x000000FEU, 0x00000008U);
|
||||||
|
psu_mask_write(0xFF180050, 0x000000FEU, 0x00000008U);
|
||||||
|
psu_mask_write(0xFF180054, 0x000000FEU, 0x00000008U);
|
||||||
|
psu_mask_write(0xFF180058, 0x000000FEU, 0x00000008U);
|
||||||
|
psu_mask_write(0xFF18005C, 0x000000FEU, 0x00000008U);
|
||||||
|
psu_mask_write(0xFF180068, 0x000000FEU, 0x00000080U);
|
||||||
|
psu_mask_write(0xFF18006C, 0x000000FEU, 0x00000000U);
|
||||||
|
psu_mask_write(0xFF180070, 0x000000FEU, 0x00000000U);
|
||||||
|
psu_mask_write(0xFF180074, 0x000000FEU, 0x00000080U);
|
||||||
|
psu_mask_write(0xFF180078, 0x000000FEU, 0x00000080U);
|
||||||
|
psu_mask_write(0xFF18007C, 0x000000FEU, 0x00000080U);
|
||||||
|
psu_mask_write(0xFF180080, 0x000000FEU, 0x00000000U);
|
||||||
|
psu_mask_write(0xFF180084, 0x000000FEU, 0x00000000U);
|
||||||
|
psu_mask_write(0xFF180088, 0x000000FEU, 0x00000040U);
|
||||||
|
psu_mask_write(0xFF18008C, 0x000000FEU, 0x00000040U);
|
||||||
|
psu_mask_write(0xFF180090, 0x000000FEU, 0x00000000U);
|
||||||
|
psu_mask_write(0xFF180094, 0x000000FEU, 0x00000000U);
|
||||||
|
psu_mask_write(0xFF180098, 0x000000FEU, 0x000000C0U);
|
||||||
|
psu_mask_write(0xFF18009C, 0x000000FEU, 0x000000C0U);
|
||||||
|
psu_mask_write(0xFF1800A0, 0x000000FEU, 0x00000000U);
|
||||||
|
psu_mask_write(0xFF1800A4, 0x000000FEU, 0x00000000U);
|
||||||
|
psu_mask_write(0xFF1800A8, 0x000000FEU, 0x00000000U);
|
||||||
|
psu_mask_write(0xFF1800AC, 0x000000FEU, 0x00000000U);
|
||||||
|
psu_mask_write(0xFF1800B0, 0x000000FEU, 0x00000000U);
|
||||||
|
psu_mask_write(0xFF1800B4, 0x000000FEU, 0x00000010U);
|
||||||
|
psu_mask_write(0xFF1800B8, 0x000000FEU, 0x00000010U);
|
||||||
|
psu_mask_write(0xFF1800BC, 0x000000FEU, 0x00000010U);
|
||||||
|
psu_mask_write(0xFF1800C0, 0x000000FEU, 0x00000010U);
|
||||||
|
psu_mask_write(0xFF1800C4, 0x000000FEU, 0x00000010U);
|
||||||
|
psu_mask_write(0xFF1800C8, 0x000000FEU, 0x00000010U);
|
||||||
|
psu_mask_write(0xFF1800CC, 0x000000FEU, 0x00000010U);
|
||||||
|
psu_mask_write(0xFF1800D0, 0x000000FEU, 0x00000004U);
|
||||||
|
psu_mask_write(0xFF1800D4, 0x000000FEU, 0x00000004U);
|
||||||
|
psu_mask_write(0xFF1800D8, 0x000000FEU, 0x00000004U);
|
||||||
|
psu_mask_write(0xFF1800DC, 0x000000FEU, 0x00000004U);
|
||||||
|
psu_mask_write(0xFF1800E0, 0x000000FEU, 0x00000004U);
|
||||||
|
psu_mask_write(0xFF1800E4, 0x000000FEU, 0x00000004U);
|
||||||
|
psu_mask_write(0xFF1800E8, 0x000000FEU, 0x00000004U);
|
||||||
|
psu_mask_write(0xFF1800EC, 0x000000FEU, 0x00000004U);
|
||||||
|
psu_mask_write(0xFF1800F0, 0x000000FEU, 0x00000004U);
|
||||||
|
psu_mask_write(0xFF1800F4, 0x000000FEU, 0x00000004U);
|
||||||
|
psu_mask_write(0xFF1800F8, 0x000000FEU, 0x00000004U);
|
||||||
|
psu_mask_write(0xFF1800FC, 0x000000FEU, 0x00000004U);
|
||||||
|
psu_mask_write(0xFF180100, 0x000000FEU, 0x00000004U);
|
||||||
|
psu_mask_write(0xFF180104, 0x000000FEU, 0x00000004U);
|
||||||
|
psu_mask_write(0xFF180108, 0x000000FEU, 0x00000004U);
|
||||||
|
psu_mask_write(0xFF18010C, 0x000000FEU, 0x00000004U);
|
||||||
|
psu_mask_write(0xFF180110, 0x000000FEU, 0x00000004U);
|
||||||
|
psu_mask_write(0xFF180114, 0x000000FEU, 0x00000004U);
|
||||||
|
psu_mask_write(0xFF180118, 0x000000FEU, 0x00000004U);
|
||||||
|
psu_mask_write(0xFF18011C, 0x000000FEU, 0x00000004U);
|
||||||
|
psu_mask_write(0xFF180120, 0x000000FEU, 0x00000004U);
|
||||||
|
psu_mask_write(0xFF180124, 0x000000FEU, 0x00000004U);
|
||||||
|
psu_mask_write(0xFF180128, 0x000000FEU, 0x00000004U);
|
||||||
|
psu_mask_write(0xFF18012C, 0x000000FEU, 0x00000004U);
|
||||||
|
psu_mask_write(0xFF180130, 0x000000FEU, 0x00000060U);
|
||||||
|
psu_mask_write(0xFF180134, 0x000000FEU, 0x00000060U);
|
||||||
|
psu_mask_write(0xFF180204, 0xFCFFE000U, 0x00000000U);
|
||||||
|
psu_mask_write(0xFF180208, 0xFFFFFFFFU, 0x00B02040U);
|
||||||
|
psu_mask_write(0xFF18020C, 0x00003FFFU, 0x0000000BU);
|
||||||
|
psu_mask_write(0xFF180138, 0x03FFFFFFU, 0x03FFFFFFU);
|
||||||
|
psu_mask_write(0xFF18013C, 0x03FFFFFFU, 0x03FFFFFFU);
|
||||||
|
psu_mask_write(0xFF180140, 0x03FFFFFFU, 0x033FFFFFU);
|
||||||
|
psu_mask_write(0xFF180144, 0x03FFFFFFU, 0x03FFFFFFU);
|
||||||
|
psu_mask_write(0xFF180148, 0x03FFFFFFU, 0x03FFFFFFU);
|
||||||
|
psu_mask_write(0xFF18014C, 0x03FFFFFFU, 0x03FFFFFFU);
|
||||||
|
psu_mask_write(0xFF180154, 0x03FFFFFFU, 0x03FFFFFFU);
|
||||||
|
psu_mask_write(0xFF180158, 0x03FFFFFFU, 0x03FFFFFFU);
|
||||||
|
psu_mask_write(0xFF18015C, 0x03FFFFFFU, 0x01FF9FFFU);
|
||||||
|
psu_mask_write(0xFF180160, 0x03FFFFFFU, 0x03FFFFFFU);
|
||||||
|
psu_mask_write(0xFF180164, 0x03FFFFFFU, 0x03FFFFFFU);
|
||||||
|
psu_mask_write(0xFF180168, 0x03FFFFFFU, 0x03F76FFFU);
|
||||||
|
psu_mask_write(0xFF180170, 0x03FFFFFFU, 0x03FFFFFFU);
|
||||||
|
psu_mask_write(0xFF180174, 0x03FFFFFFU, 0x03FFFFFFU);
|
||||||
|
psu_mask_write(0xFF180178, 0x03FFFFFFU, 0x02FBFFBFU);
|
||||||
|
psu_mask_write(0xFF18017C, 0x03FFFFFFU, 0x03FFFFFFU);
|
||||||
|
psu_mask_write(0xFF180180, 0x03FFFFFFU, 0x03FFFFFFU);
|
||||||
|
psu_mask_write(0xFF180184, 0x03FFFFFFU, 0x03FF4FF4U);
|
||||||
|
psu_mask_write(0xFF180200, 0x0000000FU, 0x00000000U);
|
||||||
|
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
static unsigned long psu_peripherals_pre_init_data(void)
|
||||||
|
{
|
||||||
|
psu_mask_write(0xFF5E0108, 0x013F3F07U, 0x01012302U);
|
||||||
|
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
static unsigned long psu_peripherals_init_data(void)
|
||||||
|
{
|
||||||
|
psu_mask_write(0xFD1A0100, 0x0000807CU, 0x00000000U);
|
||||||
|
psu_mask_write(0xFF5E0238, 0x001A0000U, 0x00000000U);
|
||||||
|
psu_mask_write(0xFF5E023C, 0x0093C018U, 0x00000000U);
|
||||||
|
psu_mask_write(0xFF5E0230, 0x00000001U, 0x00000000U);
|
||||||
|
psu_mask_write(0xFF5E023C, 0x00000C00U, 0x00000000U);
|
||||||
|
psu_mask_write(0xFF5E0238, 0x00000060U, 0x00000000U);
|
||||||
|
psu_mask_write(0xFF180310, 0x00008001U, 0x00000001U);
|
||||||
|
psu_mask_write(0xFF180320, 0x33843384U, 0x00801284U);
|
||||||
|
psu_mask_write(0xFF18031C, 0x00007FFEU, 0x00006450U);
|
||||||
|
psu_mask_write(0xFF180358, 0x00080000U, 0x00080000U);
|
||||||
|
psu_mask_write(0xFF18031C, 0x7FFE0000U, 0x64500000U);
|
||||||
|
psu_mask_write(0xFF180358, 0x00000008U, 0x00000008U);
|
||||||
|
psu_mask_write(0xFF180324, 0x000003C0U, 0x00000000U);
|
||||||
|
psu_mask_write(0xFF180324, 0x03C00000U, 0x00000000U);
|
||||||
|
psu_mask_write(0xFF5E0238, 0x00000200U, 0x00000000U);
|
||||||
|
psu_mask_write(0xFF5E0238, 0x00008000U, 0x00000000U);
|
||||||
|
psu_mask_write(0xFF5E0238, 0x00000008U, 0x00000000U);
|
||||||
|
psu_mask_write(0xFF5E0238, 0x00007800U, 0x00000000U);
|
||||||
|
psu_mask_write(0xFF5E0238, 0x00000002U, 0x00000000U);
|
||||||
|
psu_mask_write(0xFF000034, 0x000000FFU, 0x00000005U);
|
||||||
|
psu_mask_write(0xFF000018, 0x0000FFFFU, 0x0000008FU);
|
||||||
|
psu_mask_write(0xFF000000, 0x000001FFU, 0x00000017U);
|
||||||
|
psu_mask_write(0xFF000004, 0x000003FFU, 0x00000020U);
|
||||||
|
psu_mask_write(0xFF5E0238, 0x00040000U, 0x00000000U);
|
||||||
|
psu_mask_write(0xFF4B0024, 0x000000FFU, 0x000000FFU);
|
||||||
|
psu_mask_write(0xFFCA5000, 0x00001FFFU, 0x00000000U);
|
||||||
|
psu_mask_write(0xFD5C0060, 0x000F000FU, 0x00000000U);
|
||||||
|
psu_mask_write(0xFFA60040, 0x80000000U, 0x80000000U);
|
||||||
|
psu_mask_write(0xFF260020, 0xFFFFFFFFU, 0x01FC9F08U);
|
||||||
|
psu_mask_write(0xFF260000, 0x00000001U, 0x00000001U);
|
||||||
|
psu_mask_write(0xFF5E0250, 0x00000F0FU, 0x00000202U);
|
||||||
|
|
||||||
|
mask_delay(1);
|
||||||
|
psu_mask_write(0xFF5E0250, 0x00000F0FU, 0x00000002U);
|
||||||
|
|
||||||
|
mask_delay(5);
|
||||||
|
psu_mask_write(0xFF5E0250, 0x00000F0FU, 0x00000202U);
|
||||||
|
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
static unsigned long psu_serdes_init_data(void)
|
||||||
|
{
|
||||||
|
psu_mask_write(0xFD410000, 0x0000001FU, 0x0000000FU);
|
||||||
|
psu_mask_write(0xFD410004, 0x0000001FU, 0x00000008U);
|
||||||
|
psu_mask_write(0xFD402860, 0x00000080U, 0x00000080U);
|
||||||
|
psu_mask_write(0xFD402864, 0x00000080U, 0x00000080U);
|
||||||
|
psu_mask_write(0xFD406094, 0x00000010U, 0x00000010U);
|
||||||
|
psu_mask_write(0xFD406368, 0x000000FFU, 0x00000038U);
|
||||||
|
psu_mask_write(0xFD40636C, 0x00000007U, 0x00000003U);
|
||||||
|
psu_mask_write(0xFD406370, 0x000000FFU, 0x000000F4U);
|
||||||
|
psu_mask_write(0xFD406374, 0x000000FFU, 0x00000031U);
|
||||||
|
psu_mask_write(0xFD406378, 0x000000FFU, 0x00000002U);
|
||||||
|
psu_mask_write(0xFD40637C, 0x00000033U, 0x00000030U);
|
||||||
|
psu_mask_write(0xFD40106C, 0x0000000FU, 0x0000000FU);
|
||||||
|
psu_mask_write(0xFD4000F4, 0x0000000BU, 0x0000000BU);
|
||||||
|
psu_mask_write(0xFD40506C, 0x00000003U, 0x00000003U);
|
||||||
|
psu_mask_write(0xFD4040F4, 0x00000003U, 0x00000003U);
|
||||||
|
psu_mask_write(0xFD4050CC, 0x00000020U, 0x00000020U);
|
||||||
|
psu_mask_write(0xFD401074, 0x00000010U, 0x00000010U);
|
||||||
|
psu_mask_write(0xFD405074, 0x00000010U, 0x00000010U);
|
||||||
|
psu_mask_write(0xFD409074, 0x00000010U, 0x00000010U);
|
||||||
|
psu_mask_write(0xFD40D074, 0x00000010U, 0x00000010U);
|
||||||
|
psu_mask_write(0xFD40189C, 0x00000080U, 0x00000080U);
|
||||||
|
psu_mask_write(0xFD4018F8, 0x000000FFU, 0x0000007DU);
|
||||||
|
psu_mask_write(0xFD4018FC, 0x000000FFU, 0x0000007DU);
|
||||||
|
psu_mask_write(0xFD401990, 0x000000FFU, 0x00000000U);
|
||||||
|
psu_mask_write(0xFD401924, 0x000000FFU, 0x00000082U);
|
||||||
|
psu_mask_write(0xFD401928, 0x000000FFU, 0x00000000U);
|
||||||
|
psu_mask_write(0xFD401900, 0x000000FFU, 0x00000064U);
|
||||||
|
psu_mask_write(0xFD40192C, 0x000000FFU, 0x00000000U);
|
||||||
|
psu_mask_write(0xFD401980, 0x000000FFU, 0x000000FFU);
|
||||||
|
psu_mask_write(0xFD401914, 0x000000FFU, 0x000000FFU);
|
||||||
|
psu_mask_write(0xFD401918, 0x00000001U, 0x00000001U);
|
||||||
|
psu_mask_write(0xFD401940, 0x000000FFU, 0x000000FFU);
|
||||||
|
psu_mask_write(0xFD401944, 0x00000001U, 0x00000001U);
|
||||||
|
psu_mask_write(0xFD401994, 0x00000007U, 0x00000007U);
|
||||||
|
psu_mask_write(0xFD40589C, 0x00000080U, 0x00000080U);
|
||||||
|
psu_mask_write(0xFD4058F8, 0x000000FFU, 0x0000001AU);
|
||||||
|
psu_mask_write(0xFD4058FC, 0x000000FFU, 0x0000001AU);
|
||||||
|
psu_mask_write(0xFD405990, 0x000000FFU, 0x00000010U);
|
||||||
|
psu_mask_write(0xFD405924, 0x000000FFU, 0x000000FEU);
|
||||||
|
psu_mask_write(0xFD405928, 0x000000FFU, 0x00000000U);
|
||||||
|
psu_mask_write(0xFD405900, 0x000000FFU, 0x0000001AU);
|
||||||
|
psu_mask_write(0xFD40592C, 0x000000FFU, 0x00000000U);
|
||||||
|
psu_mask_write(0xFD405980, 0x000000FFU, 0x000000FFU);
|
||||||
|
psu_mask_write(0xFD405914, 0x000000FFU, 0x000000F7U);
|
||||||
|
psu_mask_write(0xFD405918, 0x00000001U, 0x00000001U);
|
||||||
|
psu_mask_write(0xFD405940, 0x000000FFU, 0x000000F7U);
|
||||||
|
psu_mask_write(0xFD405944, 0x00000001U, 0x00000001U);
|
||||||
|
psu_mask_write(0xFD405994, 0x00000007U, 0x00000007U);
|
||||||
|
psu_mask_write(0xFD409994, 0x00000007U, 0x00000007U);
|
||||||
|
psu_mask_write(0xFD40D994, 0x00000007U, 0x00000007U);
|
||||||
|
psu_mask_write(0xFD40107C, 0x0000000FU, 0x00000001U);
|
||||||
|
psu_mask_write(0xFD40507C, 0x0000000FU, 0x00000001U);
|
||||||
|
psu_mask_write(0xFD40907C, 0x0000000FU, 0x00000001U);
|
||||||
|
psu_mask_write(0xFD40D07C, 0x0000000FU, 0x00000001U);
|
||||||
|
psu_mask_write(0xFD4019A4, 0x000000FFU, 0x000000FFU);
|
||||||
|
psu_mask_write(0xFD401038, 0x00000040U, 0x00000040U);
|
||||||
|
psu_mask_write(0xFD40102C, 0x00000040U, 0x00000040U);
|
||||||
|
psu_mask_write(0xFD4059A4, 0x000000FFU, 0x000000FFU);
|
||||||
|
psu_mask_write(0xFD405038, 0x00000040U, 0x00000040U);
|
||||||
|
psu_mask_write(0xFD40502C, 0x00000040U, 0x00000040U);
|
||||||
|
psu_mask_write(0xFD4099A4, 0x000000FFU, 0x000000FFU);
|
||||||
|
psu_mask_write(0xFD409038, 0x00000040U, 0x00000040U);
|
||||||
|
psu_mask_write(0xFD40902C, 0x00000040U, 0x00000040U);
|
||||||
|
psu_mask_write(0xFD40D9A4, 0x000000FFU, 0x000000FFU);
|
||||||
|
psu_mask_write(0xFD40D038, 0x00000040U, 0x00000040U);
|
||||||
|
psu_mask_write(0xFD40D02C, 0x00000040U, 0x00000040U);
|
||||||
|
psu_mask_write(0xFD4019AC, 0x00000003U, 0x00000000U);
|
||||||
|
psu_mask_write(0xFD4059AC, 0x00000003U, 0x00000000U);
|
||||||
|
psu_mask_write(0xFD4099AC, 0x00000003U, 0x00000000U);
|
||||||
|
psu_mask_write(0xFD40D9AC, 0x00000003U, 0x00000000U);
|
||||||
|
psu_mask_write(0xFD401978, 0x00000010U, 0x00000010U);
|
||||||
|
psu_mask_write(0xFD405978, 0x00000010U, 0x00000010U);
|
||||||
|
psu_mask_write(0xFD409978, 0x00000010U, 0x00000010U);
|
||||||
|
psu_mask_write(0xFD40D978, 0x00000010U, 0x00000010U);
|
||||||
|
psu_mask_write(0xFD410010, 0x00000077U, 0x00000035U);
|
||||||
|
psu_mask_write(0xFD410040, 0x00000003U, 0x00000000U);
|
||||||
|
psu_mask_write(0xFD410044, 0x00000003U, 0x00000000U);
|
||||||
|
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
static unsigned long psu_resetout_init_data(void)
|
||||||
|
{
|
||||||
|
psu_mask_write(0xFF5E023C, 0x00000400U, 0x00000000U);
|
||||||
|
psu_mask_write(0xFF9D0080, 0x00000001U, 0x00000001U);
|
||||||
|
psu_mask_write(0xFF9D007C, 0x00000001U, 0x00000000U);
|
||||||
|
psu_mask_write(0xFF5E023C, 0x00000140U, 0x00000000U);
|
||||||
|
psu_mask_write(0xFF5E023C, 0x00000800U, 0x00000000U);
|
||||||
|
psu_mask_write(0xFF9E0080, 0x00000001U, 0x00000001U);
|
||||||
|
psu_mask_write(0xFF9E007C, 0x00000001U, 0x00000001U);
|
||||||
|
psu_mask_write(0xFF5E023C, 0x00000280U, 0x00000000U);
|
||||||
|
psu_mask_write(0xFF5E0230, 0x00000001U, 0x00000000U);
|
||||||
|
psu_mask_write(0xFE20C200, 0x00023FFFU, 0x00022457U);
|
||||||
|
psu_mask_write(0xFE20C630, 0x003FFF00U, 0x00000000U);
|
||||||
|
psu_mask_write(0xFE20C11C, 0x00000600U, 0x00000600U);
|
||||||
|
psu_mask_write(0xFE20C12C, 0x00004000U, 0x00004000U);
|
||||||
|
psu_mask_write(0xFE30C200, 0x00023FFFU, 0x00022457U);
|
||||||
|
psu_mask_write(0xFE30C630, 0x003FFF00U, 0x00000000U);
|
||||||
|
psu_mask_write(0xFE30C12C, 0x00004000U, 0x00004000U);
|
||||||
|
psu_mask_write(0xFE30C11C, 0x00000400U, 0x00000400U);
|
||||||
|
psu_mask_write(0xFD480064, 0x00000200U, 0x00000200U);
|
||||||
|
mask_poll(0xFD4023E4, 0x00000010U);
|
||||||
|
mask_poll(0xFD4063E4, 0x00000010U);
|
||||||
|
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
static unsigned long psu_resetin_init_data(void)
|
||||||
|
{
|
||||||
|
psu_mask_write(0xFF5E023C, 0x00000540U, 0x00000540U);
|
||||||
|
psu_mask_write(0xFF5E023C, 0x00000A80U, 0x00000A80U);
|
||||||
|
psu_mask_write(0xFF5E0230, 0x00000001U, 0x00000001U);
|
||||||
|
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
static unsigned long psu_afi_config(void)
|
||||||
|
{
|
||||||
|
psu_mask_write(0xFD1A0100, 0x00001F80U, 0x00000000U);
|
||||||
|
psu_mask_write(0xFF5E023C, 0x00080000U, 0x00000000U);
|
||||||
|
psu_mask_write(0xFD615000, 0x00000F00U, 0x00000A00U);
|
||||||
|
psu_mask_write(0xFF419000, 0x00000300U, 0x00000000U);
|
||||||
|
psu_mask_write(0xFD360000, 0x00000003U, 0x00000000U);
|
||||||
|
psu_mask_write(0xFD360014, 0x00000003U, 0x00000000U);
|
||||||
|
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
static unsigned long psu_ddr_phybringup_data(void)
|
||||||
|
{
|
||||||
|
unsigned int regval = 0;
|
||||||
|
unsigned int pll_retry = 10;
|
||||||
|
unsigned int pll_locked = 0;
|
||||||
|
int cur_r006_trefprd;
|
||||||
|
|
||||||
|
while ((pll_retry > 0) && (!pll_locked)) {
|
||||||
|
Xil_Out32(0xFD080004, 0x00040010);
|
||||||
|
Xil_Out32(0xFD080004, 0x00040011);
|
||||||
|
|
||||||
|
while ((Xil_In32(0xFD080030) & 0x1) != 1)
|
||||||
|
;
|
||||||
|
pll_locked = (Xil_In32(0xFD080030) & 0x80000000)
|
||||||
|
>> 31;
|
||||||
|
pll_locked &= (Xil_In32(0xFD0807E0) & 0x10000)
|
||||||
|
>> 16;
|
||||||
|
pll_locked &= (Xil_In32(0xFD0809E0) & 0x10000)
|
||||||
|
>> 16;
|
||||||
|
pll_retry--;
|
||||||
|
}
|
||||||
|
Xil_Out32(0xFD0800C4, Xil_In32(0xFD0800C4) | (pll_retry << 16));
|
||||||
|
if (!pll_locked)
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
Xil_Out32(0xFD080004U, 0x00040063U);
|
||||||
|
|
||||||
|
while ((Xil_In32(0xFD080030U) & 0x0000000FU) != 0x0000000FU)
|
||||||
|
;
|
||||||
|
prog_reg(0xFD080004U, 0x00000001U, 0x00000000U, 0x00000001U);
|
||||||
|
|
||||||
|
while ((Xil_In32(0xFD080030U) & 0x000000FFU) != 0x0000001FU)
|
||||||
|
;
|
||||||
|
Xil_Out32(0xFD0701B0U, 0x00000001U);
|
||||||
|
Xil_Out32(0xFD070320U, 0x00000001U);
|
||||||
|
while ((Xil_In32(0xFD070004U) & 0x0000000FU) != 0x00000001U)
|
||||||
|
;
|
||||||
|
prog_reg(0xFD080014U, 0x00000040U, 0x00000006U, 0x00000001U);
|
||||||
|
Xil_Out32(0xFD080004, 0x0004FE01);
|
||||||
|
regval = Xil_In32(0xFD080030);
|
||||||
|
while (regval != 0x80000FFF)
|
||||||
|
regval = Xil_In32(0xFD080030);
|
||||||
|
regval = ((Xil_In32(0xFD080030) & 0x1FFF0000) >> 18);
|
||||||
|
if (regval != 0)
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
Xil_Out32(0xFD080200U, 0x110091C7U);
|
||||||
|
|
||||||
|
cur_r006_trefprd = (Xil_In32(0xFD080018U) & 0x0003FFFFU) >> 0x00000000U;
|
||||||
|
prog_reg(0xFD080018, 0x3FFFF, 0x0, cur_r006_trefprd);
|
||||||
|
|
||||||
|
prog_reg(0xFD08001CU, 0x00000018U, 0x00000003U, 0x00000003U);
|
||||||
|
prog_reg(0xFD08142CU, 0x00000030U, 0x00000004U, 0x00000003U);
|
||||||
|
prog_reg(0xFD08146CU, 0x00000030U, 0x00000004U, 0x00000003U);
|
||||||
|
prog_reg(0xFD0814ACU, 0x00000030U, 0x00000004U, 0x00000003U);
|
||||||
|
prog_reg(0xFD0814ECU, 0x00000030U, 0x00000004U, 0x00000003U);
|
||||||
|
prog_reg(0xFD08152CU, 0x00000030U, 0x00000004U, 0x00000003U);
|
||||||
|
|
||||||
|
Xil_Out32(0xFD080004, 0x00060001);
|
||||||
|
regval = Xil_In32(0xFD080030);
|
||||||
|
while ((regval & 0x80004001) != 0x80004001)
|
||||||
|
regval = Xil_In32(0xFD080030);
|
||||||
|
|
||||||
|
prog_reg(0xFD08001CU, 0x00000018U, 0x00000003U, 0x00000000U);
|
||||||
|
prog_reg(0xFD08142CU, 0x00000030U, 0x00000004U, 0x00000000U);
|
||||||
|
prog_reg(0xFD08146CU, 0x00000030U, 0x00000004U, 0x00000000U);
|
||||||
|
prog_reg(0xFD0814ACU, 0x00000030U, 0x00000004U, 0x00000000U);
|
||||||
|
prog_reg(0xFD0814ECU, 0x00000030U, 0x00000004U, 0x00000000U);
|
||||||
|
prog_reg(0xFD08152CU, 0x00000030U, 0x00000004U, 0x00000000U);
|
||||||
|
|
||||||
|
Xil_Out32(0xFD080200U, 0x810091C7U);
|
||||||
|
prog_reg(0xFD080018, 0x3FFFF, 0x0, cur_r006_trefprd);
|
||||||
|
|
||||||
|
Xil_Out32(0xFD080004, 0x0000C001);
|
||||||
|
regval = Xil_In32(0xFD080030);
|
||||||
|
while ((regval & 0x80000C01) != 0x80000C01)
|
||||||
|
regval = Xil_In32(0xFD080030);
|
||||||
|
|
||||||
|
Xil_Out32(0xFD070180U, 0x01000040U);
|
||||||
|
Xil_Out32(0xFD070060U, 0x00000000U);
|
||||||
|
prog_reg(0xFD080014U, 0x00000040U, 0x00000006U, 0x00000000U);
|
||||||
|
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
static int serdes_enb_coarse_saturation(void)
|
||||||
|
{
|
||||||
|
Xil_Out32(0xFD402094, 0x00000010);
|
||||||
|
Xil_Out32(0xFD406094, 0x00000010);
|
||||||
|
Xil_Out32(0xFD40A094, 0x00000010);
|
||||||
|
Xil_Out32(0xFD40E094, 0x00000010);
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
static int serdes_fixcal_code(void)
|
||||||
|
{
|
||||||
|
int maskstatus = 1;
|
||||||
|
unsigned int rdata = 0;
|
||||||
|
unsigned int match_pmos_code[23];
|
||||||
|
unsigned int match_nmos_code[23];
|
||||||
|
unsigned int match_ical_code[7];
|
||||||
|
unsigned int match_rcal_code[7];
|
||||||
|
unsigned int p_code = 0, n_code = 0, i_code = 0, r_code = 0;
|
||||||
|
unsigned int repeat_count = 0;
|
||||||
|
unsigned int L3_TM_CALIB_DIG20 = 0;
|
||||||
|
unsigned int L3_TM_CALIB_DIG19 = 0;
|
||||||
|
unsigned int L3_TM_CALIB_DIG18 = 0;
|
||||||
|
unsigned int L3_TM_CALIB_DIG16 = 0;
|
||||||
|
unsigned int L3_TM_CALIB_DIG15 = 0;
|
||||||
|
unsigned int L3_TM_CALIB_DIG14 = 0;
|
||||||
|
int count = 0, i = 0;
|
||||||
|
|
||||||
|
rdata = Xil_In32(0xFD40289C);
|
||||||
|
rdata = rdata & ~0x03;
|
||||||
|
rdata = rdata | 0x1;
|
||||||
|
Xil_Out32(0xFD40289C, rdata);
|
||||||
|
|
||||||
|
do {
|
||||||
|
if (count == 1100000)
|
||||||
|
break;
|
||||||
|
rdata = Xil_In32(0xFD402B1C);
|
||||||
|
count++;
|
||||||
|
} while ((rdata & 0x0000000E) != 0x0000000E);
|
||||||
|
|
||||||
|
for (i = 0; i < 23; i++) {
|
||||||
|
match_pmos_code[i] = 0;
|
||||||
|
match_nmos_code[i] = 0;
|
||||||
|
}
|
||||||
|
for (i = 0; i < 7; i++) {
|
||||||
|
match_ical_code[i] = 0;
|
||||||
|
match_rcal_code[i] = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
do {
|
||||||
|
Xil_Out32(0xFD410010, 0x00000000);
|
||||||
|
Xil_Out32(0xFD410014, 0x00000000);
|
||||||
|
|
||||||
|
Xil_Out32(0xFD410010, 0x00000001);
|
||||||
|
Xil_Out32(0xFD410014, 0x00000000);
|
||||||
|
|
||||||
|
maskstatus = mask_poll(0xFD40EF14, 0x2);
|
||||||
|
if (maskstatus == 0) {
|
||||||
|
xil_printf("#SERDES initialization timed out\n\r");
|
||||||
|
return maskstatus;
|
||||||
|
}
|
||||||
|
|
||||||
|
p_code = mask_read(0xFD40EF18, 0xFFFFFFFF);
|
||||||
|
n_code = mask_read(0xFD40EF1C, 0xFFFFFFFF);
|
||||||
|
;
|
||||||
|
i_code = mask_read(0xFD40EF24, 0xFFFFFFFF);
|
||||||
|
r_code = mask_read(0xFD40EF28, 0xFFFFFFFF);
|
||||||
|
;
|
||||||
|
|
||||||
|
if (p_code >= 0x26 && p_code <= 0x3C)
|
||||||
|
match_pmos_code[p_code - 0x26] += 1;
|
||||||
|
|
||||||
|
if (n_code >= 0x26 && n_code <= 0x3C)
|
||||||
|
match_nmos_code[n_code - 0x26] += 1;
|
||||||
|
|
||||||
|
if (i_code >= 0xC && i_code <= 0x12)
|
||||||
|
match_ical_code[i_code - 0xc] += 1;
|
||||||
|
|
||||||
|
if (r_code >= 0x6 && r_code <= 0xC)
|
||||||
|
match_rcal_code[r_code - 0x6] += 1;
|
||||||
|
|
||||||
|
} while (repeat_count++ < 10);
|
||||||
|
|
||||||
|
for (i = 0; i < 23; i++) {
|
||||||
|
if (match_pmos_code[i] >= match_pmos_code[0]) {
|
||||||
|
match_pmos_code[0] = match_pmos_code[i];
|
||||||
|
p_code = 0x26 + i;
|
||||||
|
}
|
||||||
|
if (match_nmos_code[i] >= match_nmos_code[0]) {
|
||||||
|
match_nmos_code[0] = match_nmos_code[i];
|
||||||
|
n_code = 0x26 + i;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
for (i = 0; i < 7; i++) {
|
||||||
|
if (match_ical_code[i] >= match_ical_code[0]) {
|
||||||
|
match_ical_code[0] = match_ical_code[i];
|
||||||
|
i_code = 0xC + i;
|
||||||
|
}
|
||||||
|
if (match_rcal_code[i] >= match_rcal_code[0]) {
|
||||||
|
match_rcal_code[0] = match_rcal_code[i];
|
||||||
|
r_code = 0x6 + i;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
L3_TM_CALIB_DIG20 = mask_read(0xFD40EC50, 0xFFFFFFF0);
|
||||||
|
L3_TM_CALIB_DIG20 = L3_TM_CALIB_DIG20 | 0x8 | ((p_code >> 2) & 0x7);
|
||||||
|
|
||||||
|
L3_TM_CALIB_DIG19 = mask_read(0xFD40EC4C, 0xFFFFFF18);
|
||||||
|
L3_TM_CALIB_DIG19 = L3_TM_CALIB_DIG19 | ((p_code & 0x3) << 6)
|
||||||
|
| 0x20 | 0x4 | ((n_code >> 3) & 0x3);
|
||||||
|
|
||||||
|
L3_TM_CALIB_DIG18 = mask_read(0xFD40EC48, 0xFFFFFF0F);
|
||||||
|
L3_TM_CALIB_DIG18 = L3_TM_CALIB_DIG18 | ((n_code & 0x7) << 5) | 0x10;
|
||||||
|
|
||||||
|
L3_TM_CALIB_DIG16 = mask_read(0xFD40EC40, 0xFFFFFFF8);
|
||||||
|
L3_TM_CALIB_DIG16 = L3_TM_CALIB_DIG16 | ((r_code >> 1) & 0x7);
|
||||||
|
|
||||||
|
L3_TM_CALIB_DIG15 = mask_read(0xFD40EC3C, 0xFFFFFF30);
|
||||||
|
L3_TM_CALIB_DIG15 = L3_TM_CALIB_DIG15 | ((r_code & 0x1) << 7)
|
||||||
|
| 0x40 | 0x8 | ((i_code >> 1) & 0x7);
|
||||||
|
|
||||||
|
L3_TM_CALIB_DIG14 = mask_read(0xFD40EC38, 0xFFFFFF3F);
|
||||||
|
L3_TM_CALIB_DIG14 = L3_TM_CALIB_DIG14 | ((i_code & 0x1) << 7) | 0x40;
|
||||||
|
|
||||||
|
Xil_Out32(0xFD40EC50, L3_TM_CALIB_DIG20);
|
||||||
|
Xil_Out32(0xFD40EC4C, L3_TM_CALIB_DIG19);
|
||||||
|
Xil_Out32(0xFD40EC48, L3_TM_CALIB_DIG18);
|
||||||
|
Xil_Out32(0xFD40EC40, L3_TM_CALIB_DIG16);
|
||||||
|
Xil_Out32(0xFD40EC3C, L3_TM_CALIB_DIG15);
|
||||||
|
Xil_Out32(0xFD40EC38, L3_TM_CALIB_DIG14);
|
||||||
|
return maskstatus;
|
||||||
|
}
|
||||||
|
|
||||||
|
static int init_serdes(void)
|
||||||
|
{
|
||||||
|
int status = 1;
|
||||||
|
|
||||||
|
status &= psu_resetin_init_data();
|
||||||
|
|
||||||
|
status &= serdes_fixcal_code();
|
||||||
|
status &= serdes_enb_coarse_saturation();
|
||||||
|
|
||||||
|
status &= psu_serdes_init_data();
|
||||||
|
status &= psu_resetout_init_data();
|
||||||
|
|
||||||
|
return status;
|
||||||
|
}
|
||||||
|
|
||||||
|
static void init_peripheral(void)
|
||||||
|
{
|
||||||
|
psu_mask_write(0xFD5F0018, 0x8000001FU, 0x8000001FU);
|
||||||
|
}
|
||||||
|
|
||||||
|
int psu_init(void)
|
||||||
|
{
|
||||||
|
int status = 1;
|
||||||
|
|
||||||
|
status &= psu_mio_init_data();
|
||||||
|
status &= psu_peripherals_pre_init_data();
|
||||||
|
status &= psu_pll_init_data();
|
||||||
|
status &= psu_clock_init_data();
|
||||||
|
status &= psu_ddr_init_data();
|
||||||
|
status &= psu_ddr_phybringup_data();
|
||||||
|
status &= psu_peripherals_init_data();
|
||||||
|
status &= init_serdes();
|
||||||
|
init_peripheral();
|
||||||
|
|
||||||
|
status &= psu_afi_config();
|
||||||
|
psu_ddr_qos_init_data();
|
||||||
|
|
||||||
|
if (status == 0)
|
||||||
|
return 1;
|
||||||
|
return 0;
|
||||||
|
}
|
|
@ -358,6 +358,21 @@ static int multi_boot(void)
|
||||||
return multiboot;
|
return multiboot;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#if defined(CONFIG_SPL_BUILD)
|
||||||
|
static void restore_jtag(void)
|
||||||
|
{
|
||||||
|
if (current_el() != 3)
|
||||||
|
return;
|
||||||
|
|
||||||
|
writel(CSU_JTAG_SEC_GATE_DISABLE, &csu_base->jtag_sec);
|
||||||
|
writel(CSU_JTAG_DAP_ENABLE_DEBUG, &csu_base->jtag_dap_cfg);
|
||||||
|
writel(CSU_JTAG_CHAIN_WR_SETUP, &csu_base->jtag_chain_status_wr);
|
||||||
|
writel(CRLAPB_DBG_LPD_CTRL_SETUP_CLK, &crlapb_base->dbg_lpd_ctrl);
|
||||||
|
writel(CRLAPB_RST_LPD_DBG_RESET, &crlapb_base->rst_lpd_dbg);
|
||||||
|
writel(CSU_PCAP_PROG_RELEASE_PL, &csu_base->pcap_prog);
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
#define PS_SYSMON_ANALOG_BUS_VAL 0x3210
|
#define PS_SYSMON_ANALOG_BUS_VAL 0x3210
|
||||||
#define PS_SYSMON_ANALOG_BUS_REG 0xFFA50914
|
#define PS_SYSMON_ANALOG_BUS_REG 0xFFA50914
|
||||||
|
|
||||||
|
@ -377,6 +392,10 @@ int board_init(void)
|
||||||
zynqmp_pmufw_load_config_object(zynqmp_pm_cfg_obj,
|
zynqmp_pmufw_load_config_object(zynqmp_pm_cfg_obj,
|
||||||
zynqmp_pm_cfg_obj_size);
|
zynqmp_pm_cfg_obj_size);
|
||||||
printf("Silicon version:\t%d\n", zynqmp_get_silicon_version());
|
printf("Silicon version:\t%d\n", zynqmp_get_silicon_version());
|
||||||
|
|
||||||
|
/* the CSU disables the JTAG interface when secure boot is enabled */
|
||||||
|
if (CONFIG_IS_ENABLED(ZYNQMP_RESTORE_JTAG))
|
||||||
|
restore_jtag();
|
||||||
#else
|
#else
|
||||||
if (CONFIG_IS_ENABLED(DM_I2C) && CONFIG_IS_ENABLED(I2C_EEPROM))
|
if (CONFIG_IS_ENABLED(DM_I2C) && CONFIG_IS_ENABLED(I2C_EEPROM))
|
||||||
xilinx_read_eeprom();
|
xilinx_read_eeprom();
|
||||||
|
@ -477,7 +496,7 @@ ulong board_get_usable_ram_top(ulong total_size)
|
||||||
lmb_init(&lmb);
|
lmb_init(&lmb);
|
||||||
lmb_add(&lmb, gd->ram_base, gd->ram_size);
|
lmb_add(&lmb, gd->ram_base, gd->ram_size);
|
||||||
boot_fdt_add_mem_rsv_regions(&lmb, (void *)gd->fdt_blob);
|
boot_fdt_add_mem_rsv_regions(&lmb, (void *)gd->fdt_blob);
|
||||||
size = ALIGN(CONFIG_SYS_MALLOC_LEN + total_size, MMU_SECTION_SIZE),
|
size = ALIGN(CONFIG_SYS_MALLOC_LEN + total_size, MMU_SECTION_SIZE);
|
||||||
reg = lmb_alloc(&lmb, size, MMU_SECTION_SIZE);
|
reg = lmb_alloc(&lmb, size, MMU_SECTION_SIZE);
|
||||||
|
|
||||||
if (!reg)
|
if (!reg)
|
||||||
|
@ -621,7 +640,7 @@ int board_late_init(void)
|
||||||
const char *mode;
|
const char *mode;
|
||||||
char *new_targets;
|
char *new_targets;
|
||||||
char *env_targets;
|
char *env_targets;
|
||||||
int ret;
|
int ret, multiboot;
|
||||||
|
|
||||||
#if defined(CONFIG_USB_ETHER) && !defined(CONFIG_USB_GADGET_DOWNLOAD)
|
#if defined(CONFIG_USB_ETHER) && !defined(CONFIG_USB_GADGET_DOWNLOAD)
|
||||||
usb_ether_init();
|
usb_ether_init();
|
||||||
|
@ -639,6 +658,10 @@ int board_late_init(void)
|
||||||
if (ret)
|
if (ret)
|
||||||
return ret;
|
return ret;
|
||||||
|
|
||||||
|
multiboot = multi_boot();
|
||||||
|
if (multiboot >= 0)
|
||||||
|
env_set_hex("multiboot", multiboot);
|
||||||
|
|
||||||
bootmode = zynqmp_get_bootmode();
|
bootmode = zynqmp_get_bootmode();
|
||||||
|
|
||||||
puts("Bootmode: ");
|
puts("Bootmode: ");
|
||||||
|
@ -691,7 +714,7 @@ int board_late_init(void)
|
||||||
break;
|
break;
|
||||||
case SD1_LSHFT_MODE:
|
case SD1_LSHFT_MODE:
|
||||||
puts("LVL_SHFT_");
|
puts("LVL_SHFT_");
|
||||||
/* fall through */
|
fallthrough;
|
||||||
case SD_MODE1:
|
case SD_MODE1:
|
||||||
puts("SD_MODE1\n");
|
puts("SD_MODE1\n");
|
||||||
if (uclass_get_device_by_name(UCLASS_MMC,
|
if (uclass_get_device_by_name(UCLASS_MMC,
|
||||||
|
@ -845,6 +868,10 @@ void set_dfu_alt_info(char *interface, char *devstr)
|
||||||
memset(buf, 0, sizeof(buf));
|
memset(buf, 0, sizeof(buf));
|
||||||
|
|
||||||
multiboot = multi_boot();
|
multiboot = multi_boot();
|
||||||
|
if (multiboot < 0)
|
||||||
|
multiboot = 0;
|
||||||
|
|
||||||
|
multiboot = env_get_hex("multiboot", multiboot);
|
||||||
debug("Multiboot: %d\n", multiboot);
|
debug("Multiboot: %d\n", multiboot);
|
||||||
|
|
||||||
switch (zynqmp_get_bootmode()) {
|
switch (zynqmp_get_bootmode()) {
|
||||||
|
@ -856,20 +883,23 @@ void set_dfu_alt_info(char *interface, char *devstr)
|
||||||
if (!multiboot)
|
if (!multiboot)
|
||||||
snprintf(buf, DFU_ALT_BUF_LEN,
|
snprintf(buf, DFU_ALT_BUF_LEN,
|
||||||
"mmc %d:1=boot.bin fat %d 1;"
|
"mmc %d:1=boot.bin fat %d 1;"
|
||||||
"u-boot.itb fat %d 1",
|
"%s fat %d 1",
|
||||||
bootseq, bootseq, bootseq);
|
bootseq, bootseq,
|
||||||
|
CONFIG_SPL_FS_LOAD_PAYLOAD_NAME, bootseq);
|
||||||
else
|
else
|
||||||
snprintf(buf, DFU_ALT_BUF_LEN,
|
snprintf(buf, DFU_ALT_BUF_LEN,
|
||||||
"mmc %d:1=boot%04d.bin fat %d 1;"
|
"mmc %d:1=boot%04d.bin fat %d 1;"
|
||||||
"u-boot.itb fat %d 1",
|
"%s fat %d 1",
|
||||||
bootseq, multiboot, bootseq, bootseq);
|
bootseq, multiboot, bootseq,
|
||||||
|
CONFIG_SPL_FS_LOAD_PAYLOAD_NAME, bootseq);
|
||||||
break;
|
break;
|
||||||
case QSPI_MODE_24BIT:
|
case QSPI_MODE_24BIT:
|
||||||
case QSPI_MODE_32BIT:
|
case QSPI_MODE_32BIT:
|
||||||
snprintf(buf, DFU_ALT_BUF_LEN,
|
snprintf(buf, DFU_ALT_BUF_LEN,
|
||||||
"sf 0:0=boot.bin raw %x 0x1500000;"
|
"sf 0:0=boot.bin raw %x 0x1500000;"
|
||||||
"u-boot.itb raw 0x%x 0x500000",
|
"%s raw 0x%x 0x500000",
|
||||||
multiboot * SZ_32K, CONFIG_SYS_SPI_U_BOOT_OFFS);
|
multiboot * SZ_32K, CONFIG_SPL_FS_LOAD_PAYLOAD_NAME,
|
||||||
|
CONFIG_SYS_SPI_U_BOOT_OFFS);
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
return;
|
return;
|
||||||
|
|
|
@ -14,6 +14,7 @@
|
||||||
#include <env.h>
|
#include <env.h>
|
||||||
#include <fpga.h>
|
#include <fpga.h>
|
||||||
#include <image.h>
|
#include <image.h>
|
||||||
|
#include <init.h>
|
||||||
#include <mapmem.h>
|
#include <mapmem.h>
|
||||||
#include <rtc.h>
|
#include <rtc.h>
|
||||||
#include <watchdog.h>
|
#include <watchdog.h>
|
||||||
|
|
|
@ -9,6 +9,7 @@
|
||||||
#ifndef USE_HOSTCC
|
#ifndef USE_HOSTCC
|
||||||
#include <common.h>
|
#include <common.h>
|
||||||
#include <env.h>
|
#include <env.h>
|
||||||
|
#include <init.h>
|
||||||
#include <lmb.h>
|
#include <lmb.h>
|
||||||
#include <log.h>
|
#include <log.h>
|
||||||
#include <malloc.h>
|
#include <malloc.h>
|
||||||
|
@ -29,11 +30,6 @@
|
||||||
#include <linux/errno.h>
|
#include <linux/errno.h>
|
||||||
#include <asm/io.h>
|
#include <asm/io.h>
|
||||||
|
|
||||||
#ifdef CONFIG_CMD_BDI
|
|
||||||
extern int do_bdinfo(struct cmd_tbl *cmdtp, int flag, int argc,
|
|
||||||
char *const argv[]);
|
|
||||||
#endif
|
|
||||||
|
|
||||||
DECLARE_GLOBAL_DATA_PTR;
|
DECLARE_GLOBAL_DATA_PTR;
|
||||||
|
|
||||||
/* Set this if we have less than 4 MB of malloc() space */
|
/* Set this if we have less than 4 MB of malloc() space */
|
||||||
|
|
17
cmd/tpm-v1.c
17
cmd/tpm-v1.c
|
@ -406,9 +406,9 @@ static int do_tpm_load_key_by_sha1(struct cmd_tbl *cmdtp, int flag, int argc,
|
||||||
void *key;
|
void *key;
|
||||||
struct udevice *dev;
|
struct udevice *dev;
|
||||||
|
|
||||||
rc = get_tpm(&dev);
|
err = get_tpm(&dev);
|
||||||
if (rc)
|
if (err)
|
||||||
return rc;
|
return err;
|
||||||
|
|
||||||
if (argc < 5)
|
if (argc < 5)
|
||||||
return CMD_RET_USAGE;
|
return CMD_RET_USAGE;
|
||||||
|
@ -420,7 +420,7 @@ static int do_tpm_load_key_by_sha1(struct cmd_tbl *cmdtp, int flag, int argc,
|
||||||
return CMD_RET_FAILURE;
|
return CMD_RET_FAILURE;
|
||||||
parse_byte_string(argv[4], usage_auth, NULL);
|
parse_byte_string(argv[4], usage_auth, NULL);
|
||||||
|
|
||||||
err = tpm_find_key_sha1(usage_auth, parent_hash, &parent_handle);
|
err = tpm1_find_key_sha1(dev, usage_auth, parent_hash, &parent_handle);
|
||||||
if (err) {
|
if (err) {
|
||||||
printf("Could not find matching parent key (err = %d)\n", err);
|
printf("Could not find matching parent key (err = %d)\n", err);
|
||||||
return CMD_RET_FAILURE;
|
return CMD_RET_FAILURE;
|
||||||
|
@ -428,7 +428,7 @@ static int do_tpm_load_key_by_sha1(struct cmd_tbl *cmdtp, int flag, int argc,
|
||||||
|
|
||||||
printf("Found parent key %08x\n", parent_handle);
|
printf("Found parent key %08x\n", parent_handle);
|
||||||
|
|
||||||
err = tpm_load_key2_oiap(parent_handle, key, key_len, usage_auth,
|
err = tpm1_load_key2_oiap(dev, parent_handle, key, key_len, usage_auth,
|
||||||
&key_handle);
|
&key_handle);
|
||||||
if (!err) {
|
if (!err) {
|
||||||
printf("Key handle is 0x%x\n", key_handle);
|
printf("Key handle is 0x%x\n", key_handle);
|
||||||
|
@ -582,6 +582,7 @@ static int do_tpm_flush(struct cmd_tbl *cmdtp, int flag, int argc,
|
||||||
static int do_tpm_list(struct cmd_tbl *cmdtp, int flag, int argc,
|
static int do_tpm_list(struct cmd_tbl *cmdtp, int flag, int argc,
|
||||||
char *const argv[])
|
char *const argv[])
|
||||||
{
|
{
|
||||||
|
struct udevice *dev;
|
||||||
int type = 0;
|
int type = 0;
|
||||||
u16 res_count;
|
u16 res_count;
|
||||||
u8 buf[288];
|
u8 buf[288];
|
||||||
|
@ -589,6 +590,10 @@ static int do_tpm_list(struct cmd_tbl *cmdtp, int flag, int argc,
|
||||||
int err;
|
int err;
|
||||||
uint i;
|
uint i;
|
||||||
|
|
||||||
|
err = get_tpm(&dev);
|
||||||
|
if (err)
|
||||||
|
return err;
|
||||||
|
|
||||||
if (argc != 2)
|
if (argc != 2)
|
||||||
return CMD_RET_USAGE;
|
return CMD_RET_USAGE;
|
||||||
|
|
||||||
|
@ -619,7 +624,7 @@ static int do_tpm_list(struct cmd_tbl *cmdtp, int flag, int argc,
|
||||||
}
|
}
|
||||||
|
|
||||||
/* fetch list of already loaded resources in the TPM */
|
/* fetch list of already loaded resources in the TPM */
|
||||||
err = tpm_get_capability(TPM_CAP_HANDLE, type, buf,
|
err = tpm_get_capability(dev, TPM_CAP_HANDLE, type, buf,
|
||||||
sizeof(buf));
|
sizeof(buf));
|
||||||
if (err) {
|
if (err) {
|
||||||
printf("tpm_get_capability returned error %d.\n", err);
|
printf("tpm_get_capability returned error %d.\n", err);
|
||||||
|
|
|
@ -673,30 +673,32 @@ static int reloc_bloblist(void)
|
||||||
|
|
||||||
static int setup_reloc(void)
|
static int setup_reloc(void)
|
||||||
{
|
{
|
||||||
if (gd->flags & GD_FLG_SKIP_RELOC) {
|
if (!(gd->flags & GD_FLG_SKIP_RELOC)) {
|
||||||
debug("Skipping relocation due to flag\n");
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
#ifdef CONFIG_SYS_TEXT_BASE
|
#ifdef CONFIG_SYS_TEXT_BASE
|
||||||
#ifdef ARM
|
#ifdef ARM
|
||||||
gd->reloc_off = gd->relocaddr - (unsigned long)__image_copy_start;
|
gd->reloc_off = gd->relocaddr - (unsigned long)__image_copy_start;
|
||||||
#elif defined(CONFIG_M68K)
|
#elif defined(CONFIG_M68K)
|
||||||
/*
|
/*
|
||||||
* On all ColdFire arch cpu, monitor code starts always
|
* On all ColdFire arch cpu, monitor code starts always
|
||||||
* just after the default vector table location, so at 0x400
|
* just after the default vector table location, so at 0x400
|
||||||
*/
|
*/
|
||||||
gd->reloc_off = gd->relocaddr - (CONFIG_SYS_TEXT_BASE + 0x400);
|
gd->reloc_off = gd->relocaddr - (CONFIG_SYS_TEXT_BASE + 0x400);
|
||||||
#elif !defined(CONFIG_SANDBOX)
|
#elif !defined(CONFIG_SANDBOX)
|
||||||
gd->reloc_off = gd->relocaddr - CONFIG_SYS_TEXT_BASE;
|
gd->reloc_off = gd->relocaddr - CONFIG_SYS_TEXT_BASE;
|
||||||
#endif
|
#endif
|
||||||
#endif
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
memcpy(gd->new_gd, (char *)gd, sizeof(gd_t));
|
memcpy(gd->new_gd, (char *)gd, sizeof(gd_t));
|
||||||
|
|
||||||
debug("Relocation Offset is: %08lx\n", gd->reloc_off);
|
if (gd->flags & GD_FLG_SKIP_RELOC) {
|
||||||
debug("Relocating to %08lx, new gd at %08lx, sp at %08lx\n",
|
debug("Skipping relocation due to flag\n");
|
||||||
gd->relocaddr, (ulong)map_to_sysmem(gd->new_gd),
|
} else {
|
||||||
gd->start_addr_sp);
|
debug("Relocation Offset is: %08lx\n", gd->reloc_off);
|
||||||
|
debug("Relocating to %08lx, new gd at %08lx, sp at %08lx\n",
|
||||||
|
gd->relocaddr, (ulong)map_to_sysmem(gd->new_gd),
|
||||||
|
gd->start_addr_sp);
|
||||||
|
}
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
|
@ -81,7 +81,7 @@ CONFIG_CMD_MTDPARTS_SHOW_NET_SIZES=y
|
||||||
CONFIG_CMD_UBI=y
|
CONFIG_CMD_UBI=y
|
||||||
CONFIG_PARTITION_TYPE_GUID=y
|
CONFIG_PARTITION_TYPE_GUID=y
|
||||||
CONFIG_SPL_OF_CONTROL=y
|
CONFIG_SPL_OF_CONTROL=y
|
||||||
CONFIG_OF_LIST="avnet-ultra96-rev1 zynqmp-a2197-revA zynqmp-e-a2197-00-revA zynqmp-g-a2197-00-revA zynqmp-m-a2197-01-revA zynqmp-m-a2197-02-revA zynqmp-m-a2197-03-revA zynqmp-p-a2197-00-revA zynqmp-zc1232-revA zynqmp-zc1254-revA zynqmp-zc1751-xm015-dc1 zynqmp-zc1751-xm016-dc2 zynqmp-zc1751-xm017-dc3 zynqmp-zc1751-xm018-dc4 zynqmp-zc1751-xm019-dc5 zynqmp-zcu100-revC zynqmp-zcu102-rev1.1 zynqmp-zcu102-rev1.0 zynqmp-zcu102-revA zynqmp-zcu102-revB zynqmp-zcu104-revA zynqmp-zcu104-revC zynqmp-zcu106-revA zynqmp-zcu111-revA zynqmp-zcu1275-revA zynqmp-zcu1275-revB zynqmp-zcu1285-revA zynqmp-zcu208-revA zynqmp-zcu216-revA zynqmp-topic-miamimp-xilinx-xdp-v1r1 zynqmp-sm-k26-revA zynqmp-smk-k26-revA"
|
CONFIG_OF_LIST="avnet-ultra96-rev1 zynqmp-a2197-revA zynqmp-e-a2197-00-revA zynqmp-g-a2197-00-revA zynqmp-m-a2197-01-revA zynqmp-m-a2197-02-revA zynqmp-m-a2197-03-revA zynqmp-p-a2197-00-revA zynqmp-zc1232-revA zynqmp-zc1254-revA zynqmp-zc1751-xm015-dc1 zynqmp-zc1751-xm016-dc2 zynqmp-zc1751-xm017-dc3 zynqmp-zc1751-xm018-dc4 zynqmp-zc1751-xm019-dc5 zynqmp-zcu100-revC zynqmp-zcu102-rev1.1 zynqmp-zcu102-rev1.0 zynqmp-zcu102-revA zynqmp-zcu102-revB zynqmp-zcu104-revA zynqmp-zcu104-revC zynqmp-zcu106-revA zynqmp-zcu111-revA zynqmp-zcu1275-revA zynqmp-zcu1275-revB zynqmp-zcu1285-revA zynqmp-zcu208-revA zynqmp-zcu216-revA zynqmp-topic-miamimp-xilinx-xdp-v1r1 zynqmp-sm-k26-revA zynqmp-smk-k26-revA zynqmp-dlc21-revA"
|
||||||
CONFIG_OF_SPL_REMOVE_PROPS="pinctrl-0 pinctrl-names interrupt-parent interrupts iommus power-domains"
|
CONFIG_OF_SPL_REMOVE_PROPS="pinctrl-0 pinctrl-names interrupt-parent interrupts iommus power-domains"
|
||||||
CONFIG_ENV_IS_NOWHERE=y
|
CONFIG_ENV_IS_NOWHERE=y
|
||||||
CONFIG_ENV_IS_IN_FAT=y
|
CONFIG_ENV_IS_IN_FAT=y
|
||||||
|
|
|
@ -668,6 +668,13 @@ int part_get_info_by_name_type(struct blk_desc *dev_desc, const char *name,
|
||||||
part_drv = part_driver_lookup_type(dev_desc);
|
part_drv = part_driver_lookup_type(dev_desc);
|
||||||
if (!part_drv)
|
if (!part_drv)
|
||||||
return -1;
|
return -1;
|
||||||
|
|
||||||
|
if (!part_drv->get_info) {
|
||||||
|
log_debug("## Driver %s does not have the get_info() method\n",
|
||||||
|
part_drv->name);
|
||||||
|
return -ENOSYS;
|
||||||
|
}
|
||||||
|
|
||||||
for (i = 1; i < part_drv->max_entries; i++) {
|
for (i = 1; i < part_drv->max_entries; i++) {
|
||||||
ret = part_drv->get_info(dev_desc, i, info);
|
ret = part_drv->get_info(dev_desc, i, info);
|
||||||
if (ret != 0) {
|
if (ret != 0) {
|
||||||
|
|
|
@ -18,8 +18,8 @@ How it works:
|
||||||
-------------
|
-------------
|
||||||
|
|
||||||
The USB (at least the USB UHCI) needs a frame list (4k), transfer
|
The USB (at least the USB UHCI) needs a frame list (4k), transfer
|
||||||
descripor and queue headers which are all located in the main memory.
|
descriptor and queue headers which are all located in the main memory.
|
||||||
The UHCI allocates every milisecond the PCI bus and reads the current
|
The UHCI allocates every millisecond the PCI bus and reads the current
|
||||||
frame pointer. This may cause to crash the OS during boot. So the USB
|
frame pointer. This may cause to crash the OS during boot. So the USB
|
||||||
_MUST_ be stopped during OS boot. This is the reason, why the USB is
|
_MUST_ be stopped during OS boot. This is the reason, why the USB is
|
||||||
NOT automatically started during start-up. If someone needs the USB
|
NOT automatically started during start-up. If someone needs the USB
|
||||||
|
@ -27,10 +27,10 @@ he has to start it and should therefore be aware that he had to stop
|
||||||
it before booting the OS.
|
it before booting the OS.
|
||||||
|
|
||||||
For USB keyboards this can be done by a script which is automatically
|
For USB keyboards this can be done by a script which is automatically
|
||||||
started after the U-Boot is up and running. To boot an OS with a an
|
started after the U-Boot is up and running. To boot an OS with a
|
||||||
USB keyboard another script is necessary, which first disables the
|
USB keyboard another script is necessary, which first disables the
|
||||||
USB and then executes the boot command. If the boot command fails,
|
USB and then executes the boot command. If the boot command fails,
|
||||||
the script can reenable the USB kbd.
|
the script can re-enable the USB keyboard.
|
||||||
|
|
||||||
Common USB Commands:
|
Common USB Commands:
|
||||||
- usb start:
|
- usb start:
|
||||||
|
@ -40,10 +40,10 @@ Common USB Commands:
|
||||||
- usb info [dev]: shows all USB infos of the device dev, or of all
|
- usb info [dev]: shows all USB infos of the device dev, or of all
|
||||||
the devices
|
the devices
|
||||||
- usb stop [f]: stops the USB. If f==1 the USB will also stop if
|
- usb stop [f]: stops the USB. If f==1 the USB will also stop if
|
||||||
an USB keyboard is assigned as stdin. The stdin
|
a USB keyboard is assigned as stdin. The stdin
|
||||||
is then switched to serial input.
|
is then switched to serial input.
|
||||||
Storage USB Commands:
|
Storage USB Commands:
|
||||||
- usb scan: scans the USB for storage devices.The USB must be
|
- usb scan: scans the USB for storage devices. The USB must be
|
||||||
running for this command (usb start)
|
running for this command (usb start)
|
||||||
- usb device [dev]: show or set current USB storage device
|
- usb device [dev]: show or set current USB storage device
|
||||||
- usb part [dev]: print partition table of one or all USB storage
|
- usb part [dev]: print partition table of one or all USB storage
|
||||||
|
@ -57,7 +57,7 @@ Storage USB Commands:
|
||||||
Config Switches:
|
Config Switches:
|
||||||
----------------
|
----------------
|
||||||
CONFIG_CMD_USB enables basic USB support and the usb command
|
CONFIG_CMD_USB enables basic USB support and the usb command
|
||||||
CONFIG_USB_UHCI defines the lowlevel part.A lowlevel part must be defined
|
CONFIG_USB_UHCI defines the lowlevel part. A lowlevel part must be defined
|
||||||
if using CONFIG_CMD_USB
|
if using CONFIG_CMD_USB
|
||||||
CONFIG_USB_KEYBOARD enables the USB Keyboard
|
CONFIG_USB_KEYBOARD enables the USB Keyboard
|
||||||
CONFIG_USB_STORAGE enables the USB storage devices
|
CONFIG_USB_STORAGE enables the USB storage devices
|
||||||
|
@ -124,7 +124,7 @@ bootp
|
||||||
|
|
||||||
To enable USB Host Ethernet in U-Boot, your platform must of course
|
To enable USB Host Ethernet in U-Boot, your platform must of course
|
||||||
support USB with CONFIG_CMD_USB enabled and working. You will need to
|
support USB with CONFIG_CMD_USB enabled and working. You will need to
|
||||||
add some config settings to your board config:
|
add some settings to your board configuration:
|
||||||
|
|
||||||
CONFIG_CMD_USB=y /* the 'usb' interactive command */
|
CONFIG_CMD_USB=y /* the 'usb' interactive command */
|
||||||
CONFIG_USB_HOST_ETHER=y /* Enable USB Ethernet adapters */
|
CONFIG_USB_HOST_ETHER=y /* Enable USB Ethernet adapters */
|
||||||
|
@ -158,7 +158,7 @@ settings should start you off:
|
||||||
You can also set the default IP address of your board and the server
|
You can also set the default IP address of your board and the server
|
||||||
as well as the default file to load when a 'bootp' command is issued.
|
as well as the default file to load when a 'bootp' command is issued.
|
||||||
However note that encoding these individual network settings into a
|
However note that encoding these individual network settings into a
|
||||||
common exectuable is discouraged, as it leads to potential conflicts,
|
common executable is discouraged, as it leads to potential conflicts,
|
||||||
and all the parameters can either get stored in the board's external
|
and all the parameters can either get stored in the board's external
|
||||||
environment, or get obtained from the bootp server if not set.
|
environment, or get obtained from the bootp server if not set.
|
||||||
|
|
||||||
|
@ -166,7 +166,6 @@ environment, or get obtained from the bootp server if not set.
|
||||||
#define CONFIG_SERVERIP 10.0.0.1 (replace with your value)
|
#define CONFIG_SERVERIP 10.0.0.1 (replace with your value)
|
||||||
#define CONFIG_BOOTFILE "uImage"
|
#define CONFIG_BOOTFILE "uImage"
|
||||||
|
|
||||||
|
|
||||||
The 'usb start' command should identify the adapter something like this:
|
The 'usb start' command should identify the adapter something like this:
|
||||||
|
|
||||||
CrOS> usb start
|
CrOS> usb start
|
||||||
|
@ -211,8 +210,8 @@ MAC Addresses
|
||||||
|
|
||||||
Most Ethernet dongles have a built-in MAC address which is unique in the
|
Most Ethernet dongles have a built-in MAC address which is unique in the
|
||||||
world. This is important so that devices on the network can be
|
world. This is important so that devices on the network can be
|
||||||
distinguised from each other. MAC address conflicts are evil and
|
distinguished from each other. MAC address conflicts are evil and
|
||||||
generally result in strange and eratic behaviour.
|
generally result in strange and erratic behaviour.
|
||||||
|
|
||||||
Some boards have USB Ethernet chips on-board, and these sometimes do not
|
Some boards have USB Ethernet chips on-board, and these sometimes do not
|
||||||
have an assigned MAC address. In this case it is up to you to assign
|
have an assigned MAC address. In this case it is up to you to assign
|
||||||
|
|
|
@ -10,6 +10,7 @@ U-Boot API documentation
|
||||||
efi
|
efi
|
||||||
getopt
|
getopt
|
||||||
linker_lists
|
linker_lists
|
||||||
|
lmb
|
||||||
logging
|
logging
|
||||||
pinctrl
|
pinctrl
|
||||||
rng
|
rng
|
||||||
|
|
7
doc/api/lmb.rst
Normal file
7
doc/api/lmb.rst
Normal file
|
@ -0,0 +1,7 @@
|
||||||
|
.. SPDX-License-Identifier: GPL-2.0+
|
||||||
|
|
||||||
|
Logical memory blocks
|
||||||
|
=====================
|
||||||
|
|
||||||
|
.. kernel-doc:: include/lmb.h
|
||||||
|
:internal:
|
|
@ -49,7 +49,7 @@ OP-TEE:
|
||||||
|
|
||||||
.. code-block:: text
|
.. code-block:: text
|
||||||
|
|
||||||
$ make PLATFORM=k3-am65x CFG_ARM64_core=y CFG_TEE_CORE_LOG_LEVEL=2 CFG_CONSOLE_UART=1
|
$ make PLATFORM=k3-am65x CFG_ARM64_core=y CFG_TEE_CORE_LOG_LEVEL=2 CFG_CONSOLE_UART=1 CFG_USER_TA_TARGETS="ta_arm64"
|
||||||
|
|
||||||
U-Boot:
|
U-Boot:
|
||||||
|
|
||||||
|
|
|
@ -4,7 +4,7 @@
|
||||||
Tracing in U-Boot
|
Tracing in U-Boot
|
||||||
=================
|
=================
|
||||||
|
|
||||||
U-Boot supports a simple tracing feature which allows a record of excecution
|
U-Boot supports a simple tracing feature which allows a record of execution
|
||||||
to be collected and sent to a host machine for analysis. At present the
|
to be collected and sent to a host machine for analysis. At present the
|
||||||
main use for this is to profile boot time.
|
main use for this is to profile boot time.
|
||||||
|
|
||||||
|
@ -161,10 +161,10 @@ limit of the trace buffer size you have specified. Once that is exhausted
|
||||||
no more data will be collected.
|
no more data will be collected.
|
||||||
|
|
||||||
Collecting trace data has an affect on execution time/performance. You
|
Collecting trace data has an affect on execution time/performance. You
|
||||||
will notice this particularly with trvial functions - the overhead of
|
will notice this particularly with trivial functions - the overhead of
|
||||||
recording their execution may even exceed their normal execution time.
|
recording their execution may even exceed their normal execution time.
|
||||||
In practice this doesn't matter much so long as you are aware of the
|
In practice this doesn't matter much so long as you are aware of the
|
||||||
effect. Once you have done your optimisations, turn off tracing before
|
effect. Once you have done your optimizations, turn off tracing before
|
||||||
doing end-to-end timing.
|
doing end-to-end timing.
|
||||||
|
|
||||||
The best time to start tracing is right at the beginning of U-Boot. The
|
The best time to start tracing is right at the beginning of U-Boot. The
|
||||||
|
@ -184,7 +184,7 @@ the OS. In practical terms, U-Boot runs the 'fakegocmd' environment
|
||||||
variable at this point. This variable should have a short script which
|
variable at this point. This variable should have a short script which
|
||||||
collects the trace data and writes it somewhere.
|
collects the trace data and writes it somewhere.
|
||||||
|
|
||||||
Trace data collection relies on a microsecond timer, accesed through
|
Trace data collection relies on a microsecond timer, accessed through
|
||||||
timer_get_us(). So the first think you should do is make sure that
|
timer_get_us(). So the first think you should do is make sure that
|
||||||
this produces sensible results for your board. Suitable sources for
|
this produces sensible results for your board. Suitable sources for
|
||||||
this timer include high resolution timers, PWMs or profile timers if
|
this timer include high resolution timers, PWMs or profile timers if
|
||||||
|
@ -285,7 +285,7 @@ Options
|
||||||
Specify U-Boot map file
|
Specify U-Boot map file
|
||||||
|
|
||||||
-p <trace_file>
|
-p <trace_file>
|
||||||
Specifiy profile/trace file
|
Specify profile/trace file
|
||||||
|
|
||||||
Commands:
|
Commands:
|
||||||
|
|
||||||
|
@ -315,11 +315,11 @@ time:
|
||||||
2. Build U-Boot with tracing and run it. Note the difference in boot time
|
2. Build U-Boot with tracing and run it. Note the difference in boot time
|
||||||
(it is common for tracing to add 10% to the time)
|
(it is common for tracing to add 10% to the time)
|
||||||
|
|
||||||
3. Collect the trace information as descibed above. Use this to find where
|
3. Collect the trace information as described above. Use this to find where
|
||||||
all the time is being spent.
|
all the time is being spent.
|
||||||
|
|
||||||
4. Take a look at that code and see if you can optimise it. Perhaps it is
|
4. Take a look at that code and see if you can optimize it. Perhaps it is
|
||||||
possible to speed up the initialisation of a device, or remove an unused
|
possible to speed up the initialization of a device, or remove an unused
|
||||||
feature.
|
feature.
|
||||||
|
|
||||||
5. Rebuild, run and collect again. Compare your results.
|
5. Rebuild, run and collect again. Compare your results.
|
||||||
|
|
|
@ -29,6 +29,10 @@ static int ipi_req(const u32 *req, size_t req_len, u32 *res, size_t res_maxlen)
|
||||||
{
|
{
|
||||||
struct zynqmp_ipi_msg msg;
|
struct zynqmp_ipi_msg msg;
|
||||||
int ret;
|
int ret;
|
||||||
|
u32 buffer[PAYLOAD_ARG_CNT];
|
||||||
|
|
||||||
|
if (!res)
|
||||||
|
res = buffer;
|
||||||
|
|
||||||
if (req_len > PMUFW_PAYLOAD_ARG_CNT ||
|
if (req_len > PMUFW_PAYLOAD_ARG_CNT ||
|
||||||
res_maxlen > PMUFW_PAYLOAD_ARG_CNT)
|
res_maxlen > PMUFW_PAYLOAD_ARG_CNT)
|
||||||
|
@ -164,6 +168,7 @@ int __maybe_unused xilinx_pm_request(u32 api_id, u32 arg0, u32 arg1, u32 arg2,
|
||||||
* firmware API is limited by the SMC call size
|
* firmware API is limited by the SMC call size
|
||||||
*/
|
*/
|
||||||
u32 regs[] = {api_id, arg0, arg1, arg2, arg3};
|
u32 regs[] = {api_id, arg0, arg1, arg2, arg3};
|
||||||
|
int ret;
|
||||||
|
|
||||||
if (api_id == PM_FPGA_LOAD) {
|
if (api_id == PM_FPGA_LOAD) {
|
||||||
/* Swap addr_hi/low because of incompatibility */
|
/* Swap addr_hi/low because of incompatibility */
|
||||||
|
@ -173,7 +178,10 @@ int __maybe_unused xilinx_pm_request(u32 api_id, u32 arg0, u32 arg1, u32 arg2,
|
||||||
regs[2] = temp;
|
regs[2] = temp;
|
||||||
}
|
}
|
||||||
|
|
||||||
ipi_req(regs, PAYLOAD_ARG_CNT, ret_payload, PAYLOAD_ARG_CNT);
|
ret = ipi_req(regs, PAYLOAD_ARG_CNT, ret_payload,
|
||||||
|
PAYLOAD_ARG_CNT);
|
||||||
|
if (ret)
|
||||||
|
return ret;
|
||||||
#else
|
#else
|
||||||
return -EPERM;
|
return -EPERM;
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -69,6 +69,12 @@ __weak int zynqmp_mmio_write(const u32 address, const u32 mask, const u32 value)
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
__weak int xilinx_pm_request(u32 api_id, u32 arg0, u32 arg1, u32 arg2,
|
||||||
|
u32 arg3, u32 *ret_payload)
|
||||||
|
{
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
#if defined(CONFIG_ARCH_ZYNQMP) || defined(CONFIG_ARCH_VERSAL)
|
#if defined(CONFIG_ARCH_ZYNQMP) || defined(CONFIG_ARCH_VERSAL)
|
||||||
/* Default settings for ZynqMP Clock Phases */
|
/* Default settings for ZynqMP Clock Phases */
|
||||||
static const u32 zynqmp_iclk_phases[] = {0, 63, 63, 0, 63, 0,
|
static const u32 zynqmp_iclk_phases[] = {0, 63, 63, 0, 63, 0,
|
||||||
|
|
|
@ -60,6 +60,7 @@
|
||||||
#define ZYNQ_GEM_NWCFG_SPEED100 0x00000001 /* 100 Mbps operation */
|
#define ZYNQ_GEM_NWCFG_SPEED100 0x00000001 /* 100 Mbps operation */
|
||||||
#define ZYNQ_GEM_NWCFG_SPEED1000 0x00000400 /* 1Gbps operation */
|
#define ZYNQ_GEM_NWCFG_SPEED1000 0x00000400 /* 1Gbps operation */
|
||||||
#define ZYNQ_GEM_NWCFG_FDEN 0x00000002 /* Full Duplex mode */
|
#define ZYNQ_GEM_NWCFG_FDEN 0x00000002 /* Full Duplex mode */
|
||||||
|
#define ZYNQ_GEM_NWCFG_NO_BRDC BIT(5) /* No broadcast */
|
||||||
#define ZYNQ_GEM_NWCFG_FSREM 0x00020000 /* FCS removal */
|
#define ZYNQ_GEM_NWCFG_FSREM 0x00020000 /* FCS removal */
|
||||||
#define ZYNQ_GEM_NWCFG_SGMII_ENBL 0x08000000 /* SGMII Enable */
|
#define ZYNQ_GEM_NWCFG_SGMII_ENBL 0x08000000 /* SGMII Enable */
|
||||||
#define ZYNQ_GEM_NWCFG_PCS_SEL 0x00000800 /* PCS select */
|
#define ZYNQ_GEM_NWCFG_PCS_SEL 0x00000800 /* PCS select */
|
||||||
|
@ -77,6 +78,7 @@
|
||||||
|
|
||||||
#define ZYNQ_GEM_NWCFG_INIT (ZYNQ_GEM_DBUS_WIDTH | \
|
#define ZYNQ_GEM_NWCFG_INIT (ZYNQ_GEM_DBUS_WIDTH | \
|
||||||
ZYNQ_GEM_NWCFG_FDEN | \
|
ZYNQ_GEM_NWCFG_FDEN | \
|
||||||
|
ZYNQ_GEM_NWCFG_NO_BRDC | \
|
||||||
ZYNQ_GEM_NWCFG_FSREM | \
|
ZYNQ_GEM_NWCFG_FSREM | \
|
||||||
ZYNQ_GEM_NWCFG_MDCCLKDIV)
|
ZYNQ_GEM_NWCFG_MDCCLKDIV)
|
||||||
|
|
||||||
|
|
|
@ -145,7 +145,7 @@ static const struct dm_gpio_ops meson_gx_gpio_ops = {
|
||||||
.direction_output = meson_gpio_direction_output,
|
.direction_output = meson_gpio_direction_output,
|
||||||
};
|
};
|
||||||
|
|
||||||
const struct driver meson_gx_gpio_driver = {
|
U_BOOT_DRIVER(meson_gx_gpio_driver) = {
|
||||||
.name = "meson-gx-gpio",
|
.name = "meson-gx-gpio",
|
||||||
.id = UCLASS_GPIO,
|
.id = UCLASS_GPIO,
|
||||||
.probe = meson_gpio_probe,
|
.probe = meson_gpio_probe,
|
||||||
|
|
|
@ -43,6 +43,6 @@ struct meson_gx_pmx_data {
|
||||||
}
|
}
|
||||||
|
|
||||||
extern const struct pinctrl_ops meson_gx_pinctrl_ops;
|
extern const struct pinctrl_ops meson_gx_pinctrl_ops;
|
||||||
extern const struct driver meson_gx_gpio_driver;
|
extern U_BOOT_DRIVER(meson_gx_gpio_driver);
|
||||||
|
|
||||||
#endif /* __PINCTRL_MESON_GX_H__ */
|
#endif /* __PINCTRL_MESON_GX_H__ */
|
||||||
|
|
|
@ -439,7 +439,7 @@ struct meson_pinctrl_data meson_gxbb_periphs_pinctrl_data = {
|
||||||
.num_groups = ARRAY_SIZE(meson_gxbb_periphs_groups),
|
.num_groups = ARRAY_SIZE(meson_gxbb_periphs_groups),
|
||||||
.num_funcs = ARRAY_SIZE(meson_gxbb_periphs_functions),
|
.num_funcs = ARRAY_SIZE(meson_gxbb_periphs_functions),
|
||||||
.num_banks = ARRAY_SIZE(meson_gxbb_periphs_banks),
|
.num_banks = ARRAY_SIZE(meson_gxbb_periphs_banks),
|
||||||
.gpio_driver = &meson_gx_gpio_driver,
|
.gpio_driver = DM_DRIVER_REF(meson_gx_gpio_driver),
|
||||||
};
|
};
|
||||||
|
|
||||||
struct meson_pinctrl_data meson_gxbb_aobus_pinctrl_data = {
|
struct meson_pinctrl_data meson_gxbb_aobus_pinctrl_data = {
|
||||||
|
@ -452,7 +452,7 @@ struct meson_pinctrl_data meson_gxbb_aobus_pinctrl_data = {
|
||||||
.num_groups = ARRAY_SIZE(meson_gxbb_aobus_groups),
|
.num_groups = ARRAY_SIZE(meson_gxbb_aobus_groups),
|
||||||
.num_funcs = ARRAY_SIZE(meson_gxbb_aobus_functions),
|
.num_funcs = ARRAY_SIZE(meson_gxbb_aobus_functions),
|
||||||
.num_banks = ARRAY_SIZE(meson_gxbb_aobus_banks),
|
.num_banks = ARRAY_SIZE(meson_gxbb_aobus_banks),
|
||||||
.gpio_driver = &meson_gx_gpio_driver,
|
.gpio_driver = DM_DRIVER_REF(meson_gx_gpio_driver),
|
||||||
};
|
};
|
||||||
|
|
||||||
static const struct udevice_id meson_gxbb_pinctrl_match[] = {
|
static const struct udevice_id meson_gxbb_pinctrl_match[] = {
|
||||||
|
|
|
@ -701,7 +701,7 @@ struct meson_pinctrl_data meson_gxl_periphs_pinctrl_data = {
|
||||||
.num_groups = ARRAY_SIZE(meson_gxl_periphs_groups),
|
.num_groups = ARRAY_SIZE(meson_gxl_periphs_groups),
|
||||||
.num_funcs = ARRAY_SIZE(meson_gxl_periphs_functions),
|
.num_funcs = ARRAY_SIZE(meson_gxl_periphs_functions),
|
||||||
.num_banks = ARRAY_SIZE(meson_gxl_periphs_banks),
|
.num_banks = ARRAY_SIZE(meson_gxl_periphs_banks),
|
||||||
.gpio_driver = &meson_gx_gpio_driver,
|
.gpio_driver = DM_DRIVER_REF(meson_gx_gpio_driver),
|
||||||
};
|
};
|
||||||
|
|
||||||
struct meson_pinctrl_data meson_gxl_aobus_pinctrl_data = {
|
struct meson_pinctrl_data meson_gxl_aobus_pinctrl_data = {
|
||||||
|
@ -714,7 +714,7 @@ struct meson_pinctrl_data meson_gxl_aobus_pinctrl_data = {
|
||||||
.num_groups = ARRAY_SIZE(meson_gxl_aobus_groups),
|
.num_groups = ARRAY_SIZE(meson_gxl_aobus_groups),
|
||||||
.num_funcs = ARRAY_SIZE(meson_gxl_aobus_functions),
|
.num_funcs = ARRAY_SIZE(meson_gxl_aobus_functions),
|
||||||
.num_banks = ARRAY_SIZE(meson_gxl_aobus_banks),
|
.num_banks = ARRAY_SIZE(meson_gxl_aobus_banks),
|
||||||
.gpio_driver = &meson_gx_gpio_driver,
|
.gpio_driver = DM_DRIVER_REF(meson_gx_gpio_driver),
|
||||||
};
|
};
|
||||||
|
|
||||||
static const struct udevice_id meson_gxl_pinctrl_match[] = {
|
static const struct udevice_id meson_gxl_pinctrl_match[] = {
|
||||||
|
|
|
@ -37,6 +37,7 @@
|
||||||
*/
|
*/
|
||||||
#define GQSPI_IXR_TXNFULL_MASK 0x00000004 /* QSPI TX FIFO Overflow */
|
#define GQSPI_IXR_TXNFULL_MASK 0x00000004 /* QSPI TX FIFO Overflow */
|
||||||
#define GQSPI_IXR_TXFULL_MASK 0x00000008 /* QSPI TX FIFO is full */
|
#define GQSPI_IXR_TXFULL_MASK 0x00000008 /* QSPI TX FIFO is full */
|
||||||
|
#define GQSPI_IXR_TXFIFOEMPTY_MASK 0x00000100 /* QSPI TX FIFO is Empty */
|
||||||
#define GQSPI_IXR_RXNEMTY_MASK 0x00000010 /* QSPI RX FIFO Not Empty */
|
#define GQSPI_IXR_RXNEMTY_MASK 0x00000010 /* QSPI RX FIFO Not Empty */
|
||||||
#define GQSPI_IXR_GFEMTY_MASK 0x00000080 /* QSPI Generic FIFO Empty */
|
#define GQSPI_IXR_GFEMTY_MASK 0x00000080 /* QSPI Generic FIFO Empty */
|
||||||
#define GQSPI_IXR_GFNFULL_MASK 0x00000200 /* QSPI GENFIFO not full */
|
#define GQSPI_IXR_GFNFULL_MASK 0x00000200 /* QSPI GENFIFO not full */
|
||||||
|
@ -279,9 +280,6 @@ static void zynqmp_qspi_chipselect(struct zynqmp_qspi_priv *priv, int is_on)
|
||||||
|
|
||||||
debug("GFIFO_CMD_CS: 0x%x\n", gqspi_fifo_reg);
|
debug("GFIFO_CMD_CS: 0x%x\n", gqspi_fifo_reg);
|
||||||
|
|
||||||
/* Dummy generic FIFO entry */
|
|
||||||
zynqmp_qspi_fill_gen_fifo(priv, 0);
|
|
||||||
|
|
||||||
zynqmp_qspi_fill_gen_fifo(priv, gqspi_fifo_reg);
|
zynqmp_qspi_fill_gen_fifo(priv, gqspi_fifo_reg);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -470,6 +468,13 @@ static int zynqmp_qspi_fill_tx_fifo(struct zynqmp_qspi_priv *priv, u32 size)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
ret = wait_for_bit_le32(®s->isr, GQSPI_IXR_TXFIFOEMPTY_MASK, 1,
|
||||||
|
GQSPI_TIMEOUT, 1);
|
||||||
|
if (ret) {
|
||||||
|
printf("%s: Timeout\n", __func__);
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
priv->tx_buf += len;
|
priv->tx_buf += len;
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
|
@ -52,7 +52,10 @@ static int tpm_atmel_twi_close(struct udevice *dev)
|
||||||
*/
|
*/
|
||||||
static int tpm_atmel_twi_get_desc(struct udevice *dev, char *buf, int size)
|
static int tpm_atmel_twi_get_desc(struct udevice *dev, char *buf, int size)
|
||||||
{
|
{
|
||||||
return 0;
|
if (size < 50)
|
||||||
|
return -ENOSPC;
|
||||||
|
|
||||||
|
return snprintf(buf, size, "Atmel AT97SC3204T I2C 1.2 TPM (%s)", dev->name);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -81,22 +84,15 @@ static int tpm_atmel_twi_xfer(struct udevice *dev,
|
||||||
print_buffer(0, (void *)sendbuf, 1, send_size, 0);
|
print_buffer(0, (void *)sendbuf, 1, send_size, 0);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if !CONFIG_IS_ENABLED(DM_I2C)
|
|
||||||
res = i2c_write(0x29, 0, 0, (uchar *)sendbuf, send_size);
|
|
||||||
#else
|
|
||||||
res = dm_i2c_write(dev, 0, sendbuf, send_size);
|
res = dm_i2c_write(dev, 0, sendbuf, send_size);
|
||||||
#endif
|
|
||||||
if (res) {
|
if (res) {
|
||||||
printf("i2c_write returned %d\n", res);
|
printf("i2c_write returned %d\n", res);
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
start = get_timer(0);
|
start = get_timer(0);
|
||||||
#if !CONFIG_IS_ENABLED(DM_I2C)
|
|
||||||
while ((res = i2c_read(0x29, 0, 0, recvbuf, 10)))
|
|
||||||
#else
|
|
||||||
while ((res = dm_i2c_read(dev, 0, recvbuf, 10)))
|
while ((res = dm_i2c_read(dev, 0, recvbuf, 10)))
|
||||||
#endif
|
|
||||||
{
|
{
|
||||||
/* TODO Use TIS_TIMEOUT from tpm_tis_infineon.h */
|
/* TODO Use TIS_TIMEOUT from tpm_tis_infineon.h */
|
||||||
if (get_timer(start) > ATMEL_TPM_TIMEOUT_MS) {
|
if (get_timer(start) > ATMEL_TPM_TIMEOUT_MS) {
|
||||||
|
@ -116,16 +112,11 @@ static int tpm_atmel_twi_xfer(struct udevice *dev,
|
||||||
return -1;
|
return -1;
|
||||||
} else {
|
} else {
|
||||||
*recv_len = hdr_recv_len;
|
*recv_len = hdr_recv_len;
|
||||||
#if !CONFIG_IS_ENABLED(DM_I2C)
|
|
||||||
res = i2c_read(0x29, 0, 0, recvbuf, *recv_len);
|
|
||||||
#else
|
|
||||||
res = dm_i2c_read(dev, 0, recvbuf, *recv_len);
|
res = dm_i2c_read(dev, 0, recvbuf, *recv_len);
|
||||||
#endif
|
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (res) {
|
if (res) {
|
||||||
printf("i2c_read returned %d (rlen=%d)\n", res, *recv_len);
|
printf("i2c_read returned %d (rlen=%zu)\n", res, *recv_len);
|
||||||
#ifdef DEBUG
|
#ifdef DEBUG
|
||||||
print_buffer(0, recvbuf, 1, *recv_len, 0);
|
print_buffer(0, recvbuf, 1, *recv_len, 0);
|
||||||
#endif
|
#endif
|
||||||
|
@ -143,6 +134,7 @@ static int tpm_atmel_twi_xfer(struct udevice *dev,
|
||||||
|
|
||||||
static int tpm_atmel_twi_probe(struct udevice *dev)
|
static int tpm_atmel_twi_probe(struct udevice *dev)
|
||||||
{
|
{
|
||||||
|
i2c_set_chip_offset_len(dev, 0);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -140,24 +140,27 @@
|
||||||
"echo Fastboot forced by usb rom boot;" \
|
"echo Fastboot forced by usb rom boot;" \
|
||||||
"setenv run_fastboot 1;" \
|
"setenv run_fastboot 1;" \
|
||||||
"fi;" \
|
"fi;" \
|
||||||
"if gpt verify mmc ${mmcdev} ${partitions}; then; " \
|
"if test \"${run_fastboot}\" -eq 0; then " \
|
||||||
"else " \
|
"if gpt verify mmc ${mmcdev} ${partitions}; then; " \
|
||||||
"echo Broken MMC partition scheme;" \
|
"else " \
|
||||||
"setenv run_fastboot 1;" \
|
"echo Broken MMC partition scheme;" \
|
||||||
"fi;" \
|
|
||||||
"if bcb load " __stringify(CONFIG_FASTBOOT_FLASH_MMC_DEV) " " \
|
|
||||||
CONTROL_PARTITION "; then " \
|
|
||||||
"if bcb test command = bootonce-bootloader; then " \
|
|
||||||
"echo BCB: Bootloader boot...; " \
|
|
||||||
"bcb clear command; bcb store; " \
|
|
||||||
"setenv run_fastboot 1;" \
|
"setenv run_fastboot 1;" \
|
||||||
"fi; " \
|
"fi; " \
|
||||||
"if bcb test command = boot-fastboot; then " \
|
"fi;" \
|
||||||
"echo BCB: fastboot userspace boot...; " \
|
"if test \"${run_fastboot}\" -eq 0; then " \
|
||||||
"setenv force_recovery 1;" \
|
"if bcb load " __stringify(CONFIG_FASTBOOT_FLASH_MMC_DEV) " " \
|
||||||
"fi; " \
|
CONTROL_PARTITION "; then " \
|
||||||
"else " \
|
"if bcb test command = bootonce-bootloader; then " \
|
||||||
"echo Warning: BCB is corrupted or does not exist; " \
|
"echo BCB: Bootloader boot...; " \
|
||||||
|
"bcb clear command; bcb store; " \
|
||||||
|
"setenv run_fastboot 1;" \
|
||||||
|
"elif bcb test command = boot-fastboot; then " \
|
||||||
|
"echo BCB: fastboot userspace boot...; " \
|
||||||
|
"setenv force_recovery 1;" \
|
||||||
|
"fi; " \
|
||||||
|
"else " \
|
||||||
|
"echo Warning: BCB is corrupted or does not exist; " \
|
||||||
|
"fi;" \
|
||||||
"fi;" \
|
"fi;" \
|
||||||
"if test \"${run_fastboot}\" -eq 1; then " \
|
"if test \"${run_fastboot}\" -eq 1; then " \
|
||||||
"echo Running Fastboot...;" \
|
"echo Running Fastboot...;" \
|
||||||
|
@ -230,16 +233,24 @@
|
||||||
"echo Running Android...;" \
|
"echo Running Android...;" \
|
||||||
BOOT_CMD \
|
BOOT_CMD \
|
||||||
"fi;" \
|
"fi;" \
|
||||||
"echo Failed to boot Android...;" \
|
"echo Failed to boot Android...;\0"
|
||||||
"reset\0"
|
|
||||||
|
|
||||||
#define BOOTENV_DEV_NAME_SYSTEM(devtypeu, devtypel, instance) \
|
#define BOOTENV_DEV_NAME_SYSTEM(devtypeu, devtypel, instance) \
|
||||||
"system "
|
"system "
|
||||||
|
|
||||||
|
#define BOOTENV_DEV_PANIC(devtypeu, devtypel, instance) \
|
||||||
|
"bootcmd_panic=" \
|
||||||
|
"fastboot " __stringify(CONFIG_FASTBOOT_USB_DEV) "; " \
|
||||||
|
"reset\0"
|
||||||
|
|
||||||
|
#define BOOTENV_DEV_NAME_PANIC(devtypeu, devtypel, instance) \
|
||||||
|
"panic "
|
||||||
|
|
||||||
#define BOOT_TARGET_DEVICES(func) \
|
#define BOOT_TARGET_DEVICES(func) \
|
||||||
func(FASTBOOT, fastboot, na) \
|
func(FASTBOOT, fastboot, na) \
|
||||||
func(RECOVERY, recovery, na) \
|
func(RECOVERY, recovery, na) \
|
||||||
func(SYSTEM, system, na) \
|
func(SYSTEM, system, na) \
|
||||||
|
func(PANIC, panic, na) \
|
||||||
|
|
||||||
#define PREBOOT_LOAD_LOGO \
|
#define PREBOOT_LOAD_LOGO \
|
||||||
"if test \"${boot_source}\" != \"usb\" && " \
|
"if test \"${boot_source}\" != \"usb\" && " \
|
||||||
|
|
|
@ -52,7 +52,7 @@
|
||||||
/* #define CONFIG_SYS_PCI_64BIT 1 */
|
/* #define CONFIG_SYS_PCI_64BIT 1 */
|
||||||
|
|
||||||
#define DEFAULT_DFU_ALT_INFO "dfu_alt_info=" \
|
#define DEFAULT_DFU_ALT_INFO "dfu_alt_info=" \
|
||||||
"mtd mx66u51235f=u-boot.bin raw 200000 100000;" \
|
"mtd nor1=u-boot.bin raw 200000 100000;" \
|
||||||
"fip.bin raw 180000 78000;" \
|
"fip.bin raw 180000 78000;" \
|
||||||
"optee.bin raw 500000 100000\0"
|
"optee.bin raw 500000 100000\0"
|
||||||
|
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
/*
|
/*
|
||||||
* Copyright (C) 2013, 2014, 2017 Markus Niebel <Markus.Niebel@tq-group.com>
|
* Copyright (C) 2013, 2014, 2017 Markus Niebel <Markus.Niebel@tq-group.com>
|
||||||
*
|
*
|
||||||
* Configuration settings for the TQ Systems TQMa6<Q,D,DL,S> module.
|
* Configuration settings for the TQ-Systems TQMa6<Q,D,DL,S> module.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#ifndef __CONFIG_H
|
#ifndef __CONFIG_H
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
/*
|
/*
|
||||||
* Copyright (C) 2013 - 2017 Markus Niebel <Markus.Niebel@tq-group.com>
|
* Copyright (C) 2013 - 2017 Markus Niebel <Markus.Niebel@tq-group.com>
|
||||||
*
|
*
|
||||||
* Configuration settings for the TQ Systems TQMa6<Q,D,DL,S> module on
|
* Configuration settings for the TQ-Systems TQMa6<Q,D,DL,S> module on
|
||||||
* MBa6 starter kit
|
* MBa6 starter kit
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|
|
@ -20,8 +20,8 @@
|
||||||
#include <charset.h>
|
#include <charset.h>
|
||||||
#include <pe.h>
|
#include <pe.h>
|
||||||
|
|
||||||
/* UEFI spec version 2.8 */
|
/* UEFI spec version 2.9 */
|
||||||
#define EFI_SPECIFICATION_VERSION (2 << 16 | 80)
|
#define EFI_SPECIFICATION_VERSION (2 << 16 | 90)
|
||||||
|
|
||||||
/* Types and defines for EFI CreateEvent */
|
/* Types and defines for EFI CreateEvent */
|
||||||
enum efi_timer_delay {
|
enum efi_timer_delay {
|
||||||
|
@ -360,10 +360,15 @@ struct efi_runtime_services {
|
||||||
};
|
};
|
||||||
|
|
||||||
/* EFI event group GUID definitions */
|
/* EFI event group GUID definitions */
|
||||||
|
|
||||||
#define EFI_EVENT_GROUP_EXIT_BOOT_SERVICES \
|
#define EFI_EVENT_GROUP_EXIT_BOOT_SERVICES \
|
||||||
EFI_GUID(0x27abf055, 0xb1b8, 0x4c26, 0x80, 0x48, \
|
EFI_GUID(0x27abf055, 0xb1b8, 0x4c26, 0x80, 0x48, \
|
||||||
0x74, 0x8f, 0x37, 0xba, 0xa2, 0xdf)
|
0x74, 0x8f, 0x37, 0xba, 0xa2, 0xdf)
|
||||||
|
|
||||||
|
#define EFI_EVENT_GROUP_BEFORE_EXIT_BOOT_SERVICES \
|
||||||
|
EFI_GUID(0x8be0e274, 0x3970, 0x4b44, 0x80, 0xc5, \
|
||||||
|
0x1a, 0xb9, 0x50, 0x2f, 0x3b, 0xfc)
|
||||||
|
|
||||||
#define EFI_EVENT_GROUP_VIRTUAL_ADDRESS_CHANGE \
|
#define EFI_EVENT_GROUP_VIRTUAL_ADDRESS_CHANGE \
|
||||||
EFI_GUID(0x13fa7698, 0xc831, 0x49c7, 0x87, 0xea, \
|
EFI_GUID(0x13fa7698, 0xc831, 0x49c7, 0x87, 0xea, \
|
||||||
0x8f, 0x43, 0xfc, 0xc2, 0x51, 0x96)
|
0x8f, 0x43, 0xfc, 0xc2, 0x51, 0x96)
|
||||||
|
@ -376,6 +381,10 @@ struct efi_runtime_services {
|
||||||
EFI_GUID(0x7ce88fb3, 0x4bd7, 0x4679, 0x87, 0xa8, \
|
EFI_GUID(0x7ce88fb3, 0x4bd7, 0x4679, 0x87, 0xa8, \
|
||||||
0xa8, 0xd8, 0xde, 0xe5, 0x0d, 0x2b)
|
0xa8, 0xd8, 0xde, 0xe5, 0x0d, 0x2b)
|
||||||
|
|
||||||
|
#define EFI_EVENT_GROUP_AFTER_READY_TO_BOOT \
|
||||||
|
EFI_GUID(0x3a2a00ad, 0x98b9, 0x4cdf, 0xa4, 0x78, \
|
||||||
|
0x70, 0x27, 0x77, 0xf1, 0xc1, 0xb)
|
||||||
|
|
||||||
#define EFI_EVENT_GROUP_RESET_SYSTEM \
|
#define EFI_EVENT_GROUP_RESET_SYSTEM \
|
||||||
EFI_GUID(0x62da6a56, 0x13fb, 0x485a, 0xa8, 0xda, \
|
EFI_GUID(0x62da6a56, 0x13fb, 0x485a, 0xa8, 0xda, \
|
||||||
0xa3, 0xdd, 0x79, 0x12, 0xcb, 0x6b)
|
0xa3, 0xdd, 0x79, 0x12, 0xcb, 0x6b)
|
||||||
|
@ -417,6 +426,15 @@ struct efi_runtime_services {
|
||||||
EFI_GUID(0x1e2ed096, 0x30e2, 0x4254, 0xbd, \
|
EFI_GUID(0x1e2ed096, 0x30e2, 0x4254, 0xbd, \
|
||||||
0x89, 0x86, 0x3b, 0xbe, 0xf8, 0x23, 0x25)
|
0x89, 0x86, 0x3b, 0xbe, 0xf8, 0x23, 0x25)
|
||||||
|
|
||||||
|
/**
|
||||||
|
* struct efi_configuration_table - EFI Configuration Table
|
||||||
|
*
|
||||||
|
* This table contains a set of GUID/pointer pairs.
|
||||||
|
* The EFI Configuration Table may contain at most one instance of each table type.
|
||||||
|
*
|
||||||
|
* @guid: GUID that uniquely identifies the system configuration table
|
||||||
|
* @table: A pointer to the table associated with guid
|
||||||
|
*/
|
||||||
struct efi_configuration_table {
|
struct efi_configuration_table {
|
||||||
efi_guid_t guid;
|
efi_guid_t guid;
|
||||||
void *table;
|
void *table;
|
||||||
|
@ -424,6 +442,29 @@ struct efi_configuration_table {
|
||||||
|
|
||||||
#define EFI_SYSTEM_TABLE_SIGNATURE ((u64)0x5453595320494249ULL)
|
#define EFI_SYSTEM_TABLE_SIGNATURE ((u64)0x5453595320494249ULL)
|
||||||
|
|
||||||
|
/**
|
||||||
|
* struct efi_system_table - EFI System Table
|
||||||
|
*
|
||||||
|
* EFI System Table contains pointers to the runtime and boot services tables.
|
||||||
|
*
|
||||||
|
* @hdr: The table header for the EFI System Table
|
||||||
|
* @fw_vendor: A pointer to a null terminated string that identifies the vendor
|
||||||
|
* that produces the system firmware
|
||||||
|
* @fw_revision: The revision of the system firmware
|
||||||
|
* @con_in_handle: The handle for the active console input device
|
||||||
|
* @con_in: A pointer to the EFI_SIMPLE_TEXT_INPUT_PROTOCOL interface
|
||||||
|
* that is associated with con_in_handle
|
||||||
|
* @con_out_handle: The handle for the active console output device
|
||||||
|
* @con_out: A pointer to the EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL interface
|
||||||
|
* that is associated with con_out_handle
|
||||||
|
* @stderr_handle: The handle for the active standard error console device
|
||||||
|
* @std_err: A pointer to the EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL interface
|
||||||
|
* that is associated with stderr_handle
|
||||||
|
* @runtime: A pointer to the EFI Runtime Services Table
|
||||||
|
* @boottime: A pointer to the EFI Boot Services Table
|
||||||
|
* @nr_tables: The number of system configuration tables
|
||||||
|
* @tables: A pointer to the system configuration tables
|
||||||
|
*/
|
||||||
struct efi_system_table {
|
struct efi_system_table {
|
||||||
struct efi_table_hdr hdr;
|
struct efi_table_hdr hdr;
|
||||||
u16 *fw_vendor; /* physical addr of wchar_t vendor string */
|
u16 *fw_vendor; /* physical addr of wchar_t vendor string */
|
||||||
|
@ -870,8 +911,8 @@ struct efi_hii_package_list_header {
|
||||||
* @fields: 'fields' replaces the bit-fields defined in the EFI
|
* @fields: 'fields' replaces the bit-fields defined in the EFI
|
||||||
* specification to to avoid possible compiler incompatibilities::
|
* specification to to avoid possible compiler incompatibilities::
|
||||||
*
|
*
|
||||||
* u32 length:24;
|
* u32 length:24;
|
||||||
* u32 type:8;
|
* u32 type:8;
|
||||||
*/
|
*/
|
||||||
struct efi_hii_package_header {
|
struct efi_hii_package_header {
|
||||||
u32 fields;
|
u32 fields;
|
||||||
|
@ -1809,7 +1850,7 @@ struct efi_system_resource_table {
|
||||||
0x34, 0x7d, 0x37, 0x56, 0x65, 0xa7)
|
0x34, 0x7d, 0x37, 0x56, 0x65, 0xa7)
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* win_certificate_uefi_guid - A certificate that encapsulates
|
* struct win_certificate_uefi_guid - A certificate that encapsulates
|
||||||
* a GUID-specific signature
|
* a GUID-specific signature
|
||||||
*
|
*
|
||||||
* @hdr: Windows certificate header
|
* @hdr: Windows certificate header
|
||||||
|
@ -1823,7 +1864,7 @@ struct win_certificate_uefi_guid {
|
||||||
} __attribute__((__packed__));
|
} __attribute__((__packed__));
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* efi_variable_authentication_2 - A time-based authentication method
|
* struct efi_variable_authentication_2 - A time-based authentication method
|
||||||
* descriptor
|
* descriptor
|
||||||
*
|
*
|
||||||
* This structure describes an authentication information for
|
* This structure describes an authentication information for
|
||||||
|
@ -1840,7 +1881,7 @@ struct efi_variable_authentication_2 {
|
||||||
} __attribute__((__packed__));
|
} __attribute__((__packed__));
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* efi_firmware_image_authentication - Capsule authentication method
|
* struct efi_firmware_image_authentication - Capsule authentication method
|
||||||
* descriptor
|
* descriptor
|
||||||
*
|
*
|
||||||
* This structure describes an authentication information for
|
* This structure describes an authentication information for
|
||||||
|
@ -1858,7 +1899,7 @@ struct efi_firmware_image_authentication {
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* efi_signature_data - A format of signature
|
* struct efi_signature_data - A format of signature
|
||||||
*
|
*
|
||||||
* This structure describes a single signature in signature database.
|
* This structure describes a single signature in signature database.
|
||||||
*
|
*
|
||||||
|
@ -1871,7 +1912,7 @@ struct efi_signature_data {
|
||||||
} __attribute__((__packed__));
|
} __attribute__((__packed__));
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* efi_signature_list - A format of signature database
|
* struct efi_signature_list - A format of signature database
|
||||||
*
|
*
|
||||||
* This structure describes a list of signatures with the same type.
|
* This structure describes a list of signatures with the same type.
|
||||||
* An authenticated variable's value is a concatenation of one or more
|
* An authenticated variable's value is a concatenation of one or more
|
||||||
|
|
|
@ -332,6 +332,8 @@ void bdinfo_print_mhz(const char *name, unsigned long hz);
|
||||||
/* Show arch-specific information for the 'bd' command */
|
/* Show arch-specific information for the 'bd' command */
|
||||||
void arch_print_bdinfo(void);
|
void arch_print_bdinfo(void);
|
||||||
|
|
||||||
|
int do_bdinfo(struct cmd_tbl *cmdtp, int flag, int argc, char *const argv[]);
|
||||||
|
|
||||||
#endif /* __ASSEMBLY__ */
|
#endif /* __ASSEMBLY__ */
|
||||||
/* Put only stuff here that the assembler can digest */
|
/* Put only stuff here that the assembler can digest */
|
||||||
|
|
||||||
|
|
|
@ -25,8 +25,9 @@ enum lmb_flags {
|
||||||
/**
|
/**
|
||||||
* struct lmb_property - Description of one region.
|
* struct lmb_property - Description of one region.
|
||||||
*
|
*
|
||||||
* @base: Base address of the region.
|
* @base: Base address of the region.
|
||||||
* @size: Size of the region
|
* @size: Size of the region
|
||||||
|
* @flags: memory region attributes
|
||||||
*/
|
*/
|
||||||
struct lmb_property {
|
struct lmb_property {
|
||||||
phys_addr_t base;
|
phys_addr_t base;
|
||||||
|
@ -73,64 +74,49 @@ struct lmb {
|
||||||
#endif
|
#endif
|
||||||
};
|
};
|
||||||
|
|
||||||
extern void lmb_init(struct lmb *lmb);
|
void lmb_init(struct lmb *lmb);
|
||||||
extern void lmb_init_and_reserve(struct lmb *lmb, struct bd_info *bd,
|
void lmb_init_and_reserve(struct lmb *lmb, struct bd_info *bd, void *fdt_blob);
|
||||||
void *fdt_blob);
|
void lmb_init_and_reserve_range(struct lmb *lmb, phys_addr_t base,
|
||||||
extern void lmb_init_and_reserve_range(struct lmb *lmb, phys_addr_t base,
|
phys_size_t size, void *fdt_blob);
|
||||||
phys_size_t size, void *fdt_blob);
|
long lmb_add(struct lmb *lmb, phys_addr_t base, phys_size_t size);
|
||||||
extern long lmb_add(struct lmb *lmb, phys_addr_t base, phys_size_t size);
|
long lmb_reserve(struct lmb *lmb, phys_addr_t base, phys_size_t size);
|
||||||
extern long lmb_reserve(struct lmb *lmb, phys_addr_t base, phys_size_t size);
|
|
||||||
/**
|
/**
|
||||||
* lmb_reserve_flags - Reserve one region with a specific flags bitfield.
|
* lmb_reserve_flags - Reserve one region with a specific flags bitfield.
|
||||||
*
|
*
|
||||||
* @lmb the logical memory block struct
|
* @lmb: the logical memory block struct
|
||||||
* @base base address of the memory region
|
* @base: base address of the memory region
|
||||||
* @size size of the memory region
|
* @size: size of the memory region
|
||||||
* @flags flags for the memory region
|
* @flags: flags for the memory region
|
||||||
* @return 0 if OK, > 0 for coalesced region or a negative error code.
|
* Return: 0 if OK, > 0 for coalesced region or a negative error code.
|
||||||
*/
|
*/
|
||||||
long lmb_reserve_flags(struct lmb *lmb, phys_addr_t base,
|
long lmb_reserve_flags(struct lmb *lmb, phys_addr_t base,
|
||||||
phys_size_t size, enum lmb_flags flags);
|
phys_size_t size, enum lmb_flags flags);
|
||||||
extern phys_addr_t lmb_alloc(struct lmb *lmb, phys_size_t size, ulong align);
|
phys_addr_t lmb_alloc(struct lmb *lmb, phys_size_t size, ulong align);
|
||||||
extern phys_addr_t lmb_alloc_base(struct lmb *lmb, phys_size_t size, ulong align,
|
phys_addr_t lmb_alloc_base(struct lmb *lmb, phys_size_t size, ulong align,
|
||||||
phys_addr_t max_addr);
|
phys_addr_t max_addr);
|
||||||
extern phys_addr_t __lmb_alloc_base(struct lmb *lmb, phys_size_t size, ulong align,
|
phys_addr_t __lmb_alloc_base(struct lmb *lmb, phys_size_t size, ulong align,
|
||||||
phys_addr_t max_addr);
|
phys_addr_t max_addr);
|
||||||
extern phys_addr_t lmb_alloc_addr(struct lmb *lmb, phys_addr_t base,
|
phys_addr_t lmb_alloc_addr(struct lmb *lmb, phys_addr_t base, phys_size_t size);
|
||||||
phys_size_t size);
|
phys_size_t lmb_get_free_size(struct lmb *lmb, phys_addr_t addr);
|
||||||
extern phys_size_t lmb_get_free_size(struct lmb *lmb, phys_addr_t addr);
|
int lmb_is_reserved(struct lmb *lmb, phys_addr_t addr);
|
||||||
extern int lmb_is_reserved(struct lmb *lmb, phys_addr_t addr);
|
|
||||||
/**
|
/**
|
||||||
* lmb_is_reserved_flags - test if tha address is in reserved region with a bitfield flag
|
* lmb_is_reserved_flags - test if tha address is in reserved region with a bitfield flag
|
||||||
*
|
*
|
||||||
* @lmb the logical memory block struct
|
* @lmb: the logical memory block struct
|
||||||
* @addr address to be tested
|
* @addr: address to be tested
|
||||||
* @flags flags bitfied to be tested
|
* @flags: flags bitfied to be tested
|
||||||
* @return 0 if not reserved or reserved without the requested flag else 1
|
* Return: if not reserved or reserved without the requested flag else 1
|
||||||
*/
|
*/
|
||||||
int lmb_is_reserved_flags(struct lmb *lmb, phys_addr_t addr, int flags);
|
int lmb_is_reserved_flags(struct lmb *lmb, phys_addr_t addr, int flags);
|
||||||
extern long lmb_free(struct lmb *lmb, phys_addr_t base, phys_size_t size);
|
long lmb_free(struct lmb *lmb, phys_addr_t base, phys_size_t size);
|
||||||
|
|
||||||
extern void lmb_dump_all(struct lmb *lmb);
|
void lmb_dump_all(struct lmb *lmb);
|
||||||
extern void lmb_dump_all_force(struct lmb *lmb);
|
void lmb_dump_all_force(struct lmb *lmb);
|
||||||
|
|
||||||
static inline phys_size_t
|
|
||||||
lmb_size_bytes(struct lmb_region *type, unsigned long region_nr)
|
|
||||||
{
|
|
||||||
return type->region[region_nr].size;
|
|
||||||
}
|
|
||||||
|
|
||||||
void board_lmb_reserve(struct lmb *lmb);
|
void board_lmb_reserve(struct lmb *lmb);
|
||||||
void arch_lmb_reserve(struct lmb *lmb);
|
void arch_lmb_reserve(struct lmb *lmb);
|
||||||
void arch_lmb_reserve_generic(struct lmb *lmb, ulong sp, ulong end, ulong align);
|
void arch_lmb_reserve_generic(struct lmb *lmb, ulong sp, ulong end, ulong align);
|
||||||
|
|
||||||
/* Low level functions */
|
|
||||||
|
|
||||||
static inline bool lmb_is_nomap(struct lmb_property *m)
|
|
||||||
{
|
|
||||||
return m->flags & LMB_NOMAP;
|
|
||||||
}
|
|
||||||
|
|
||||||
#endif /* __KERNEL__ */
|
#endif /* __KERNEL__ */
|
||||||
|
|
||||||
#endif /* _LINUX_LMB_H */
|
#endif /* _LINUX_LMB_H */
|
||||||
|
|
|
@ -793,7 +793,7 @@ config LMB
|
||||||
Support the library logical memory blocks.
|
Support the library logical memory blocks.
|
||||||
|
|
||||||
config LMB_USE_MAX_REGIONS
|
config LMB_USE_MAX_REGIONS
|
||||||
bool "Use a commun number of memory and reserved regions in lmb lib"
|
bool "Use a common number of memory and reserved regions in lmb lib"
|
||||||
depends on LMB
|
depends on LMB
|
||||||
default y
|
default y
|
||||||
help
|
help
|
||||||
|
|
|
@ -29,6 +29,9 @@ int main(void)
|
||||||
DEFINE(GD_SIZE, sizeof(struct global_data));
|
DEFINE(GD_SIZE, sizeof(struct global_data));
|
||||||
|
|
||||||
DEFINE(GD_BD, offsetof(struct global_data, bd));
|
DEFINE(GD_BD, offsetof(struct global_data, bd));
|
||||||
|
|
||||||
|
DEFINE(GD_FLAGS, offsetof(struct global_data, flags));
|
||||||
|
|
||||||
#if CONFIG_VAL(SYS_MALLOC_F_LEN)
|
#if CONFIG_VAL(SYS_MALLOC_F_LEN)
|
||||||
DEFINE(GD_MALLOC_BASE, offsetof(struct global_data, malloc_base));
|
DEFINE(GD_MALLOC_BASE, offsetof(struct global_data, malloc_base));
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -71,6 +71,9 @@ const efi_guid_t efi_guid_driver_binding_protocol =
|
||||||
/* event group ExitBootServices() invoked */
|
/* event group ExitBootServices() invoked */
|
||||||
const efi_guid_t efi_guid_event_group_exit_boot_services =
|
const efi_guid_t efi_guid_event_group_exit_boot_services =
|
||||||
EFI_EVENT_GROUP_EXIT_BOOT_SERVICES;
|
EFI_EVENT_GROUP_EXIT_BOOT_SERVICES;
|
||||||
|
/* event group before ExitBootServices() invoked */
|
||||||
|
const efi_guid_t efi_guid_event_group_before_exit_boot_services =
|
||||||
|
EFI_EVENT_GROUP_BEFORE_EXIT_BOOT_SERVICES;
|
||||||
/* event group SetVirtualAddressMap() invoked */
|
/* event group SetVirtualAddressMap() invoked */
|
||||||
const efi_guid_t efi_guid_event_group_virtual_address_change =
|
const efi_guid_t efi_guid_event_group_virtual_address_change =
|
||||||
EFI_EVENT_GROUP_VIRTUAL_ADDRESS_CHANGE;
|
EFI_EVENT_GROUP_VIRTUAL_ADDRESS_CHANGE;
|
||||||
|
@ -2123,6 +2126,16 @@ static efi_status_t EFIAPI efi_exit_boot_services(efi_handle_t image_handle,
|
||||||
if (!systab.boottime)
|
if (!systab.boottime)
|
||||||
goto out;
|
goto out;
|
||||||
|
|
||||||
|
/* Notify EFI_EVENT_GROUP_BEFORE_EXIT_BOOT_SERVICES event group. */
|
||||||
|
list_for_each_entry(evt, &efi_events, link) {
|
||||||
|
if (evt->group &&
|
||||||
|
!guidcmp(evt->group,
|
||||||
|
&efi_guid_event_group_before_exit_boot_services)) {
|
||||||
|
efi_signal_event(evt);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/* Stop all timer related activities */
|
/* Stop all timer related activities */
|
||||||
timers_enabled = false;
|
timers_enabled = false;
|
||||||
|
|
||||||
|
@ -2154,6 +2167,7 @@ static efi_status_t EFIAPI efi_exit_boot_services(efi_handle_t image_handle,
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!efi_st_keep_devices) {
|
if (!efi_st_keep_devices) {
|
||||||
|
bootm_disable_interrupts();
|
||||||
if (IS_ENABLED(CONFIG_USB_DEVICE))
|
if (IS_ENABLED(CONFIG_USB_DEVICE))
|
||||||
udc_disconnect();
|
udc_disconnect();
|
||||||
board_quiesce_devices();
|
board_quiesce_devices();
|
||||||
|
@ -2166,9 +2180,6 @@ static efi_status_t EFIAPI efi_exit_boot_services(efi_handle_t image_handle,
|
||||||
/* Fix up caches for EFI payloads if necessary */
|
/* Fix up caches for EFI payloads if necessary */
|
||||||
efi_exit_caches();
|
efi_exit_caches();
|
||||||
|
|
||||||
/* This stops all lingering devices */
|
|
||||||
bootm_disable_interrupts();
|
|
||||||
|
|
||||||
/* Disable boot time services */
|
/* Disable boot time services */
|
||||||
systab.con_in_handle = NULL;
|
systab.con_in_handle = NULL;
|
||||||
systab.con_in = NULL;
|
systab.con_in = NULL;
|
||||||
|
|
|
@ -1037,30 +1037,45 @@ efi_status_t __weak efi_load_capsule_drivers(void)
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* check_run_capsules - Check whether capsule update should run
|
* check_run_capsules() - check whether capsule update should run
|
||||||
*
|
*
|
||||||
* The spec says OsIndications must be set in order to run the capsule update
|
* The spec says OsIndications must be set in order to run the capsule update
|
||||||
* on-disk. Since U-Boot doesn't support runtime SetVariable, allow capsules to
|
* on-disk. Since U-Boot doesn't support runtime SetVariable, allow capsules to
|
||||||
* run explicitly if CONFIG_EFI_IGNORE_OSINDICATIONS is selected
|
* run explicitly if CONFIG_EFI_IGNORE_OSINDICATIONS is selected
|
||||||
|
*
|
||||||
|
* Return: EFI_SUCCESS if update to run, EFI_NOT_FOUND otherwise
|
||||||
*/
|
*/
|
||||||
static bool check_run_capsules(void)
|
static efi_status_t check_run_capsules(void)
|
||||||
{
|
{
|
||||||
u64 os_indications;
|
u64 os_indications;
|
||||||
efi_uintn_t size;
|
efi_uintn_t size;
|
||||||
efi_status_t ret;
|
efi_status_t r;
|
||||||
|
|
||||||
if (IS_ENABLED(CONFIG_EFI_IGNORE_OSINDICATIONS))
|
|
||||||
return true;
|
|
||||||
|
|
||||||
size = sizeof(os_indications);
|
size = sizeof(os_indications);
|
||||||
ret = efi_get_variable_int(L"OsIndications", &efi_global_variable_guid,
|
r = efi_get_variable_int(L"OsIndications", &efi_global_variable_guid,
|
||||||
NULL, &size, &os_indications, NULL);
|
NULL, &size, &os_indications, NULL);
|
||||||
if (ret == EFI_SUCCESS &&
|
if (r != EFI_SUCCESS || size != sizeof(os_indications))
|
||||||
(os_indications
|
return EFI_NOT_FOUND;
|
||||||
& EFI_OS_INDICATIONS_FILE_CAPSULE_DELIVERY_SUPPORTED))
|
|
||||||
return true;
|
|
||||||
|
|
||||||
return false;
|
if (os_indications &
|
||||||
|
EFI_OS_INDICATIONS_FILE_CAPSULE_DELIVERY_SUPPORTED) {
|
||||||
|
os_indications &=
|
||||||
|
~EFI_OS_INDICATIONS_FILE_CAPSULE_DELIVERY_SUPPORTED;
|
||||||
|
r = efi_set_variable_int(L"OsIndications",
|
||||||
|
&efi_global_variable_guid,
|
||||||
|
EFI_VARIABLE_NON_VOLATILE |
|
||||||
|
EFI_VARIABLE_BOOTSERVICE_ACCESS |
|
||||||
|
EFI_VARIABLE_RUNTIME_ACCESS,
|
||||||
|
sizeof(os_indications),
|
||||||
|
&os_indications, false);
|
||||||
|
if (r != EFI_SUCCESS)
|
||||||
|
log_err("Setting %ls failed\n", L"OsIndications");
|
||||||
|
return EFI_SUCCESS;
|
||||||
|
} else if (IS_ENABLED(CONFIG_EFI_IGNORE_OSINDICATIONS)) {
|
||||||
|
return EFI_SUCCESS;
|
||||||
|
} else {
|
||||||
|
return EFI_NOT_FOUND;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -1078,7 +1093,7 @@ efi_status_t efi_launch_capsules(void)
|
||||||
unsigned int nfiles, index, i;
|
unsigned int nfiles, index, i;
|
||||||
efi_status_t ret;
|
efi_status_t ret;
|
||||||
|
|
||||||
if (!check_run_capsules())
|
if (check_run_capsules() != EFI_SUCCESS)
|
||||||
return EFI_SUCCESS;
|
return EFI_SUCCESS;
|
||||||
|
|
||||||
index = get_last_capsule();
|
index = get_last_capsule();
|
||||||
|
@ -1108,13 +1123,13 @@ efi_status_t efi_launch_capsules(void)
|
||||||
log_err("Applying capsule %ls failed\n",
|
log_err("Applying capsule %ls failed\n",
|
||||||
files[i]);
|
files[i]);
|
||||||
|
|
||||||
|
/* create CapsuleXXXX */
|
||||||
|
set_capsule_result(index, capsule, ret);
|
||||||
|
|
||||||
free(capsule);
|
free(capsule);
|
||||||
} else {
|
} else {
|
||||||
log_err("Reading capsule %ls failed\n", files[i]);
|
log_err("Reading capsule %ls failed\n", files[i]);
|
||||||
}
|
}
|
||||||
/* create CapsuleXXXX */
|
|
||||||
set_capsule_result(index, capsule, ret);
|
|
||||||
|
|
||||||
/* delete a capsule either in case of success or failure */
|
/* delete a capsule either in case of success or failure */
|
||||||
ret = efi_capsule_delete_file(files[i]);
|
ret = efi_capsule_delete_file(files[i]);
|
||||||
if (ret != EFI_SUCCESS)
|
if (ret != EFI_SUCCESS)
|
||||||
|
|
|
@ -424,7 +424,7 @@ static efi_status_t efi_disk_add_dev(
|
||||||
&efi_block_io_guid, &diskobj->ops,
|
&efi_block_io_guid, &diskobj->ops,
|
||||||
guid, NULL, NULL));
|
guid, NULL, NULL));
|
||||||
if (ret != EFI_SUCCESS)
|
if (ret != EFI_SUCCESS)
|
||||||
return ret;
|
goto error;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* On partitions or whole disks without partitions install the
|
* On partitions or whole disks without partitions install the
|
||||||
|
@ -573,7 +573,7 @@ efi_status_t efi_disk_register(void)
|
||||||
if (ret) {
|
if (ret) {
|
||||||
log_err("ERROR: failure to add disk device %s, r = %lu\n",
|
log_err("ERROR: failure to add disk device %s, r = %lu\n",
|
||||||
dev->name, ret & ~EFI_ERROR_MASK);
|
dev->name, ret & ~EFI_ERROR_MASK);
|
||||||
return ret;
|
continue;
|
||||||
}
|
}
|
||||||
disks++;
|
disks++;
|
||||||
|
|
||||||
|
|
|
@ -175,36 +175,6 @@ static efi_status_t efi_init_os_indications(void)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* efi_clear_os_indications() - clear OsIndications
|
|
||||||
*
|
|
||||||
* Clear EFI_OS_INDICATIONS_FILE_CAPSULE_DELIVERY_SUPPORTED
|
|
||||||
*/
|
|
||||||
static efi_status_t efi_clear_os_indications(void)
|
|
||||||
{
|
|
||||||
efi_uintn_t size;
|
|
||||||
u64 os_indications;
|
|
||||||
efi_status_t ret;
|
|
||||||
|
|
||||||
size = sizeof(os_indications);
|
|
||||||
ret = efi_get_variable_int(L"OsIndications", &efi_global_variable_guid,
|
|
||||||
NULL, &size, &os_indications, NULL);
|
|
||||||
if (ret != EFI_SUCCESS)
|
|
||||||
os_indications = 0;
|
|
||||||
else
|
|
||||||
os_indications &=
|
|
||||||
~EFI_OS_INDICATIONS_FILE_CAPSULE_DELIVERY_SUPPORTED;
|
|
||||||
ret = efi_set_variable_int(L"OsIndications", &efi_global_variable_guid,
|
|
||||||
EFI_VARIABLE_NON_VOLATILE |
|
|
||||||
EFI_VARIABLE_BOOTSERVICE_ACCESS |
|
|
||||||
EFI_VARIABLE_RUNTIME_ACCESS,
|
|
||||||
sizeof(os_indications), &os_indications,
|
|
||||||
false);
|
|
||||||
if (ret != EFI_SUCCESS)
|
|
||||||
log_err("Setting %ls failed\n", L"OsIndications");
|
|
||||||
return ret;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* efi_init_obj_list() - Initialize and populate EFI object list
|
* efi_init_obj_list() - Initialize and populate EFI object list
|
||||||
*
|
*
|
||||||
|
@ -212,7 +182,7 @@ static efi_status_t efi_clear_os_indications(void)
|
||||||
*/
|
*/
|
||||||
efi_status_t efi_init_obj_list(void)
|
efi_status_t efi_init_obj_list(void)
|
||||||
{
|
{
|
||||||
efi_status_t r, ret = EFI_SUCCESS;
|
efi_status_t ret = EFI_SUCCESS;
|
||||||
|
|
||||||
/* Initialize once only */
|
/* Initialize once only */
|
||||||
if (efi_obj_list_initialized != OBJ_LIST_NOT_INITIALIZED)
|
if (efi_obj_list_initialized != OBJ_LIST_NOT_INITIALIZED)
|
||||||
|
@ -331,11 +301,7 @@ efi_status_t efi_init_obj_list(void)
|
||||||
if (IS_ENABLED(CONFIG_EFI_CAPSULE_ON_DISK) &&
|
if (IS_ENABLED(CONFIG_EFI_CAPSULE_ON_DISK) &&
|
||||||
!IS_ENABLED(CONFIG_EFI_CAPSULE_ON_DISK_EARLY))
|
!IS_ENABLED(CONFIG_EFI_CAPSULE_ON_DISK_EARLY))
|
||||||
ret = efi_launch_capsules();
|
ret = efi_launch_capsules();
|
||||||
|
|
||||||
out:
|
out:
|
||||||
r = efi_clear_os_indications();
|
|
||||||
if (ret == EFI_SUCCESS)
|
|
||||||
ret = r;
|
|
||||||
efi_obj_list_initialized = ret;
|
efi_obj_list_initialized = ret;
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
|
@ -18,6 +18,7 @@
|
||||||
#include <smbios.h>
|
#include <smbios.h>
|
||||||
#include <version_string.h>
|
#include <version_string.h>
|
||||||
#include <tpm-v2.h>
|
#include <tpm-v2.h>
|
||||||
|
#include <tpm_api.h>
|
||||||
#include <u-boot/hash-checksum.h>
|
#include <u-boot/hash-checksum.h>
|
||||||
#include <u-boot/sha1.h>
|
#include <u-boot/sha1.h>
|
||||||
#include <u-boot/sha256.h>
|
#include <u-boot/sha256.h>
|
||||||
|
@ -27,6 +28,17 @@
|
||||||
#include <linux/unaligned/generic.h>
|
#include <linux/unaligned/generic.h>
|
||||||
#include <hexdump.h>
|
#include <hexdump.h>
|
||||||
|
|
||||||
|
/**
|
||||||
|
* struct event_log_buffer - internal eventlog management structure
|
||||||
|
*
|
||||||
|
* @buffer: eventlog buffer
|
||||||
|
* @final_buffer: finalevent config table buffer
|
||||||
|
* @pos: current position of 'buffer'
|
||||||
|
* @final_pos: current position of 'final_buffer'
|
||||||
|
* @get_event_called: true if GetEventLog has been invoked at least once
|
||||||
|
* @ebs_called: true if ExitBootServices has been invoked
|
||||||
|
* @truncated: true if the 'buffer' is truncated
|
||||||
|
*/
|
||||||
struct event_log_buffer {
|
struct event_log_buffer {
|
||||||
void *buffer;
|
void *buffer;
|
||||||
void *final_buffer;
|
void *final_buffer;
|
||||||
|
@ -34,6 +46,7 @@ struct event_log_buffer {
|
||||||
size_t final_pos; /* final events config table position */
|
size_t final_pos; /* final events config table position */
|
||||||
size_t last_event_size;
|
size_t last_event_size;
|
||||||
bool get_event_called;
|
bool get_event_called;
|
||||||
|
bool ebs_called;
|
||||||
bool truncated;
|
bool truncated;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -186,39 +199,29 @@ static efi_status_t tcg2_pcr_extend(struct udevice *dev, u32 pcr_index,
|
||||||
return EFI_SUCCESS;
|
return EFI_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* tcg2_agile_log_append - Append an agile event to out eventlog
|
/* put_event - Append an agile event to an eventlog
|
||||||
*
|
*
|
||||||
* @pcr_index: PCR index
|
* @pcr_index: PCR index
|
||||||
* @event_type: type of event added
|
* @event_type: type of event added
|
||||||
* @digest_list: list of digest algorithms to add
|
* @digest_list: list of digest algorithms to add
|
||||||
* @size: size of event
|
* @size: size of event
|
||||||
* @event: event to add
|
* @event: event to add
|
||||||
|
* @log: log buffer to append the event
|
||||||
*
|
*
|
||||||
* @Return: status code
|
|
||||||
*/
|
*/
|
||||||
static efi_status_t tcg2_agile_log_append(u32 pcr_index, u32 event_type,
|
static void put_event(u32 pcr_index, u32 event_type,
|
||||||
struct tpml_digest_values *digest_list,
|
struct tpml_digest_values *digest_list, u32 size,
|
||||||
u32 size, u8 event[])
|
u8 event[], void *log)
|
||||||
{
|
{
|
||||||
void *log = (void *)((uintptr_t)event_log.buffer + event_log.pos);
|
|
||||||
size_t pos;
|
size_t pos;
|
||||||
size_t i;
|
size_t i;
|
||||||
u32 event_size;
|
u32 event_size;
|
||||||
|
|
||||||
if (event_log.get_event_called)
|
|
||||||
log = (void *)((uintptr_t)event_log.final_buffer +
|
|
||||||
event_log.final_pos);
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* size refers to the length of event[] only, we need to check against
|
* size refers to the length of event[] only, we need to check against
|
||||||
* the final tcg_pcr_event2 size
|
* the final tcg_pcr_event2 size
|
||||||
*/
|
*/
|
||||||
event_size = size + tcg_event_final_size(digest_list);
|
event_size = size + tcg_event_final_size(digest_list);
|
||||||
if (event_log.pos + event_size > TPM2_EVENT_LOG_SIZE ||
|
|
||||||
event_log.final_pos + event_size > TPM2_EVENT_LOG_SIZE) {
|
|
||||||
event_log.truncated = true;
|
|
||||||
return EFI_VOLUME_FULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
put_unaligned_le32(pcr_index, log);
|
put_unaligned_le32(pcr_index, log);
|
||||||
pos = offsetof(struct tcg_pcr_event2, event_type);
|
pos = offsetof(struct tcg_pcr_event2, event_type);
|
||||||
|
@ -242,25 +245,62 @@ static efi_status_t tcg2_agile_log_append(u32 pcr_index, u32 event_type,
|
||||||
memcpy((void *)((uintptr_t)log + pos), event, size);
|
memcpy((void *)((uintptr_t)log + pos), event, size);
|
||||||
pos += size;
|
pos += size;
|
||||||
|
|
||||||
/* make sure the calculated buffer is what we checked against */
|
/*
|
||||||
|
* make sure the calculated buffer is what we checked against
|
||||||
|
* This check should never fail. It checks the code above is
|
||||||
|
* calculating the right length for the event we are adding
|
||||||
|
*/
|
||||||
if (pos != event_size)
|
if (pos != event_size)
|
||||||
return EFI_INVALID_PARAMETER;
|
log_err("Appending to the EventLog failed\n");
|
||||||
|
}
|
||||||
|
|
||||||
/* if GetEventLog hasn't been called update the normal log */
|
/* tcg2_agile_log_append - Append an agile event to an eventlog
|
||||||
if (!event_log.get_event_called) {
|
*
|
||||||
event_log.pos += pos;
|
* @pcr_index: PCR index
|
||||||
event_log.last_event_size = pos;
|
* @event_type: type of event added
|
||||||
} else {
|
* @digest_list: list of digest algorithms to add
|
||||||
/* if GetEventLog has been called update config table log */
|
* @size: size of event
|
||||||
struct efi_tcg2_final_events_table *final_event;
|
* @event: event to add
|
||||||
|
* @log: log buffer to append the event
|
||||||
|
*
|
||||||
|
* @Return: status code
|
||||||
|
*/
|
||||||
|
static efi_status_t tcg2_agile_log_append(u32 pcr_index, u32 event_type,
|
||||||
|
struct tpml_digest_values *digest_list,
|
||||||
|
u32 size, u8 event[])
|
||||||
|
{
|
||||||
|
void *log = (void *)((uintptr_t)event_log.buffer + event_log.pos);
|
||||||
|
u32 event_size = size + tcg_event_final_size(digest_list);
|
||||||
|
struct efi_tcg2_final_events_table *final_event;
|
||||||
|
efi_status_t ret = EFI_SUCCESS;
|
||||||
|
|
||||||
final_event =
|
/* if ExitBootServices hasn't been called update the normal log */
|
||||||
(struct efi_tcg2_final_events_table *)(event_log.final_buffer);
|
if (!event_log.ebs_called) {
|
||||||
final_event->number_of_events++;
|
if (event_log.truncated ||
|
||||||
event_log.final_pos += pos;
|
event_log.pos + event_size > TPM2_EVENT_LOG_SIZE) {
|
||||||
|
event_log.truncated = true;
|
||||||
|
return EFI_VOLUME_FULL;
|
||||||
|
}
|
||||||
|
put_event(pcr_index, event_type, digest_list, size, event, log);
|
||||||
|
event_log.pos += event_size;
|
||||||
|
event_log.last_event_size = event_size;
|
||||||
}
|
}
|
||||||
|
|
||||||
return EFI_SUCCESS;
|
if (!event_log.get_event_called)
|
||||||
|
return ret;
|
||||||
|
|
||||||
|
/* if GetEventLog has been called update FinalEventLog as well */
|
||||||
|
if (event_log.final_pos + event_size > TPM2_EVENT_LOG_SIZE)
|
||||||
|
return EFI_VOLUME_FULL;
|
||||||
|
|
||||||
|
log = (void *)((uintptr_t)event_log.final_buffer + event_log.final_pos);
|
||||||
|
put_event(pcr_index, event_type, digest_list, size, event, log);
|
||||||
|
|
||||||
|
final_event = event_log.final_buffer;
|
||||||
|
final_event->number_of_events++;
|
||||||
|
event_log.final_pos += event_size;
|
||||||
|
|
||||||
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -1303,6 +1343,7 @@ static efi_status_t efi_init_event_log(void)
|
||||||
event_log.pos = 0;
|
event_log.pos = 0;
|
||||||
event_log.last_event_size = 0;
|
event_log.last_event_size = 0;
|
||||||
event_log.get_event_called = false;
|
event_log.get_event_called = false;
|
||||||
|
event_log.ebs_called = false;
|
||||||
event_log.truncated = false;
|
event_log.truncated = false;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -1472,7 +1513,7 @@ static efi_status_t tcg2_measure_boot_variable(struct udevice *dev)
|
||||||
&var_data_size);
|
&var_data_size);
|
||||||
|
|
||||||
if (!bootvar) {
|
if (!bootvar) {
|
||||||
log_info("%ls not found\n", boot_name);
|
log_debug("%ls not found\n", boot_name);
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1792,6 +1833,7 @@ efi_tcg2_notify_exit_boot_services(struct efi_event *event, void *context)
|
||||||
|
|
||||||
EFI_ENTRY("%p, %p", event, context);
|
EFI_ENTRY("%p, %p", event, context);
|
||||||
|
|
||||||
|
event_log.ebs_called = true;
|
||||||
ret = platform_get_tpm2_device(&dev);
|
ret = platform_get_tpm2_device(&dev);
|
||||||
if (ret != EFI_SUCCESS)
|
if (ret != EFI_SUCCESS)
|
||||||
goto out;
|
goto out;
|
||||||
|
@ -1902,6 +1944,7 @@ efi_status_t efi_tcg2_register(void)
|
||||||
efi_status_t ret = EFI_SUCCESS;
|
efi_status_t ret = EFI_SUCCESS;
|
||||||
struct udevice *dev;
|
struct udevice *dev;
|
||||||
struct efi_event *event;
|
struct efi_event *event;
|
||||||
|
u32 err;
|
||||||
|
|
||||||
ret = platform_get_tpm2_device(&dev);
|
ret = platform_get_tpm2_device(&dev);
|
||||||
if (ret != EFI_SUCCESS) {
|
if (ret != EFI_SUCCESS) {
|
||||||
|
@ -1909,6 +1952,13 @@ efi_status_t efi_tcg2_register(void)
|
||||||
return EFI_SUCCESS;
|
return EFI_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* initialize the TPM as early as possible. */
|
||||||
|
err = tpm_startup(dev, TPM_ST_CLEAR);
|
||||||
|
if (err) {
|
||||||
|
log_err("TPM startup failed\n");
|
||||||
|
goto fail;
|
||||||
|
}
|
||||||
|
|
||||||
ret = efi_init_event_log();
|
ret = efi_init_event_log();
|
||||||
if (ret != EFI_SUCCESS)
|
if (ret != EFI_SUCCESS)
|
||||||
goto fail;
|
goto fail;
|
||||||
|
|
|
@ -10,9 +10,34 @@
|
||||||
|
|
||||||
#include <efi_selftest.h>
|
#include <efi_selftest.h>
|
||||||
|
|
||||||
|
static efi_guid_t guid_before_exit_boot_services =
|
||||||
|
EFI_GUID(0x8be0e274, 0x3970, 0x4b44, 0x80, 0xc5,
|
||||||
|
0x1a, 0xb9, 0x50, 0x2f, 0x3b, 0xfc);
|
||||||
|
#define CAPACITY 4
|
||||||
|
|
||||||
|
struct notification_record {
|
||||||
|
unsigned int count;
|
||||||
|
unsigned int type[CAPACITY];
|
||||||
|
};
|
||||||
|
|
||||||
|
struct notification_context {
|
||||||
|
struct notification_record *record;
|
||||||
|
unsigned int type;
|
||||||
|
};
|
||||||
|
|
||||||
static struct efi_boot_services *boottime;
|
static struct efi_boot_services *boottime;
|
||||||
static struct efi_event *event_notify;
|
static struct efi_event *event_notify;
|
||||||
static unsigned int notification_count;
|
struct notification_record record;
|
||||||
|
|
||||||
|
struct notification_context context_before = {
|
||||||
|
.record = &record,
|
||||||
|
.type = 1,
|
||||||
|
};
|
||||||
|
|
||||||
|
struct notification_context context = {
|
||||||
|
.record = &record,
|
||||||
|
.type = 2,
|
||||||
|
};
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Notification function, increments the notification count.
|
* Notification function, increments the notification count.
|
||||||
|
@ -20,11 +45,15 @@ static unsigned int notification_count;
|
||||||
* @event notified event
|
* @event notified event
|
||||||
* @context pointer to the notification count
|
* @context pointer to the notification count
|
||||||
*/
|
*/
|
||||||
static void EFIAPI notify(struct efi_event *event, void *context)
|
static void EFIAPI ebs_notify(struct efi_event *event, void *context)
|
||||||
{
|
{
|
||||||
unsigned int *count = context;
|
struct notification_context *ctx = context;
|
||||||
|
|
||||||
++*count;
|
if (ctx->record->count >= CAPACITY)
|
||||||
|
return;
|
||||||
|
|
||||||
|
ctx->record->type[ctx->record->count] = ctx->type;
|
||||||
|
ctx->record->count++;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -43,15 +72,23 @@ static int setup(const efi_handle_t handle,
|
||||||
|
|
||||||
boottime = systable->boottime;
|
boottime = systable->boottime;
|
||||||
|
|
||||||
notification_count = 0;
|
|
||||||
ret = boottime->create_event(EVT_SIGNAL_EXIT_BOOT_SERVICES,
|
ret = boottime->create_event(EVT_SIGNAL_EXIT_BOOT_SERVICES,
|
||||||
TPL_CALLBACK, notify,
|
TPL_CALLBACK, ebs_notify,
|
||||||
(void *)¬ification_count,
|
&context,
|
||||||
&event_notify);
|
&event_notify);
|
||||||
if (ret != EFI_SUCCESS) {
|
if (ret != EFI_SUCCESS) {
|
||||||
efi_st_error("could not create event\n");
|
efi_st_error("could not create event\n");
|
||||||
return EFI_ST_FAILURE;
|
return EFI_ST_FAILURE;
|
||||||
}
|
}
|
||||||
|
ret = boottime->create_event_ex(0, TPL_CALLBACK, ebs_notify,
|
||||||
|
&context_before,
|
||||||
|
&guid_before_exit_boot_services,
|
||||||
|
&event_notify);
|
||||||
|
if (ret != EFI_SUCCESS) {
|
||||||
|
efi_st_error("could not create event\n");
|
||||||
|
return EFI_ST_FAILURE;
|
||||||
|
}
|
||||||
|
|
||||||
return EFI_ST_SUCCESS;
|
return EFI_ST_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -68,13 +105,21 @@ static int setup(const efi_handle_t handle,
|
||||||
*/
|
*/
|
||||||
static int execute(void)
|
static int execute(void)
|
||||||
{
|
{
|
||||||
if (notification_count != 1) {
|
if (record.count != 2) {
|
||||||
efi_st_error("ExitBootServices was not notified\n");
|
efi_st_error("Incorrect event count %u\n", record.count);
|
||||||
|
return EFI_ST_FAILURE;
|
||||||
|
}
|
||||||
|
if (record.type[0] != 1) {
|
||||||
|
efi_st_error("EFI_GROUP_BEFORE_EXIT_BOOT_SERVICE not notified\n");
|
||||||
|
return EFI_ST_FAILURE;
|
||||||
|
}
|
||||||
|
if (record.type[1] != 2) {
|
||||||
|
efi_st_error("EVT_SIGNAL_EXIT_BOOT_SERVICES was not notified\n");
|
||||||
return EFI_ST_FAILURE;
|
return EFI_ST_FAILURE;
|
||||||
}
|
}
|
||||||
efi_st_exit_boot_services();
|
efi_st_exit_boot_services();
|
||||||
if (notification_count != 1) {
|
if (record.count != 2) {
|
||||||
efi_st_error("ExitBootServices was notified twice\n");
|
efi_st_error("Incorrect event count %u\n", record.count);
|
||||||
return EFI_ST_FAILURE;
|
return EFI_ST_FAILURE;
|
||||||
}
|
}
|
||||||
return EFI_ST_SUCCESS;
|
return EFI_ST_SUCCESS;
|
||||||
|
|
|
@ -23,23 +23,24 @@ static const char *fdt;
|
||||||
static const efi_guid_t fdt_guid = EFI_FDT_GUID;
|
static const efi_guid_t fdt_guid = EFI_FDT_GUID;
|
||||||
static const efi_guid_t acpi_guid = EFI_ACPI_TABLE_GUID;
|
static const efi_guid_t acpi_guid = EFI_ACPI_TABLE_GUID;
|
||||||
|
|
||||||
/*
|
/**
|
||||||
* Convert FDT value to host endianness.
|
* f2h() - convert FDT value to host endianness.
|
||||||
*
|
*
|
||||||
* @val FDT value
|
* UEFI code is always low endian. The FDT is big endian.
|
||||||
* @return converted value
|
*
|
||||||
|
* @val: FDT value
|
||||||
|
* Return: converted value
|
||||||
*/
|
*/
|
||||||
static uint32_t f2h(fdt32_t val)
|
static uint32_t f2h(fdt32_t val)
|
||||||
{
|
{
|
||||||
char *buf = (char *)&val;
|
char *buf = (char *)&val;
|
||||||
char i;
|
char i;
|
||||||
|
|
||||||
#if __BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__
|
|
||||||
/* Swap the bytes */
|
/* Swap the bytes */
|
||||||
i = buf[0]; buf[0] = buf[3]; buf[3] = i;
|
i = buf[0]; buf[0] = buf[3]; buf[3] = i;
|
||||||
i = buf[1]; buf[1] = buf[2]; buf[2] = i;
|
i = buf[1]; buf[1] = buf[2]; buf[2] = i;
|
||||||
#endif
|
|
||||||
return *(uint32_t *)buf;
|
return val;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
@ -13,6 +13,7 @@
|
||||||
#include <malloc.h>
|
#include <malloc.h>
|
||||||
|
|
||||||
#include <asm/global_data.h>
|
#include <asm/global_data.h>
|
||||||
|
#include <asm/sections.h>
|
||||||
|
|
||||||
DECLARE_GLOBAL_DATA_PTR;
|
DECLARE_GLOBAL_DATA_PTR;
|
||||||
|
|
||||||
|
@ -144,6 +145,10 @@ void arch_lmb_reserve_generic(struct lmb *lmb, ulong sp, ulong end, ulong align)
|
||||||
bank_end = end - 1;
|
bank_end = end - 1;
|
||||||
|
|
||||||
lmb_reserve(lmb, sp, bank_end - sp + 1);
|
lmb_reserve(lmb, sp, bank_end - sp + 1);
|
||||||
|
|
||||||
|
if (gd->flags & GD_FLG_SKIP_RELOC)
|
||||||
|
lmb_reserve(lmb, (phys_addr_t)(uintptr_t)_start, gd->mon_len);
|
||||||
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -840,7 +840,7 @@ u32 tpm1_find_key_sha1(struct udevice *dev, const u8 auth[20],
|
||||||
unsigned int i;
|
unsigned int i;
|
||||||
|
|
||||||
/* fetch list of already loaded keys in the TPM */
|
/* fetch list of already loaded keys in the TPM */
|
||||||
err = tpm_get_capability(dev, TPM_CAP_HANDLE, TPM_RT_KEY, buf,
|
err = tpm1_get_capability(dev, TPM_CAP_HANDLE, TPM_RT_KEY, buf,
|
||||||
sizeof(buf));
|
sizeof(buf));
|
||||||
if (err)
|
if (err)
|
||||||
return -1;
|
return -1;
|
||||||
|
@ -852,7 +852,7 @@ u32 tpm1_find_key_sha1(struct udevice *dev, const u8 auth[20],
|
||||||
/* now search a(/ the) key which we can access with the given auth */
|
/* now search a(/ the) key which we can access with the given auth */
|
||||||
for (i = 0; i < key_count; ++i) {
|
for (i = 0; i < key_count; ++i) {
|
||||||
buf_len = sizeof(buf);
|
buf_len = sizeof(buf);
|
||||||
err = tpm_get_pub_key_oiap(key_handles[i], auth, buf, &buf_len);
|
err = tpm1_get_pub_key_oiap(dev, key_handles[i], auth, buf, &buf_len);
|
||||||
if (err && err != TPM_AUTHFAIL)
|
if (err && err != TPM_AUTHFAIL)
|
||||||
return -1;
|
return -1;
|
||||||
if (err)
|
if (err)
|
||||||
|
|
|
@ -61,7 +61,7 @@ quiet_cmd_autoconf = GEN $@
|
||||||
if [ -n "${KCONFIG_IGNORE_DUPLICATES}" ] || \
|
if [ -n "${KCONFIG_IGNORE_DUPLICATES}" ] || \
|
||||||
! grep -q "$${line%=*}=" include/config/auto.conf; then \
|
! grep -q "$${line%=*}=" include/config/auto.conf; then \
|
||||||
echo "$$line"; \
|
echo "$$line"; \
|
||||||
fi \
|
fi; \
|
||||||
done > $@
|
done > $@
|
||||||
|
|
||||||
quiet_cmd_u_boot_cfg = CFG $@
|
quiet_cmd_u_boot_cfg = CFG $@
|
||||||
|
|
File diff suppressed because it is too large
Load diff
|
@ -12,6 +12,11 @@
|
||||||
#include <test/test.h>
|
#include <test/test.h>
|
||||||
#include <test/ut.h>
|
#include <test/ut.h>
|
||||||
|
|
||||||
|
static inline bool lmb_is_nomap(struct lmb_property *m)
|
||||||
|
{
|
||||||
|
return m->flags & LMB_NOMAP;
|
||||||
|
}
|
||||||
|
|
||||||
static int check_lmb(struct unit_test_state *uts, struct lmb *lmb,
|
static int check_lmb(struct unit_test_state *uts, struct lmb *lmb,
|
||||||
phys_addr_t ram_base, phys_size_t ram_size,
|
phys_addr_t ram_base, phys_size_t ram_size,
|
||||||
unsigned long num_reserved,
|
unsigned long num_reserved,
|
||||||
|
|
|
@ -31,6 +31,7 @@ static int print_guid(struct unit_test_state *uts)
|
||||||
1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16
|
1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16
|
||||||
};
|
};
|
||||||
char str[40];
|
char str[40];
|
||||||
|
int ret;
|
||||||
|
|
||||||
sprintf(str, "%pUb", guid);
|
sprintf(str, "%pUb", guid);
|
||||||
ut_assertok(strcmp("01020304-0506-0708-090a-0b0c0d0e0f10", str));
|
ut_assertok(strcmp("01020304-0506-0708-090a-0b0c0d0e0f10", str));
|
||||||
|
@ -40,6 +41,9 @@ static int print_guid(struct unit_test_state *uts)
|
||||||
ut_assertok(strcmp("04030201-0605-0807-090a-0b0c0d0e0f10", str));
|
ut_assertok(strcmp("04030201-0605-0807-090a-0b0c0d0e0f10", str));
|
||||||
sprintf(str, "%pUL", guid);
|
sprintf(str, "%pUL", guid);
|
||||||
ut_assertok(strcmp("04030201-0605-0807-090A-0B0C0D0E0F10", str));
|
ut_assertok(strcmp("04030201-0605-0807-090A-0B0C0D0E0F10", str));
|
||||||
|
ret = snprintf(str, 4, "%pUL", guid);
|
||||||
|
ut_asserteq(0, str[3]);
|
||||||
|
ut_asserteq(36, ret);
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
@ -349,6 +353,20 @@ static int print_itoa(struct unit_test_state *uts)
|
||||||
}
|
}
|
||||||
PRINT_TEST(print_itoa, 0);
|
PRINT_TEST(print_itoa, 0);
|
||||||
|
|
||||||
|
static int snprint(struct unit_test_state *uts)
|
||||||
|
{
|
||||||
|
char buf[10] = "xxxxxxxxx";
|
||||||
|
int ret;
|
||||||
|
|
||||||
|
ret = snprintf(buf, 4, "%s:%s", "abc", "def");
|
||||||
|
ut_asserteq(0, buf[3]);
|
||||||
|
ut_asserteq(7, ret);
|
||||||
|
ret = snprintf(buf, 4, "%s:%d", "abc", 9999);
|
||||||
|
ut_asserteq(8, ret);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
PRINT_TEST(snprint, 0);
|
||||||
|
|
||||||
static int print_xtoa(struct unit_test_state *uts)
|
static int print_xtoa(struct unit_test_state *uts)
|
||||||
{
|
{
|
||||||
ut_asserteq_str("7f", simple_xtoa(127));
|
ut_asserteq_str("7f", simple_xtoa(127));
|
||||||
|
|
|
@ -2,8 +2,10 @@
|
||||||
# Copyright (c) 2015 Stephen Warren
|
# Copyright (c) 2015 Stephen Warren
|
||||||
# Copyright (c) 2015-2016, NVIDIA CORPORATION. All rights reserved.
|
# Copyright (c) 2015-2016, NVIDIA CORPORATION. All rights reserved.
|
||||||
|
|
||||||
# Generate an HTML-formatted log file containing multiple streams of data,
|
"""
|
||||||
# each represented in a well-delineated/-structured fashion.
|
Generate an HTML-formatted log file containing multiple streams of data,
|
||||||
|
each represented in a well-delineated/-structured fashion.
|
||||||
|
"""
|
||||||
|
|
||||||
import datetime
|
import datetime
|
||||||
import html
|
import html
|
||||||
|
@ -180,7 +182,7 @@ class RunAndLog(object):
|
||||||
raise exception
|
raise exception
|
||||||
return output
|
return output
|
||||||
|
|
||||||
class SectionCtxMgr(object):
|
class SectionCtxMgr:
|
||||||
"""A context manager for Python's "with" statement, which allows a certain
|
"""A context manager for Python's "with" statement, which allows a certain
|
||||||
portion of test code to be logged to a separate section of the log file.
|
portion of test code to be logged to a separate section of the log file.
|
||||||
Objects of this type should be created by factory functions in the Logfile
|
Objects of this type should be created by factory functions in the Logfile
|
||||||
|
@ -208,7 +210,7 @@ class SectionCtxMgr(object):
|
||||||
def __exit__(self, extype, value, traceback):
|
def __exit__(self, extype, value, traceback):
|
||||||
self.log.end_section(self.marker)
|
self.log.end_section(self.marker)
|
||||||
|
|
||||||
class Logfile(object):
|
class Logfile:
|
||||||
"""Generates an HTML-formatted log file containing multiple streams of
|
"""Generates an HTML-formatted log file containing multiple streams of
|
||||||
data, each represented in a well-delineated/-structured fashion."""
|
data, each represented in a well-delineated/-structured fashion."""
|
||||||
|
|
||||||
|
@ -322,8 +324,8 @@ $(document).ready(function () {
|
||||||
# The set of characters that should be represented as hexadecimal codes in
|
# The set of characters that should be represented as hexadecimal codes in
|
||||||
# the log file.
|
# the log file.
|
||||||
_nonprint = {ord('%')}
|
_nonprint = {ord('%')}
|
||||||
_nonprint.update({c for c in range(0, 32) if c not in (9, 10)})
|
_nonprint.update(c for c in range(0, 32) if c not in (9, 10))
|
||||||
_nonprint.update({c for c in range(127, 256)})
|
_nonprint.update(range(127, 256))
|
||||||
|
|
||||||
def _escape(self, data):
|
def _escape(self, data):
|
||||||
"""Render data format suitable for inclusion in an HTML document.
|
"""Render data format suitable for inclusion in an HTML document.
|
||||||
|
|
|
@ -6,9 +6,6 @@
|
||||||
|
|
||||||
# Test efi loader implementation
|
# Test efi loader implementation
|
||||||
|
|
||||||
import pytest
|
|
||||||
import u_boot_utils
|
|
||||||
|
|
||||||
"""
|
"""
|
||||||
Note: This test relies on boardenv_* containing configuration values to define
|
Note: This test relies on boardenv_* containing configuration values to define
|
||||||
which network environment is available for testing. Without this, the parts
|
which network environment is available for testing. Without this, the parts
|
||||||
|
@ -50,6 +47,9 @@ env__efi_loader_helloworld_file = {
|
||||||
}
|
}
|
||||||
"""
|
"""
|
||||||
|
|
||||||
|
import pytest
|
||||||
|
import u_boot_utils
|
||||||
|
|
||||||
net_set_up = False
|
net_set_up = False
|
||||||
|
|
||||||
def test_efi_pre_commands(u_boot_console):
|
def test_efi_pre_commands(u_boot_console):
|
||||||
|
@ -80,7 +80,7 @@ def test_efi_setup_dhcp(u_boot_console):
|
||||||
env_vars = u_boot_console.config.env.get('env__net_static_env_vars', None)
|
env_vars = u_boot_console.config.env.get('env__net_static_env_vars', None)
|
||||||
if not env_vars:
|
if not env_vars:
|
||||||
pytest.skip('No DHCP server available')
|
pytest.skip('No DHCP server available')
|
||||||
return None
|
return
|
||||||
|
|
||||||
u_boot_console.run_command('setenv autoload no')
|
u_boot_console.run_command('setenv autoload no')
|
||||||
output = u_boot_console.run_command('dhcp')
|
output = u_boot_console.run_command('dhcp')
|
||||||
|
@ -193,7 +193,7 @@ def test_efi_grub_net(u_boot_console):
|
||||||
check_smbios = u_boot_console.config.env.get('env__efi_loader_check_smbios', False)
|
check_smbios = u_boot_console.config.env.get('env__efi_loader_check_smbios', False)
|
||||||
if check_smbios:
|
if check_smbios:
|
||||||
u_boot_console.wait_for('grub>')
|
u_boot_console.wait_for('grub>')
|
||||||
output = u_boot_console.run_command('lsefisystab', wait_for_prompt=False, wait_for_echo=False)
|
u_boot_console.run_command('lsefisystab', wait_for_prompt=False, wait_for_echo=False)
|
||||||
u_boot_console.wait_for('SMBIOS')
|
u_boot_console.wait_for('SMBIOS')
|
||||||
|
|
||||||
# Then exit cleanly
|
# Then exit cleanly
|
||||||
|
|
|
@ -73,8 +73,7 @@ def test_efi_selftest_text_input(u_boot_console):
|
||||||
This function calls the text input EFI selftest.
|
This function calls the text input EFI selftest.
|
||||||
"""
|
"""
|
||||||
u_boot_console.run_command(cmd='setenv efi_selftest text input')
|
u_boot_console.run_command(cmd='setenv efi_selftest text input')
|
||||||
output = u_boot_console.run_command(cmd='bootefi selftest',
|
u_boot_console.run_command(cmd='bootefi selftest', wait_for_prompt=False)
|
||||||
wait_for_prompt=False)
|
|
||||||
m = u_boot_console.p.expect([r'To terminate type \'x\''])
|
m = u_boot_console.p.expect([r'To terminate type \'x\''])
|
||||||
if m != 0:
|
if m != 0:
|
||||||
raise Exception('No prompt for \'text input\' test')
|
raise Exception('No prompt for \'text input\' test')
|
||||||
|
@ -143,8 +142,7 @@ def test_efi_selftest_text_input_ex(u_boot_console):
|
||||||
This function calls the extended text input EFI selftest.
|
This function calls the extended text input EFI selftest.
|
||||||
"""
|
"""
|
||||||
u_boot_console.run_command(cmd='setenv efi_selftest extended text input')
|
u_boot_console.run_command(cmd='setenv efi_selftest extended text input')
|
||||||
output = u_boot_console.run_command(cmd='bootefi selftest',
|
u_boot_console.run_command(cmd='bootefi selftest', wait_for_prompt=False)
|
||||||
wait_for_prompt=False)
|
|
||||||
m = u_boot_console.p.expect([r'To terminate type \'CTRL\+x\''])
|
m = u_boot_console.p.expect([r'To terminate type \'CTRL\+x\''])
|
||||||
if m != 0:
|
if m != 0:
|
||||||
raise Exception('No prompt for \'text input\' test')
|
raise Exception('No prompt for \'text input\' test')
|
||||||
|
|
|
@ -2,8 +2,10 @@
|
||||||
# Copyright (c) 2015 Stephen Warren
|
# Copyright (c) 2015 Stephen Warren
|
||||||
# Copyright (c) 2015-2016, NVIDIA CORPORATION. All rights reserved.
|
# Copyright (c) 2015-2016, NVIDIA CORPORATION. All rights reserved.
|
||||||
|
|
||||||
# Logic to interact with U-Boot running on real hardware, typically via a
|
"""
|
||||||
# physical serial port.
|
Logic to interact with U-Boot running on real hardware, typically via a
|
||||||
|
physical serial port.
|
||||||
|
"""
|
||||||
|
|
||||||
import sys
|
import sys
|
||||||
from u_boot_spawn import Spawn
|
from u_boot_spawn import Spawn
|
||||||
|
|
|
@ -2,7 +2,9 @@
|
||||||
# Copyright (c) 2015 Stephen Warren
|
# Copyright (c) 2015 Stephen Warren
|
||||||
# Copyright (c) 2015-2016, NVIDIA CORPORATION. All rights reserved.
|
# Copyright (c) 2015-2016, NVIDIA CORPORATION. All rights reserved.
|
||||||
|
|
||||||
# Logic to interact with the sandbox port of U-Boot, running as a sub-process.
|
"""
|
||||||
|
Logic to interact with the sandbox port of U-Boot, running as a sub-process.
|
||||||
|
"""
|
||||||
|
|
||||||
import time
|
import time
|
||||||
from u_boot_spawn import Spawn
|
from u_boot_spawn import Spawn
|
||||||
|
|
|
@ -1,7 +1,9 @@
|
||||||
# SPDX-License-Identifier: GPL-2.0
|
# SPDX-License-Identifier: GPL-2.0
|
||||||
# Copyright (c) 2015-2016, NVIDIA CORPORATION. All rights reserved.
|
# Copyright (c) 2015-2016, NVIDIA CORPORATION. All rights reserved.
|
||||||
|
|
||||||
# Logic to spawn a sub-process and interact with its stdio.
|
"""
|
||||||
|
Logic to spawn a sub-process and interact with its stdio.
|
||||||
|
"""
|
||||||
|
|
||||||
import os
|
import os
|
||||||
import re
|
import re
|
||||||
|
@ -9,12 +11,12 @@ import pty
|
||||||
import signal
|
import signal
|
||||||
import select
|
import select
|
||||||
import time
|
import time
|
||||||
|
import traceback
|
||||||
|
|
||||||
class Timeout(Exception):
|
class Timeout(Exception):
|
||||||
"""An exception sub-class that indicates that a timeout occurred."""
|
"""An exception sub-class that indicates that a timeout occurred."""
|
||||||
pass
|
|
||||||
|
|
||||||
class Spawn(object):
|
class Spawn:
|
||||||
"""Represents the stdio of a freshly created sub-process. Commands may be
|
"""Represents the stdio of a freshly created sub-process. Commands may be
|
||||||
sent to the process, and responses waited for.
|
sent to the process, and responses waited for.
|
||||||
|
|
||||||
|
@ -58,14 +60,14 @@ class Spawn(object):
|
||||||
os.execvp(args[0], args)
|
os.execvp(args[0], args)
|
||||||
except:
|
except:
|
||||||
print('CHILD EXECEPTION:')
|
print('CHILD EXECEPTION:')
|
||||||
import traceback
|
|
||||||
traceback.print_exc()
|
traceback.print_exc()
|
||||||
finally:
|
finally:
|
||||||
os._exit(255)
|
os._exit(255)
|
||||||
|
|
||||||
try:
|
try:
|
||||||
self.poll = select.poll()
|
self.poll = select.poll()
|
||||||
self.poll.register(self.fd, select.POLLIN | select.POLLPRI | select.POLLERR | select.POLLHUP | select.POLLNVAL)
|
self.poll.register(self.fd, select.POLLIN | select.POLLPRI | select.POLLERR |
|
||||||
|
select.POLLHUP | select.POLLNVAL)
|
||||||
except:
|
except:
|
||||||
self.close()
|
self.close()
|
||||||
raise
|
raise
|
||||||
|
@ -106,7 +108,7 @@ class Spawn(object):
|
||||||
elif os.WIFSIGNALED(status):
|
elif os.WIFSIGNALED(status):
|
||||||
signum = os.WTERMSIG(status)
|
signum = os.WTERMSIG(status)
|
||||||
self.exit_code = -signum
|
self.exit_code = -signum
|
||||||
self.exit_info = 'signal %d (%s)' % (signum, signal.Signals(signum))
|
self.exit_info = 'signal %d (%s)' % (signum, signal.Signals(signum).name)
|
||||||
self.waited = True
|
self.waited = True
|
||||||
return False, self.exit_code, self.exit_info
|
return False, self.exit_code, self.exit_info
|
||||||
|
|
||||||
|
@ -196,13 +198,11 @@ class Spawn(object):
|
||||||
# shouldn't and explain why. This is much more friendly than
|
# shouldn't and explain why. This is much more friendly than
|
||||||
# just dying with an I/O error
|
# just dying with an I/O error
|
||||||
if err.errno == 5: # Input/output error
|
if err.errno == 5: # Input/output error
|
||||||
alive, exit_code, info = self.checkalive()
|
alive, _, info = self.checkalive()
|
||||||
if alive:
|
if alive:
|
||||||
raise
|
raise err
|
||||||
else:
|
raise ValueError('U-Boot exited with %s' % info)
|
||||||
raise ValueError('U-Boot exited with %s' % info)
|
raise err
|
||||||
else:
|
|
||||||
raise
|
|
||||||
if self.logfile_read:
|
if self.logfile_read:
|
||||||
self.logfile_read.write(c)
|
self.logfile_read.write(c)
|
||||||
self.buf += c
|
self.buf += c
|
||||||
|
@ -227,7 +227,7 @@ class Spawn(object):
|
||||||
"""
|
"""
|
||||||
|
|
||||||
os.close(self.fd)
|
os.close(self.fd)
|
||||||
for i in range(100):
|
for _ in range(100):
|
||||||
if not self.isalive():
|
if not self.isalive():
|
||||||
break
|
break
|
||||||
time.sleep(0.1)
|
time.sleep(0.1)
|
||||||
|
|
|
@ -1,17 +1,20 @@
|
||||||
# SPDX-License-Identifier: GPL-2.0
|
# SPDX-License-Identifier: GPL-2.0
|
||||||
# Copyright (c) 2016, NVIDIA CORPORATION. All rights reserved.
|
# Copyright (c) 2016, NVIDIA CORPORATION. All rights reserved.
|
||||||
|
|
||||||
# Utility code shared across multiple tests.
|
"""
|
||||||
|
Utility code shared across multiple tests.
|
||||||
|
"""
|
||||||
|
|
||||||
import hashlib
|
import hashlib
|
||||||
import inspect
|
import inspect
|
||||||
import os
|
import os
|
||||||
import os.path
|
import os.path
|
||||||
import pytest
|
import pathlib
|
||||||
import signal
|
import signal
|
||||||
import sys
|
import sys
|
||||||
import time
|
import time
|
||||||
import re
|
import re
|
||||||
|
import pytest
|
||||||
|
|
||||||
def md5sum_data(data):
|
def md5sum_data(data):
|
||||||
"""Calculate the MD5 hash of some data.
|
"""Calculate the MD5 hash of some data.
|
||||||
|
@ -48,7 +51,7 @@ def md5sum_file(fn, max_length=None):
|
||||||
data = fh.read(*params)
|
data = fh.read(*params)
|
||||||
return md5sum_data(data)
|
return md5sum_data(data)
|
||||||
|
|
||||||
class PersistentRandomFile(object):
|
class PersistentRandomFile:
|
||||||
"""Generate and store information about a persistent file containing
|
"""Generate and store information about a persistent file containing
|
||||||
random data."""
|
random data."""
|
||||||
|
|
||||||
|
@ -144,7 +147,7 @@ def wait_until_file_open_fails(fn, ignore_errors):
|
||||||
Nothing.
|
Nothing.
|
||||||
"""
|
"""
|
||||||
|
|
||||||
for i in range(100):
|
for _ in range(100):
|
||||||
fh = attempt_to_open_file(fn)
|
fh = attempt_to_open_file(fn)
|
||||||
if not fh:
|
if not fh:
|
||||||
return
|
return
|
||||||
|
@ -193,9 +196,9 @@ def run_and_log_expect_exception(u_boot_console, cmd, retcode, msg):
|
||||||
try:
|
try:
|
||||||
runner = u_boot_console.log.get_runner(cmd[0], sys.stdout)
|
runner = u_boot_console.log.get_runner(cmd[0], sys.stdout)
|
||||||
runner.run(cmd)
|
runner.run(cmd)
|
||||||
except Exception as e:
|
except Exception:
|
||||||
assert(retcode == runner.exit_status)
|
assert retcode == runner.exit_status
|
||||||
assert(msg in runner.output)
|
assert msg in runner.output
|
||||||
else:
|
else:
|
||||||
raise Exception("Expected an exception with retcode %d message '%s',"
|
raise Exception("Expected an exception with retcode %d message '%s',"
|
||||||
"but it was not raised" % (retcode, msg))
|
"but it was not raised" % (retcode, msg))
|
||||||
|
@ -280,17 +283,17 @@ class PersistentFileHelperCtxMgr(object):
|
||||||
if filename_timestamp < self.module_timestamp:
|
if filename_timestamp < self.module_timestamp:
|
||||||
self.log.action('Removing stale generated file ' +
|
self.log.action('Removing stale generated file ' +
|
||||||
self.filename)
|
self.filename)
|
||||||
os.unlink(self.filename)
|
pathlib.Path(self.filename).unlink()
|
||||||
|
|
||||||
def __exit__(self, extype, value, traceback):
|
def __exit__(self, extype, value, traceback):
|
||||||
if extype:
|
if extype:
|
||||||
try:
|
try:
|
||||||
os.path.unlink(self.filename)
|
pathlib.Path(self.filename).unlink()
|
||||||
except:
|
except Exception:
|
||||||
pass
|
pass
|
||||||
return
|
return
|
||||||
logged = False
|
logged = False
|
||||||
for i in range(20):
|
for _ in range(20):
|
||||||
filename_timestamp = os.path.getmtime(self.filename)
|
filename_timestamp = os.path.getmtime(self.filename)
|
||||||
if filename_timestamp > self.module_timestamp:
|
if filename_timestamp > self.module_timestamp:
|
||||||
break
|
break
|
||||||
|
|
|
@ -63,7 +63,7 @@ int main(int argc, char **argv)
|
||||||
{
|
{
|
||||||
FILE *f;
|
FILE *f;
|
||||||
int i, num;
|
int i, num;
|
||||||
uint64_t rela_start, rela_end, text_base;
|
uint64_t rela_start, rela_end, text_base, file_size;
|
||||||
|
|
||||||
if (argc != 5) {
|
if (argc != 5) {
|
||||||
fprintf(stderr, "Statically apply ELF rela relocations\n");
|
fprintf(stderr, "Statically apply ELF rela relocations\n");
|
||||||
|
@ -87,8 +87,7 @@ int main(int argc, char **argv)
|
||||||
return 3;
|
return 3;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (rela_start > rela_end || rela_start < text_base ||
|
if (rela_start > rela_end || rela_start < text_base) {
|
||||||
(rela_end - rela_start) % sizeof(Elf64_Rela)) {
|
|
||||||
fprintf(stderr, "%s: bad rela bounds\n", argv[0]);
|
fprintf(stderr, "%s: bad rela bounds\n", argv[0]);
|
||||||
return 3;
|
return 3;
|
||||||
}
|
}
|
||||||
|
@ -96,6 +95,21 @@ int main(int argc, char **argv)
|
||||||
rela_start -= text_base;
|
rela_start -= text_base;
|
||||||
rela_end -= text_base;
|
rela_end -= text_base;
|
||||||
|
|
||||||
|
fseek(f, 0, SEEK_END);
|
||||||
|
file_size = ftell(f);
|
||||||
|
rewind(f);
|
||||||
|
|
||||||
|
if (rela_end > file_size) {
|
||||||
|
// Most likely compiler inserted some section that didn't get
|
||||||
|
// objcopy-ed into the final binary
|
||||||
|
rela_end = file_size;
|
||||||
|
}
|
||||||
|
|
||||||
|
if ((rela_end - rela_start) % sizeof(Elf64_Rela)) {
|
||||||
|
fprintf(stderr, "%s: rela size isn't a multiple of Elf64_Rela\n", argv[0]);
|
||||||
|
return 3;
|
||||||
|
}
|
||||||
|
|
||||||
num = (rela_end - rela_start) / sizeof(Elf64_Rela);
|
num = (rela_end - rela_start) / sizeof(Elf64_Rela);
|
||||||
|
|
||||||
for (i = 0; i < num; i++) {
|
for (i = 0; i < num; i++) {
|
||||||
|
|
Loading…
Reference in a new issue