struct omap_clk *c;
        u32 cpu_clkflg = 0;
 
-       if (cpu_is_omap3517()) {
+       /*
+        * 3505 must be tested before 3517, since 3517 returns true
+        * for both AM3517 chips and AM3517 family chips, which
+        * includes 3505.  Unfortunately there's no obvious family
+        * test for 3517/3505 :-(
+        */
+       if (cpu_is_omap3505()) {
+               cpu_mask = RATE_IN_34XX;
+               cpu_clkflg = CK_3505;
+       } else if (cpu_is_omap3517()) {
                cpu_mask = RATE_IN_34XX;
                cpu_clkflg = CK_3517;
        } else if (cpu_is_omap3505()) {
 
                }
                break;
        case 0xb868:
-               /* Handle OMAP35xx/AM35xx devices
+               /*
+                * Handle OMAP/AM 3505/3517 devices
                 *
-                * Set the device to be OMAP3505 here. Actual device
+                * Set the device to be OMAP3517 here. Actual device
                 * is identified later based on the features.
                 *
                 * REVISIT: AM3505/AM3517 should have their own CHIP_IS
                 */
-               omap_revision = OMAP3505_REV(rev);
+               omap_revision = OMAP3517_REV(rev);
                omap_chip.oc |= CHIP_IS_OMAP3430ES3_1;
                break;
        case 0xb891:
         */
        if (cpu_is_omap3630()) {
                strcpy(cpu_name, "OMAP3630");
-       } else if (cpu_is_omap3505()) {
+       } else if (cpu_is_omap3517()) {
                /*
                 * AM35xx devices
                 */
-               if (omap3_has_sgx()) {
-                       omap_revision = OMAP3517_REV(rev);
+               if (omap3_has_sgx())
                        strcpy(cpu_name, "AM3517");
-               } else {
-                       /* Already set in omap3_check_revision() */
+               else
                        strcpy(cpu_name, "AM3505");
-               }
        } else if (cpu_is_ti816x()) {
                strcpy(cpu_name, "TI816X");
        } else if (omap3_has_iva() && omap3_has_sgx()) {
                /* OMAP3430, OMAP3525, OMAP3515, OMAP3503 devices */
                strcpy(cpu_name, "OMAP3430/3530");
        } else if (omap3_has_iva()) {
-               omap_revision = OMAP3525_REV(rev);
                strcpy(cpu_name, "OMAP3525");
        } else if (omap3_has_sgx()) {
-               omap_revision = OMAP3515_REV(rev);
                strcpy(cpu_name, "OMAP3515");
        } else {
-               omap_revision = OMAP3503_REV(rev);
                strcpy(cpu_name, "OMAP3503");
        }
 
 
 IS_OMAP_TYPE(2423, 0x2423)
 IS_OMAP_TYPE(2430, 0x2430)
 IS_OMAP_TYPE(3430, 0x3430)
-IS_OMAP_TYPE(3505, 0x3505)
+IS_OMAP_TYPE(3505, 0x3517)
 IS_OMAP_TYPE(3517, 0x3517)
 
 #define cpu_is_omap310()               0
                                                (!omap3_has_sgx()) &&   \
                                                (omap3_has_iva()))
 # define cpu_is_omap3530()             (cpu_is_omap3430())
-# define cpu_is_omap3505()             is_omap3505()
 # define cpu_is_omap3517()             is_omap3517()
+# define cpu_is_omap3505()             (cpu_is_omap3517() &&           \
+                                               !omap3_has_sgx())
 # undef cpu_is_omap3630
 # define cpu_is_omap3630()             is_omap363x()
 # define cpu_is_ti816x()               is_ti816x()
 #define OMAP3630_REV_ES1_1     (OMAP363X_CLASS | (OMAP_REVBITS_01 << 8))
 #define OMAP3630_REV_ES1_2     (OMAP363X_CLASS | (OMAP_REVBITS_02 << 8))
 
-#define OMAP35XX_CLASS         0x35000034
-#define OMAP3503_REV(v)                (OMAP35XX_CLASS | (0x3503 << 16) | (v << 8))
-#define OMAP3515_REV(v)                (OMAP35XX_CLASS | (0x3515 << 16) | (v << 8))
-#define OMAP3525_REV(v)                (OMAP35XX_CLASS | (0x3525 << 16) | (v << 8))
-#define OMAP3530_REV(v)                (OMAP35XX_CLASS | (0x3530 << 16) | (v << 8))
-#define OMAP3505_REV(v)                (OMAP35XX_CLASS | (0x3505 << 16) | (v << 8))
-#define OMAP3517_REV(v)                (OMAP35XX_CLASS | (0x3517 << 16) | (v << 8))
+#define OMAP3517_CLASS         0x35170034
+#define OMAP3517_REV(v)                (OMAP3517_CLASS | (v << 8))
 
 #define TI816X_CLASS           0x81600034
 #define TI8168_REV_ES1_0       TI816X_CLASS