提交 d85cd291 编写于 作者: T Tom Rini
......@@ -22,6 +22,8 @@ unsigned long map_len;
void reset_cpu(ulong ignored)
{
/* Do this here while it still has an effect */
os_fd_restore();
if (state_uninit())
os_exit(2);
......
......@@ -107,10 +107,12 @@ void os_exit(int exit_code)
static struct termios orig_term;
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);
term_setup = false;
}
}
/* 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)
return;
term_setup = true;
/* If not a tty, don't complain */
if (tcgetattr(fd, &orig_term))
......@@ -134,6 +135,7 @@ void os_tty_raw(int fd, bool allow_sigs)
if (tcsetattr(fd, TCSANOW, &term))
return;
term_setup = true;
atexit(os_fd_restore);
}
......
dtb-$(CONFIG_SANDBOX) += sandbox.dtb
dtb-$(CONFIG_DM_TEST) += test.dtb
dtb-$(CONFIG_UT_DM) += test.dtb
targets += $(dtb-y)
......
......@@ -17,30 +17,6 @@
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 {
reg = <0 0>;
compatible = "google,cros-ec-sandbox";
......@@ -70,10 +46,22 @@
};
};
lcd {
compatible = "sandbox,lcd-sdl";
xres = <1366>;
yres = <768>;
eth@10002000 {
compatible = "sandbox,eth";
reg = <0x10002000 0x1000>;
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 {
......@@ -92,6 +80,12 @@
num-gpios = <10>;
};
hexagon {
compatible = "demo-simple";
colour = "white";
sides = <6>;
};
i2c_0: i2c@0 {
#address-cells = <1>;
#size-cells = <0>;
......@@ -120,18 +114,10 @@
};
};
spi@0 {
#address-cells = <1>;
#size-cells = <0>;
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";
};
lcd {
compatible = "sandbox,lcd-sdl";
xres = <1366>;
yres = <768>;
};
pci: pci-controller {
......@@ -150,22 +136,38 @@
};
};
eth@10002000 {
compatible = "sandbox,eth";
reg = <0x10002000 0x1000>;
fake-host-hwaddr = [00 00 66 44 22 00];
spi@0 {
#address-cells = <1>;
#size-cells = <0>;
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 {
compatible = "sandbox,eth-raw";
reg = <0x80000000 0x1000>;
host-raw-interface = "eth0";
square {
compatible = "demo-shape";
colour = "blue";
sides = <4>;
};
eth@90000000 {
compatible = "sandbox,eth-raw";
reg = <0x90000000 0x1000>;
host-raw-interface = "lo";
triangle {
compatible = "demo-shape";
colour = "cyan";
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 {
......
......@@ -8,9 +8,13 @@
aliases {
console = &uart0;
eth0 = "/eth@10002000";
eth5 = &eth_5;
i2c0 = "/i2c@0";
spi0 = "/spi@0";
pci0 = &pci;
rtc0 = &rtc_0;
rtc1 = &rtc_1;
spi0 = "/spi@0";
testfdt6 = "/e-test";
testbus3 = "/some-bus";
testfdt0 = "/some-bus/c-test@0";
......@@ -18,18 +22,11 @@
testfdt3 = "/b-test";
testfdt5 = "/some-bus/c-test@5";
testfdt8 = "/a-test";
eth0 = "/eth@10002000";
eth5 = &eth_5;
usb0 = &usb_0;
usb1 = &usb_1;
usb2 = &usb_2;
};
uart0: serial {
compatible = "sandbox,serial";
u-boot,dm-pre-reloc;
};
a-test {
reg = <0>;
compatible = "denx,u-boot-fdt-test";
......@@ -108,6 +105,24 @@
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 {
compatible = "sandbox,gpio";
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 {
reg = <0x40>;
};
......@@ -175,22 +206,9 @@
};
};
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>;
uart0: serial {
compatible = "sandbox,serial";
u-boot,dm-pre-reloc;
};
usb_0: usb@0 {
......
......@@ -596,6 +596,7 @@ int pci_bridge_write_config(struct udevice *bus, pci_dev_t devfn, uint offset,
UCLASS_DRIVER(pci) = {
.id = UCLASS_PCI,
.name = "pci",
.flags = DM_UC_FLAG_SEQ_ALIAS,
.post_bind = pci_uclass_post_bind,
.pre_probe = pci_uclass_pre_probe,
.post_probe = pci_uclass_post_probe,
......
......@@ -42,7 +42,7 @@
* Note: With driver model, the label is allocated so there is no need for
* the caller to preserve it.
*
* @param gp GPIO number
* @param gpio GPIO number
* @param label User label for this GPIO
* @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,
* 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
* @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
* @return -ENODATA if the driver returned an unknown function,
* -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
* @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
* @return -ENODATA if the driver returned an unknown function,
* -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
* 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.
*
* 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
* @desc: Place to put GPIO description
* @args: Arguments provided in descripion
* @args: Arguments provided in description
* @return 0 if OK, -ve on error
*/
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
*
* 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
* misused to hold unrelated or optional GPIOs. They should only be used
* 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
*
* 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.
*
* @desc: GPIO description containing device, offset and flags,
......
......@@ -39,20 +39,18 @@ enum uclass_id {
UCLASS_PCH, /* x86 platform controller hub */
UCLASS_PCI, /* PCI bus */
UCLASS_PCI_GENERIC, /* Generic PCI bus device */
UCLASS_PMIC, /* PMIC I/O device */
UCLASS_REGULATOR, /* Regulator device */
UCLASS_RTC, /* Real time clock device */
UCLASS_SERIAL, /* Serial UART */
UCLASS_SPI, /* SPI bus */
UCLASS_SPI_GENERIC, /* Generic SPI flash target */
UCLASS_SPI_FLASH, /* SPI flash */
UCLASS_SPI_GENERIC, /* Generic SPI flash target */
UCLASS_THERMAL, /* Thermal sensor */
UCLASS_USB, /* USB bus */
UCLASS_USB_DEV_GENERIC, /* USB generic device */
UCLASS_USB_HUB, /* USB hub */
/* Power Management */
UCLASS_PMIC, /* PMIC I/O device */
UCLASS_REGULATOR, /* REGULATOR device */
UCLASS_COUNT,
UCLASS_INVALID = -1,
};
......
......@@ -111,6 +111,14 @@ void os_exit(int exit_code) __attribute__((noreturn));
*/
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.
*
......
......@@ -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);
/* 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 */
static int dm_test_pci_swapcase(struct unit_test_state *uts)
{
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册