Merge git://git.denx.de/u-boot-dm

This commit is contained in:
Tom Rini 2015-06-05 11:21:08 -04:00
commit d85cd29133
10 changed files with 135 additions and 93 deletions

View file

@ -22,6 +22,8 @@ unsigned long map_len;
void reset_cpu(ulong ignored) void reset_cpu(ulong ignored)
{ {
/* Do this here while it still has an effect */
os_fd_restore();
if (state_uninit()) if (state_uninit())
os_exit(2); os_exit(2);

View file

@ -107,10 +107,12 @@ void os_exit(int exit_code)
static struct termios orig_term; static struct termios orig_term;
static bool term_setup; static bool term_setup;
static void os_fd_restore(void) void os_fd_restore(void)
{ {
if (term_setup) if (term_setup) {
tcsetattr(0, TCSANOW, &orig_term); tcsetattr(0, TCSANOW, &orig_term);
term_setup = false;
}
} }
/* Put tty into raw mode so <tab> and <ctrl+c> work */ /* Put tty into raw mode so <tab> and <ctrl+c> work */
@ -120,7 +122,6 @@ void os_tty_raw(int fd, bool allow_sigs)
if (term_setup) if (term_setup)
return; return;
term_setup = true;
/* If not a tty, don't complain */ /* If not a tty, don't complain */
if (tcgetattr(fd, &orig_term)) if (tcgetattr(fd, &orig_term))
@ -134,6 +135,7 @@ void os_tty_raw(int fd, bool allow_sigs)
if (tcsetattr(fd, TCSANOW, &term)) if (tcsetattr(fd, TCSANOW, &term))
return; return;
term_setup = true;
atexit(os_fd_restore); atexit(os_fd_restore);
} }

View file

@ -1,5 +1,5 @@
dtb-$(CONFIG_SANDBOX) += sandbox.dtb dtb-$(CONFIG_SANDBOX) += sandbox.dtb
dtb-$(CONFIG_DM_TEST) += test.dtb dtb-$(CONFIG_UT_DM) += test.dtb
targets += $(dtb-y) targets += $(dtb-y)

View file

