提交 daaa10fd 编写于 作者: T Tom Rini

Merge https://source.denx.de/u-boot/custodians/u-boot-x86

- Fixes for x86 build with Clang/LLVM compiler
- Tangier ACPI changes
- Edison SD card detect pin fix
- EFI on x86 doc update with latest instructions
- PXE utility fixes to align with latest x86 zboot implementation
......@@ -37,8 +37,9 @@ struct mrfld_family {
.npins = (e) - (s) + 1, \
}
/* Now we only support I2C family of pins */
/* Now we only support SD/SDIO and I2C families of pins */
static struct mrfld_family mrfld_families[] = {
MRFLD_FAMILY(3, 37, 56),
MRFLD_FAMILY(7, 101, 114),
};
......@@ -116,13 +117,35 @@ static int mrfld_pinconfig_protected(unsigned int pin, u32 mask, u32 bits)
debug("scu: v: 0x%x p: 0x%x bits: %d, mask: %d bufcfg: 0x%p\n",
v, (u32)bufcfg, bits, mask, bufcfg);
ret = scu_ipc_raw_command(IPCMSG_INDIRECT_WRITE, 0, &v, 4,
NULL, 0, (u32)bufcfg, 0);
return scu_ipc_raw_command(IPCMSG_INDIRECT_WRITE, 0, &v, 4, NULL, 0, (u32)bufcfg, 0);
}
static int mrfld_pinconfig(unsigned int pin, u32 mask, u32 bits)
{
struct mrfld_pinctrl *pinctrl;
struct udevice *dev;
void __iomem *bufcfg;
u32 v, value;
int ret;
ret = syscon_get_by_driver_data(X86_SYSCON_PINCONF, &dev);
if (ret)
pr_err("Failed to set mode via SCU for pin %u (%d)\n",
pin, ret);
return ret;
return ret;
pinctrl = dev_get_priv(dev);
bufcfg = mrfld_get_bufcfg(pinctrl, pin);
if (!bufcfg)
return -EINVAL;
value = readl(bufcfg);
v = (value & ~mask) | (bits & mask);
writel(v, bufcfg);
debug("v: 0x%x p: 0x%x bits: %d, mask: %d bufcfg: 0x%p\n",
v, (u32)bufcfg, bits, mask, bufcfg);
return 0;
}
static int mrfld_pinctrl_cfg_pin(ofnode pin_node)
......@@ -133,11 +156,6 @@ static int mrfld_pinctrl_cfg_pin(ofnode pin_node)
u32 mask;
int ret;
/* For now we only support just protected Family of pins */
is_protected = ofnode_read_bool(pin_node, "protected");
if (!is_protected)
return -ENOTSUPP;
pad_offset = ofnode_read_s32_default(pin_node, "pad-offset", -1);
if (pad_offset == -1)
return -EINVAL;
......@@ -152,7 +170,13 @@ static int mrfld_pinctrl_cfg_pin(ofnode pin_node)
if (mode & ~mask)
return -ENOTSUPP;
ret = mrfld_pinconfig_protected(pad_offset, mask, mode);
is_protected = ofnode_read_bool(pin_node, "protected");
if (is_protected)
ret = mrfld_pinconfig_protected(pad_offset, mask, mode);
else
ret = mrfld_pinconfig(pad_offset, mask, mode);
if (ret)
pr_err("Failed to set mode for pin %u (%d)\n", pad_offset, ret);
return ret;
}
......
......@@ -825,6 +825,7 @@
* Refer to EDS-Vol2-22.3
* [14:8] steps of delay for HS400, each 125ps
* [6:0] steps of delay for SDR104/HS200, each 125ps
*/
/*
* EMMC TX DATA Delay 2
......
......@@ -94,6 +94,12 @@
sdcard: mmc@ff3fa000 {
compatible = "intel,sdhci-tangier";
reg = <0xff3fa000 0x1000>;
/*
* In the disconnected state of the SD Card Detection pin
* the read value is always the same and inverted to what
* we are expecting in the code.
*/
cd-inverted;
};
pmu: power@ff00b000 {
......@@ -131,6 +137,17 @@
compatible = "intel,pinctrl-tangier";
reg = <0xff0c0000 0x8000>;
/*
* Disconnect SD card detection pin, so it won't affect
* the reality on two different PCB designs where it's
* using the opposite signaling: Edison/Arduino uses
* Active Low, while SparkFun went with Active High.
*/
sd_cd@0 {
pad-offset = <37>;
mode-func = <3>;
};
/*
* Initial configuration came from the firmware.
* Which quite likely has been used in the phones, where I2C #8,
......
......@@ -123,10 +123,7 @@ Device (PCI0)
}
})
Method (_STA)
{
Return (STA_VISIBLE)
}
Name (_STA, STA_VISIBLE)
}
Device (SDHC)
......@@ -138,10 +135,7 @@ Device (PCI0)
})
Name (PSTS, Zero)
Method (_STA)
{
Return (STA_VISIBLE)
}
Name (_STA, STA_VISIBLE)
Method (_PS3, 0, NotSerialized)
{
......@@ -168,10 +162,7 @@ Device (PCI0)
GPIO
})
Method (_STA)
{
Return (STA_VISIBLE)
}
Name (_STA, STA_VISIBLE)
Method (_RMV, 0, NotSerialized)
{
......@@ -203,10 +194,8 @@ Device (PCI0)
Device (BRC2)
{
Name (_ADR, 0x02)
Method (_STA, 0, NotSerialized)
{
Return (STA_VISIBLE)
}
Name (_STA, STA_VISIBLE)
Method (_RMV, 0, NotSerialized)
{
......@@ -257,20 +246,14 @@ Device (PCI0)
}
})
Method (_STA, 0, NotSerialized)
{
Return (STA_VISIBLE)
}
Name (_STA, STA_VISIBLE)
}
Device (I2C1)
{
Name (_ADR, 0x00080000)
Method (_STA, 0, NotSerialized)
{
Return (STA_VISIBLE)
}
Name (_STA, STA_VISIBLE)
Name (SSCN, Package ()
{
......@@ -303,10 +286,7 @@ Device (PCI0)
{
Name (_ADR, 0x00090001)
Method (_STA, 0, NotSerialized)
{
Return (STA_VISIBLE)
}
Name (_STA, STA_VISIBLE)
Name (SSCN, Package ()
{
......@@ -328,10 +308,7 @@ Device (PCI0)
{
Name (_ADR, 0x000c0000)
Method (_STA)
{
Return (STA_VISIBLE)
}
Name (_STA, STA_VISIBLE)
Name (AVBL, Zero)
Method (_REG, 2, NotSerialized)
......@@ -361,10 +338,7 @@ Device (PCI0)
^IPC1.PMIC
})
Method (_STA, 0, NotSerialized)
{
Return (STA_VISIBLE)
}
Name (_STA, STA_VISIBLE)
Device (RHUB)
{
......@@ -404,20 +378,14 @@ Device (PCI0)
{
Name (_ADR, 0x00170000)
Method (_STA, 0, NotSerialized)
{
Return (STA_VISIBLE)
}
Name (_STA, STA_VISIBLE)
}
Device (HSU0)
{
Name (_ADR, 0x00040001)
Method (_STA, 0, NotSerialized)
{
Return (STA_VISIBLE)
}
Name (_STA, STA_VISIBLE)
Device (BTH0)
{
......@@ -428,10 +396,7 @@ Device (PCI0)
HSU0
})
Method (_STA, 0, NotSerialized)
{
Return (STA_VISIBLE)
}
Name (_STA, STA_VISIBLE)
Name (RBUF, ResourceTemplate()
{
......@@ -466,10 +431,7 @@ Device (PCI0)
{
Name (_ADR, 0x00130000)
Method (_STA, 0, NotSerialized)
{
Return (STA_VISIBLE)
}
Name (_STA, STA_VISIBLE)
Device (PMIC)
{
......@@ -481,10 +443,7 @@ Device (PCI0)
IPC1
})
Method (_STA, 0, NotSerialized)
{
Return (STA_VISIBLE)
}
Name (_STA, STA_VISIBLE)
Name (RBUF, ResourceTemplate()
{
......@@ -554,10 +513,7 @@ Device (PCI0)
Name (_ADR, 0x00150000)
Name (_UID, Zero)
Method (_STA, 0, NotSerialized)
{
Return (STA_VISIBLE)
}
Name (_STA, STA_VISIBLE)
Name (RBUF, ResourceTemplate ()
{
......@@ -594,8 +550,5 @@ Device (FLIS)
Return (RBUF)
}
Method (_STA, 0, NotSerialized)
{
Return (STA_VISIBLE)
}
Name (_STA, STA_VISIBLE)
}
......@@ -7,7 +7,7 @@
/* i8254.h Intel 8254 PIT registers */
#ifndef _ASMI386_I8254_H_
#define _ASMI386_I8954_H_
#define _ASMI386_I8254_H_
#define PIT_T0 0x00 /* PIT channel 0 count/status */
#define PIT_T1 0x01 /* PIT channel 1 count/status */
......@@ -53,4 +53,4 @@ int i8254_enable_beep(uint frequency_hz);
*/
void i8254_disable_beep(void);
#endif /* _ASMI386_I8954_H_ */
#endif /* _ASMI386_I8254_H_ */
......@@ -441,13 +441,18 @@ skip_overlay:
static int label_boot(struct cmd_tbl *cmdtp, struct pxe_label *label)
{
char *bootm_argv[] = { "bootm", NULL, NULL, NULL, NULL };
char *zboot_argv[] = { "zboot", NULL, "0", NULL, NULL };
char *kernel_addr = NULL;
char *initrd_addr_str = NULL;
char initrd_filesize[10];
char initrd_str[28];
char mac_str[29] = "";
char ip_str[68] = "";
char *fit_addr = NULL;
int bootm_argc = 2;
int zboot_argc = 3;
int len = 0;
ulong kernel_addr;
ulong kernel_addr_r;
void *buf;
label_print(label);
......@@ -473,11 +478,12 @@ static int label_boot(struct cmd_tbl *cmdtp, struct pxe_label *label)
return 1;
}
bootm_argv[2] = initrd_str;
strncpy(bootm_argv[2], env_get("ramdisk_addr_r"), 18);
strcat(bootm_argv[2], ":");
strncat(bootm_argv[2], env_get("filesize"), 9);
bootm_argc = 3;
initrd_addr_str = env_get("ramdisk_addr_r");
strncpy(initrd_filesize, env_get("filesize"), 9);
strncpy(initrd_str, initrd_addr_str, 18);
strcat(initrd_str, ":");
strncat(initrd_str, initrd_filesize, 9);
}
if (get_relfile_envaddr(cmdtp, label->kernel, "kernel_addr_r") < 0) {
......@@ -528,18 +534,19 @@ static int label_boot(struct cmd_tbl *cmdtp, struct pxe_label *label)
printf("append: %s\n", finalbootargs);
}
bootm_argv[1] = env_get("kernel_addr_r");
kernel_addr = env_get("kernel_addr_r");
/* for FIT, append the configuration identifier */
if (label->config) {
int len = strlen(bootm_argv[1]) + strlen(label->config) + 1;
int len = strlen(kernel_addr) + strlen(label->config) + 1;
fit_addr = malloc(len);
if (!fit_addr) {
printf("malloc fail (FIT address)\n");
return 1;
}
snprintf(fit_addr, len, "%s%s", bootm_argv[1], label->config);
bootm_argv[1] = fit_addr;
snprintf(fit_addr, len, "%s%s", kernel_addr, label->config);
kernel_addr = fit_addr;
}
/*
......@@ -643,6 +650,18 @@ static int label_boot(struct cmd_tbl *cmdtp, struct pxe_label *label)
}
}
bootm_argv[1] = kernel_addr;
zboot_argv[1] = kernel_addr;
if (initrd_addr_str) {
bootm_argv[2] = initrd_str;
bootm_argc = 3;
zboot_argv[3] = initrd_addr_str;
zboot_argv[4] = initrd_filesize;
zboot_argc = 5;
}
if (!bootm_argv[3])
bootm_argv[3] = env_get("fdt_addr");
......@@ -652,8 +671,8 @@ static int label_boot(struct cmd_tbl *cmdtp, struct pxe_label *label)
bootm_argc = 4;
}
kernel_addr = genimg_get_kernel_addr(bootm_argv[1]);
buf = map_sysmem(kernel_addr, 0);
kernel_addr_r = genimg_get_kernel_addr(kernel_addr);
buf = map_sysmem(kernel_addr_r, 0);
/* Try bootm for legacy and FIT format image */
if (genimg_get_format(buf) != IMAGE_FORMAT_INVALID)
do_bootm(cmdtp, 0, bootm_argc, bootm_argv);
......@@ -665,7 +684,7 @@ static int label_boot(struct cmd_tbl *cmdtp, struct pxe_label *label)
do_bootz(cmdtp, 0, bootm_argc, bootm_argv);
/* Try booting an x86_64 Linux kernel image */
else if (IS_ENABLED(CONFIG_CMD_ZBOOT))
do_zboot_parent(cmdtp, 0, bootm_argc, bootm_argv, NULL);
do_zboot_parent(cmdtp, 0, zboot_argc, zboot_argv, NULL);
unmap_sysmem(buf);
......
......@@ -72,17 +72,19 @@ You will end up with one of these files depending on what you build for:
Trying it out
-------------
QEMU is an emulator and it can emulate an x86 machine. Please make sure your
QEMU version is 2.3.0 or above to test this. You can run the payload with
QEMU version is 6.0.0 or above to test this. You can run the payload with
something like this::
mkdir /tmp/efi
cp /path/to/u-boot*.efi /tmp/efi
qemu-system-x86_64 -bios bios.bin -hda fat:/tmp/efi/
qemu-system-x86_64 -pflash edk2-x86_64-code.fd -hda fat:rw:/tmp/efi/
Add -nographic if you want to use the terminal for output. Once it starts
type 'fs0:u-boot-payload.efi' to run the payload or 'fs0:u-boot-app.efi' to
run the application. 'bios.bin' is the EFI 'BIOS'. Check [2] to obtain a
prebuilt EFI BIOS for QEMU or you can build one from source as well.
run the application. 'edk2-x86_64-code.fd' is the EFI 'BIOS'. QEMU already
ships both 32-bit and 64-bit EFI BIOS images. For 32-bit EFI 'BIOS' image,
use 'edk2-i386-code.fd'.
To try it on real hardware, put u-boot-app.efi on a suitable boot medium,
such as a USB stick. Then you can type something like this to start it::
......@@ -232,4 +234,4 @@ Google, Inc
July 2015
* [1] http://www.qemu.org
* [2] http://www.tianocore.org/ovmf/
* [2] https://github.com/tianocore/tianocore.github.io/wiki/OVMF
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册