]> Gitweb @ Texas Instruments - Open Source Git Repositories - git.TI.com/gitweb - keystone-linux/linux.git/commitdiff
pci: keystone: update serdes code to update one byte at a time
authorMurali Karicheri <m-karicheri2@ti.com>
Tue, 7 Oct 2014 16:42:57 +0000 (12:42 -0400)
committerMurali Karicheri <m-karicheri2@ti.com>
Wed, 3 Dec 2014 16:48:13 +0000 (11:48 -0500)
Currently SerDes registers are changed more than a byte at a time.
There is a requirement to update only one byte a time for configuring
SerDes. This patch update the driver to do the same.

Signed-off-by: Murali Karicheri <m-karicheri2@ti.com>
drivers/pci/host/k2-platform.c

index 0e1110311a15f00fd966ea10004098bc0882d504..6525c6f3c31c051d65481025d30e823ccef24460 100644 (file)
        __raw_writel(((__raw_readl(addr) & (~(mask))) | \
                        (value & (mask))), (addr))
 
+/* bit mask from bit-a to bit-b inclusive */
+#define MASK(msb, lsb) \
+       ((((msb) - (lsb)) == 31) ? 0xffffffff :  \
+               ((((u32)1 << ((msb) - (lsb) + 1)) - 1) << (lsb)))
+
+#define FINSR(base, offset, msb, lsb, val) \
+       reg_rmw((base) + (offset), ((val) << (lsb)), MASK((msb), (lsb)))
+
 struct serdes_config {
-       u32 reg;
+       u32 ofs;
+       u32 msb;
+       u32 lsb;
        u32 val;
-       u32 mask;
 };
 
 static struct serdes_config k2_100mhz_pcie_5gbps_serdes[] = {
-       {0x0000, 0x00000800, 0x0000ff00},
-       {0x0060, 0x00041c5c, 0x00ffffff},
-       {0x0064, 0x0343c700, 0xffffff00},
-       {0x006c, 0x00000012, 0x000000ff},
-       {0x0068, 0x00070000, 0x00ff0000},
-       {0x0078, 0x0000c000, 0x0000ff00},
-
-       {0x0200, 0x00000000, 0x000000ff},
-       {0x0204, 0x5e000080, 0xff0000ff},
-       {0x0208, 0x00000006, 0x000000ff},
-       {0x0210, 0x00000023, 0x000000ff},
-       {0x0214, 0x2e003060, 0xff00ffff},
-       {0x0218, 0x76000000, 0xff000000},
-       {0x022c, 0x00200002, 0x00ff00ff},
-       {0x02a0, 0xffee0000, 0xffff0000},
-       {0x02a4, 0x0000000f, 0x000000ff},
-       {0x0204, 0x5e000000, 0xff000000},
-       {0x0208, 0x00000006, 0x000000ff},
-       {0x0278, 0x00002000, 0x0000ff00},
-       {0x0280, 0x00280028, 0x00ff00ff},
-       {0x0284, 0x2d0f0385, 0xffffffff},
-       {0x0250, 0xd0000000, 0xff000000},
-       {0x0284, 0x00000085, 0x000000ff},
-       {0x0294, 0x20000000, 0xff000000},
-
-       {0x0400, 0x00000000, 0x000000ff},
-       {0x0404, 0x5e000080, 0xff0000ff},
-       {0x0408, 0x00000006, 0x000000ff},
-       {0x0410, 0x00000023, 0x000000ff},
-       {0x0414, 0x2e003060, 0xff00ffff},
-       {0x0418, 0x76000000, 0xff000000},
-       {0x042c, 0x00200002, 0x00ff00ff},
-       {0x04a0, 0xffee0000, 0xffff0000},
-       {0x04a4, 0x0000000f, 0x000000ff},
-       {0x0404, 0x5e000000, 0xff000000},
-       {0x0408, 0x00000006, 0x000000ff},
-       {0x0478, 0x00002000, 0x0000ff00},
-       {0x0480, 0x00280028, 0x00ff00ff},
-       {0x0484, 0x2d0f0385, 0xffffffff},
-       {0x0450, 0xd0000000, 0xff000000},
-       {0x0494, 0x20000000, 0xff000000},
-
-       {0x0604, 0x00000080, 0x000000ff},
-       {0x0600, 0x00000000, 0x000000ff},
-       {0x0604, 0x5e000000, 0xff000000},
-       {0x0608, 0x00000006, 0x000000ff},
-       {0x0610, 0x00000023, 0x000000ff},
-       {0x0614, 0x2e003060, 0xff00ffff},
-       {0x0618, 0x76000000, 0xff000000},
-       {0x062c, 0x00200002, 0x00ff00ff},
-       {0x06a0, 0xffee0000, 0xffff0000},
-       {0x06a4, 0x0000000f, 0x000000ff},
-       {0x0604, 0x5e000000, 0xff000000},
-       {0x0608, 0x00000006, 0x000000ff},
-       {0x0678, 0x00002000, 0x0000ff00},
-       {0x0680, 0x00280028, 0x00ff00ff},
-       {0x0684, 0x2d0f0385, 0xffffffff},
-       {0x0650, 0xd0000000, 0xff000000},
-       {0x0694, 0x20000000, 0xff000000},
-
-       {0x0800, 0x00000000, 0x000000ff},
-       {0x0804, 0x5e000080, 0xff0000ff},
-       {0x0808, 0x00000006, 0x000000ff},
-       {0x0810, 0x00000023, 0x000000ff},
-       {0x0814, 0x2e003060, 0xff00ffff},
-       {0x0818, 0x76000000, 0xff000000},
-       {0x082c, 0x00200002, 0x00ff00ff},
-       {0x08a0, 0xffee0000, 0xffff0000},
-       {0x08a4, 0x0000000f, 0x000000ff},
-       {0x0804, 0x5e000000, 0xff000000},
-       {0x0808, 0x00000006, 0x000000ff},
-       {0x0878, 0x00002000, 0x0000ff00},
-       {0x0880, 0x00280028, 0x00ff00ff},
-       {0x0884, 0x2d0f0385, 0xffffffff},
-       {0x0850, 0xd0000000, 0xff000000},
-       {0x0894, 0x20000000, 0xff000000},
-
-       {0x0a00, 0x00000100, 0x0000ff00},
-       {0x0a08, 0x00e12c08, 0x00ffffff},
-       {0x0a0c, 0x00000081, 0x000000ff},
-       {0x0a18, 0x00e80000, 0x00ff0000},
-       {0x0a30, 0x002f2f00, 0x00ffff00},
-       {0x0a4c, 0xac820000, 0xffff0000},
-       {0x0a54, 0xc0000000, 0xff000000},
-       {0x0a58, 0x00001441, 0x0000ffff},
-       {0x0a84, 0x00000301, 0x0000ffff},
-
-       {0x0a8c, 0x81030000, 0xffff0000},
-       {0x0a90, 0x00006001, 0x0000ffff},
-       {0x0a94, 0x01000000, 0xff000000},
-       {0x0aa0, 0x81000000, 0xff000000},
-       {0x0abc, 0xff000000, 0xff000000},
-       {0x0ac0, 0x0000008b, 0x000000ff},
-
-       {0x0000, 0x00000003, 0x000000ff},
-       {0x0a00, 0x0000009f, 0x000000ff},
-
-       {0x0a44, 0x5f733d00, 0xffffff00},
-       {0x0a48, 0x00fdca00, 0x00ffff00},
-       {0x0a5c, 0x00000000, 0xffff0000},
-       {0x0a60, 0x00008000, 0xffffffff},
-       {0x0a64, 0x0c581220, 0xffffffff},
-       {0x0a68, 0xe13b0602, 0xffffffff},
-       {0x0a6c, 0xb8074cc1, 0xffffffff},
-       {0x0a70, 0x3f02e989, 0xffffffff},
-       {0x0a74, 0x00000001, 0x000000ff},
-       {0x0b14, 0x00370000, 0x00ff0000},
-       {0x0b10, 0x37000000, 0xff000000},
-       {0x0b14, 0x0000005d, 0x000000ff},
+       {0x0000, 15,  8, 0x08},
+       {0x0060,  7,  0, 0x5c},
+       {0x0060, 15,  8, 0x1c},
+       {0x0060, 23, 16, 0x04},
+       {0x0064, 15,  8, 0xc7},
+       {0x0064, 23, 16, 0x43},
+       {0x0064, 31, 24, 0x03},
+       {0x006c,  7,  0, 0x12},
+       {0x0068, 23, 16, 0x07},
+       {0x0078, 15,  8, 0xc0},
+       {0x0200,  7,  0, 0x00},
+       {0x0204,  7,  0, 0x80},
+       {0x0204, 31, 24, 0x5e},
+       {0x0208,  7,  0, 0x06},
+       {0x0210,  7,  0, 0x23},
+       {0x0214,  7,  0, 0x60},
+       {0x0214, 15,  8, 0x30},
+       {0x0214, 31, 24, 0x2e},
+       {0x0218, 31, 24, 0x76},
+       {0x022c,  7,  0, 0x02},
+       {0x022c, 23, 16, 0x20},
+       {0x02a0, 23, 16, 0xee},
+       {0x02a0, 31, 24, 0xff},
+       {0x02a4,  7,  0, 0x0f},
+       {0x0204, 31, 24, 0x5e},
+       {0x0208,  7,  0, 0x06},
+       {0x0278, 15,  8, 0x20},
+       {0x0280,  7,  0, 0x28},
+       {0x0280, 23, 16, 0x28},
+       {0x0284,  7,  0, 0x85},
+       {0x0284, 15,  8, 0x03},
+       {0x0284, 23, 16, 0x0f},
+       {0x0284, 31, 24, 0x2d},
+       {0x0250, 31, 24, 0xd0},
+       {0x0284,  7,  0, 0x85},
+       {0x0294, 31, 24, 0x20},
+       {0x0400,  7,  0, 0x00},
+       {0x0404,  7,  0, 0x80},
+       {0x0404, 31, 24, 0x5e},
+       {0x0408,  7,  0, 0x06},
+       {0x0410,  7,  0, 0x23},
+       {0x0414,  7,  0, 0x60},
+       {0x0414, 15,  8, 0x30},
+       {0x0414, 31, 24, 0x2e},
+       {0x0418, 31, 24, 0x76},
+       {0x042c,  7,  0, 0x02},
+       {0x042c, 23, 16, 0x20},
+       {0x04a0, 23, 16, 0xee},
+       {0x04a0, 31, 24, 0xff},
+       {0x04a4,  7,  0, 0x0f},
+       {0x0404, 31, 24, 0x5e},
+       {0x0408,  7,  0, 0x06},
+       {0x0478, 15,  8, 0x20},
+       {0x0480,  7,  0, 0x28},
+       {0x0480, 23, 16, 0x28},
+       {0x0484,  7,  0, 0x85},
+       {0x0484, 15,  8, 0x03},
+       {0x0484, 23, 16, 0x0f},
+       {0x0484, 31, 24, 0x2d},
+       {0x0450, 31, 24, 0xd0},
+       {0x0494, 31, 24, 0x20},
+       {0x0604,  7,  0, 0x80},
+       {0x0600,  7,  0, 0x00},
+       {0x0604, 31, 24, 0x5e},
+       {0x0608,  7,  0, 0x06},
+       {0x0610,  7,  0, 0x23},
+       {0x0614,  7,  0, 0x60},
+       {0x0614, 15,  8, 0x30},
+       {0x0614, 31, 24, 0x2e},
+       {0x0618, 31, 24, 0x76},
+       {0x062c,  7,  0, 0x02},
+       {0x062c, 23, 16, 0x20},
+       {0x06a0, 23, 16, 0xee},
+       {0x06a0, 31, 24, 0xff},
+       {0x06a4,  7,  0, 0x0f},
+       {0x0604, 31, 24, 0x5e},
+       {0x0608,  7,  0, 0x06},
+       {0x0678, 15,  8, 0x20},
+       {0x0680,  7,  0, 0x28},
+       {0x0680, 23, 16, 0x28},
+       {0x0684,  7,  0, 0x85},
+       {0x0684, 15,  8, 0x03},
+       {0x0684, 23, 16, 0x0f},
+       {0x0684, 31, 24, 0x2d},
+       {0x0650, 31, 24, 0xd0},
+       {0x0694, 31, 24, 0x20},
+       {0x0800,  7,  0, 0x00},
+       {0x0804,  7,  0, 0x80},
+       {0x0804, 31, 24, 0x5e},
+       {0x0808,  7,  0, 0x06},
+       {0x0810,  7,  0, 0x23},
+       {0x0814,  7,  0, 0x60},
+       {0x0814, 15,  8, 0x30},
+       {0x0814, 31, 24, 0x2e},
+       {0x0818, 31, 24, 0x76},
+       {0x082c,  7,  0, 0x02},
+       {0x082c, 23, 16, 0x20},
+       {0x08a0, 23, 16, 0xee},
+       {0x08a0, 31, 24, 0xff},
+       {0x08a4,  7,  0, 0x0f},
+       {0x0804, 31, 24, 0x5e},
+       {0x0808,  7,  0, 0x06},
+       {0x0878, 15,  8, 0x20},
+       {0x0880,  7,  0, 0x28},
+       {0x0880, 23, 16, 0x28},
+       {0x0884,  7,  0, 0x85},
+       {0x0884, 15,  8, 0x03},
+       {0x0884, 23, 16, 0x0f},
+       {0x0884, 31, 24, 0x2d},
+       {0x0850, 31, 24, 0xd0},
+       {0x0894, 31, 24, 0x20},
+       {0x0a00, 15,  8, 0x01},
+       {0x0a08,  7,  0, 0x08},
+       {0x0a08, 15,  8, 0x2c},
+       {0x0a08, 23, 16, 0xe1},
+       {0x0a0c,  7,  0, 0x81},
+       {0x0a18, 23, 16, 0xe8},
+       {0x0a30, 15,  8, 0x2f},
+       {0x0a30, 23, 16, 0x2f},
+       {0x0a4c, 23, 16, 0x82},
+       {0x0a4c, 31, 24, 0xac},
+       {0x0a54, 31, 24, 0xc0},
+       {0x0a58,  7,  0, 0x41},
+       {0x0a58, 15,  8, 0x14},
+       {0x0a84,  7,  0, 0x01},
+       {0x0a84, 15,  8, 0x03},
+       {0x0a8c, 23, 16, 0x03},
+       {0x0a8c, 31, 24, 0x81},
+       {0x0a90,  7,  0, 0x01},
+       {0x0a90, 15,  8, 0x60},
+       {0x0a94, 31, 24, 0x01},
+       {0x0aa0, 31, 24, 0x81},
+       {0x0abc, 31, 24, 0xff},
+       {0x0ac0,  7,  0, 0x8b},
+       {0x0a44, 15,  8, 0x3d},
+       {0x0a44, 23, 16, 0x73},
+       {0x0a44, 31, 24, 0x5f},
+       {0x0a48, 15,  8, 0xca},
+       {0x0a48, 23, 16, 0xfd},
+       {0x0a5c, 23, 16, 0x00},
+       {0x0a5c, 31, 24, 0x00},
+       {0x0a60,  7,  0, 0x00},
+       {0x0a60, 15,  8, 0x80},
+       {0x0a60, 23, 16, 0x00},
+       {0x0a60, 31, 24, 0x00},
+       {0x0a64,  7,  0, 0x20},
+       {0x0a64, 15,  8, 0x12},
+       {0x0a64, 23, 16, 0x58},
+       {0x0a64, 31, 24, 0x0c},
+       {0x0a68,  7,  0, 0x02},
+       {0x0a68, 15,  8, 0x06},
+       {0x0a68, 23, 16, 0x3b},
+       {0x0a68, 31, 24, 0xe1},
+       {0x0a6c,  7,  0, 0xc1},
+       {0x0a6c, 15,  8, 0x4c},
+       {0x0a6c, 23, 16, 0x07},
+       {0x0a6c, 31, 24, 0xb8},
+       {0x0a70,  7,  0, 0x89},
+       {0x0a70, 15,  8, 0xe9},
+       {0x0a70, 23, 16, 0x02},
+       {0x0a70, 31, 24, 0x3f},
+       {0x0a74,  7,  0, 0x01},
+       {0x0b14, 23, 16, 0x37},
+       {0x0b10, 31, 24, 0x37},
+       {0x0b14,  7,  0, 0x5d},
+       {0x0000,  7,  0, 0x03},
+       {0x0a00,  7,  0, 0x9f},
 };
 
 int k2_pcie_platform_setup(void *pdata, struct device_node *np, int domain)
 {
+       struct serdes_config *p = &k2_100mhz_pcie_5gbps_serdes[0];
        struct keystone_pcie_pdata *p_data = pdata;
        void __iomem *reg_serdes_base, *devcfg;
-       struct serdes_config *p;
        u32 val;
        int i;
 
@@ -177,11 +244,11 @@ int k2_pcie_platform_setup(void *pdata, struct device_node *np, int domain)
        }
 
        if (reg_serdes_base) {
-               for (i = 0, p = &k2_100mhz_pcie_5gbps_serdes[0];
-                       i < ARRAY_SIZE(k2_100mhz_pcie_5gbps_serdes);
-                       i++, p++) {
-                       reg_rmw((reg_serdes_base + p->reg), p->val, p->mask);
-                       reg_dump((reg_serdes_base + p->reg), p->mask);
+               for (i = 0; i < ARRAY_SIZE(k2_100mhz_pcie_5gbps_serdes); i++) {
+                       FINSR(reg_serdes_base, p[i].ofs, p[i].msb, p[i].lsb,
+                               p[i].val);
+                       reg_dump((reg_serdes_base + p[i].ofs), MASK(p[i].msb,
+                               p[i].lsb));
                }
        }