summary | shortlog | log | commit | commitdiff | tree
raw | patch | inline | side by side (parent: 9bcf730)
raw | patch | inline | side by side (parent: 9bcf730)
author | Murali Karicheri <m-karicheri2@ti.com> | |
Tue, 7 Oct 2014 16:42:57 +0000 (12:42 -0400) | ||
committer | Murali 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>
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 | patch | blob | history |
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;
}
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));
}
}