dm: serial: Add clock member to struct serial_device_info
authorAndy Shevchenko <andriy.shevchenko@linux.intel.com>
Thu, 27 Feb 2020 15:21:54 +0000 (17:21 +0200)
committerBin Meng <bmeng.cn@gmail.com>
Thu, 16 Apr 2020 06:36:28 +0000 (14:36 +0800)
Some callers of serial_getinfo() would like to know the UART base
clock speed in order to make decision what to pass to OS in some
cases. In particular, ACPI SPCR table expects only certain base
clock speed and thus we have to act accordingly.

Signed-off-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
Reviewed-by: Simon Glass <sjg@chromium.org>
Reviewed-by: Bin Meng <bmeng.cn@gmail.com>
drivers/serial/sandbox.c
include/serial.h
test/dm/serial.c

index 1af5cc12f35fd1ea19713d1019822dd8fc620379..545ff3f74724ceafea73a78d87d90e5f02cb6373 100644 (file)
@@ -198,6 +198,7 @@ static int sandbox_serial_getinfo(struct udevice *dev,
                .reg_width = 1,
                .reg_offset = 0,
                .reg_shift = 0,
+               .clock = SERIAL_DEFAULT_CLOCK,
        };
 
        if (!serial_info)
index 104f34ff91460b0838f6709b96c63773c024153d..54b21a04700be139b5a8167985739d943d966d6f 100644 (file)
@@ -139,6 +139,7 @@ enum adr_space_type {
  * @reg_width: size (in bytes) of the IO accesses to the registers
  * @reg_offset:        offset to apply to the @addr from the start of the registers
  * @reg_shift: quantity to shift the register offsets by
+ * @clock:     UART base clock speed in Hz
  * @baudrate:  baud rate
  */
 struct serial_device_info {
@@ -148,10 +149,12 @@ struct serial_device_info {
        u8 reg_width;
        u8 reg_offset;
        u8 reg_shift;
+       unsigned int clock;
        unsigned int baudrate;
 };
 
 #define SERIAL_DEFAULT_ADDRESS 0xBADACCE5
+#define SERIAL_DEFAULT_CLOCK   (16 * 115200)
 
 /**
  * struct struct dm_serial_ops - Driver model serial operations
index 3d741a8c363cd38d37046582bcb66876e9e50602..c6be6ab7abd00d3864e2b80bfd7979690dcfdaa8 100644 (file)
@@ -29,6 +29,7 @@ static int dm_test_serial(struct unit_test_state *uts)
        ut_assertok(serial_getinfo(dev_serial, &info_serial));
        ut_assert(info_serial.type == SERIAL_CHIP_UNKNOWN);
        ut_assert(info_serial.addr == SERIAL_DEFAULT_ADDRESS);
+       ut_assert(info_serial.clock == SERIAL_DEFAULT_CLOCK);
        /*
         * test with a parameter which is NULL pointer
         */