SignGP: add CH support
[x-loader-sniper.git] / scripts / signGP.c
index 0e8ed07..a60eee3 100644 (file)
 #include <sys/stat.h>
 #include <string.h>
 #include <malloc.h>
+#include <linux/types.h>
+
+#undef CH_WITH_CHRAM
+struct chsettings {
+       __u32 section_key;
+       __u8 valid;
+       __u8 version;
+       __u16 reserved;
+       __u32 flags;
+} __attribute__ ((__packed__));
+
+/*    __u32  cm_clksel_core;
+    __u32  reserved1;
+    __u32  cm_autoidle_dpll_mpu;
+    __u32  cm_clksel_dpll_mpu;
+    __u32  cm_div_m2_dpll_mpu;
+    __u32  cm_autoidle_dpll_core;
+    __u32  cm_clksel_dpll_core;
+    __u32  cm_div_m2_dpll_core;
+    __u32  cm_div_m3_dpll_core;
+    __u32  cm_div_m4_dpll_core;
+    __u32  cm_div_m5_dpll_core;
+    __u32  cm_div_m6_dpll_core;
+    __u32  cm_div_m7_dpll_core;
+    __u32  cm_autoidle_dpll_per;
+    __u32  cm_clksel_dpll_per;
+    __u32  cm_div_m2_dpll_per;
+    __u32  cm_div_m3_dpll_per;
+    __u32  cm_div_m4_dpll_per;
+    __u32  cm_div_m5_dpll_per;
+    __u32  cm_div_m6_dpll_per;
+    __u32  cm_div_m7_dpll_per;
+    __u32  cm_autoidle_dpll_usb;
+    __u32  cm_clksel_dpll_usb;
+    __u32  cm_div_m2_dpll_usb;
+}*/
+
+struct gp_header {
+       __u32 size;
+       __u32 load_addr;
+} __attribute__ ((__packed__));
+
+struct ch_toc {
+       __u32 section_offset;
+       __u32 section_size;
+       __u8 unused[12];
+       __u8 section_name[12];
+} __attribute__ ((__packed__));
+
+struct chram {
+       /*CHRAM */
+       __u32 section_key_chr;
+       __u8 section_disable_chr;
+       __u8 pad_chr[3];
+       /*EMIF1 */
+       __u32 config_emif1;
+       __u32 refresh_emif1;
+       __u32 tim1_emif1;
+       __u32 tim2_emif1;
+       __u32 tim3_emif1;
+       __u32 pwrControl_emif1;
+       __u32 phy_cntr1_emif1;
+       __u32 phy_cntr2_emif1;
+       __u8 modereg1_emif1;
+       __u8 modereg2_emif1;
+       __u8 modereg3_emif1;
+       __u8 pad_emif1;
+       /*EMIF2 */
+       __u32 config_emif2;
+       __u32 refresh_emif2;
+       __u32 tim1_emif2;
+       __u32 tim2_emif2;
+       __u32 tim3_emif2;
+       __u32 pwrControl_emif2;
+       __u32 phy_cntr1_emif2;
+       __u32 phy_cntr2_emif2;
+       __u8 modereg1_emif2;
+       __u8 modereg2_emif2;
+       __u8 modereg3_emif2;
+       __u8 pad_emif2;
+
+       __u32 dmm_lisa_map;
+       __u8 flags;
+       __u8 pad[3];
+} __attribute__ ((__packed__));
+
+
+struct ch_chsettings_chram {
+       struct ch_toc toc_chsettings;
+       struct ch_toc toc_chram;
+       struct ch_toc toc_terminator;
+       struct chsettings section_chsettings;
+       struct chram section_chram;
+       __u8 padding1[512 -
+                   (sizeof(struct ch_toc) * 3 +
+                    sizeof(struct chsettings) + sizeof(struct chram))];
+       //struct gp_header gpheader;
+} __attribute__ ((__packed__));
+
+struct ch_chsettings_nochram {
+       struct ch_toc toc_chsettings;
+       struct ch_toc toc_terminator;
+       struct chsettings section_chsettings;
+       __u8 padding1[512 -
+                   (sizeof(struct ch_toc) * 2 +
+                    sizeof(struct chsettings))];
+       //struct gp_header gpheader;
+} __attribute__ ((__packed__));
+
+
+#ifdef CH_WITH_CHRAM
+const struct ch_chsettings_chram config_header = {
+       //CHSETTINGS TOC
+       {sizeof(struct ch_toc) * 4,
+        sizeof(struct chsettings),
+        "",
+        {"CHSETTINGS"}
+        },
+       //CHRAM TOC
+       {sizeof(struct ch_toc) * 4 + sizeof(struct chsettings),
+        sizeof(struct chram),
+        "",
+        {"CHRAM"}
+        },
+       // toc terminator
+       {0xFFFFFFFF,
+        0xFFFFFFFF,
+        {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+         0xFF},
+        {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+         0xFF}
+        },
+       //CHSETTINGS section
+       {
+        0xC0C0C0C1,
+        0,
+        1,
+        0,
+        0},
+       //CHRAM section
+       {
+        0xc0c0c0c2,
+        0x01,
+        {0x00, 0x00, 0x00},
+
+        /*EMIF1 */
+        0x80800eb2,
+        0x00000010,
+        0x110d1624,
+        0x3058161b,
+        0x030060b2,
+        0x00000200,
+        0x901ff416,
+        0x00000000,
+        0x23,
+        0x01,
+        0x02,
+        0x00,
+
+        /*EMIF2 */
+        0x80800eb2,
+        0x000002ba,
+        0x110d1624,
+        0x3058161b,
+        0x03006542,
+        0x00000200,
+        0x901ff416,
+        0x00000000,
+        0x23,
+        0x01,
+        0x02,
+        0x00,
+
+        /* LISA map */
+        0x80700100,
+        0x05,
+        {0x00, 0x00, 0x00},
+        },
+       ""
+};
+#else
+struct ch_chsettings_nochram config_header  __attribute__((section(".config_header"))) = {
+       //CHSETTINGS TOC
+       {(sizeof(struct ch_toc)) * 2,
+        sizeof(struct chsettings),
+        "",
+        {"CHSETTINGS"}
+        },
+       // toc terminator
+       {0xFFFFFFFF,
+        0xFFFFFFFF,
+        {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+         0xFF},
+        {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+         0xFF}
+        },
+       //CHSETTINGS section
+       {
+        0xC0C0C0C1,
+        0,
+        1,
+        0,
+        0},
+       ""
+};
+#endif
 
 
 main(int argc, char *argv[])
@@ -31,7 +237,7 @@ main(int argc, char *argv[])
                strcpy(ifname, argv[1]);
 
        if (argc == 3)
-               loadaddr = strtol(argv[2], NULL, 16);
+               loadaddr = strtoul(argv[2], NULL, 16);
 
        // Form the output file name.
        strcpy(ofname, ifname);
@@ -61,6 +267,7 @@ main(int argc, char *argv[])
        //for (i=0; i<0x200; i++)
        //      fwrite(&ch, 1, 1, ofile);
 
+       fwrite(&config_header, 1, 512, ofile);
        fwrite(&len, 1, 4, ofile);
        fwrite(&loadaddr, 1, 4, ofile);
        for (i=0; i<len; i++) {