mirror of
https://github.com/u-boot/u-boot.git
synced 2025-04-24 22:36:05 +00:00
Fix recent changes to serial API for driver model
Buildman clang support and a few fixes Small fixes to 'dm tree' and regmap test Improve sandbox build compatibility A few other minor fixes -----BEGIN PGP SIGNATURE----- iQEzBAABCgAdFiEEslwAIq+Gp8wWVbYnfxc6PpAIreYFAlw+AlIACgkQfxc6PpAI reYchAf+L/P5JsLoCKAY84v11eWQkCS44idAYStD8Q023dyuyNC/W6G3qEQVGkHu SXBzNrZ5wSJanN5I3h3ktJ7yfMOYIvSO2qLHphxDstPaZbCY4Zac6NywHrHxQpA9 fbSilQRbcVWrPo5rsjjZhXmMdQRZVOmGD6CYZj1AihWAiHfYth7f6laNWNTWQA8C z+aoiF70t/PbvwFbgdzzYOjoGdXI9XML0xTqdLWRlsBKjf3z54pCV6LmN2xrsrDZ k7lr+x7ajJUFhivxzjowf4aOjhDB+/+I3sr+hJ5vkMM0Kqg14bbEU+xJRGpDc18K QPvVHT5JGe/nq1cZXuCqzrYxTrrA7A== =w9ln -----END PGP SIGNATURE----- Merge tag 'dm-pull-15jan19' of git://git.denx.de/u-boot-dm Fix recent changes to serial API for driver model Buildman clang support and a few fixes Small fixes to 'dm tree' and regmap test Improve sandbox build compatibility A few other minor fixes
This commit is contained in:
commit
aac0c29d4b
25 changed files with 174 additions and 96 deletions
13
.travis.yml
13
.travis.yml
|
@ -109,16 +109,9 @@ script:
|
||||||
#
|
#
|
||||||
# From buildman, exit code 129 means warnings only. If we've been asked to
|
# From buildman, exit code 129 means warnings only. If we've been asked to
|
||||||
# use clang only do one configuration.
|
# use clang only do one configuration.
|
||||||
- if [[ "${TOOLCHAIN}" == "clang" ]]; then
|
- if [[ "${BUILDMAN}" != "" ]]; then
|
||||||
ret=0;
|
ret=0;
|
||||||
make O=../.bm-work/${TEST_PY_BD} HOSTCC=clang-7 CC=clang-7 -j$(nproc)
|
tools/buildman/buildman -P -E ${BUILDMAN} ${OVERRIDE}|| ret=$?;
|
||||||
KCFLAGS=-Werror sandbox_config all || ret=$?;
|
|
||||||
if [[ $ret -ne 0 ]]; then
|
|
||||||
exit $ret;
|
|
||||||
fi;
|
|
||||||
elif [[ "${BUILDMAN}" != "" ]]; then
|
|
||||||
ret=0;
|
|
||||||
tools/buildman/buildman -P -E ${BUILDMAN} || ret=$?;
|
|
||||||
if [[ $ret -ne 0 && $ret -ne 129 ]]; then
|
if [[ $ret -ne 0 && $ret -ne 129 ]]; then
|
||||||
tools/buildman/buildman -sdeP ${BUILDMAN};
|
tools/buildman/buildman -sdeP ${BUILDMAN};
|
||||||
exit $ret;
|
exit $ret;
|
||||||
|
@ -351,7 +344,7 @@ matrix:
|
||||||
env:
|
env:
|
||||||
- TEST_PY_BD="sandbox"
|
- TEST_PY_BD="sandbox"
|
||||||
BUILDMAN="^sandbox$"
|
BUILDMAN="^sandbox$"
|
||||||
TOOLCHAIN="clang"
|
OVERRIDE="clang-7"
|
||||||
- name: "test/py sandbox_spl"
|
- name: "test/py sandbox_spl"
|
||||||
env:
|
env:
|
||||||
- TEST_PY_BD="sandbox_spl"
|
- TEST_PY_BD="sandbox_spl"
|
||||||
|
|
|
@ -11,11 +11,9 @@ PLATFORM_LIBS += -lrt
|
||||||
ifneq ($(NO_SDL),)
|
ifneq ($(NO_SDL),)
|
||||||
PLATFORM_CPPFLAGS += -DSANDBOX_NO_SDL
|
PLATFORM_CPPFLAGS += -DSANDBOX_NO_SDL
|
||||||
else
|
else
|
||||||
ifdef CONFIG_SANDBOX_SDL
|
|
||||||
PLATFORM_LIBS += $(shell sdl-config --libs)
|
PLATFORM_LIBS += $(shell sdl-config --libs)
|
||||||
PLATFORM_CPPFLAGS += $(shell sdl-config --cflags)
|
PLATFORM_CPPFLAGS += $(shell sdl-config --cflags)
|
||||||
endif
|
endif
|
||||||
endif
|
|
||||||
|
|
||||||
cmd_u-boot__ = $(CC) -o $@ -Wl,-T u-boot.lds $(u-boot-init) \
|
cmd_u-boot__ = $(CC) -o $@ -Wl,-T u-boot.lds $(u-boot-init) \
|
||||||
-Wl,--start-group $(u-boot-main) -Wl,--end-group \
|
-Wl,--start-group $(u-boot-main) -Wl,--end-group \
|
||||||
|
|
|
@ -6,7 +6,7 @@
|
||||||
#include <errno.h>
|
#include <errno.h>
|
||||||
#include <unistd.h>
|
#include <unistd.h>
|
||||||
#include <linux/input.h>
|
#include <linux/input.h>
|
||||||
#include <SDL/SDL.h>
|
#include <SDL.h>
|
||||||
#include <asm/state.h>
|
#include <asm/state.h>
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
@ -100,11 +100,13 @@
|
||||||
eeprom@2c {
|
eeprom@2c {
|
||||||
reg = <0x2c>;
|
reg = <0x2c>;
|
||||||
compatible = "i2c-eeprom";
|
compatible = "i2c-eeprom";
|
||||||
|
sandbox,emul = <&emul_eeprom>;
|
||||||
};
|
};
|
||||||
|
|
||||||
rtc_0: rtc@43 {
|
rtc_0: rtc@43 {
|
||||||
reg = <0x43>;
|
reg = <0x43>;
|
||||||
compatible = "sandbox-rtc";
|
compatible = "sandbox-rtc";
|
||||||
|
sandbox,emul = <&emul0>;
|
||||||
};
|
};
|
||||||
sandbox_pmic: sandbox_pmic {
|
sandbox_pmic: sandbox_pmic {
|
||||||
reg = <0x40>;
|
reg = <0x40>;
|
||||||
|
@ -115,18 +117,14 @@
|
||||||
};
|
};
|
||||||
|
|
||||||
i2c_emul: emul {
|
i2c_emul: emul {
|
||||||
#address-cells = <1>;
|
|
||||||
#size-cells = <0>;
|
|
||||||
reg = <0xff>;
|
reg = <0xff>;
|
||||||
compatible = "sandbox,i2c-emul-parent";
|
compatible = "sandbox,i2c-emul-parent";
|
||||||
emul-eeprom {
|
emul_eeprom: emul-eeprom {
|
||||||
reg = <0x2c>;
|
|
||||||
compatible = "sandbox,i2c-eeprom";
|
compatible = "sandbox,i2c-eeprom";
|
||||||
sandbox,filename = "i2c.bin";
|
sandbox,filename = "i2c.bin";
|
||||||
sandbox,size = <256>;
|
sandbox,size = <256>;
|
||||||
};
|
};
|
||||||
emul0 {
|
emul0: emul0 {
|
||||||
reg = <0x43>;
|
|
||||||
compatible = "sandbox,i2c-rtc";
|
compatible = "sandbox,i2c-rtc";
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
|
@ -90,11 +90,13 @@
|
||||||
eeprom@2c {
|
eeprom@2c {
|
||||||
reg = <0x2c>;
|
reg = <0x2c>;
|
||||||
compatible = "i2c-eeprom";
|
compatible = "i2c-eeprom";
|
||||||
|
sandbox,emul = <&emul_eeprom>;
|
||||||
};
|
};
|
||||||
|
|
||||||
rtc_0: rtc@43 {
|
rtc_0: rtc@43 {
|
||||||
reg = <0x43>;
|
reg = <0x43>;
|
||||||
compatible = "sandbox-rtc";
|
compatible = "sandbox-rtc";
|
||||||
|
sandbox,emul = <&emul0>;
|
||||||
};
|
};
|
||||||
sandbox_pmic: sandbox_pmic {
|
sandbox_pmic: sandbox_pmic {
|
||||||
reg = <0x40>;
|
reg = <0x40>;
|
||||||
|
@ -107,12 +109,12 @@
|
||||||
i2c_emul: emul {
|
i2c_emul: emul {
|
||||||
reg = <0xff>;
|
reg = <0xff>;
|
||||||
compatible = "sandbox,i2c-emul-parent";
|
compatible = "sandbox,i2c-emul-parent";
|
||||||
emul-eeprom {
|
emul_eeprom: emul-eeprom {
|
||||||
compatible = "sandbox,i2c-eeprom";
|
compatible = "sandbox,i2c-eeprom";
|
||||||
sandbox,filename = "i2c.bin";
|
sandbox,filename = "i2c.bin";
|
||||||
sandbox,size = <256>;
|
sandbox,size = <256>;
|
||||||
};
|
};
|
||||||
emul0 {
|
emul0: emul0 {
|
||||||
compatible = "sandbox,i2c-rtc";
|
compatible = "sandbox,i2c-rtc";
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
|
@ -173,6 +173,18 @@ static inline void _outsw(volatile u16 *port, const void *buf, int ns)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static inline void memset_io(volatile void *addr, unsigned char val, int count)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
static inline void memcpy_fromio(void *dst, const volatile void *src, int count)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
static inline void memcpy_toio(volatile void *dst, const void *src, int count)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
#define insw(port, buf, ns) _insw((u16 *)port, buf, ns)
|
#define insw(port, buf, ns) _insw((u16 *)port, buf, ns)
|
||||||
#define outsw(port, buf, ns) _outsw((u16 *)port, buf, ns)
|
#define outsw(port, buf, ns) _outsw((u16 *)port, buf, ns)
|
||||||
|
|
||||||
|
|
|
@ -342,6 +342,7 @@ static void acpi_create_spcr(struct acpi_spcr *spcr)
|
||||||
struct acpi_table_header *header = &(spcr->header);
|
struct acpi_table_header *header = &(spcr->header);
|
||||||
struct serial_device_info serial_info = {0};
|
struct serial_device_info serial_info = {0};
|
||||||
ulong serial_address, serial_offset;
|
ulong serial_address, serial_offset;
|
||||||
|
struct udevice *dev;
|
||||||
uint serial_config;
|
uint serial_config;
|
||||||
uint serial_width;
|
uint serial_width;
|
||||||
int access_size;
|
int access_size;
|
||||||
|
@ -353,7 +354,10 @@ static void acpi_create_spcr(struct acpi_spcr *spcr)
|
||||||
header->length = sizeof(struct acpi_spcr);
|
header->length = sizeof(struct acpi_spcr);
|
||||||
header->revision = 2;
|
header->revision = 2;
|
||||||
|
|
||||||
ret = serial_getinfo(&serial_info);
|
/* Read the device once, here. It is reused below */
|
||||||
|
ret = uclass_first_device_err(UCLASS_SERIAL, &dev);
|
||||||
|
if (!ret)
|
||||||
|
ret = serial_getinfo(dev, &serial_info);
|
||||||
if (ret)
|
if (ret)
|
||||||
serial_info.type = SERIAL_CHIP_UNKNOWN;
|
serial_info.type = SERIAL_CHIP_UNKNOWN;
|
||||||
|
|
||||||
|
@ -431,9 +435,9 @@ static void acpi_create_spcr(struct acpi_spcr *spcr)
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
ret = serial_getconfig(&serial_config);
|
serial_config = SERIAL_DEFAULT_CONFIG;
|
||||||
if (ret)
|
if (dev)
|
||||||
serial_config = SERIAL_DEFAULT_CONFIG;
|
ret = serial_getconfig(dev, &serial_config);
|
||||||
|
|
||||||
spcr->parity = SERIAL_GET_PARITY(serial_config);
|
spcr->parity = SERIAL_GET_PARITY(serial_config);
|
||||||
spcr->stop_bits = SERIAL_GET_STOP(serial_config);
|
spcr->stop_bits = SERIAL_GET_STOP(serial_config);
|
||||||
|
|
|
@ -1025,7 +1025,7 @@ static u64 of_bus_default_map(fdt32_t *addr, const fdt32_t *range,
|
||||||
s = fdt_read_number(range + na + pna, ns);
|
s = fdt_read_number(range + na + pna, ns);
|
||||||
da = fdt_read_number(addr, na);
|
da = fdt_read_number(addr, na);
|
||||||
|
|
||||||
debug("OF: default map, cp=%llu, s=%llu, da=%llu\n", cp, s, da);
|
debug("OF: default map, cp=%llx, s=%llx, da=%llx\n", cp, s, da);
|
||||||
|
|
||||||
if (da < cp || da >= (cp + s))
|
if (da < cp || da >= (cp + s))
|
||||||
return OF_BAD_ADDR;
|
return OF_BAD_ADDR;
|
||||||
|
@ -1080,7 +1080,7 @@ static u64 of_bus_isa_map(fdt32_t *addr, const fdt32_t *range,
|
||||||
s = fdt_read_number(range + na + pna, ns);
|
s = fdt_read_number(range + na + pna, ns);
|
||||||
da = fdt_read_number(addr + 1, na - 1);
|
da = fdt_read_number(addr + 1, na - 1);
|
||||||
|
|
||||||
debug("OF: ISA map, cp=%llu, s=%llu, da=%llu\n", cp, s, da);
|
debug("OF: ISA map, cp=%llx, s=%llx, da=%llx\n", cp, s, da);
|
||||||
|
|
||||||
if (da < cp || da >= (cp + s))
|
if (da < cp || da >= (cp + s))
|
||||||
return OF_BAD_ADDR;
|
return OF_BAD_ADDR;
|
||||||
|
|
|
@ -16,7 +16,7 @@ static void show_devices(struct udevice *dev, int depth, int last_flag)
|
||||||
struct udevice *child;
|
struct udevice *child;
|
||||||
|
|
||||||
/* print the first 20 characters to not break the tree-format. */
|
/* print the first 20 characters to not break the tree-format. */
|
||||||
printf(" %-10.10s %d [ %c ] %-20.20s ", dev->uclass->uc_drv->name,
|
printf(" %-10.10s %2d [ %c ] %-20.20s ", dev->uclass->uc_drv->name,
|
||||||
dev_get_uclass_index(dev, NULL),
|
dev_get_uclass_index(dev, NULL),
|
||||||
dev->flags & DM_FLAG_ACTIVATED ? '+' : ' ', dev->driver->name);
|
dev->flags & DM_FLAG_ACTIVATED ? '+' : ' ', dev->driver->name);
|
||||||
|
|
||||||
|
@ -49,7 +49,7 @@ void dm_dump_all(void)
|
||||||
|
|
||||||
root = dm_root();
|
root = dm_root();
|
||||||
if (root) {
|
if (root) {
|
||||||
printf(" Class index Probed Driver Name\n");
|
printf(" Class Index Probed Driver Name\n");
|
||||||
printf("-----------------------------------------------------------\n");
|
printf("-----------------------------------------------------------\n");
|
||||||
show_devices(root, -1, 0);
|
show_devices(root, -1, 0);
|
||||||
}
|
}
|
||||||
|
|
|
@ -152,7 +152,6 @@ static int sb_eth_raw_ofdata_to_platdata(struct udevice *dev)
|
||||||
struct eth_pdata *pdata = dev_get_platdata(dev);
|
struct eth_pdata *pdata = dev_get_platdata(dev);
|
||||||
struct eth_sandbox_raw_priv *priv = dev_get_priv(dev);
|
struct eth_sandbox_raw_priv *priv = dev_get_priv(dev);
|
||||||
const char *ifname;
|
const char *ifname;
|
||||||
u32 local;
|
|
||||||
int ret;
|
int ret;
|
||||||
|
|
||||||
pdata->iobase = dev_read_addr(dev);
|
pdata->iobase = dev_read_addr(dev);
|
||||||
|
@ -173,10 +172,10 @@ static int sb_eth_raw_ofdata_to_platdata(struct udevice *dev)
|
||||||
priv->host_ifindex, priv->host_ifname);
|
priv->host_ifindex, priv->host_ifname);
|
||||||
}
|
}
|
||||||
|
|
||||||
local = sandbox_eth_raw_os_is_local(priv->host_ifname);
|
ret = sandbox_eth_raw_os_is_local(priv->host_ifname);
|
||||||
if (local < 0)
|
if (ret < 0)
|
||||||
return local;
|
return ret;
|
||||||
priv->local = local;
|
priv->local = ret;
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
|
@ -294,49 +294,40 @@ void serial_setbrg(void)
|
||||||
ops->setbrg(gd->cur_serial_dev, gd->baudrate);
|
ops->setbrg(gd->cur_serial_dev, gd->baudrate);
|
||||||
}
|
}
|
||||||
|
|
||||||
int serial_getconfig(uint *config)
|
int serial_getconfig(struct udevice *dev, uint *config)
|
||||||
{
|
{
|
||||||
struct dm_serial_ops *ops;
|
struct dm_serial_ops *ops;
|
||||||
|
|
||||||
if (!gd->cur_serial_dev)
|
ops = serial_get_ops(dev);
|
||||||
return 0;
|
|
||||||
|
|
||||||
ops = serial_get_ops(gd->cur_serial_dev);
|
|
||||||
if (ops->getconfig)
|
if (ops->getconfig)
|
||||||
return ops->getconfig(gd->cur_serial_dev, config);
|
return ops->getconfig(dev, config);
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
int serial_setconfig(uint config)
|
int serial_setconfig(struct udevice *dev, uint config)
|
||||||
{
|
{
|
||||||
struct dm_serial_ops *ops;
|
struct dm_serial_ops *ops;
|
||||||
|
|
||||||
if (!gd->cur_serial_dev)
|
ops = serial_get_ops(dev);
|
||||||
return 0;
|
|
||||||
|
|
||||||
ops = serial_get_ops(gd->cur_serial_dev);
|
|
||||||
if (ops->setconfig)
|
if (ops->setconfig)
|
||||||
return ops->setconfig(gd->cur_serial_dev, config);
|
return ops->setconfig(dev, config);
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
int serial_getinfo(struct serial_device_info *info)
|
int serial_getinfo(struct udevice *dev, struct serial_device_info *info)
|
||||||
{
|
{
|
||||||
struct dm_serial_ops *ops;
|
struct dm_serial_ops *ops;
|
||||||
|
|
||||||
if (!gd->cur_serial_dev)
|
|
||||||
return -ENODEV;
|
|
||||||
|
|
||||||
if (!info)
|
if (!info)
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
|
|
||||||
info->baudrate = gd->baudrate;
|
info->baudrate = gd->baudrate;
|
||||||
|
|
||||||
ops = serial_get_ops(gd->cur_serial_dev);
|
ops = serial_get_ops(dev);
|
||||||
if (ops->getinfo)
|
if (ops->getinfo)
|
||||||
return ops->getinfo(gd->cur_serial_dev, info);
|
return ops->getinfo(dev, info);
|
||||||
|
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
}
|
}
|
||||||
|
|
|
@ -351,8 +351,6 @@ void smp_set_core_boot_addr(unsigned long addr, int corenr);
|
||||||
void smp_kick_all_cpus(void);
|
void smp_kick_all_cpus(void);
|
||||||
|
|
||||||
/* $(CPU)/serial.c */
|
/* $(CPU)/serial.c */
|
||||||
struct serial_device_info;
|
|
||||||
|
|
||||||
int serial_init (void);
|
int serial_init (void);
|
||||||
void serial_setbrg (void);
|
void serial_setbrg (void);
|
||||||
void serial_putc (const char);
|
void serial_putc (const char);
|
||||||
|
@ -360,9 +358,6 @@ void serial_putc_raw(const char);
|
||||||
void serial_puts (const char *);
|
void serial_puts (const char *);
|
||||||
int serial_getc (void);
|
int serial_getc (void);
|
||||||
int serial_tstc (void);
|
int serial_tstc (void);
|
||||||
int serial_getconfig(uint *config);
|
|
||||||
int serial_setconfig(uint config);
|
|
||||||
int serial_getinfo(struct serial_device_info *info);
|
|
||||||
|
|
||||||
/* $(CPU)/speed.c */
|
/* $(CPU)/speed.c */
|
||||||
int get_clocks (void);
|
int get_clocks (void);
|
||||||
|
|
|
@ -73,7 +73,8 @@ static inline int log_uc_cat(enum uclass_id id)
|
||||||
* @return 0 if log record was emitted, -ve on error
|
* @return 0 if log record was emitted, -ve on error
|
||||||
*/
|
*/
|
||||||
int _log(enum log_category_t cat, enum log_level_t level, const char *file,
|
int _log(enum log_category_t cat, enum log_level_t level, const char *file,
|
||||||
int line, const char *func, const char *fmt, ...);
|
int line, const char *func, const char *fmt, ...)
|
||||||
|
__attribute__ ((format (__printf__, 6, 7)));
|
||||||
|
|
||||||
/* Define this at the top of a file to add a prefix to debug messages */
|
/* Define this at the top of a file to add a prefix to debug messages */
|
||||||
#ifndef pr_fmt
|
#ifndef pr_fmt
|
||||||
|
|
|
@ -248,6 +248,8 @@ int regmap_raw_read_range(struct regmap *map, uint range_num, uint offset,
|
||||||
* @cond: Break condition (usually involving @val)
|
* @cond: Break condition (usually involving @val)
|
||||||
* @sleep_us: Maximum time to sleep between reads in us (0 tight-loops).
|
* @sleep_us: Maximum time to sleep between reads in us (0 tight-loops).
|
||||||
* @timeout_ms: Timeout in ms, 0 means never timeout
|
* @timeout_ms: Timeout in ms, 0 means never timeout
|
||||||
|
* @test_add_time: Used for sandbox testing - amount of time to add after
|
||||||
|
* starting the loop (0 if not testing)
|
||||||
*
|
*
|
||||||
* Returns 0 on success and -ETIMEDOUT upon a timeout or the regmap_read
|
* Returns 0 on success and -ETIMEDOUT upon a timeout or the regmap_read
|
||||||
* error return value in case of a error read. In the two former cases,
|
* error return value in case of a error read. In the two former cases,
|
||||||
|
@ -256,8 +258,12 @@ int regmap_raw_read_range(struct regmap *map, uint range_num, uint offset,
|
||||||
*
|
*
|
||||||
* This is modelled after the regmap_read_poll_timeout macros in linux but
|
* This is modelled after the regmap_read_poll_timeout macros in linux but
|
||||||
* with millisecond timeout.
|
* with millisecond timeout.
|
||||||
|
*
|
||||||
|
* The _test version is for sandbox testing only. Do not use this in normal
|
||||||
|
* code as it advances the timer.
|
||||||
*/
|
*/
|
||||||
#define regmap_read_poll_timeout(map, addr, val, cond, sleep_us, timeout_ms) \
|
#define regmap_read_poll_timeout_test(map, addr, val, cond, sleep_us, \
|
||||||
|
timeout_ms, test_add_time) \
|
||||||
({ \
|
({ \
|
||||||
unsigned long __start = get_timer(0); \
|
unsigned long __start = get_timer(0); \
|
||||||
int __ret; \
|
int __ret; \
|
||||||
|
@ -267,6 +273,8 @@ int regmap_raw_read_range(struct regmap *map, uint range_num, uint offset,
|
||||||
break; \
|
break; \
|
||||||
if (cond) \
|
if (cond) \
|
||||||
break; \
|
break; \
|
||||||
|
if (IS_ENABLED(CONFIG_SANDBOX) && test_add_time) \
|
||||||
|
sandbox_timer_add_offset(test_add_time); \
|
||||||
if ((timeout_ms) && get_timer(__start) > (timeout_ms)) { \
|
if ((timeout_ms) && get_timer(__start) > (timeout_ms)) { \
|
||||||
__ret = regmap_read((map), (addr), &(val)); \
|
__ret = regmap_read((map), (addr), &(val)); \
|
||||||
break; \
|
break; \
|
||||||
|
@ -277,6 +285,10 @@ int regmap_raw_read_range(struct regmap *map, uint range_num, uint offset,
|
||||||
__ret ?: ((cond) ? 0 : -ETIMEDOUT); \
|
__ret ?: ((cond) ? 0 : -ETIMEDOUT); \
|
||||||
})
|
})
|
||||||
|
|
||||||
|
#define regmap_read_poll_timeout(map, addr, val, cond, sleep_us, timeout_ms) \
|
||||||
|
regmap_read_poll_timeout_test(map, addr, val, cond, sleep_us, \
|
||||||
|
timeout_ms, 0) \
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* regmap_update_bits() - Perform a read/modify/write using a mask
|
* regmap_update_bits() - Perform a read/modify/write using a mask
|
||||||
*
|
*
|
||||||
|
|
|
@ -235,9 +235,7 @@ struct dm_serial_ops {
|
||||||
* Get a current config for this device.
|
* Get a current config for this device.
|
||||||
*
|
*
|
||||||
* @dev: Device pointer
|
* @dev: Device pointer
|
||||||
* @parity: parity to use
|
* @serial_config: Returns config information (see SERIAL_... above)
|
||||||
* @bits: bits number to use
|
|
||||||
* @stop: stop bits number to use
|
|
||||||
* @return 0 if OK, -ve on error
|
* @return 0 if OK, -ve on error
|
||||||
*/
|
*/
|
||||||
int (*getconfig)(struct udevice *dev, uint *serial_config);
|
int (*getconfig)(struct udevice *dev, uint *serial_config);
|
||||||
|
@ -257,6 +255,7 @@ struct dm_serial_ops {
|
||||||
*
|
*
|
||||||
* @dev: Device pointer
|
* @dev: Device pointer
|
||||||
* @info: struct serial_device_info to fill
|
* @info: struct serial_device_info to fill
|
||||||
|
* @return 0 if OK, -ve on error
|
||||||
*/
|
*/
|
||||||
int (*getinfo)(struct udevice *dev, struct serial_device_info *info);
|
int (*getinfo)(struct udevice *dev, struct serial_device_info *info);
|
||||||
};
|
};
|
||||||
|
@ -281,6 +280,39 @@ struct serial_dev_priv {
|
||||||
/* Access the serial operations for a device */
|
/* Access the serial operations for a device */
|
||||||
#define serial_get_ops(dev) ((struct dm_serial_ops *)(dev)->driver->ops)
|
#define serial_get_ops(dev) ((struct dm_serial_ops *)(dev)->driver->ops)
|
||||||
|
|
||||||
|
/**
|
||||||
|
* serial_getconfig() - Get the uart configuration
|
||||||
|
* (parity, 5/6/7/8 bits word length, stop bits)
|
||||||
|
*
|
||||||
|
* Get a current config for this device.
|
||||||
|
*
|
||||||
|
* @dev: Device pointer
|
||||||
|
* @serial_config: Returns config information (see SERIAL_... above)
|
||||||
|
* @return 0 if OK, -ve on error
|
||||||
|
*/
|
||||||
|
int serial_getconfig(struct udevice *dev, uint *config);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* serial_setconfig() - Set up the uart configuration
|
||||||
|
* (parity, 5/6/7/8 bits word length, stop bits)
|
||||||
|
*
|
||||||
|
* Set up a new config for this device.
|
||||||
|
*
|
||||||
|
* @dev: Device pointer
|
||||||
|
* @serial_config: number of bits, parity and number of stopbits to use
|
||||||
|
* @return 0 if OK, -ve on error
|
||||||
|
*/
|
||||||
|
int serial_setconfig(struct udevice *dev, uint config);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* serial_getinfo() - Get serial device information
|
||||||
|
*
|
||||||
|
* @dev: Device pointer
|
||||||
|
* @info: struct serial_device_info to fill
|
||||||
|
* @return 0 if OK, -ve on error
|
||||||
|
*/
|
||||||
|
int serial_getinfo(struct udevice *dev, struct serial_device_info *info);
|
||||||
|
|
||||||
void atmel_serial_initialize(void);
|
void atmel_serial_initialize(void);
|
||||||
void mcf_serial_initialize(void);
|
void mcf_serial_initialize(void);
|
||||||
void mpc85xx_serial_initialize(void);
|
void mpc85xx_serial_initialize(void);
|
||||||
|
|
|
@ -221,8 +221,8 @@ static efi_status_t EFIAPI efi_file_open(struct efi_file_handle *file,
|
||||||
struct file_handle *fh = to_fh(file);
|
struct file_handle *fh = to_fh(file);
|
||||||
efi_status_t ret;
|
efi_status_t ret;
|
||||||
|
|
||||||
EFI_ENTRY("%p, %p, \"%ls\", %llx, %llu", file, new_handle, file_name,
|
EFI_ENTRY("%p, %p, \"%ls\", %llx, %llu", file, new_handle,
|
||||||
open_mode, attributes);
|
(wchar_t *)file_name, open_mode, attributes);
|
||||||
|
|
||||||
/* Check parameters */
|
/* Check parameters */
|
||||||
if (!file || !new_handle || !file_name) {
|
if (!file || !new_handle || !file_name) {
|
||||||
|
|
10
lib/fdtdec.c
10
lib/fdtdec.c
|
@ -95,16 +95,6 @@ fdt_addr_t fdtdec_get_addr_size_fixed(const void *blob, int node,
|
||||||
|
|
||||||
debug("%s: %s: ", __func__, prop_name);
|
debug("%s: %s: ", __func__, prop_name);
|
||||||
|
|
||||||
if (na > (sizeof(fdt_addr_t) / sizeof(fdt32_t))) {
|
|
||||||
debug("(na too large for fdt_addr_t type)\n");
|
|
||||||
return FDT_ADDR_T_NONE;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (ns > (sizeof(fdt_size_t) / sizeof(fdt32_t))) {
|
|
||||||
debug("(ns too large for fdt_size_t type)\n");
|
|
||||||
return FDT_ADDR_T_NONE;
|
|
||||||
}
|
|
||||||
|
|
||||||
prop = fdt_getprop(blob, node, prop_name, &len);
|
prop = fdt_getprop(blob, node, prop_name, &len);
|
||||||
if (!prop) {
|
if (!prop) {
|
||||||
debug("(not found)\n");
|
debug("(not found)\n");
|
||||||
|
|
|
@ -160,9 +160,10 @@ static int dm_test_regmap_poll(struct unit_test_state *uts)
|
||||||
start = get_timer(0);
|
start = get_timer(0);
|
||||||
|
|
||||||
ut_asserteq(-ETIMEDOUT,
|
ut_asserteq(-ETIMEDOUT,
|
||||||
regmap_read_poll_timeout(map, 0, reg,
|
regmap_read_poll_timeout_test(map, 0, reg,
|
||||||
(reg == 0xcacafafa),
|
(reg == 0xcacafafa),
|
||||||
1, 5 * CONFIG_SYS_HZ));
|
1, 5 * CONFIG_SYS_HZ,
|
||||||
|
5 * CONFIG_SYS_HZ));
|
||||||
|
|
||||||
ut_assert(get_timer(start) > (5 * CONFIG_SYS_HZ));
|
ut_assert(get_timer(start) > (5 * CONFIG_SYS_HZ));
|
||||||
|
|
||||||
|
|
|
@ -23,23 +23,24 @@ static int dm_test_serial(struct unit_test_state *uts)
|
||||||
* test with default config which is the only one supported by
|
* test with default config which is the only one supported by
|
||||||
* sandbox_serial driver
|
* sandbox_serial driver
|
||||||
*/
|
*/
|
||||||
ut_assertok(serial_setconfig(SERIAL_DEFAULT_CONFIG));
|
ut_assertok(serial_setconfig(dev_serial, SERIAL_DEFAULT_CONFIG));
|
||||||
ut_assertok(serial_getconfig(&value_serial));
|
ut_assertok(serial_getconfig(dev_serial, &value_serial));
|
||||||
ut_assert(value_serial == SERIAL_DEFAULT_CONFIG);
|
ut_assert(value_serial == SERIAL_DEFAULT_CONFIG);
|
||||||
ut_assertok(serial_getinfo(&info_serial));
|
ut_assertok(serial_getinfo(dev_serial, &info_serial));
|
||||||
ut_assert(info_serial.type == SERIAL_CHIP_UNKNOWN);
|
ut_assert(info_serial.type == SERIAL_CHIP_UNKNOWN);
|
||||||
ut_assert(info_serial.addr == SERIAL_DEFAULT_ADDRESS);
|
ut_assert(info_serial.addr == SERIAL_DEFAULT_ADDRESS);
|
||||||
/*
|
/*
|
||||||
* test with a parameter which is NULL pointer
|
* test with a parameter which is NULL pointer
|
||||||
*/
|
*/
|
||||||
ut_asserteq(-EINVAL, serial_getconfig(NULL));
|
ut_asserteq(-EINVAL, serial_getconfig(dev_serial, NULL));
|
||||||
ut_asserteq(-EINVAL, serial_getinfo(NULL));
|
ut_asserteq(-EINVAL, serial_getinfo(dev_serial, NULL));
|
||||||
/*
|
/*
|
||||||
* test with a serial config which is not supported by
|
* test with a serial config which is not supported by
|
||||||
* sandbox_serial driver: test with wrong parity
|
* sandbox_serial driver: test with wrong parity
|
||||||
*/
|
*/
|
||||||
ut_asserteq(-ENOTSUPP,
|
ut_asserteq(-ENOTSUPP,
|
||||||
serial_setconfig(SERIAL_CONFIG(SERIAL_PAR_ODD,
|
serial_setconfig(dev_serial,
|
||||||
|
SERIAL_CONFIG(SERIAL_PAR_ODD,
|
||||||
SERIAL_8_BITS,
|
SERIAL_8_BITS,
|
||||||
SERIAL_ONE_STOP)));
|
SERIAL_ONE_STOP)));
|
||||||
/*
|
/*
|
||||||
|
@ -47,7 +48,8 @@ static int dm_test_serial(struct unit_test_state *uts)
|
||||||
* sandbox_serial driver: test with wrong bits number
|
* sandbox_serial driver: test with wrong bits number
|
||||||
*/
|
*/
|
||||||
ut_asserteq(-ENOTSUPP,
|
ut_asserteq(-ENOTSUPP,
|
||||||
serial_setconfig(SERIAL_CONFIG(SERIAL_PAR_NONE,
|
serial_setconfig(dev_serial,
|
||||||
|
SERIAL_CONFIG(SERIAL_PAR_NONE,
|
||||||
SERIAL_6_BITS,
|
SERIAL_6_BITS,
|
||||||
SERIAL_ONE_STOP)));
|
SERIAL_ONE_STOP)));
|
||||||
|
|
||||||
|
@ -56,7 +58,8 @@ static int dm_test_serial(struct unit_test_state *uts)
|
||||||
* sandbox_serial driver: test with wrong stop bits number
|
* sandbox_serial driver: test with wrong stop bits number
|
||||||
*/
|
*/
|
||||||
ut_asserteq(-ENOTSUPP,
|
ut_asserteq(-ENOTSUPP,
|
||||||
serial_setconfig(SERIAL_CONFIG(SERIAL_PAR_NONE,
|
serial_setconfig(dev_serial,
|
||||||
|
SERIAL_CONFIG(SERIAL_PAR_NONE,
|
||||||
SERIAL_8_BITS,
|
SERIAL_8_BITS,
|
||||||
SERIAL_TWO_STOP)));
|
SERIAL_TWO_STOP)));
|
||||||
|
|
||||||
|
|
|
@ -13,7 +13,8 @@ def in_tree(response, name, uclass, drv, depth, last_child):
|
||||||
else:
|
else:
|
||||||
leaf = leaf + '`'
|
leaf = leaf + '`'
|
||||||
leaf = leaf + '-- ' + name
|
leaf = leaf + '-- ' + name
|
||||||
line = ' *{:10.10} [0-9]* \[ [ +] \] {:20.20} {}$'.format(uclass, drv, leaf)
|
line = (' *{:10.10} [0-9]* \[ [ +] \] {:20.20} {}$'
|
||||||
|
.format(uclass, drv, leaf))
|
||||||
prog = re.compile(line)
|
prog = re.compile(line)
|
||||||
for l in lines:
|
for l in lines:
|
||||||
if prog.match(l):
|
if prog.match(l):
|
||||||
|
|
|
@ -1046,6 +1046,16 @@ value for 'altbootcmd', but lost one for ' altbootcmd'.
|
||||||
|
|
||||||
The -U option uses the u-boot.env files which are produced by a build.
|
The -U option uses the u-boot.env files which are produced by a build.
|
||||||
|
|
||||||
|
|
||||||
|
Building with clang
|
||||||
|
===================
|
||||||
|
|
||||||
|
To build with clang (sandbox only), use the -O option to override the
|
||||||
|
toolchain. For example:
|
||||||
|
|
||||||
|
buildman -O clang-7 --board sandbox
|
||||||
|
|
||||||
|
|
||||||
Other options
|
Other options
|
||||||
=============
|
=============
|
||||||
|
|
||||||
|
@ -1169,8 +1179,6 @@ access to log files. Also it would be nice if buildman could 'hunt' for
|
||||||
problems, perhaps by building a few boards for each arch, or checking
|
problems, perhaps by building a few boards for each arch, or checking
|
||||||
commits for changed files and building only boards which use those files.
|
commits for changed files and building only boards which use those files.
|
||||||
|
|
||||||
A specific problem to fix is that Ctrl-C does not exit buildman cleanly when
|
|
||||||
multiple builder threads are active.
|
|
||||||
|
|
||||||
Credits
|
Credits
|
||||||
=======
|
=======
|
||||||
|
|
|
@ -156,7 +156,12 @@ class BuilderThread(threading.Thread):
|
||||||
if result.already_done:
|
if result.already_done:
|
||||||
# Get the return code from that build and use it
|
# Get the return code from that build and use it
|
||||||
with open(done_file, 'r') as fd:
|
with open(done_file, 'r') as fd:
|
||||||
result.return_code = int(fd.readline())
|
try:
|
||||||
|
result.return_code = int(fd.readline())
|
||||||
|
except ValueError:
|
||||||
|
# The file may be empty due to running out of disk space.
|
||||||
|
# Try a rebuild
|
||||||
|
result.return_code = RETURN_CODE_RETRY
|
||||||
|
|
||||||
# Check the signal that the build needs to be retried
|
# Check the signal that the build needs to be retried
|
||||||
if result.return_code == RETURN_CODE_RETRY:
|
if result.return_code == RETURN_CODE_RETRY:
|
||||||
|
@ -224,6 +229,7 @@ class BuilderThread(threading.Thread):
|
||||||
config_args = ['%s_defconfig' % brd.target]
|
config_args = ['%s_defconfig' % brd.target]
|
||||||
config_out = ''
|
config_out = ''
|
||||||
args.extend(self.builder.toolchains.GetMakeArguments(brd))
|
args.extend(self.builder.toolchains.GetMakeArguments(brd))
|
||||||
|
args.extend(self.toolchain.MakeArgs())
|
||||||
|
|
||||||
# If we need to reconfigure, do that now
|
# If we need to reconfigure, do that now
|
||||||
if do_config:
|
if do_config:
|
||||||
|
|
|
@ -74,6 +74,8 @@ def ParseArgs():
|
||||||
parser.add_option('-o', '--output-dir', type='string',
|
parser.add_option('-o', '--output-dir', type='string',
|
||||||
dest='output_dir', default='..',
|
dest='output_dir', default='..',
|
||||||
help='Directory where all builds happen and buildman has its workspace (default is ../)')
|
help='Directory where all builds happen and buildman has its workspace (default is ../)')
|
||||||
|
parser.add_option('-O', '--override-toolchain', type='string',
|
||||||
|
help="Override host toochain to use for sandbox (e.g. 'clang-7')")
|
||||||
parser.add_option('-Q', '--quick', action='store_true',
|
parser.add_option('-Q', '--quick', action='store_true',
|
||||||
default=False, help='Do a rough build, with limited warning resolution')
|
default=False, help='Do a rough build, with limited warning resolution')
|
||||||
parser.add_option('-p', '--full-path', action='store_true',
|
parser.add_option('-p', '--full-path', action='store_true',
|
||||||
|
|
|
@ -141,7 +141,7 @@ def DoBuildman(options, args, toolchains=None, make_func=None, boards=None,
|
||||||
|
|
||||||
no_toolchains = toolchains is None
|
no_toolchains = toolchains is None
|
||||||
if no_toolchains:
|
if no_toolchains:
|
||||||
toolchains = toolchain.Toolchains()
|
toolchains = toolchain.Toolchains(options.override_toolchain)
|
||||||
|
|
||||||
if options.fetch_arch:
|
if options.fetch_arch:
|
||||||
if options.fetch_arch == 'list':
|
if options.fetch_arch == 'list':
|
||||||
|
|
|
@ -54,9 +54,11 @@ class Toolchain:
|
||||||
arch: Architecture of toolchain as determined from the first
|
arch: Architecture of toolchain as determined from the first
|
||||||
component of the filename. E.g. arm-linux-gcc becomes arm
|
component of the filename. E.g. arm-linux-gcc becomes arm
|
||||||
priority: Toolchain priority (0=highest, 20=lowest)
|
priority: Toolchain priority (0=highest, 20=lowest)
|
||||||
|
override_toolchain: Toolchain to use for sandbox, overriding the normal
|
||||||
|
one
|
||||||
"""
|
"""
|
||||||
def __init__(self, fname, test, verbose=False, priority=PRIORITY_CALC,
|
def __init__(self, fname, test, verbose=False, priority=PRIORITY_CALC,
|
||||||
arch=None):
|
arch=None, override_toolchain=None):
|
||||||
"""Create a new toolchain object.
|
"""Create a new toolchain object.
|
||||||
|
|
||||||
Args:
|
Args:
|
||||||
|
@ -68,6 +70,7 @@ class Toolchain:
|
||||||
"""
|
"""
|
||||||
self.gcc = fname
|
self.gcc = fname
|
||||||
self.path = os.path.dirname(fname)
|
self.path = os.path.dirname(fname)
|
||||||
|
self.override_toolchain = override_toolchain
|
||||||
|
|
||||||
# Find the CROSS_COMPILE prefix to use for U-Boot. For example,
|
# Find the CROSS_COMPILE prefix to use for U-Boot. For example,
|
||||||
# 'arm-linux-gnueabihf-gcc' turns into 'arm-linux-gnueabihf-'.
|
# 'arm-linux-gnueabihf-gcc' turns into 'arm-linux-gnueabihf-'.
|
||||||
|
@ -81,6 +84,8 @@ class Toolchain:
|
||||||
self.arch = arch
|
self.arch = arch
|
||||||
else:
|
else:
|
||||||
self.arch = self.cross[:pos] if pos != -1 else 'sandbox'
|
self.arch = self.cross[:pos] if pos != -1 else 'sandbox'
|
||||||
|
if self.arch == 'sandbox' and override_toolchain:
|
||||||
|
self.gcc = override_toolchain
|
||||||
|
|
||||||
env = self.MakeEnvironment(False)
|
env = self.MakeEnvironment(False)
|
||||||
|
|
||||||
|
@ -130,8 +135,8 @@ class Toolchain:
|
||||||
def GetWrapper(self, show_warning=True):
|
def GetWrapper(self, show_warning=True):
|
||||||
"""Get toolchain wrapper from the setting file.
|
"""Get toolchain wrapper from the setting file.
|
||||||
"""
|
"""
|
||||||
value = ''
|
value = ''
|
||||||
for name, value in bsettings.GetItems('toolchain-wrapper'):
|
for name, value in bsettings.GetItems('toolchain-wrapper'):
|
||||||
if not value:
|
if not value:
|
||||||
print "Warning: Wrapper not found"
|
print "Warning: Wrapper not found"
|
||||||
if value:
|
if value:
|
||||||
|
@ -150,11 +155,18 @@ class Toolchain:
|
||||||
Args:
|
Args:
|
||||||
full_path: Return the full path in CROSS_COMPILE and don't set
|
full_path: Return the full path in CROSS_COMPILE and don't set
|
||||||
PATH
|
PATH
|
||||||
|
Returns:
|
||||||
|
Dict containing the environemnt to use. This is based on the current
|
||||||
|
environment, with changes as needed to CROSS_COMPILE, PATH and
|
||||||
|
LC_ALL.
|
||||||
"""
|
"""
|
||||||
env = dict(os.environ)
|
env = dict(os.environ)
|
||||||
wrapper = self.GetWrapper()
|
wrapper = self.GetWrapper()
|
||||||
|
|
||||||
if full_path:
|
if self.override_toolchain:
|
||||||
|
# We'll use MakeArgs() to provide this
|
||||||
|
pass
|
||||||
|
elif full_path:
|
||||||
env['CROSS_COMPILE'] = wrapper + os.path.join(self.path, self.cross)
|
env['CROSS_COMPILE'] = wrapper + os.path.join(self.path, self.cross)
|
||||||
else:
|
else:
|
||||||
env['CROSS_COMPILE'] = wrapper + self.cross
|
env['CROSS_COMPILE'] = wrapper + self.cross
|
||||||
|
@ -164,6 +176,22 @@ class Toolchain:
|
||||||
|
|
||||||
return env
|
return env
|
||||||
|
|
||||||
|
def MakeArgs(self):
|
||||||
|
"""Create the 'make' arguments for a toolchain
|
||||||
|
|
||||||
|
This is only used when the toolchain is being overridden. Since the
|
||||||
|
U-Boot Makefile sets CC and HOSTCC explicitly we cannot rely on the
|
||||||
|
environment (and MakeEnvironment()) to override these values. This
|
||||||
|
function returns the arguments to accomplish this.
|
||||||
|
|
||||||
|
Returns:
|
||||||
|
List of arguments to pass to 'make'
|
||||||
|
"""
|
||||||
|
if self.override_toolchain:
|
||||||
|
return ['HOSTCC=%s' % self.override_toolchain,
|
||||||
|
'CC=%s' % self.override_toolchain]
|
||||||
|
return []
|
||||||
|
|
||||||
|
|
||||||
class Toolchains:
|
class Toolchains:
|
||||||
"""Manage a list of toolchains for building U-Boot
|
"""Manage a list of toolchains for building U-Boot
|
||||||
|
@ -180,10 +208,11 @@ class Toolchains:
|
||||||
paths: List of paths to check for toolchains (may contain wildcards)
|
paths: List of paths to check for toolchains (may contain wildcards)
|
||||||
"""
|
"""
|
||||||
|
|
||||||
def __init__(self):
|
def __init__(self, override_toolchain=None):
|
||||||
self.toolchains = {}
|
self.toolchains = {}
|
||||||
self.prefixes = {}
|
self.prefixes = {}
|
||||||
self.paths = []
|
self.paths = []
|
||||||
|
self.override_toolchain = override_toolchain
|
||||||
self._make_flags = dict(bsettings.GetItems('make-flags'))
|
self._make_flags = dict(bsettings.GetItems('make-flags'))
|
||||||
|
|
||||||
def GetPathList(self, show_warning=True):
|
def GetPathList(self, show_warning=True):
|
||||||
|
@ -234,7 +263,8 @@ class Toolchains:
|
||||||
priority: Priority to use for this toolchain
|
priority: Priority to use for this toolchain
|
||||||
arch: Toolchain architecture, or None if not known
|
arch: Toolchain architecture, or None if not known
|
||||||
"""
|
"""
|
||||||
toolchain = Toolchain(fname, test, verbose, priority, arch)
|
toolchain = Toolchain(fname, test, verbose, priority, arch,
|
||||||
|
self.override_toolchain)
|
||||||
add_it = toolchain.ok
|
add_it = toolchain.ok
|
||||||
if toolchain.arch in self.toolchains:
|
if toolchain.arch in self.toolchains:
|
||||||
add_it = (toolchain.priority <
|
add_it = (toolchain.priority <
|
||||||
|
|
Loading…
Add table
Reference in a new issue