mirror of
https://github.com/Fishwaldo/u-boot.git
synced 2025-03-18 13:11:31 +00:00
Merge branch 'master' of git://www.denx.de/git/u-boot-dm
This commit is contained in:
commit
73eed452b9
45 changed files with 790 additions and 160 deletions
5
Kconfig
5
Kconfig
|
@ -299,9 +299,8 @@ config SYS_CLK_FREQ
|
|||
help
|
||||
TODO: Move CONFIG_SYS_CLK_FREQ for all the architecture
|
||||
|
||||
config ARCH_FIXUP_FDT
|
||||
bool "Enable arch_fixup_fdt() call"
|
||||
depends on ARM || MIPS
|
||||
config ARCH_FIXUP_FDT_MEMORY
|
||||
bool "Enable arch_fixup_memory_banks() call"
|
||||
default y
|
||||
help
|
||||
Enable FDT memory map syncup before OS boot. This feature can be
|
||||
|
|
3
Makefile
3
Makefile
|
@ -821,6 +821,8 @@ append = cat $(filter-out $< $(PHONY), $^) >> $@
|
|||
quiet_cmd_pad_cat = CAT $@
|
||||
cmd_pad_cat = $(cmd_objcopy) && $(append) || rm -f $@
|
||||
|
||||
cfg: u-boot.cfg
|
||||
|
||||
all: $(ALL-y)
|
||||
ifeq ($(CONFIG_DM_I2C_COMPAT)$(CONFIG_SANDBOX),y)
|
||||
@echo "===================== WARNING ======================"
|
||||
|
@ -1527,6 +1529,7 @@ help:
|
|||
@echo ' cscope - Generate cscope index'
|
||||
@echo ' ubootrelease - Output the release version string (use with make -s)'
|
||||
@echo ' ubootversion - Output the version stored in Makefile (use with make -s)'
|
||||
@echo " cfg - Don't build, just create the .cfg files"
|
||||
@echo ''
|
||||
@echo 'Static analysers'
|
||||
@echo ' checkstack - Generate a list of stack hogs'
|
||||
|
|
|
@ -37,6 +37,11 @@ void arch_lmb_reserve(struct lmb *lmb)
|
|||
lmb_reserve(lmb, sp, (CONFIG_SYS_SDRAM_BASE + gd->ram_size - sp));
|
||||
}
|
||||
|
||||
int arch_fixup_fdt(void *blob)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int cleanup_before_linux(void)
|
||||
{
|
||||
disable_interrupts();
|
||||
|
|
|
@ -7,7 +7,7 @@
|
|||
|
||||
#ifndef __ASM_ARCH_OMAP3_MUSB_H
|
||||
#define __ASM_ARCH_OMAP3_MUSB_H
|
||||
extern void am35x_musb_reset(void);
|
||||
extern void am35x_musb_phy_power(u8 on);
|
||||
extern void am35x_musb_clear_irq(void);
|
||||
void am35x_musb_reset(struct udevice *dev);
|
||||
void am35x_musb_phy_power(struct udevice *dev, u8 on);
|
||||
void am35x_musb_clear_irq(struct udevice *dev);
|
||||
#endif
|
||||
|
|
|
@ -15,9 +15,10 @@ extern const struct musb_platform_ops omap2430_ops;
|
|||
|
||||
struct omap_musb_board_data {
|
||||
u8 interface_type;
|
||||
void (*set_phy_power)(u8 on);
|
||||
void (*clear_irq)(void);
|
||||
void (*reset)(void);
|
||||
struct udevice *dev;
|
||||
void (*set_phy_power)(struct udevice *dev, u8 on);
|
||||
void (*clear_irq)(struct udevice *dev);
|
||||
void (*reset)(struct udevice *dev);
|
||||
};
|
||||
|
||||
enum musb_interface {MUSB_INTERFACE_ULPI, MUSB_INTERFACE_UTMI};
|
||||
|
|
|
@ -25,7 +25,6 @@
|
|||
|
||||
DECLARE_GLOBAL_DATA_PTR;
|
||||
|
||||
#ifdef CONFIG_ARCH_FIXUP_FDT
|
||||
int arch_fixup_fdt(void *blob)
|
||||
{
|
||||
bd_t *bd = gd->bd;
|
||||
|
@ -61,4 +60,3 @@ int arch_fixup_fdt(void *blob)
|
|||
|
||||
return 0;
|
||||
}
|
||||
#endif
|
||||
|
|
|
@ -414,10 +414,8 @@ void boot_prep_vxworks(bootm_headers_t *images)
|
|||
if (images->ft_addr) {
|
||||
off = fdt_path_offset(images->ft_addr, "/memory");
|
||||
if (off < 0) {
|
||||
#ifdef CONFIG_ARCH_FIXUP_FDT
|
||||
if (arch_fixup_fdt(images->ft_addr))
|
||||
puts("## WARNING: fixup memory failed!\n");
|
||||
#endif
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
|
|
@ -120,7 +120,8 @@ int cpu_mmc_init(bd_t *bis)
|
|||
|
||||
/* AM33XX has two MUSB controllers which can be host or gadget */
|
||||
#if (defined(CONFIG_USB_MUSB_GADGET) || defined(CONFIG_USB_MUSB_HOST)) && \
|
||||
(defined(CONFIG_AM335X_USB0) || defined(CONFIG_AM335X_USB1))
|
||||
(defined(CONFIG_AM335X_USB0) || defined(CONFIG_AM335X_USB1)) && \
|
||||
(!defined(CONFIG_DM_USB))
|
||||
static struct ctrl_dev *cdev = (struct ctrl_dev *)CTRL_DEVICE_BASE;
|
||||
|
||||
/* USB 2.0 PHY Control */
|
||||
|
@ -147,7 +148,7 @@ static struct musb_hdrc_config musb_config = {
|
|||
};
|
||||
|
||||
#ifdef CONFIG_AM335X_USB0
|
||||
static void am33xx_otg0_set_phy_power(u8 on)
|
||||
static void am33xx_otg0_set_phy_power(struct udevice *dev, u8 on)
|
||||
{
|
||||
am33xx_usb_set_phy_power(on, &cdev->usb_ctrl0);
|
||||
}
|
||||
|
@ -166,7 +167,7 @@ static struct musb_hdrc_platform_data otg0_plat = {
|
|||
#endif
|
||||
|
||||
#ifdef CONFIG_AM335X_USB1
|
||||
static void am33xx_otg1_set_phy_power(u8 on)
|
||||
static void am33xx_otg1_set_phy_power(struct udevice *dev, u8 on)
|
||||
{
|
||||
am33xx_usb_set_phy_power(on, &cdev->usb_ctrl1);
|
||||
}
|
||||
|
@ -187,6 +188,7 @@ static struct musb_hdrc_platform_data otg1_plat = {
|
|||
|
||||
int arch_misc_init(void)
|
||||
{
|
||||
#ifndef CONFIG_DM_USB
|
||||
#ifdef CONFIG_AM335X_USB0
|
||||
musb_register(&otg0_plat, &otg0_board_data,
|
||||
(void *)USB0_OTG_BASE);
|
||||
|
@ -194,6 +196,14 @@ int arch_misc_init(void)
|
|||
#ifdef CONFIG_AM335X_USB1
|
||||
musb_register(&otg1_plat, &otg1_board_data,
|
||||
(void *)USB1_OTG_BASE);
|
||||
#endif
|
||||
#else
|
||||
struct udevice *dev;
|
||||
int ret;
|
||||
|
||||
ret = uclass_first_device(UCLASS_MISC, &dev);
|
||||
if (ret || !dev)
|
||||
return ret;
|
||||
#endif
|
||||
return 0;
|
||||
}
|
||||
|
|
|
@ -13,7 +13,7 @@
|
|||
#include <asm/io.h>
|
||||
#include <asm/arch/am35x_def.h>
|
||||
|
||||
void am35x_musb_reset(void)
|
||||
void am35x_musb_reset(struct udevice *dev)
|
||||
{
|
||||
/* Reset the musb interface */
|
||||
clrsetbits_le32(&am35x_scm_general_regs->ip_sw_reset,
|
||||
|
@ -22,7 +22,7 @@ void am35x_musb_reset(void)
|
|||
USBOTGSS_SW_RST, 0);
|
||||
}
|
||||
|
||||
void am35x_musb_phy_power(u8 on)
|
||||
void am35x_musb_phy_power(struct udevice *dev, u8 on)
|
||||
{
|
||||
unsigned long start = get_timer(0);
|
||||
|
||||
|
@ -53,7 +53,7 @@ void am35x_musb_phy_power(u8 on)
|
|||
}
|
||||
}
|
||||
|
||||
void am35x_musb_clear_irq(void)
|
||||
void am35x_musb_clear_irq(struct udevice *dev)
|
||||
{
|
||||
clrsetbits_le32(&am35x_scm_general_regs->lvl_intr_clr,
|
||||
0, USBOTGSS_INT_CLR);
|
||||
|
|
|
@ -17,6 +17,11 @@
|
|||
|
||||
DECLARE_GLOBAL_DATA_PTR;
|
||||
|
||||
int arch_fixup_fdt(void *blob)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
int do_bootm_linux(int flag, int argc, char * const argv[],
|
||||
bootm_headers_t *images)
|
||||
{
|
||||
|
|
|
@ -253,7 +253,6 @@ static int boot_reloc_fdt(bootm_headers_t *images)
|
|||
#endif
|
||||
}
|
||||
|
||||
#ifdef CONFIG_ARCH_FIXUP_FDT
|
||||
int arch_fixup_fdt(void *blob)
|
||||
{
|
||||
#if CONFIG_IS_ENABLED(MIPS_BOOT_FDT) && CONFIG_IS_ENABLED(OF_LIBFDT)
|
||||
|
@ -265,7 +264,6 @@ int arch_fixup_fdt(void *blob)
|
|||
return 0;
|
||||
#endif
|
||||
}
|
||||
#endif
|
||||
|
||||
static int boot_setup_fdt(bootm_headers_t *images)
|
||||
{
|
||||
|
|
|
@ -38,6 +38,11 @@ static void set_clocks_in_mhz (bd_t *kbd);
|
|||
#define CONFIG_SYS_LINUX_LOWMEM_MAX_SIZE (768*1024*1024)
|
||||
#endif
|
||||
|
||||
int arch_fixup_fdt(void *blob)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
static void boot_jump_linux(bootm_headers_t *images)
|
||||
{
|
||||
void (*kernel)(bd_t *, ulong r4, ulong r5, ulong r6,
|
||||
|
|
|
@ -50,6 +50,11 @@ int bootz_setup(ulong image, ulong *start, ulong *end)
|
|||
return ret;
|
||||
}
|
||||
|
||||
int arch_fixup_fdt(void *blob)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
int do_bootm_linux(int flag, int argc, char *argv[], bootm_headers_t *images)
|
||||
{
|
||||
if (flag & (BOOTM_STATE_OS_GO | BOOTM_STATE_OS_FAKE_GO)) {
|
||||
|
|
|
@ -26,6 +26,11 @@ DECLARE_GLOBAL_DATA_PTR;
|
|||
|
||||
#define COMMAND_LINE_OFFSET 0x9000
|
||||
|
||||
int arch_fixup_fdt(void *blob)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
__weak void board_quiesce_devices(void)
|
||||
{
|
||||
}
|
||||
|
|
|
@ -19,6 +19,29 @@ static const char * const ec_current_image_name[] = {"unknown", "RO", "RW"};
|
|||
|
||||
DECLARE_GLOBAL_DATA_PTR;
|
||||
|
||||
/**
|
||||
* Decode a flash region parameter
|
||||
*
|
||||
* @param argc Number of params remaining
|
||||
* @param argv List of remaining parameters
|
||||
* @return flash region (EC_FLASH_REGION_...) or -1 on error
|
||||
*/
|
||||
static int cros_ec_decode_region(int argc, char * const argv[])
|
||||
{
|
||||
if (argc > 0) {
|
||||
if (0 == strcmp(*argv, "rw"))
|
||||
return EC_FLASH_REGION_RW;
|
||||
else if (0 == strcmp(*argv, "ro"))
|
||||
return EC_FLASH_REGION_RO;
|
||||
|
||||
debug("%s: Invalid region '%s'\n", __func__, *argv);
|
||||
} else {
|
||||
debug("%s: Missing region parameter\n", __func__);
|
||||
}
|
||||
|
||||
return -1;
|
||||
}
|
||||
|
||||
/**
|
||||
* Perform a flash read or write command
|
||||
*
|
||||
|
|
22
cmd/fdt.c
22
cmd/fdt.c
|
@ -206,7 +206,17 @@ static int do_fdt(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
|
|||
return 1;
|
||||
}
|
||||
working_fdt = newaddr;
|
||||
#ifdef CONFIG_OF_SYSTEM_SETUP
|
||||
/* Call the board-specific fixup routine */
|
||||
} else if (strncmp(argv[1], "sys", 3) == 0) {
|
||||
int err = ft_system_setup(working_fdt, gd->bd);
|
||||
|
||||
if (err) {
|
||||
printf("Failed to add system information to FDT: %s\n",
|
||||
fdt_strerror(err));
|
||||
return CMD_RET_FAILURE;
|
||||
}
|
||||
#endif
|
||||
/*
|
||||
* Make a new node
|
||||
*/
|
||||
|
@ -576,18 +586,6 @@ static int do_fdt(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
|
|||
return CMD_RET_FAILURE;
|
||||
}
|
||||
}
|
||||
#endif
|
||||
#ifdef CONFIG_OF_SYSTEM_SETUP
|
||||
/* Call the board-specific fixup routine */
|
||||
else if (strncmp(argv[1], "sys", 3) == 0) {
|
||||
int err = ft_system_setup(working_fdt, gd->bd);
|
||||
|
||||
if (err) {
|
||||
printf("Failed to add system information to FDT: %s\n",
|
||||
fdt_strerror(err));
|
||||
return CMD_RET_FAILURE;
|
||||
}
|
||||
}
|
||||
#endif
|
||||
/* Create a chosen node */
|
||||
else if (strncmp(argv[1], "cho", 3) == 0) {
|
||||
|
|
|
@ -532,15 +532,15 @@ static cmd_tbl_t cmd_cros_tpm_sub[] = {
|
|||
static int do_tpmtest(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
|
||||
{
|
||||
cmd_tbl_t *c;
|
||||
int i;
|
||||
|
||||
printf("argc = %d, argv = ", argc);
|
||||
do {
|
||||
int i = 0;
|
||||
|
||||
for (i = 0; i < argc; i++)
|
||||
printf(" %s", argv[i]);
|
||||
printf("\n------\n");
|
||||
} while (0);
|
||||
for (i = 0; i < argc; i++)
|
||||
printf(" %s", argv[i]);
|
||||
|
||||
printf("\n------\n");
|
||||
|
||||
argc--;
|
||||
argv++;
|
||||
c = find_cmd_tbl(argv[0], cmd_cros_tpm_sub,
|
||||
|
|
|
@ -381,6 +381,7 @@ void do_fixup_by_compat_u32(void *fdt, const char *compat,
|
|||
do_fixup_by_compat(fdt, compat, prop, &tmp, 4, create);
|
||||
}
|
||||
|
||||
#ifdef CONFIG_ARCH_FIXUP_FDT_MEMORY
|
||||
/*
|
||||
* fdt_pack_reg - pack address and size array into the "reg"-suitable stream
|
||||
*/
|
||||
|
@ -459,6 +460,7 @@ int fdt_fixup_memory_banks(void *blob, u64 start[], u64 size[], int banks)
|
|||
}
|
||||
return 0;
|
||||
}
|
||||
#endif
|
||||
|
||||
int fdt_fixup_memory(void *blob, u64 start, u64 size)
|
||||
{
|
||||
|
|
|
@ -474,12 +474,10 @@ int image_setup_libfdt(bootm_headers_t *images, void *blob,
|
|||
printf("ERROR: /chosen node create failed\n");
|
||||
goto err;
|
||||
}
|
||||
#ifdef CONFIG_ARCH_FIXUP_FDT
|
||||
if (arch_fixup_fdt(blob) < 0) {
|
||||
printf("ERROR: arch-specific fdt fixup failed\n");
|
||||
goto err;
|
||||
}
|
||||
#endif
|
||||
if (IMAGE_OF_BOARD_SETUP) {
|
||||
fdt_ret = ft_board_setup(blob, gd->bd);
|
||||
if (fdt_ret) {
|
||||
|
|
|
@ -513,6 +513,9 @@ ulong spl_relocate_stack_gd(void)
|
|||
ptr = CONFIG_SPL_STACK_R_ADDR - roundup(sizeof(gd_t),16);
|
||||
new_gd = (gd_t *)ptr;
|
||||
memcpy(new_gd, (void *)gd, sizeof(gd_t));
|
||||
#if CONFIG_IS_ENABLED(DM)
|
||||
dm_fixup_for_gd_move(new_gd);
|
||||
#endif
|
||||
#if !defined(CONFIG_ARM)
|
||||
gd = new_gd;
|
||||
#endif
|
||||
|
|
|
@ -156,6 +156,8 @@ static int get_desc(enum if_type if_type, int devnum, struct blk_desc **descp)
|
|||
if (ret)
|
||||
return ret;
|
||||
|
||||
*descp = desc;
|
||||
return 0;
|
||||
} else if (desc->devnum > devnum) {
|
||||
found_more = true;
|
||||
}
|
||||
|
|
|
@ -693,6 +693,28 @@ fdt_addr_t dev_get_addr_index(struct udevice *dev, int index)
|
|||
#endif
|
||||
}
|
||||
|
||||
fdt_addr_t dev_get_addr_size_index(struct udevice *dev, int index,
|
||||
fdt_size_t *size)
|
||||
{
|
||||
#if CONFIG_IS_ENABLED(OF_CONTROL)
|
||||
/*
|
||||
* Only get the size in this first call. We'll get the addr in the
|
||||
* next call to the exisiting dev_get_xxx function which handles
|
||||
* all config options.
|
||||
*/
|
||||
fdtdec_get_addr_size_auto_noparent(gd->fdt_blob, dev->of_offset,
|
||||
"reg", index, size, false);
|
||||
|
||||
/*
|
||||
* Get the base address via the existing function which handles
|
||||
* all Kconfig cases
|
||||
*/
|
||||
return dev_get_addr_index(dev, index);
|
||||
#else
|
||||
return FDT_ADDR_T_NONE;
|
||||
#endif
|
||||
}
|
||||
|
||||
fdt_addr_t dev_get_addr_name(struct udevice *dev, const char *name)
|
||||
{
|
||||
#if CONFIG_IS_ENABLED(OF_CONTROL)
|
||||
|
|
|
@ -41,6 +41,13 @@ struct udevice *dm_root(void)
|
|||
return gd->dm_root;
|
||||
}
|
||||
|
||||
void dm_fixup_for_gd_move(struct global_data *new_gd)
|
||||
{
|
||||
/* The sentinel node has moved, so update things that point to it */
|
||||
new_gd->uclass_root.next->prev = &new_gd->uclass_root;
|
||||
new_gd->uclass_root.prev->next = &new_gd->uclass_root;
|
||||
}
|
||||
|
||||
fdt_addr_t dm_get_translation_offset(void)
|
||||
{
|
||||
struct udevice *root = dm_root();
|
||||
|
|
|
@ -1024,22 +1024,6 @@ int cros_ec_register(struct udevice *dev)
|
|||
return 0;
|
||||
}
|
||||
|
||||
int cros_ec_decode_region(int argc, char * const argv[])
|
||||
{
|
||||
if (argc > 0) {
|
||||
if (0 == strcmp(*argv, "rw"))
|
||||
return EC_FLASH_REGION_RW;
|
||||
else if (0 == strcmp(*argv, "ro"))
|
||||
return EC_FLASH_REGION_RO;
|
||||
|
||||
debug("%s: Invalid region '%s'\n", __func__, *argv);
|
||||
} else {
|
||||
debug("%s: Missing region parameter\n", __func__);
|
||||
}
|
||||
|
||||
return -1;
|
||||
}
|
||||
|
||||
int cros_ec_decode_ec_flash(const void *blob, int node,
|
||||
struct fdt_cros_ec *config)
|
||||
{
|
||||
|
|
|
@ -13,4 +13,10 @@ config DM_RTC
|
|||
drivers to perform the actual functions. See rtc.h for a
|
||||
description of the API.
|
||||
|
||||
config RTC_PCF2127
|
||||
bool "Enable PCF2127 driver"
|
||||
depends on DM_RTC
|
||||
help
|
||||
Enable pcf2127 driver which provides rtc get and set function
|
||||
|
||||
endmenu
|
||||
|
|
|
@ -45,6 +45,7 @@ obj-$(CONFIG_RTC_MV) += mvrtc.o
|
|||
obj-$(CONFIG_RTC_MX27) += mx27rtc.o
|
||||
obj-$(CONFIG_RTC_MXS) += mxsrtc.o
|
||||
obj-$(CONFIG_RTC_PCF8563) += pcf8563.o
|
||||
obj-$(CONFIG_RTC_PCF2127) += pcf2127.o
|
||||
obj-$(CONFIG_RTC_PL031) += pl031.o
|
||||
obj-$(CONFIG_RTC_PT7C4338) += pt7c4338.o
|
||||
obj-$(CONFIG_RTC_RS5C372A) += rs5c372.o
|
||||
|
|
107
drivers/rtc/pcf2127.c
Normal file
107
drivers/rtc/pcf2127.c
Normal file
|
@ -0,0 +1,107 @@
|
|||
/*
|
||||
* Copyright (C) 2016 by NXP Semiconductors Inc.
|
||||
* Date & Time support for PCF2127 RTC
|
||||
*/
|
||||
|
||||
/* #define DEBUG */
|
||||
|
||||
#include <common.h>
|
||||
#include <command.h>
|
||||
#include <dm.h>
|
||||
#include <i2c.h>
|
||||
#include <rtc.h>
|
||||
|
||||
#define PCF2127_REG_CTRL1 (0x00)
|
||||
#define PCF2127_REG_CTRL2 (0x01)
|
||||
#define PCF2127_REG_CTRL3 (0x02)
|
||||
#define PCF2127_REG_SC (0x03) /* datetime */
|
||||
#define PCF2127_REG_MN (0x04)
|
||||
#define PCF2127_REG_HR (0x05)
|
||||
#define PCF2127_REG_DM (0x06)
|
||||
#define PCF2127_REG_DW (0x07)
|
||||
#define PCF2127_REG_MO (0x08)
|
||||
#define PCF2127_REG_YR (0x09)
|
||||
|
||||
static int pcf2127_rtc_set(struct udevice *dev, const struct rtc_time *tm)
|
||||
{
|
||||
uchar buf[8];
|
||||
int i = 0;
|
||||
|
||||
/* start register address */
|
||||
buf[i++] = PCF2127_REG_SC;
|
||||
|
||||
/* hours, minutes and seconds */
|
||||
buf[i++] = bin2bcd(tm->tm_sec);
|
||||
buf[i++] = bin2bcd(tm->tm_min);
|
||||
buf[i++] = bin2bcd(tm->tm_hour);
|
||||
buf[i++] = bin2bcd(tm->tm_mday);
|
||||
buf[i++] = tm->tm_wday & 0x07;
|
||||
|
||||
/* month, 1 - 12 */
|
||||
buf[i++] = bin2bcd(tm->tm_mon + 1);
|
||||
|
||||
/* year */
|
||||
buf[i++] = bin2bcd(tm->tm_year % 100);
|
||||
|
||||
/* write register's data */
|
||||
if (dm_i2c_write(dev, PCF2127_REG_CTRL1, buf, sizeof(buf)) < 0)
|
||||
return -1;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int pcf2127_rtc_get(struct udevice *dev, struct rtc_time *tm)
|
||||
{
|
||||
int rel = 0;
|
||||
uchar buf[10] = { PCF2127_REG_CTRL1 };
|
||||
|
||||
if (dm_i2c_write(dev, PCF2127_REG_CTRL1, buf, 1) < 0)
|
||||
return -1;
|
||||
if (dm_i2c_read(dev, PCF2127_REG_CTRL1, buf, sizeof(buf)) < 0)
|
||||
return -1;
|
||||
|
||||
if (buf[PCF2127_REG_CTRL3] & 0x04)
|
||||
puts("### Warning: RTC Low Voltage - date/time not reliable\n");
|
||||
|
||||
tm->tm_sec = bcd2bin(buf[PCF2127_REG_SC] & 0x7F);
|
||||
tm->tm_min = bcd2bin(buf[PCF2127_REG_MN] & 0x7F);
|
||||
tm->tm_hour = bcd2bin(buf[PCF2127_REG_HR] & 0x3F);
|
||||
tm->tm_mday = bcd2bin(buf[PCF2127_REG_DM] & 0x3F);
|
||||
tm->tm_mon = bcd2bin(buf[PCF2127_REG_MO] & 0x1F) - 1;
|
||||
tm->tm_year = bcd2bin(buf[PCF2127_REG_YR]) + 1900;
|
||||
if (tm->tm_year < 1970)
|
||||
tm->tm_year += 100; /* assume we are in 1970...2069 */
|
||||
tm->tm_wday = buf[PCF2127_REG_DW] & 0x07;
|
||||
tm->tm_yday = 0;
|
||||
tm->tm_isdst = 0;
|
||||
|
||||
debug("Get DATE: %4d-%02d-%02d (wday=%d) TIME: %2d:%02d:%02d\n",
|
||||
tm->tm_year, tm->tm_mon, tm->tm_mday, tm->tm_wday,
|
||||
tm->tm_hour, tm->tm_min, tm->tm_sec);
|
||||
|
||||
return rel;
|
||||
}
|
||||
|
||||
static int pcf2127_rtc_reset(struct udevice *dev)
|
||||
{
|
||||
/*Doing nothing here*/
|
||||
return 0;
|
||||
}
|
||||
|
||||
static const struct rtc_ops pcf2127_rtc_ops = {
|
||||
.get = pcf2127_rtc_get,
|
||||
.set = pcf2127_rtc_set,
|
||||
.reset = pcf2127_rtc_reset,
|
||||
};
|
||||
|
||||
static const struct udevice_id pcf2127_rtc_ids[] = {
|
||||
{ .compatible = "pcf2127-rtc" },
|
||||
{ }
|
||||
};
|
||||
|
||||
U_BOOT_DRIVER(rtc_pcf2127) = {
|
||||
.name = "rtc-pcf2127",
|
||||
.id = UCLASS_RTC,
|
||||
.of_match = pcf2127_rtc_ids,
|
||||
.ops = &pcf2127_rtc_ops,
|
||||
};
|
|
@ -21,6 +21,21 @@
|
|||
|
||||
#define PREFIX "lpc_tpm: "
|
||||
|
||||
enum i2c_chip_type {
|
||||
SLB9635,
|
||||
AT97SC3204,
|
||||
};
|
||||
|
||||
static const char * const chip_name[] = {
|
||||
[SLB9635] = "Infineon SLB9635 TT 1.2",
|
||||
[AT97SC3204] = "Atmel AT97SC3204",
|
||||
};
|
||||
|
||||
static const u32 chip_didvid[] = {
|
||||
[SLB9635] = 0xb15d1,
|
||||
[AT97SC3204] = 0x32041114,
|
||||
};
|
||||
|
||||
struct tpm_locality {
|
||||
u32 access;
|
||||
u8 padding0[4];
|
||||
|
@ -146,9 +161,9 @@ static int tis_wait_reg(struct tpm_tis_lpc_priv *priv, u32 *reg, u8 mask,
|
|||
static int tpm_tis_lpc_probe(struct udevice *dev)
|
||||
{
|
||||
struct tpm_tis_lpc_priv *priv = dev_get_priv(dev);
|
||||
u32 vid, did;
|
||||
fdt_addr_t addr;
|
||||
u32 didvid;
|
||||
ulong chip_type = dev_get_driver_data(dev);
|
||||
|
||||
addr = dev_get_addr(dev);
|
||||
if (addr == FDT_ADDR_T_NONE)
|
||||
|
@ -156,14 +171,15 @@ static int tpm_tis_lpc_probe(struct udevice *dev)
|
|||
priv->regs = map_sysmem(addr, 0);
|
||||
didvid = tpm_read_word(priv, &priv->regs[0].did_vid);
|
||||
|
||||
vid = didvid & 0xffff;
|
||||
did = (didvid >> 16) & 0xffff;
|
||||
if (vid != 0x15d1 || did != 0xb) {
|
||||
if (didvid != chip_didvid[chip_type]) {
|
||||
u32 vid, did;
|
||||
vid = didvid & 0xffff;
|
||||
did = (didvid >> 16) & 0xffff;
|
||||
debug("Invalid vendor/device ID %04x/%04x\n", vid, did);
|
||||
return -ENOSYS;
|
||||
return -ENODEV;
|
||||
}
|
||||
|
||||
debug("Found TPM %s by %s\n", "SLB9635 TT 1.2", "Infineon");
|
||||
debug("Found TPM: %s\n", chip_name[chip_type]);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
@ -421,11 +437,13 @@ static int tpm_tis_lpc_close(struct udevice *dev)
|
|||
|
||||
static int tpm_tis_get_desc(struct udevice *dev, char *buf, int size)
|
||||
{
|
||||
ulong chip_type = dev_get_driver_data(dev);
|
||||
|
||||
if (size < 50)
|
||||
return -ENOSPC;
|
||||
|
||||
return snprintf(buf, size, "1.2 TPM (vendor %s, chip %s)",
|
||||
"Infineon", "SLB9635 TT 1.2");
|
||||
return snprintf(buf, size, "1.2 TPM (%s)",
|
||||
chip_name[chip_type]);
|
||||
}
|
||||
|
||||
|
||||
|
@ -438,7 +456,8 @@ static const struct tpm_ops tpm_tis_lpc_ops = {
|
|||
};
|
||||
|
||||
static const struct udevice_id tpm_tis_lpc_ids[] = {
|
||||
{ .compatible = "infineon,slb9635lpc" },
|
||||
{ .compatible = "infineon,slb9635lpc", .data = SLB9635 },
|
||||
{ .compatible = "atmel,at97sc3204", .data = AT97SC3204 },
|
||||
{ }
|
||||
};
|
||||
|
||||
|
|
|
@ -24,6 +24,10 @@
|
|||
#include "gadget_chips.h"
|
||||
#include "rndis.h"
|
||||
|
||||
#include <dm.h>
|
||||
#include <dm/uclass-internal.h>
|
||||
#include <dm/device-internal.h>
|
||||
|
||||
#define USB_NET_NAME "usb_ether"
|
||||
|
||||
#define atomic_read
|
||||
|
@ -101,6 +105,9 @@ struct eth_dev {
|
|||
struct usb_gadget *gadget;
|
||||
struct usb_request *req; /* for control responses */
|
||||
struct usb_request *stat_req; /* for cdc & rndis status */
|
||||
#ifdef CONFIG_DM_USB
|
||||
struct udevice *usb_udev;
|
||||
#endif
|
||||
|
||||
u8 config;
|
||||
struct usb_ep *in_ep, *out_ep, *status_ep;
|
||||
|
@ -134,9 +141,14 @@ struct eth_dev {
|
|||
*/
|
||||
|
||||
/*-------------------------------------------------------------------------*/
|
||||
static struct eth_dev l_ethdev;
|
||||
static struct eth_device l_netdev;
|
||||
static struct usb_gadget_driver eth_driver;
|
||||
struct ether_priv {
|
||||
struct eth_dev ethdev;
|
||||
struct eth_device netdev;
|
||||
struct usb_gadget_driver eth_driver;
|
||||
};
|
||||
|
||||
struct ether_priv eth_priv;
|
||||
struct ether_priv *l_priv = ð_priv;
|
||||
|
||||
/*-------------------------------------------------------------------------*/
|
||||
|
||||
|
@ -1135,7 +1147,7 @@ static void eth_status_complete(struct usb_ep *ep, struct usb_request *req)
|
|||
event->bNotificationType, value);
|
||||
if (event->bNotificationType ==
|
||||
USB_CDC_NOTIFY_SPEED_CHANGE) {
|
||||
l_ethdev.network_started = 1;
|
||||
dev->network_started = 1;
|
||||
printf("USB network up!\n");
|
||||
}
|
||||
}
|
||||
|
@ -1323,7 +1335,7 @@ eth_setup(struct usb_gadget *gadget, const struct usb_ctrlrequest *ctrl)
|
|||
* that network is working. So we signalize it
|
||||
* here.
|
||||
*/
|
||||
l_ethdev.network_started = 1;
|
||||
dev->network_started = 1;
|
||||
debug("USB network up!\n");
|
||||
goto done_set_intf;
|
||||
}
|
||||
|
@ -1823,10 +1835,10 @@ static void rndis_control_ack_complete(struct usb_ep *ep,
|
|||
debug("rndis control ack complete --> %d, %d/%d\n",
|
||||
req->status, req->actual, req->length);
|
||||
|
||||
if (!l_ethdev.network_started) {
|
||||
if (!dev->network_started) {
|
||||
if (rndis_get_state(dev->rndis_config)
|
||||
== RNDIS_DATA_INITIALIZED) {
|
||||
l_ethdev.network_started = 1;
|
||||
dev->network_started = 1;
|
||||
printf("USB RNDIS network up!\n");
|
||||
}
|
||||
}
|
||||
|
@ -1841,7 +1853,8 @@ static char rndis_resp_buf[8] __attribute__((aligned(sizeof(__le32))));
|
|||
|
||||
static int rndis_control_ack(struct eth_device *net)
|
||||
{
|
||||
struct eth_dev *dev = &l_ethdev;
|
||||
struct ether_priv *priv = (struct ether_priv *)net->priv;
|
||||
struct eth_dev *dev = &priv->ethdev;
|
||||
int length;
|
||||
struct usb_request *resp = dev->stat_req;
|
||||
|
||||
|
@ -1982,7 +1995,7 @@ static int get_ether_addr(const char *str, u8 *dev_addr)
|
|||
|
||||
static int eth_bind(struct usb_gadget *gadget)
|
||||
{
|
||||
struct eth_dev *dev = &l_ethdev;
|
||||
struct eth_dev *dev = &l_priv->ethdev;
|
||||
u8 cdc = 1, zlp = 1, rndis = 1;
|
||||
struct usb_ep *in_ep, *out_ep, *status_ep = NULL;
|
||||
int status = -ENOMEM;
|
||||
|
@ -2175,7 +2188,7 @@ autoconf_fail:
|
|||
|
||||
|
||||
/* network device setup */
|
||||
dev->net = &l_netdev;
|
||||
dev->net = &l_priv->netdev;
|
||||
|
||||
dev->cdc = cdc;
|
||||
dev->zlp = zlp;
|
||||
|
@ -2303,19 +2316,39 @@ fail:
|
|||
|
||||
/*-------------------------------------------------------------------------*/
|
||||
|
||||
static int usb_eth_init(struct eth_device *netdev, bd_t *bd)
|
||||
#ifdef CONFIG_DM_USB
|
||||
int dm_usb_init(struct eth_dev *e_dev)
|
||||
{
|
||||
struct eth_dev *dev = &l_ethdev;
|
||||
struct udevice *dev = NULL;
|
||||
int ret;
|
||||
|
||||
ret = uclass_first_device(UCLASS_USB_DEV_GENERIC, &dev);
|
||||
if (!dev || ret) {
|
||||
error("No USB device found\n");
|
||||
return -ENODEV;
|
||||
}
|
||||
|
||||
e_dev->usb_udev = dev;
|
||||
|
||||
return ret;
|
||||
}
|
||||
#endif
|
||||
|
||||
static int _usb_eth_init(struct ether_priv *priv)
|
||||
{
|
||||
struct eth_dev *dev = &priv->ethdev;
|
||||
struct usb_gadget *gadget;
|
||||
unsigned long ts;
|
||||
unsigned long timeout = USB_CONNECT_TIMEOUT;
|
||||
|
||||
if (!netdev) {
|
||||
error("received NULL ptr");
|
||||
goto fail;
|
||||
#ifdef CONFIG_DM_USB
|
||||
if (dm_usb_init(dev)) {
|
||||
error("USB ether not found\n");
|
||||
return -ENODEV;
|
||||
}
|
||||
|
||||
#else
|
||||
board_usb_init(0, USB_INIT_DEVICE);
|
||||
#endif
|
||||
|
||||
/* Configure default mac-addresses for the USB ethernet device */
|
||||
#ifdef CONFIG_USBNET_DEV_ADDR
|
||||
|
@ -2342,7 +2375,15 @@ static int usb_eth_init(struct eth_device *netdev, bd_t *bd)
|
|||
goto fail;
|
||||
}
|
||||
|
||||
if (usb_gadget_register_driver(ð_driver) < 0)
|
||||
priv->eth_driver.speed = DEVSPEED;
|
||||
priv->eth_driver.bind = eth_bind;
|
||||
priv->eth_driver.unbind = eth_unbind;
|
||||
priv->eth_driver.setup = eth_setup;
|
||||
priv->eth_driver.reset = eth_disconnect;
|
||||
priv->eth_driver.disconnect = eth_disconnect;
|
||||
priv->eth_driver.suspend = eth_suspend;
|
||||
priv->eth_driver.resume = eth_resume;
|
||||
if (usb_gadget_register_driver(&priv->eth_driver) < 0)
|
||||
goto fail;
|
||||
|
||||
dev->network_started = 0;
|
||||
|
@ -2357,7 +2398,7 @@ static int usb_eth_init(struct eth_device *netdev, bd_t *bd)
|
|||
timeout = simple_strtoul(getenv("cdc_connect_timeout"),
|
||||
NULL, 10) * CONFIG_SYS_HZ;
|
||||
ts = get_timer(0);
|
||||
while (!l_ethdev.network_started) {
|
||||
while (!dev->network_started) {
|
||||
/* Handle control-c and timeouts */
|
||||
if (ctrlc() || (get_timer(ts) > timeout)) {
|
||||
error("The remote end did not respond in time.");
|
||||
|
@ -2373,11 +2414,11 @@ fail:
|
|||
return -1;
|
||||
}
|
||||
|
||||
static int usb_eth_send(struct eth_device *netdev, void *packet, int length)
|
||||
static int _usb_eth_send(struct ether_priv *priv, void *packet, int length)
|
||||
{
|
||||
int retval;
|
||||
void *rndis_pkt = NULL;
|
||||
struct eth_dev *dev = &l_ethdev;
|
||||
struct eth_dev *dev = &priv->ethdev;
|
||||
struct usb_request *req = dev->tx_req;
|
||||
unsigned long ts;
|
||||
unsigned long timeout = USB_CONNECT_TIMEOUT;
|
||||
|
@ -2442,34 +2483,16 @@ drop:
|
|||
return -ENOMEM;
|
||||
}
|
||||
|
||||
static int usb_eth_recv(struct eth_device *netdev)
|
||||
static int _usb_eth_recv(struct ether_priv *priv)
|
||||
{
|
||||
struct eth_dev *dev = &l_ethdev;
|
||||
|
||||
usb_gadget_handle_interrupts(0);
|
||||
|
||||
if (packet_received) {
|
||||
debug("%s: packet received\n", __func__);
|
||||
if (dev->rx_req) {
|
||||
net_process_received_packet(net_rx_packets[0],
|
||||
dev->rx_req->length);
|
||||
packet_received = 0;
|
||||
|
||||
rx_submit(dev, dev->rx_req, 0);
|
||||
} else
|
||||
error("dev->rx_req invalid");
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
void usb_eth_halt(struct eth_device *netdev)
|
||||
void _usb_eth_halt(struct ether_priv *priv)
|
||||
{
|
||||
struct eth_dev *dev = &l_ethdev;
|
||||
|
||||
if (!netdev) {
|
||||
error("received NULL ptr");
|
||||
return;
|
||||
}
|
||||
struct eth_dev *dev = &priv->ethdev;
|
||||
|
||||
/* If the gadget not registered, simple return */
|
||||
if (!dev->gadget)
|
||||
|
@ -2496,27 +2519,65 @@ void usb_eth_halt(struct eth_device *netdev)
|
|||
dev->network_started = 0;
|
||||
}
|
||||
|
||||
usb_gadget_unregister_driver(ð_driver);
|
||||
usb_gadget_unregister_driver(&priv->eth_driver);
|
||||
#ifdef CONFIG_DM_USB
|
||||
device_remove(dev->usb_udev);
|
||||
#else
|
||||
board_usb_cleanup(0, USB_INIT_DEVICE);
|
||||
#endif
|
||||
}
|
||||
|
||||
static struct usb_gadget_driver eth_driver = {
|
||||
.speed = DEVSPEED,
|
||||
static int usb_eth_init(struct eth_device *netdev, bd_t *bd)
|
||||
{
|
||||
struct ether_priv *priv = (struct ether_priv *)netdev->priv;
|
||||
|
||||
.bind = eth_bind,
|
||||
.unbind = eth_unbind,
|
||||
return _usb_eth_init(priv);
|
||||
}
|
||||
|
||||
.setup = eth_setup,
|
||||
.reset = eth_disconnect,
|
||||
.disconnect = eth_disconnect,
|
||||
static int usb_eth_send(struct eth_device *netdev, void *packet, int length)
|
||||
{
|
||||
struct ether_priv *priv = (struct ether_priv *)netdev->priv;
|
||||
|
||||
.suspend = eth_suspend,
|
||||
.resume = eth_resume,
|
||||
};
|
||||
return _usb_eth_send(priv, packet, length);
|
||||
}
|
||||
|
||||
static int usb_eth_recv(struct eth_device *netdev)
|
||||
{
|
||||
struct ether_priv *priv = (struct ether_priv *)netdev->priv;
|
||||
struct eth_dev *dev = &priv->ethdev;
|
||||
int ret;
|
||||
|
||||
ret = _usb_eth_recv(priv);
|
||||
if (ret) {
|
||||
error("error packet receive\n");
|
||||
return ret;
|
||||
}
|
||||
|
||||
if (!packet_received)
|
||||
return 0;
|
||||
|
||||
if (dev->rx_req) {
|
||||
net_process_received_packet(net_rx_packets[0],
|
||||
dev->rx_req->length);
|
||||
} else {
|
||||
error("dev->rx_req invalid");
|
||||
}
|
||||
packet_received = 0;
|
||||
rx_submit(dev, dev->rx_req, 0);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
void usb_eth_halt(struct eth_device *netdev)
|
||||
{
|
||||
struct ether_priv *priv = (struct ether_priv *)netdev->priv;
|
||||
|
||||
_usb_eth_halt(priv);
|
||||
}
|
||||
|
||||
int usb_eth_initialize(bd_t *bi)
|
||||
{
|
||||
struct eth_device *netdev = &l_netdev;
|
||||
struct eth_device *netdev = &l_priv->netdev;
|
||||
|
||||
strlcpy(netdev->name, USB_NET_NAME, sizeof(netdev->name));
|
||||
|
||||
|
@ -2524,6 +2585,7 @@ int usb_eth_initialize(bd_t *bi)
|
|||
netdev->send = usb_eth_send;
|
||||
netdev->recv = usb_eth_recv;
|
||||
netdev->halt = usb_eth_halt;
|
||||
netdev->priv = l_priv;
|
||||
|
||||
#ifdef CONFIG_MCAST_TFTP
|
||||
#error not supported
|
||||
|
|
|
@ -14,6 +14,15 @@ config USB_MUSB_GADGET
|
|||
help
|
||||
Enables the MUSB USB dual-role controller in gadget mode.
|
||||
|
||||
config USB_MUSB_TI
|
||||
bool "Enable TI OTG USB controller"
|
||||
depends on DM_USB
|
||||
default n
|
||||
help
|
||||
Say y here to enable support for the dual role high
|
||||
speed USB controller based on the Mentor Graphics
|
||||
silicon IP.
|
||||
|
||||
if USB_MUSB_HOST || USB_MUSB_GADGET
|
||||
|
||||
config USB_MUSB_PIC32
|
||||
|
|
|
@ -12,6 +12,7 @@ obj-$(CONFIG_USB_MUSB_AM35X) += am35x.o
|
|||
obj-$(CONFIG_USB_MUSB_OMAP2PLUS) += omap2430.o
|
||||
obj-$(CONFIG_USB_MUSB_PIC32) += pic32.o
|
||||
obj-$(CONFIG_USB_MUSB_SUNXI) += sunxi.o
|
||||
obj-$(CONFIG_USB_MUSB_TI) += ti-musb.o
|
||||
|
||||
ccflags-y := $(call cc-option,-Wno-unused-variable) \
|
||||
$(call cc-option,-Wno-unused-but-set-variable) \
|
||||
|
|
|
@ -336,7 +336,7 @@ eoi:
|
|||
if (ret == IRQ_HANDLED || epintr || usbintr) {
|
||||
/* clear level interrupt */
|
||||
if (data->clear_irq)
|
||||
data->clear_irq();
|
||||
data->clear_irq(data->dev);
|
||||
/* write EOI */
|
||||
musb_writel(reg_base, USB_END_OF_INTR_REG, 0);
|
||||
}
|
||||
|
@ -401,14 +401,14 @@ static int am35x_musb_init(struct musb *musb)
|
|||
|
||||
/* Reset the musb */
|
||||
if (data->reset)
|
||||
data->reset();
|
||||
data->reset(data->dev);
|
||||
|
||||
/* Reset the controller */
|
||||
musb_writel(reg_base, USB_CTRL_REG, AM35X_SOFT_RESET_MASK);
|
||||
|
||||
/* Start the on-chip PHY and its PLL. */
|
||||
if (data->set_phy_power)
|
||||
data->set_phy_power(1);
|
||||
data->set_phy_power(data->dev, 1);
|
||||
|
||||
msleep(5);
|
||||
|
||||
|
@ -416,7 +416,7 @@ static int am35x_musb_init(struct musb *musb)
|
|||
|
||||
/* clear level interrupt */
|
||||
if (data->clear_irq)
|
||||
data->clear_irq();
|
||||
data->clear_irq(data->dev);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
@ -439,7 +439,7 @@ static int am35x_musb_exit(struct musb *musb)
|
|||
|
||||
/* Shutdown the on-chip PHY and its PLL. */
|
||||
if (data->set_phy_power)
|
||||
data->set_phy_power(0);
|
||||
data->set_phy_power(data->dev, 0);
|
||||
|
||||
#ifndef __UBOOT__
|
||||
usb_put_phy(musb->xceiv);
|
||||
|
@ -630,7 +630,7 @@ static int am35x_suspend(struct device *dev)
|
|||
|
||||
/* Shutdown the on-chip PHY and its PLL. */
|
||||
if (data->set_phy_power)
|
||||
data->set_phy_power(0);
|
||||
data->set_phy_power(data->dev, 0);
|
||||
|
||||
clk_disable(glue->phy_clk);
|
||||
clk_disable(glue->clk);
|
||||
|
@ -647,7 +647,7 @@ static int am35x_resume(struct device *dev)
|
|||
|
||||
/* Start the on-chip PHY and its PLL. */
|
||||
if (data->set_phy_power)
|
||||
data->set_phy_power(1);
|
||||
data->set_phy_power(data->dev, 1);
|
||||
|
||||
ret = clk_enable(glue->phy_clk);
|
||||
if (ret) {
|
||||
|
|
|
@ -452,7 +452,7 @@ static int dsps_musb_init(struct musb *musb)
|
|||
|
||||
/* Start the on-chip PHY and its PLL. */
|
||||
if (data->set_phy_power)
|
||||
data->set_phy_power(1);
|
||||
data->set_phy_power(data->dev, 1);
|
||||
|
||||
musb->isr = dsps_interrupt;
|
||||
|
||||
|
@ -493,7 +493,7 @@ static int dsps_musb_exit(struct musb *musb)
|
|||
|
||||
/* Shutdown the on-chip PHY and its PLL. */
|
||||
if (data->set_phy_power)
|
||||
data->set_phy_power(0);
|
||||
data->set_phy_power(data->dev, 0);
|
||||
|
||||
#ifndef __UBOOT__
|
||||
/* NOP driver needs change if supporting dual instance */
|
||||
|
@ -693,7 +693,7 @@ static int dsps_suspend(struct device *dev)
|
|||
|
||||
/* Shutdown the on-chip PHY and its PLL. */
|
||||
if (data->set_phy_power)
|
||||
data->set_phy_power(0);
|
||||
data->set_phy_power(data->dev, 0);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
@ -705,7 +705,7 @@ static int dsps_resume(struct device *dev)
|
|||
|
||||
/* Start the on-chip PHY and its PLL. */
|
||||
if (data->set_phy_power)
|
||||
data->set_phy_power(1);
|
||||
data->set_phy_power(data->dev, 1);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
|
255
drivers/usb/musb-new/ti-musb.c
Normal file
255
drivers/usb/musb-new/ti-musb.c
Normal file
|
@ -0,0 +1,255 @@
|
|||
/*
|
||||
* MISC driver for TI MUSB Glue.
|
||||
*
|
||||
* (C) Copyright 2016
|
||||
* Texas Instruments Incorporated, <www.ti.com>
|
||||
*
|
||||
* SPDX-License-Identifier: GPL-2.0+
|
||||
*/
|
||||
#include <common.h>
|
||||
#include <command.h>
|
||||
#include <console.h>
|
||||
#include <dm.h>
|
||||
#include <linux/usb/otg.h>
|
||||
#include <dm/device-internal.h>
|
||||
#include <dm/lists.h>
|
||||
|
||||
#include <asm/io.h>
|
||||
#include <asm/omap_musb.h>
|
||||
#include "musb_uboot.h"
|
||||
|
||||
DECLARE_GLOBAL_DATA_PTR;
|
||||
|
||||
#ifdef CONFIG_DM_USB
|
||||
|
||||
/* USB 2.0 PHY Control */
|
||||
#define CM_PHY_PWRDN (1 << 0)
|
||||
#define CM_PHY_OTG_PWRDN (1 << 1)
|
||||
#define OTGVDET_EN (1 << 19)
|
||||
#define OTGSESSENDEN (1 << 20)
|
||||
|
||||
#define AM335X_USB1_CTRL 0x8
|
||||
|
||||
struct ti_musb_platdata {
|
||||
void *base;
|
||||
void *ctrl_mod_base;
|
||||
struct musb_hdrc_platform_data plat;
|
||||
struct musb_hdrc_config musb_config;
|
||||
struct omap_musb_board_data otg_board_data;
|
||||
};
|
||||
|
||||
static int ti_musb_get_usb_index(int node)
|
||||
{
|
||||
const void *fdt = gd->fdt_blob;
|
||||
int i = 0;
|
||||
char path[64];
|
||||
const char *alias_path;
|
||||
char alias[16];
|
||||
|
||||
fdt_get_path(fdt, node, path, sizeof(path));
|
||||
|
||||
do {
|
||||
snprintf(alias, sizeof(alias), "usb%d", i);
|
||||
alias_path = fdt_get_alias(fdt, alias);
|
||||
if (alias_path == NULL) {
|
||||
debug("USB index not found\n");
|
||||
return -ENOENT;
|
||||
}
|
||||
|
||||
if (!strcmp(path, alias_path))
|
||||
return i;
|
||||
|
||||
i++;
|
||||
} while (alias_path);
|
||||
|
||||
return -ENOENT;
|
||||
}
|
||||
|
||||
static void ti_musb_set_phy_power(struct udevice *dev, u8 on)
|
||||
{
|
||||
struct ti_musb_platdata *platdata = dev_get_platdata(dev);
|
||||
|
||||
if (on) {
|
||||
clrsetbits_le32(platdata->ctrl_mod_base,
|
||||
CM_PHY_PWRDN | CM_PHY_OTG_PWRDN,
|
||||
OTGVDET_EN | OTGSESSENDEN);
|
||||
} else {
|
||||
clrsetbits_le32(platdata->ctrl_mod_base, 0,
|
||||
CM_PHY_PWRDN | CM_PHY_OTG_PWRDN);
|
||||
}
|
||||
}
|
||||
|
||||
static int ti_musb_ofdata_to_platdata(struct udevice *dev)
|
||||
{
|
||||
struct ti_musb_platdata *platdata = dev_get_platdata(dev);
|
||||
const void *fdt = gd->fdt_blob;
|
||||
int node = dev->of_offset;
|
||||
int phys;
|
||||
int ctrl_mod;
|
||||
int usb_index;
|
||||
|
||||
platdata->base = (void *)dev_get_addr_index(dev, 1);
|
||||
|
||||
phys = fdtdec_lookup_phandle(fdt, node, "phys");
|
||||
ctrl_mod = fdtdec_lookup_phandle(fdt, phys, "ti,ctrl_mod");
|
||||
platdata->ctrl_mod_base = (void *)fdtdec_get_addr(fdt, ctrl_mod, "reg");
|
||||
usb_index = ti_musb_get_usb_index(node);
|
||||
switch (usb_index) {
|
||||
case 1:
|
||||
platdata->ctrl_mod_base += AM335X_USB1_CTRL;
|
||||
case 0:
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
platdata->musb_config.multipoint = fdtdec_get_int(fdt, node,
|
||||
"mentor,multipoint",
|
||||
-1);
|
||||
if (platdata->musb_config.multipoint < 0) {
|
||||
error("MUSB multipoint DT entry missing\n");
|
||||
return -ENOENT;
|
||||
}
|
||||
|
||||
platdata->musb_config.dyn_fifo = 1;
|
||||
|
||||
platdata->musb_config.num_eps = fdtdec_get_int(fdt, node,
|
||||
"mentor,num-eps", -1);
|
||||
if (platdata->musb_config.num_eps < 0) {
|
||||
error("MUSB num-eps DT entry missing\n");
|
||||
return -ENOENT;
|
||||
}
|
||||
|
||||
platdata->musb_config.ram_bits = fdtdec_get_int(fdt, node,
|
||||
"mentor,ram-bits", -1);
|
||||
if (platdata->musb_config.ram_bits < 0) {
|
||||
error("MUSB ram-bits DT entry missing\n");
|
||||
return -ENOENT;
|
||||
}
|
||||
|
||||
platdata->otg_board_data.set_phy_power = ti_musb_set_phy_power;
|
||||
platdata->otg_board_data.dev = dev;
|
||||
platdata->plat.config = &platdata->musb_config;
|
||||
|
||||
platdata->plat.power = fdtdec_get_int(fdt, node, "mentor,power", -1);
|
||||
if (platdata->plat.power < 0) {
|
||||
error("MUSB mentor,power DT entry missing\n");
|
||||
return -ENOENT;
|
||||
}
|
||||
|
||||
platdata->plat.platform_ops = &musb_dsps_ops;
|
||||
platdata->plat.board_data = &platdata->otg_board_data;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int ti_musb_host_probe(struct udevice *dev)
|
||||
{
|
||||
struct musb_host_data *host = dev_get_priv(dev);
|
||||
struct ti_musb_platdata *platdata = dev_get_platdata(dev);
|
||||
struct usb_bus_priv *priv = dev_get_uclass_priv(dev);
|
||||
struct omap_musb_board_data *otg_board_data;
|
||||
int ret;
|
||||
|
||||
priv->desc_before_addr = true;
|
||||
|
||||
otg_board_data = &platdata->otg_board_data;
|
||||
|
||||
host->host = musb_init_controller(&platdata->plat,
|
||||
(struct device *)otg_board_data,
|
||||
platdata->base);
|
||||
if (!host->host)
|
||||
return -EIO;
|
||||
|
||||
ret = musb_lowlevel_init(host);
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
static int ti_musb_host_remove(struct udevice *dev)
|
||||
{
|
||||
struct musb_host_data *host = dev_get_priv(dev);
|
||||
|
||||
musb_stop(host->host);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int ti_musb_host_ofdata_to_platdata(struct udevice *dev)
|
||||
{
|
||||
struct ti_musb_platdata *platdata = dev_get_platdata(dev);
|
||||
const void *fdt = gd->fdt_blob;
|
||||
int node = dev->of_offset;
|
||||
int ret;
|
||||
|
||||
ret = ti_musb_ofdata_to_platdata(dev);
|
||||
if (ret) {
|
||||
error("platdata dt parse error\n");
|
||||
return ret;
|
||||
}
|
||||
|
||||
platdata->plat.mode = MUSB_HOST;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
U_BOOT_DRIVER(ti_musb_host) = {
|
||||
.name = "ti-musb-host",
|
||||
.id = UCLASS_USB,
|
||||
.ofdata_to_platdata = ti_musb_host_ofdata_to_platdata,
|
||||
.probe = ti_musb_host_probe,
|
||||
.remove = ti_musb_host_remove,
|
||||
.ops = &musb_usb_ops,
|
||||
.platdata_auto_alloc_size = sizeof(struct ti_musb_platdata),
|
||||
.priv_auto_alloc_size = sizeof(struct musb_host_data),
|
||||
};
|
||||
|
||||
static int ti_musb_wrapper_bind(struct udevice *parent)
|
||||
{
|
||||
const void *fdt = gd->fdt_blob;
|
||||
int node;
|
||||
int ret;
|
||||
|
||||
for (node = fdt_first_subnode(fdt, parent->of_offset); node > 0;
|
||||
node = fdt_next_subnode(fdt, node)) {
|
||||
struct udevice *dev;
|
||||
const char *name = fdt_get_name(fdt, node, NULL);
|
||||
enum usb_dr_mode dr_mode;
|
||||
struct driver *drv;
|
||||
|
||||
if (strncmp(name, "usb@", 4))
|
||||
continue;
|
||||
|
||||
dr_mode = usb_get_dr_mode(node);
|
||||
switch (dr_mode) {
|
||||
case USB_DR_MODE_PERIPHERAL:
|
||||
/* Bind MUSB device */
|
||||
break;
|
||||
case USB_DR_MODE_HOST:
|
||||
/* Bind MUSB host */
|
||||
ret = device_bind_driver_to_node(parent, "ti-musb-host",
|
||||
name, node, &dev);
|
||||
if (ret) {
|
||||
error("musb - not able to bind usb host node\n");
|
||||
return ret;
|
||||
}
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
};
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
static const struct udevice_id ti_musb_ids[] = {
|
||||
{ .compatible = "ti,am33xx-usb" },
|
||||
{ }
|
||||
};
|
||||
|
||||
U_BOOT_DRIVER(ti_musb_wrapper) = {
|
||||
.name = "ti-musb-wrapper",
|
||||
.id = UCLASS_MISC,
|
||||
.of_match = ti_musb_ids,
|
||||
.bind = ti_musb_wrapper_bind,
|
||||
};
|
||||
|
||||
#endif /* CONFIG_DM_USB */
|
|
@ -88,15 +88,16 @@ int sandbox_fs_ls(const char *dirname)
|
|||
|
||||
ret = os_dirent_ls(dirname, &head);
|
||||
if (ret)
|
||||
return ret;
|
||||
goto out;
|
||||
|
||||
for (node = head; node; node = node->next) {
|
||||
printf("%s %10lu %s\n", os_dirent_get_typename(node->type),
|
||||
node->size, node->name);
|
||||
}
|
||||
out:
|
||||
os_dirent_free(head);
|
||||
|
||||
return 0;
|
||||
return ret;
|
||||
}
|
||||
|
||||
int sandbox_fs_exists(const char *filename)
|
||||
|
|
|
@ -296,6 +296,7 @@
|
|||
#ifdef CONFIG_SPL_BUILD
|
||||
#undef CONFIG_DM_MMC
|
||||
#undef CONFIG_TIMER
|
||||
#undef CONFIG_DM_USB
|
||||
#endif
|
||||
|
||||
#if defined(CONFIG_SPL_BUILD) && defined(CONFIG_SPL_USBETH_SUPPORT)
|
||||
|
|
|
@ -250,15 +250,6 @@ void cros_ec_dump_data(const char *name, int cmd, const uint8_t *data, int len);
|
|||
*/
|
||||
int cros_ec_calc_checksum(const uint8_t *data, int size);
|
||||
|
||||
/**
|
||||
* Decode a flash region parameter
|
||||
*
|
||||
* @param argc Number of params remaining
|
||||
* @param argv List of remaining parameters
|
||||
* @return flash region (EC_FLASH_REGION_...) or -1 on error
|
||||
*/
|
||||
int cros_ec_decode_region(int argc, char * const argv[]);
|
||||
|
||||
int cros_ec_flash_erase(struct cros_ec_dev *dev, uint32_t offset,
|
||||
uint32_t size);
|
||||
|
||||
|
|
|
@ -496,6 +496,22 @@ void *dev_map_physmem(struct udevice *dev, unsigned long size);
|
|||
*/
|
||||
fdt_addr_t dev_get_addr_index(struct udevice *dev, int index);
|
||||
|
||||
/**
|
||||
* dev_get_addr_size_index() - Get the indexed reg property of a device
|
||||
*
|
||||
* Returns the address and size specified in the 'reg' property of a device.
|
||||
*
|
||||
* @dev: Pointer to a device
|
||||
* @index: the 'reg' property can hold a list of <addr, size> pairs
|
||||
* and @index is used to select which one is required
|
||||
* @size: Pointer to size varible - this function returns the size
|
||||
* specified in the 'reg' property here
|
||||
*
|
||||
* @return addr
|
||||
*/
|
||||
fdt_addr_t dev_get_addr_size_index(struct udevice *dev, int index,
|
||||
fdt_size_t *size);
|
||||
|
||||
/**
|
||||
* dev_get_addr_name() - Get the reg property of a device, indexed by name
|
||||
*
|
||||
|
|
|
@ -21,6 +21,16 @@ struct udevice;
|
|||
*/
|
||||
struct udevice *dm_root(void);
|
||||
|
||||
struct global_data;
|
||||
/**
|
||||
* dm_fixup_for_gd_move() - Handle global_data moving to a new place
|
||||
*
|
||||
* The uclass list is part of global_data. Due to the way lists work, moving
|
||||
* the list will cause it to become invalid. This function fixes that up so
|
||||
* that the uclass list will work correctly.
|
||||
*/
|
||||
void dm_fixup_for_gd_move(struct global_data *new_gd);
|
||||
|
||||
/**
|
||||
* dm_scan_platdata() - Scan all platform data and bind drivers
|
||||
*
|
||||
|
|
|
@ -93,7 +93,15 @@ int fdt_fixup_memory(void *blob, u64 start, u64 size);
|
|||
* property will be left untouched.
|
||||
* @return 0 if ok, or -1 or -FDT_ERR_... on error
|
||||
*/
|
||||
#ifdef CONFIG_ARCH_FIXUP_FDT_MEMORY
|
||||
int fdt_fixup_memory_banks(void *blob, u64 start[], u64 size[], int banks);
|
||||
#else
|
||||
static inline int fdt_fixup_memory_banks(void *blob, u64 start[], u64 size[],
|
||||
int banks)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
#endif
|
||||
|
||||
void fdt_fixup_ethernet(void *fdt);
|
||||
int fdt_find_and_setprop(void *fdt, const char *node, const char *prop,
|
||||
|
|
|
@ -968,6 +968,55 @@ of the source tree, thus allowing rapid tested evolution of the code.
|
|||
SOURCE_DATE_EPOCH=0 ./tools/buildman/buildman -I -P tegra
|
||||
|
||||
|
||||
Checking configuration
|
||||
======================
|
||||
|
||||
A common requirement when converting CONFIG options to Kconfig is to check
|
||||
that the effective configuration has not changed due to the conversion.
|
||||
Buildman supports this with the -K option, used after a build. This shows
|
||||
differences in effective configuration between one commit and the next.
|
||||
|
||||
For example:
|
||||
|
||||
$ buildman -b kc4 -sK
|
||||
...
|
||||
43: Convert CONFIG_SPL_USBETH_SUPPORT to Kconfig
|
||||
arm:
|
||||
+ u-boot.cfg: CONFIG_SPL_ENV_SUPPORT=1 CONFIG_SPL_NET_SUPPORT=1
|
||||
+ u-boot-spl.cfg: CONFIG_SPL_MMC_SUPPORT=1 CONFIG_SPL_NAND_SUPPORT=1
|
||||
+ all: CONFIG_SPL_ENV_SUPPORT=1 CONFIG_SPL_MMC_SUPPORT=1 CONFIG_SPL_NAND_SUPPORT=1 CONFIG_SPL_NET_SUPPORT=1
|
||||
am335x_evm_usbspl :
|
||||
+ u-boot.cfg: CONFIG_SPL_ENV_SUPPORT=1 CONFIG_SPL_NET_SUPPORT=1
|
||||
+ u-boot-spl.cfg: CONFIG_SPL_MMC_SUPPORT=1 CONFIG_SPL_NAND_SUPPORT=1
|
||||
+ all: CONFIG_SPL_ENV_SUPPORT=1 CONFIG_SPL_MMC_SUPPORT=1 CONFIG_SPL_NAND_SUPPORT=1 CONFIG_SPL_NET_SUPPORT=1
|
||||
44: Convert CONFIG_SPL_USB_HOST_SUPPORT to Kconfig
|
||||
...
|
||||
|
||||
This shows that commit 44 enabled three new options for the board
|
||||
am335x_evm_usbspl which were not enabled in commit 43. There is also a
|
||||
summary for 'arm' showing all the changes detected for that architecture.
|
||||
In this case there is only one board with changes, so 'arm' output is the
|
||||
same as 'am335x_evm_usbspl'/
|
||||
|
||||
The -K option uses the u-boot.cfg, spl/u-boot-spl.cfg and tpl/u-boot-tpl.cfg
|
||||
files which are produced by a build. If all you want is to check the
|
||||
configuration you can in fact avoid doing a full build, using -D. This tells
|
||||
buildman to configuration U-Boot and create the .cfg files, but not actually
|
||||
build the source. This is 5-10 times faster than doing a full build.
|
||||
|
||||
By default buildman considers the follow two configuration methods
|
||||
equivalent:
|
||||
|
||||
#define CONFIG_SOME_OPTION
|
||||
|
||||
CONFIG_SOME_OPTION=y
|
||||
|
||||
The former would appear in a header filer and the latter in a defconfig
|
||||
file. The achieve this, buildman considers 'y' to be '1' in configuration
|
||||
variables. This avoids lots of useless output when converting a CONFIG
|
||||
option to Kconfig. To disable this behaviour, use --squash-config-y.
|
||||
|
||||
|
||||
Other options
|
||||
=============
|
||||
|
||||
|
|
|
@ -98,19 +98,22 @@ OUTCOME_OK, OUTCOME_WARNING, OUTCOME_ERROR, OUTCOME_UNKNOWN = range(4)
|
|||
# Translate a commit subject into a valid filename
|
||||
trans_valid_chars = string.maketrans("/: ", "---")
|
||||
|
||||
CONFIG_FILENAMES = [
|
||||
BASE_CONFIG_FILENAMES = [
|
||||
'u-boot.cfg', 'u-boot-spl.cfg', 'u-boot-tpl.cfg'
|
||||
]
|
||||
|
||||
EXTRA_CONFIG_FILENAMES = [
|
||||
'.config', '.config-spl', '.config-tpl',
|
||||
'autoconf.mk', 'autoconf-spl.mk', 'autoconf-tpl.mk',
|
||||
'autoconf.h', 'autoconf-spl.h','autoconf-tpl.h',
|
||||
'u-boot.cfg', 'u-boot-spl.cfg', 'u-boot-tpl.cfg'
|
||||
]
|
||||
|
||||
class Config:
|
||||
"""Holds information about configuration settings for a board."""
|
||||
def __init__(self, target):
|
||||
def __init__(self, config_filename, target):
|
||||
self.target = target
|
||||
self.config = {}
|
||||
for fname in CONFIG_FILENAMES:
|
||||
for fname in config_filename:
|
||||
self.config[fname] = {}
|
||||
|
||||
def Add(self, fname, key, value):
|
||||
|
@ -207,7 +210,8 @@ class Builder:
|
|||
def __init__(self, toolchains, base_dir, git_dir, num_threads, num_jobs,
|
||||
gnu_make='make', checkout=True, show_unknown=True, step=1,
|
||||
no_subdirs=False, full_path=False, verbose_build=False,
|
||||
incremental=False, per_board_out_dir=False):
|
||||
incremental=False, per_board_out_dir=False,
|
||||
config_only=False, squash_config_y=False):
|
||||
"""Create a new Builder object
|
||||
|
||||
Args:
|
||||
|
@ -230,6 +234,8 @@ class Builder:
|
|||
mrproper when configuring
|
||||
per_board_out_dir: Build in a separate persistent directory per
|
||||
board rather than a thread-specific directory
|
||||
config_only: Only configure each build, don't build it
|
||||
squash_config_y: Convert CONFIG options with the value 'y' to '1'
|
||||
"""
|
||||
self.toolchains = toolchains
|
||||
self.base_dir = base_dir
|
||||
|
@ -257,6 +263,11 @@ class Builder:
|
|||
self.no_subdirs = no_subdirs
|
||||
self.full_path = full_path
|
||||
self.verbose_build = verbose_build
|
||||
self.config_only = config_only
|
||||
self.squash_config_y = squash_config_y
|
||||
self.config_filenames = BASE_CONFIG_FILENAMES
|
||||
if not self.squash_config_y:
|
||||
self.config_filenames += EXTRA_CONFIG_FILENAMES
|
||||
|
||||
self.col = terminal.Color()
|
||||
|
||||
|
@ -432,7 +443,7 @@ class Builder:
|
|||
|
||||
name += target
|
||||
Print(line + name, newline=False)
|
||||
length = 14 + len(name)
|
||||
length = 16 + len(name)
|
||||
self.ClearLine(length)
|
||||
|
||||
def _GetOutputDir(self, commit_upto):
|
||||
|
@ -583,13 +594,15 @@ class Builder:
|
|||
key, value = values
|
||||
else:
|
||||
key = values[0]
|
||||
value = ''
|
||||
value = '1' if self.squash_config_y else ''
|
||||
if not key.startswith('CONFIG_'):
|
||||
continue
|
||||
elif not line or line[0] in ['#', '*', '/']:
|
||||
continue
|
||||
else:
|
||||
key, value = line.split('=', 1)
|
||||
if self.squash_config_y and value == 'y':
|
||||
value = '1'
|
||||
config[key] = value
|
||||
return config
|
||||
|
||||
|
@ -656,7 +669,7 @@ class Builder:
|
|||
|
||||
if read_config:
|
||||
output_dir = self.GetBuildDir(commit_upto, target)
|
||||
for name in CONFIG_FILENAMES:
|
||||
for name in self.config_filenames:
|
||||
fname = os.path.join(output_dir, name)
|
||||
config[name] = self._ProcessConfig(fname)
|
||||
|
||||
|
@ -733,8 +746,8 @@ class Builder:
|
|||
line, board)
|
||||
last_was_warning = is_warning
|
||||
last_func = None
|
||||
tconfig = Config(board.target)
|
||||
for fname in CONFIG_FILENAMES:
|
||||
tconfig = Config(self.config_filenames, board.target)
|
||||
for fname in self.config_filenames:
|
||||
if outcome.config:
|
||||
for key, value in outcome.config[fname].iteritems():
|
||||
tconfig.Add(fname, key, value)
|
||||
|
@ -1190,7 +1203,7 @@ class Builder:
|
|||
arch_config_plus[arch] = {}
|
||||
arch_config_minus[arch] = {}
|
||||
arch_config_change[arch] = {}
|
||||
for name in CONFIG_FILENAMES:
|
||||
for name in self.config_filenames:
|
||||
arch_config_plus[arch][name] = {}
|
||||
arch_config_minus[arch][name] = {}
|
||||
arch_config_change[arch][name] = {}
|
||||
|
@ -1207,7 +1220,7 @@ class Builder:
|
|||
tbase = self._base_config[target]
|
||||
tconfig = config[target]
|
||||
lines = []
|
||||
for name in CONFIG_FILENAMES:
|
||||
for name in self.config_filenames:
|
||||
if not tconfig.config[name]:
|
||||
continue
|
||||
config_plus = {}
|
||||
|
@ -1251,7 +1264,7 @@ class Builder:
|
|||
all_plus = {}
|
||||
all_minus = {}
|
||||
all_change = {}
|
||||
for name in CONFIG_FILENAMES:
|
||||
for name in self.config_filenames:
|
||||
all_plus.update(arch_config_plus[arch][name])
|
||||
all_minus.update(arch_config_minus[arch][name])
|
||||
all_change.update(arch_config_change[arch][name])
|
||||
|
|
|
@ -110,8 +110,8 @@ class BuilderThread(threading.Thread):
|
|||
return self.builder.do_make(commit, brd, stage, cwd, *args,
|
||||
**kwargs)
|
||||
|
||||
def RunCommit(self, commit_upto, brd, work_dir, do_config, force_build,
|
||||
force_build_failures):
|
||||
def RunCommit(self, commit_upto, brd, work_dir, do_config, config_only,
|
||||
force_build, force_build_failures):
|
||||
"""Build a particular commit.
|
||||
|
||||
If the build is already done, and we are not forcing a build, we skip
|
||||
|
@ -122,6 +122,7 @@ class BuilderThread(threading.Thread):
|
|||
brd: Board object to build
|
||||
work_dir: Directory to which the source will be checked out
|
||||
do_config: True to run a make <board>_defconfig on the source
|
||||
config_only: Only configure the source, do not build it
|
||||
force_build: Force a build even if one was previously done
|
||||
force_build_failures: Force a bulid if the previous result showed
|
||||
failure
|
||||
|
@ -231,6 +232,8 @@ class BuilderThread(threading.Thread):
|
|||
config_out += result.combined
|
||||
do_config = False # No need to configure next time
|
||||
if result.return_code == 0:
|
||||
if config_only:
|
||||
args.append('cfg')
|
||||
result = self.Make(commit, brd, 'build', cwd, *args,
|
||||
env=env)
|
||||
result.stderr = result.stderr.replace(src_dir + '/', '')
|
||||
|
@ -401,7 +404,7 @@ class BuilderThread(threading.Thread):
|
|||
force_build = False
|
||||
for commit_upto in range(0, len(job.commits), job.step):
|
||||
result, request_config = self.RunCommit(commit_upto, brd,
|
||||
work_dir, do_config,
|
||||
work_dir, do_config, self.builder.config_only,
|
||||
force_build or self.builder.force_build,
|
||||
self.builder.force_build_failures)
|
||||
failed = result.return_code or result.stderr
|
||||
|
@ -411,7 +414,7 @@ class BuilderThread(threading.Thread):
|
|||
# with a reconfig.
|
||||
if self.builder.force_config_on_failure:
|
||||
result, request_config = self.RunCommit(commit_upto,
|
||||
brd, work_dir, True, True, False)
|
||||
brd, work_dir, True, False, True, False)
|
||||
did_config = True
|
||||
if not self.builder.force_reconfig:
|
||||
do_config = request_config
|
||||
|
@ -455,7 +458,8 @@ class BuilderThread(threading.Thread):
|
|||
else:
|
||||
# Just build the currently checked-out build
|
||||
result, request_config = self.RunCommit(None, brd, work_dir, True,
|
||||
True, self.builder.force_build_failures)
|
||||
self.builder.config_only, True,
|
||||
self.builder.force_build_failures)
|
||||
result.commit_upto = 0
|
||||
self._WriteResult(result, job.keep_outputs)
|
||||
self.builder.out_queue.put(result)
|
||||
|
|
|
@ -28,6 +28,8 @@ def ParseArgs():
|
|||
parser.add_option('-d', '--detail', dest='show_detail',
|
||||
action='store_true', default=False,
|
||||
help='Show detailed information for each board in summary')
|
||||
parser.add_option('-D', '--config-only', action='store_true', default=False,
|
||||
help="Don't build, just configure each commit")
|
||||
parser.add_option('-e', '--show_errors', action='store_true',
|
||||
default=False, help='Show errors and warnings')
|
||||
parser.add_option('-f', '--force-build', dest='force_build',
|
||||
|
@ -57,6 +59,8 @@ def ParseArgs():
|
|||
default=False, help='Keep all build output files (e.g. binaries)')
|
||||
parser.add_option('-K', '--show-config', action='store_true',
|
||||
default=False, help='Show configuration changes in summary (both board config files and Kconfig)')
|
||||
parser.add_option('--preserve-config-y', action='store_true',
|
||||
default=False, help="Don't convert y to 1 in configs")
|
||||
parser.add_option('-l', '--list-error-boards', action='store_true',
|
||||
default=False, help='Show a list of boards next to each error/warning')
|
||||
parser.add_option('--list-tool-chains', action='store_true', default=False,
|
||||
|
|
|
@ -258,7 +258,9 @@ def DoBuildman(options, args, toolchains=None, make_func=None, boards=None,
|
|||
no_subdirs=options.no_subdirs, full_path=options.full_path,
|
||||
verbose_build=options.verbose_build,
|
||||
incremental=options.incremental,
|
||||
per_board_out_dir=options.per_board_out_dir,)
|
||||
per_board_out_dir=options.per_board_out_dir,
|
||||
config_only=options.config_only,
|
||||
squash_config_y=not options.preserve_config_y)
|
||||
builder.force_config_on_failure = not options.quick
|
||||
if make_func:
|
||||
builder.do_make = make_func
|
||||
|
|
Loading…
Add table
Reference in a new issue