Merge git://git.denx.de/u-boot-dm
authorTom Rini <trini@konsulko.com>
Fri, 5 Jun 2015 15:21:08 +0000 (11:21 -0400)
committerTom Rini <trini@konsulko.com>
Fri, 5 Jun 2015 15:21:08 +0000 (11:21 -0400)
arch/sandbox/cpu/cpu.c
arch/sandbox/cpu/os.c
arch/sandbox/dts/Makefile
arch/sandbox/dts/sandbox.dts
arch/sandbox/dts/test.dts
drivers/pci/pci-uclass.c
include/asm-generic/gpio.h
include/dm/uclass-id.h
include/os.h
test/dm/pci.c

index b6aae3718a19f81baaa4a7616ec1231d67c3e80e..02c4cd366d13c0444eb28f11c35074a06d608413 100644 (file)
@@ -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);
 
index e6dd17e9efc7c62777bc6e4210c367abb2471435..8a4d719835ccb88c00b5aa6fd1e37cfdc049e8e8 100644 (file)
@@ -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);
 }
 
index 562a078c4b4085653f496f8c6be26e73cd98f619..517b5554756fa417814995ea56f26b48a9654cb7 100644 (file)
@@ -1,5 +1,5 @@
 dtb-$(CONFIG_SANDBOX) += sandbox.dtb
-dtb-$(CONFIG_DM_TEST) += test.dtb
+dtb-$(CONFIG_UT_DM) += test.dtb
 
 targets += $(dtb-y)
 
index a3ebd80dd8ce8fda45fe20c4add79c48f5f23667..89275271413095e2d4d6242ee523e4206070ac8c 100644 (file)
                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";
                };
        };
 
-       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 {
                num-gpios = <10>;
        };
 
+       hexagon {
+               compatible = "demo-simple";
+               colour = "white";
+               sides = <6>;
+       };
+
        i2c_0: i2c@0 {
                #address-cells = <1>;
                #size-cells = <0>;
                };
        };
 
-       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 {
                };
        };
 
-       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 {
index 1bc3ca0770c5ac1c6784c1621e4200f92b359e95..c25614ab8806aef6b908a5f616d2dd47492fe528 100644 (file)
@@ -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";
                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";
                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;
                        };
                };
 
+               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>;
                };
                };
        };
 
-       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 {
index d48d865bac13ef0728afd08647063b44cb778242..de8750546699e0a66a5d70d9652184d1c5ba448b 100644 (file)
@@ -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,
index 519bb0be27acbfb3b0fb9d580bd5f72a406b5e7f..de91e57efcd672a4e61e06434a6d0c042a3c0b07 100644 (file)
@@ -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,
index 4d737f46c5b8894fb0d58fb9460cba8d5a9685c7..c7310d7ca04f23300385fe7e025ebe719ee6bb16 100644 (file)
@@ -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,
 };
index ffbdce84643e0f593f8d6d684753b1b32af13447..954a48c9919e78a9259b615d6be12aa01c1ef4b3 100644 (file)
@@ -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.
  *
index 2f3ae7941b1b405bf1e298beace53dfcb1b6b881..3ab4ba811cf4280462cd3bacd2897fe08bc3a094 100644 (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);
 
+/* 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)
 {