@ -17,30 +17,6 @@
stdout-path = "/serial"; stdout-path = "/serial";
}; };
/* Needs to be available prior to relocation */
uart0: serial {
compatible = "sandbox,serial";
sandbox,text-colour = "cyan";
};
triangle {
compatible = "demo-shape";
colour = "cyan";
sides = <3>;
character = <83>;
light-gpios = <&gpio_a 2>, <&gpio_b 6 0>;
};
square {
compatible = "demo-shape";
colour = "blue";
sides = <4>;
};
hexagon {
compatible = "demo-simple";
colour = "white";
sides = <6>;
};
cros_ec: cros-ec@0 { cros_ec: cros-ec@0 {
reg = <0 0>; reg = <0 0>;
compatible = "google,cros-ec-sandbox"; compatible = "google,cros-ec-sandbox";
@ -70,10 +46,22 @@
}; };
}; };
lcd { eth@10002000 {
compatible = "sandbox,lcd-sdl"; compatible = "sandbox,eth";
xres = <1366>; reg = <0x10002000 0x1000>;
yres = <768>; fake-host-hwaddr = [00 00 66 44 22 00];
};
eth@80000000 {
compatible = "sandbox,eth-raw";
reg = <0x80000000 0x1000>;
host-raw-interface = "eth0";
};
eth@90000000 {
compatible = "sandbox,eth-raw";
reg = <0x90000000 0x1000>;
host-raw-interface = "lo";
}; };
gpio_a: gpios@0 { gpio_a: gpios@0 {
@ -92,6 +80,12 @@
num-gpios = <10>; num-gpios = <10>;
}; };
hexagon {
compatible = "demo-simple";
colour = "white";
sides = <6>;
};
i2c_0: i2c@0 { i2c_0: i2c@0 {
#address-cells = <1>; #address-cells = <1>;
#size-cells = <0>; #size-cells = <0>;
@ -120,18 +114,10 @@
}; };
}; };
spi@0 { lcd {
#address-cells = <1>; compatible = "sandbox,lcd-sdl";
#size-cells = <0>; xres = <1366>;
reg = <0 0>; yres = <768>;
compatible = "sandbox,spi";
cs-gpios = <0>, <&gpio_a 0>;
firmware_storage_spi: flash@0 {
reg = <0>;
compatible = "spansion,m25p16", "sandbox,spi-flash";
spi-max-frequency = <40000000>;
sandbox,filename = "spi.bin";
};
}; };
pci: pci-controller { pci: pci-controller {
@ -150,22 +136,38 @@
}; };
}; };
eth@10002000 { spi@0 {
compatible = "sandbox,eth"; #address-cells = <1>;
reg = <0x10002000 0x1000>; #size-cells = <0>;
fake-host-hwaddr = [00 00 66 44 22 00]; reg = <0 0>;
compatible = "sandbox,spi";
cs-gpios = <0>, <&gpio_a 0>;
firmware_storage_spi: flash@0 {
reg = <0>;
compatible = "spansion,m25p16", "sandbox,spi-flash";
spi-max-frequency = <40000000>;
sandbox,filename = "spi.bin";
};
}; };
eth@80000000 { square {
compatible = "sandbox,eth-raw"; compatible = "demo-shape";
reg = <0x80000000 0x1000>; colour = "blue";
host-raw-interface = "eth0"; sides = <4>;
}; };
eth@90000000 { triangle {
compatible = "sandbox,eth-raw"; compatible = "demo-shape";
reg = <0x90000000 0x1000>; colour = "cyan";
host-raw-interface = "lo"; sides = <3>;
character = <83>;
light-gpios = <&gpio_a 2>, <&gpio_b 6 0>;
};
/* Needs to be available prior to relocation */
uart0: serial {
compatible = "sandbox,serial";
sandbox,text-colour = "cyan";
}; };
usb@0 { usb@0 {

View file

@ -8,9 +8,13 @@
aliases { aliases {
console = &uart0; console = &uart0;
eth0 = "/eth@10002000";
eth5 = &eth_5;
i2c0 = "/i2c@0"; i2c0 = "/i2c@0";
spi0 = "/spi@0";
pci0 = &pci; pci0 = &pci;
rtc0 = &rtc_0;
rtc1 = &rtc_1;
spi0 = "/spi@0";
testfdt6 = "/e-test"; testfdt6 = "/e-test";
testbus3 = "/some-bus"; testbus3 = "/some-bus";
testfdt0 = "/some-bus/c-test@0"; testfdt0 = "/some-bus/c-test@0";
@ -18,18 +22,11 @@
testfdt3 = "/b-test"; testfdt3 = "/b-test";
testfdt5 = "/some-bus/c-test@5"; testfdt5 = "/some-bus/c-test@5";
testfdt8 = "/a-test"; testfdt8 = "/a-test";
eth0 = "/eth@10002000";
eth5 = &eth_5;
usb0 = &usb_0; usb0 = &usb_0;
usb1 = &usb_1; usb1 = &usb_1;
usb2 = &usb_2; usb2 = &usb_2;
}; };
uart0: serial {
compatible = "sandbox,serial";
u-boot,dm-pre-reloc;
};
a-test { a-test {
reg = <0>; reg = <0>;
compatible = "denx,u-boot-fdt-test"; compatible = "denx,u-boot-fdt-test";
@ -108,6 +105,24 @@
compatible = "denx,u-boot-fdt-test"; compatible = "denx,u-boot-fdt-test";
}; };
eth@10002000 {
compatible = "sandbox,eth";
reg = <0x10002000 0x1000>;
fake-host-hwaddr = <0x00 0x00 0x66 0x44 0x22 0x00>;
};
eth_5: eth@10003000 {
compatible = "sandbox,eth";
reg = <0x10003000 0x1000>;
fake-host-hwaddr = <0x00 0x00 0x66 0x44 0x22 0x11>;
};
eth@10004000 {
compatible = "sandbox,eth";
reg = <0x10004000 0x1000>;
fake-host-hwaddr = <0x00 0x00 0x66 0x44 0x22 0x22>;
};
gpio_a: base-gpios { gpio_a: base-gpios {
compatible = "sandbox,gpio"; compatible = "sandbox,gpio";
gpio-controller; gpio-controller;
@ -140,6 +155,22 @@
}; };
}; };
rtc_0: rtc@43 {
reg = <0x43>;
compatible = "sandbox-rtc";
emul {
compatible = "sandbox,i2c-rtc";
};
};
rtc_1: rtc@61 {
reg = <0x61>;
compatible = "sandbox-rtc";
emul {
compatible = "sandbox,i2c-rtc";
};
};
sandbox_pmic: sandbox_pmic { sandbox_pmic: sandbox_pmic {
reg = <0x40>; reg = <0x40>;
}; };
@ -175,22 +206,9 @@
}; };
}; };
eth@10002000 { uart0: serial {
compatible = "sandbox,eth"; compatible = "sandbox,serial";
reg = <0x10002000 0x1000>; u-boot,dm-pre-reloc;
fake-host-hwaddr = <0x00 0x00 0x66 0x44 0x22 0x00>;
};
eth_5: eth@10003000 {
compatible = "sandbox,eth";
reg = <0x10003000 0x1000>;
fake-host-hwaddr = <0x00 0x00 0x66 0x44 0x22 0x11>;
};
eth@10004000 {
compatible = "sandbox,eth";
reg = <0x10004000 0x1000>;
fake-host-hwaddr = <0x00 0x00 0x66 0x44 0x22 0x22>;
}; };
usb_0: usb@0 { usb_0: usb@0 {

View file

@ -596,6 +596,7 @@ int pci_bridge_write_config(struct udevice *bus, pci_dev_t devfn, uint offset,
UCLASS_DRIVER(pci) = { UCLASS_DRIVER(pci) = {
.id = UCLASS_PCI, .id = UCLASS_PCI,
.name = "pci", .name = "pci",
.flags = DM_UC_FLAG_SEQ_ALIAS,
.post_bind = pci_uclass_post_bind, .post_bind = pci_uclass_post_bind,
.pre_probe = pci_uclass_pre_probe, .pre_probe = pci_uclass_pre_probe,
.post_probe = pci_uclass_post_probe, .post_probe = pci_uclass_post_probe,

View file

@ -42,7 +42,7 @@
* Note: With driver model, the label is allocated so there is no need for * Note: With driver model, the label is allocated so there is no need for
* the caller to preserve it. * the caller to preserve it.
* *
* @param gp GPIO number * @param gpio GPIO number
* @param label User label for this GPIO * @param label User label for this GPIO
* @return 0 if ok, -1 on error * @return 0 if ok, -1 on error
*/ */
@ -127,7 +127,7 @@ struct gpio_desc {
}; };
/** /**
* dm_gpio_is_valid() - Check if a GPIO is gpio_is_valie * dm_gpio_is_valid() - Check if a GPIO is valid
* *
* @desc: GPIO description containing device, offset and flags, * @desc: GPIO description containing device, offset and flags,
* previously returned by gpio_request_by_name() * previously returned by gpio_request_by_name()
@ -167,7 +167,7 @@ int gpio_get_status(struct udevice *dev, int offset, char *buf, int buffsize);
* *
* @dev: Device to check * @dev: Device to check
* @offset: Offset of device GPIO to check * @offset: Offset of device GPIO to check
* @namep: If non-NULL, this is set to the nane given when the GPIO * @namep: If non-NULL, this is set to the name given when the GPIO
* was requested, or -1 if it has not been requested * was requested, or -1 if it has not been requested
* @return -ENODATA if the driver returned an unknown function, * @return -ENODATA if the driver returned an unknown function,
* -ENODEV if the device is not active, -EINVAL if the offset is invalid. * -ENODEV if the device is not active, -EINVAL if the offset is invalid.
@ -186,7 +186,7 @@ int gpio_get_function(struct udevice *dev, int offset, const char **namep);
* *
* @dev: Device to check * @dev: Device to check
* @offset: Offset of device GPIO to check * @offset: Offset of device GPIO to check
* @namep: If non-NULL, this is set to the nane given when the GPIO * @namep: If non-NULL, this is set to the name given when the GPIO
* was requested, or -1 if it has not been requested * was requested, or -1 if it has not been requested
* @return -ENODATA if the driver returned an unknown function, * @return -ENODATA if the driver returned an unknown function,
* -ENODEV if the device is not active, -EINVAL if the offset is invalid. * -ENODEV if the device is not active, -EINVAL if the offset is invalid.
@ -219,7 +219,7 @@ struct fdtdec_phandle_args;
* Also it would be useful to standardise additional functions like * Also it would be useful to standardise additional functions like
* pullup, slew rate and drive strength. * pullup, slew rate and drive strength.
* *
* gpio_request)( and gpio_free() are optional - if NULL then they will * gpio_request() and gpio_free() are optional - if NULL then they will
* not be called. * not be called.
* *
* Note that @offset is the offset from the base GPIO of the device. So * Note that @offset is the offset from the base GPIO of the device. So
@ -271,7 +271,7 @@ struct dm_gpio_ops {
* *
* @dev: GPIO device * @dev: GPIO device
* @desc: Place to put GPIO description * @desc: Place to put GPIO description
* @args: Arguments provided in descripion * @args: Arguments provided in description
* @return 0 if OK, -ve on error * @return 0 if OK, -ve on error
*/ */
int (*xlate)(struct udevice *dev, struct gpio_desc *desc, int (*xlate)(struct udevice *dev, struct gpio_desc *desc,
@ -398,7 +398,7 @@ int gpio_request_by_name(struct udevice *dev, const char *list_name,
/** /**
* gpio_request_list_by_name() - Request a list of GPIOs * gpio_request_list_by_name() - Request a list of GPIOs
* *
* Reads all the GPIOs from a list and requetss them. See * Reads all the GPIOs from a list and requests them. See
* gpio_request_by_name() for additional details. Lists should not be * gpio_request_by_name() for additional details. Lists should not be
* misused to hold unrelated or optional GPIOs. They should only be used * misused to hold unrelated or optional GPIOs. They should only be used
* for things like parallel data lines. A zero phandle terminates the list * for things like parallel data lines. A zero phandle terminates the list
@ -533,7 +533,7 @@ int dm_gpio_set_dir_flags(struct gpio_desc *desc, ulong flags);
/** /**
* gpio_get_number() - Get the global GPIO number of a GPIO * gpio_get_number() - Get the global GPIO number of a GPIO
* *
* This should only be used for debugging or interest. It returns the nummber * This should only be used for debugging or interest. It returns the number
* that should be used for gpio_get_value() etc. to access this GPIO. * that should be used for gpio_get_value() etc. to access this GPIO.
* *
* @desc: GPIO description containing device, offset and flags, * @desc: GPIO description containing device, offset and flags,

View file

@ -39,20 +39,18 @@ enum uclass_id {
UCLASS_PCH, /* x86 platform controller hub */ UCLASS_PCH, /* x86 platform controller hub */
UCLASS_PCI, /* PCI bus */ UCLASS_PCI, /* PCI bus */
UCLASS_PCI_GENERIC, /* Generic PCI bus device */ UCLASS_PCI_GENERIC, /* Generic PCI bus device */
UCLASS_PMIC, /* PMIC I/O device */
UCLASS_REGULATOR, /* Regulator device */
UCLASS_RTC, /* Real time clock device */ UCLASS_RTC, /* Real time clock device */
UCLASS_SERIAL, /* Serial UART */ UCLASS_SERIAL, /* Serial UART */
UCLASS_SPI, /* SPI bus */ UCLASS_SPI, /* SPI bus */
UCLASS_SPI_GENERIC, /* Generic SPI flash target */
UCLASS_SPI_FLASH, /* SPI flash */ UCLASS_SPI_FLASH, /* SPI flash */
UCLASS_SPI_GENERIC, /* Generic SPI flash target */
UCLASS_THERMAL, /* Thermal sensor */ UCLASS_THERMAL, /* Thermal sensor */
UCLASS_USB, /* USB bus */ UCLASS_USB, /* USB bus */
UCLASS_USB_DEV_GENERIC, /* USB generic device */ UCLASS_USB_DEV_GENERIC, /* USB generic device */
UCLASS_USB_HUB, /* USB hub */ UCLASS_USB_HUB, /* USB hub */
/* Power Management */
UCLASS_PMIC, /* PMIC I/O device */
UCLASS_REGULATOR, /* REGULATOR device */
UCLASS_COUNT, UCLASS_COUNT,
UCLASS_INVALID = -1, UCLASS_INVALID = -1,
}; };

View file

@ -111,6 +111,14 @@ void os_exit(int exit_code) __attribute__((noreturn));
*/ */
void os_tty_raw(int fd, bool allow_sigs); void os_tty_raw(int fd, bool allow_sigs);
/**
* Restore the tty to its original mode
*
* Call this to restore the original terminal mode, after it has been changed
* by os_tty_raw(). This is an internal function.
*/
void os_fd_restore(void);
/** /**
* Acquires some memory from the underlying os. * Acquires some memory from the underlying os.
* *

View file

@ -21,6 +21,17 @@ static int dm_test_pci_base(struct unit_test_state *uts)
} }
DM_TEST(dm_test_pci_base, DM_TESTF_SCAN_PDATA | DM_TESTF_SCAN_FDT); DM_TEST(dm_test_pci_base, DM_TESTF_SCAN_PDATA | DM_TESTF_SCAN_FDT);
/* Test that sandbox PCI bus numbering works correctly */
static int dm_test_pci_busnum(struct unit_test_state *uts)
{
struct udevice *bus;
ut_assertok(uclass_get_device_by_seq(UCLASS_PCI, 0, &bus));
return 0;
}
DM_TEST(dm_test_pci_busnum, DM_TESTF_SCAN_PDATA | DM_TESTF_SCAN_FDT);
/* Test that we can use the swapcase device correctly */ /* Test that we can use the swapcase device correctly */
static int dm_test_pci_swapcase(struct unit_test_state *uts) static int dm_test_pci_swapcase(struct unit_test_state *uts)
{ {