static void sysc_parse_dts_quirks(struct sysc *ddata, struct device_node *np,
                                  bool is_child);
+static int sysc_reset(struct sysc *ddata);
 
 static void sysc_write(struct sysc *ddata, int offset, u32 value)
 {
        if (error)
                dev_warn(dev, "reinit resume failed: %i\n", error);
 
+       /* Some modules like am335x gpmc need reset and restore of sysconfig */
+       if (ddata->cfg.quirks & SYSC_QUIRK_RESET_ON_CTX_LOST) {
+               error = sysc_reset(ddata);
+               if (error)
+                       dev_warn(dev, "reinit reset failed: %i\n", error);
+
+               sysc_write_sysconfig(ddata, ddata->sysconfig);
+       }
+
        if (leave_enabled)
                return error;
 
 
        s8 emufree_shift;
 };
 
+#define SYSC_QUIRK_RESET_ON_CTX_LOST   BIT(29)
 #define SYSC_QUIRK_REINIT_ON_CTX_LOST  BIT(28)
 #define SYSC_QUIRK_REINIT_ON_RESUME    BIT(27)
 #define SYSC_QUIRK_GPMC_DEBUG          BIT(26)