return 0;
 }
 
+static int sifive_serial_suspend(struct device *dev)
+{
+       struct sifive_serial_port *ssp = dev_get_drvdata(dev);
+
+       return uart_suspend_port(&sifive_serial_uart_driver, &ssp->port);
+}
+
+static int sifive_serial_resume(struct device *dev)
+{
+       struct sifive_serial_port *ssp = dev_get_drvdata(dev);
+
+       return uart_resume_port(&sifive_serial_uart_driver, &ssp->port);
+}
+
+DEFINE_SIMPLE_DEV_PM_OPS(sifive_uart_pm_ops, sifive_serial_suspend,
+                        sifive_serial_resume);
+
 static const struct of_device_id sifive_serial_of_match[] = {
        { .compatible = "sifive,fu540-c000-uart0" },
        { .compatible = "sifive,uart0" },
        .remove         = sifive_serial_remove,
        .driver         = {
                .name   = SIFIVE_SERIAL_NAME,
+               .pm = pm_sleep_ptr(&sifive_uart_pm_ops),
                .of_match_table = sifive_serial_of_match,
        },
 };