#include <linux/acpi.h>
 #include <linux/bitops.h>
+#include <linux/dmi.h>
 #include <linux/iopoll.h>
 #include <linux/module.h>
 #include <linux/platform_device.h>
        .exec_op = hisi_sfc_v3xx_exec_op,
 };
 
+static int hisi_sfc_v3xx_buswidth_override_bits;
+
+/*
+ * ACPI FW does not allow us to currently set the device buswidth, so quirk it
+ * depending on the board.
+ */
+static int __init hisi_sfc_v3xx_dmi_quirk(const struct dmi_system_id *d)
+{
+       hisi_sfc_v3xx_buswidth_override_bits = SPI_RX_QUAD | SPI_TX_QUAD;
+
+       return 0;
+}
+
+static const struct dmi_system_id hisi_sfc_v3xx_dmi_quirk_table[]  = {
+       {
+       .callback = hisi_sfc_v3xx_dmi_quirk,
+       .matches = {
+               DMI_MATCH(DMI_SYS_VENDOR, "Huawei"),
+               DMI_MATCH(DMI_PRODUCT_NAME, "D06"),
+       },
+       },
+       {
+       .callback = hisi_sfc_v3xx_dmi_quirk,
+       .matches = {
+               DMI_MATCH(DMI_SYS_VENDOR, "Huawei"),
+               DMI_MATCH(DMI_PRODUCT_NAME, "TaiShan 2280 V2"),
+       },
+       },
+       {
+       .callback = hisi_sfc_v3xx_dmi_quirk,
+       .matches = {
+               DMI_MATCH(DMI_SYS_VENDOR, "Huawei"),
+               DMI_MATCH(DMI_PRODUCT_NAME, "TaiShan 200 (Model 2280)"),
+       },
+       },
+       {}
+};
+
 static int hisi_sfc_v3xx_probe(struct platform_device *pdev)
 {
        struct device *dev = &pdev->dev;
        ctlr->mode_bits = SPI_RX_DUAL | SPI_RX_QUAD |
                          SPI_TX_DUAL | SPI_TX_QUAD;
 
+       ctlr->buswidth_override_bits = hisi_sfc_v3xx_buswidth_override_bits;
+
        host = spi_controller_get_devdata(ctlr);
        host->dev = dev;
 
        .probe  = hisi_sfc_v3xx_probe,
 };
 
-module_platform_driver(hisi_sfc_v3xx_spi_driver);
+static int __init hisi_sfc_v3xx_spi_init(void)
+{
+       dmi_check_system(hisi_sfc_v3xx_dmi_quirk_table);
+
+       return platform_driver_register(&hisi_sfc_v3xx_spi_driver);
+}
+
+static void __exit hisi_sfc_v3xx_spi_exit(void)
+{
+       platform_driver_unregister(&hisi_sfc_v3xx_spi_driver);
+}
+
+module_init(hisi_sfc_v3xx_spi_init);
+module_exit(hisi_sfc_v3xx_spi_exit);
 
 MODULE_LICENSE("GPL");
 MODULE_AUTHOR("John Garry <john.garry@huawei.com>");