]> git.sur5r.net Git - u-boot/blobdiff - cpu/mpc8260/speed.c
Merge with /home/hs/U-Boot/u-boot-dev
[u-boot] / cpu / mpc8260 / speed.c
index a20f61244a69bdb549a84bc93a3924e05fe04f98..360404f0cfd444807fe1a98a5c4d23f72fa948d9 100644 (file)
@@ -25,6 +25,8 @@
 #include <mpc8260.h>
 #include <asm/processor.h>
 
+DECLARE_GLOBAL_DATA_PTR;
+
 /* ------------------------------------------------------------------------- */
 
 /* Bus-to-Core Multiplier */
@@ -101,8 +103,6 @@ corecnf_t corecnf_tab[] = {
 
 int get_clocks (void)
 {
-       DECLARE_GLOBAL_DATA_PTR;
-
        volatile immap_t *immap = (immap_t *) CFG_IMMR;
        ulong clkin;
        ulong sccr, dfbrg;
@@ -125,7 +125,10 @@ int get_clocks (void)
        busdf = (scmr & SCMR_BUSDF_MSK) >> SCMR_BUSDF_SHIFT;
        cpmdf = (scmr & SCMR_CPMDF_MSK) >> SCMR_CPMDF_SHIFT;
 
-       if ((get_pvr () == PVR_8260_HIP7) || (get_pvr () == PVR_8260_HIP7R1)) { /* HiP7 */
+       /* HiP7, HiP7 Rev01, HiP7 RevA */
+       if ((get_pvr () == PVR_8260_HIP7) ||
+           (get_pvr () == PVR_8260_HIP7R1) ||
+           (get_pvr () == PVR_8260_HIP7RA)) {
                pllmf = (scmr & SCMR_PLLMF_MSKH7) >> SCMR_PLLMF_SHIFT;
                gd->vco_out = clkin * (pllmf + 1);
        } else {                        /* HiP3, HiP4 */
@@ -156,11 +159,9 @@ int get_clocks (void)
 
 int prt_8260_clks (void)
 {
-       DECLARE_GLOBAL_DATA_PTR;
-
        volatile immap_t *immap = (immap_t *) CFG_IMMR;
        ulong sccr, dfbrg;
-       ulong scmr, corecnf, busdf, cpmdf, plldf, pllmf;
+       ulong scmr, corecnf, busdf, cpmdf, plldf, pllmf, pcidf;
        corecnf_t *cp;
 
        sccr = immap->im_clkrst.car_sccr;
@@ -172,22 +173,23 @@ int prt_8260_clks (void)
        cpmdf = (scmr & SCMR_CPMDF_MSK) >> SCMR_CPMDF_SHIFT;
        plldf = (scmr & SCMR_PLLDF) ? 1 : 0;
        pllmf = (scmr & SCMR_PLLMF_MSK) >> SCMR_PLLMF_SHIFT;
+       pcidf = (sccr & SCCR_PCIDF_MSK) >> SCCR_PCIDF_SHIFT;
 
        cp = &corecnf_tab[corecnf];
 
-       printf (CPU_ID_STR " Clock Configuration\n - Bus-to-Core Mult ");
+       puts (CPU_ID_STR " Clock Configuration\n - Bus-to-Core Mult ");
 
        switch (cp->b2c_mult) {
        case _byp:
-               printf ("BYPASS");
+               puts ("BYPASS");
                break;
 
        case _off:
-               printf ("OFF");
+               puts ("OFF");
                break;
 
        case _unk:
-               printf ("UNKNOWN");
+               puts ("UNKNOWN");
                break;
 
        default:
@@ -201,15 +203,36 @@ int prt_8260_clks (void)
                        cp->vco_div, cp->freq_60x, cp->freq_core);
 
        printf (" - dfbrg %ld, corecnf 0x%02lx, busdf %ld, cpmdf %ld, "
-                       "plldf %ld, pllmf %ld\n", dfbrg, corecnf, busdf, cpmdf, plldf,
-                       pllmf);
+               "plldf %ld, pllmf %ld, pcidf %ld\n",
+                       dfbrg, corecnf, busdf, cpmdf,
+                       plldf, pllmf, pcidf);
 
        printf (" - vco_out %10ld, scc_clk %10ld, brg_clk %10ld\n",
                        gd->vco_out, gd->scc_clk, gd->brg_clk);
 
-       printf (" - cpu_clk %10ld, cpm_clk %10ld, bus_clk %10ld\n\n",
+       printf (" - cpu_clk %10ld, cpm_clk %10ld, bus_clk %10ld\n",
                        gd->cpu_clk, gd->cpm_clk, gd->bus_clk);
+
+       if (sccr & SCCR_PCI_MODE) {
+               uint pci_div;
+               uint pcidf = (sccr & SCCR_PCIDF_MSK) >> SCCR_PCIDF_SHIFT;
+
+               if (sccr & SCCR_PCI_MODCK) {
+                       pci_div = 2;
+                       if (pcidf == 9) {
+                               pci_div *= 5;
+                       } else if (pcidf == 0xB) {
+                               pci_div *= 6;
+                       } else {
+                               pci_div *= (pcidf + 1);
+                       }
+               } else {
+                       pci_div = pcidf + 1;
+               }
+
+               printf (" - pci_clk %10ld\n", (gd->cpm_clk * 2) / pci_div);
+       }
+       putc ('\n');
+
        return (0);
 }
-
-/* ------------------------------------------------------------------------- */