|
@@ -94,7 +94,7 @@ enum {
|
|
|
PDC_DIMM1_CONTROL_OFFSET = 0x84,
|
|
|
PDC_SDRAM_CONTROL_OFFSET = 0x88,
|
|
|
PDC_I2C_WRITE = 0x00000000,
|
|
|
- PDC_I2C_READ = 0x00000040,
|
|
|
+ PDC_I2C_READ = 0x00000040,
|
|
|
PDC_I2C_START = 0x00000080,
|
|
|
PDC_I2C_MASK_INT = 0x00000020,
|
|
|
PDC_I2C_COMPLETE = 0x00010000,
|
|
@@ -105,16 +105,16 @@ enum {
|
|
|
PDC_DIMM_SPD_COLUMN_NUM = 4,
|
|
|
PDC_DIMM_SPD_MODULE_ROW = 5,
|
|
|
PDC_DIMM_SPD_TYPE = 11,
|
|
|
- PDC_DIMM_SPD_FRESH_RATE = 12,
|
|
|
- PDC_DIMM_SPD_BANK_NUM = 17,
|
|
|
+ PDC_DIMM_SPD_FRESH_RATE = 12,
|
|
|
+ PDC_DIMM_SPD_BANK_NUM = 17,
|
|
|
PDC_DIMM_SPD_CAS_LATENCY = 18,
|
|
|
- PDC_DIMM_SPD_ATTRIBUTE = 21,
|
|
|
+ PDC_DIMM_SPD_ATTRIBUTE = 21,
|
|
|
PDC_DIMM_SPD_ROW_PRE_CHARGE = 27,
|
|
|
- PDC_DIMM_SPD_ROW_ACTIVE_DELAY = 28,
|
|
|
+ PDC_DIMM_SPD_ROW_ACTIVE_DELAY = 28,
|
|
|
PDC_DIMM_SPD_RAS_CAS_DELAY = 29,
|
|
|
PDC_DIMM_SPD_ACTIVE_PRECHARGE = 30,
|
|
|
PDC_DIMM_SPD_SYSTEM_FREQ = 126,
|
|
|
- PDC_CTL_STATUS = 0x08,
|
|
|
+ PDC_CTL_STATUS = 0x08,
|
|
|
PDC_DIMM_WINDOW_CTLR = 0x0C,
|
|
|
PDC_TIME_CONTROL = 0x3C,
|
|
|
PDC_TIME_PERIOD = 0x40,
|
|
@@ -157,15 +157,15 @@ static void pdc_exec_command_mmio(struct ata_port *ap, struct ata_taskfile *tf);
|
|
|
static void pdc20621_host_stop(struct ata_host_set *host_set);
|
|
|
static unsigned int pdc20621_dimm_init(struct ata_probe_ent *pe);
|
|
|
static int pdc20621_detect_dimm(struct ata_probe_ent *pe);
|
|
|
-static unsigned int pdc20621_i2c_read(struct ata_probe_ent *pe,
|
|
|
+static unsigned int pdc20621_i2c_read(struct ata_probe_ent *pe,
|
|
|
u32 device, u32 subaddr, u32 *pdata);
|
|
|
static int pdc20621_prog_dimm0(struct ata_probe_ent *pe);
|
|
|
static unsigned int pdc20621_prog_dimm_global(struct ata_probe_ent *pe);
|
|
|
#ifdef ATA_VERBOSE_DEBUG
|
|
|
-static void pdc20621_get_from_dimm(struct ata_probe_ent *pe,
|
|
|
+static void pdc20621_get_from_dimm(struct ata_probe_ent *pe,
|
|
|
void *psource, u32 offset, u32 size);
|
|
|
#endif
|
|
|
-static void pdc20621_put_to_dimm(struct ata_probe_ent *pe,
|
|
|
+static void pdc20621_put_to_dimm(struct ata_probe_ent *pe,
|
|
|
void *psource, u32 offset, u32 size);
|
|
|
static void pdc20621_irq_clear(struct ata_port *ap);
|
|
|
static int pdc20621_qc_issue_prot(struct ata_queued_cmd *qc);
|
|
@@ -922,7 +922,7 @@ static void pdc_sata_setup_port(struct ata_ioports *port, unsigned long base)
|
|
|
|
|
|
|
|
|
#ifdef ATA_VERBOSE_DEBUG
|
|
|
-static void pdc20621_get_from_dimm(struct ata_probe_ent *pe, void *psource,
|
|
|
+static void pdc20621_get_from_dimm(struct ata_probe_ent *pe, void *psource,
|
|
|
u32 offset, u32 size)
|
|
|
{
|
|
|
u32 window_size;
|
|
@@ -936,9 +936,9 @@ static void pdc20621_get_from_dimm(struct ata_probe_ent *pe, void *psource,
|
|
|
/* hard-code chip #0 */
|
|
|
mmio += PDC_CHIP0_OFS;
|
|
|
|
|
|
- page_mask = 0x00;
|
|
|
- window_size = 0x2000 * 4; /* 32K byte uchar size */
|
|
|
- idx = (u16) (offset / window_size);
|
|
|
+ page_mask = 0x00;
|
|
|
+ window_size = 0x2000 * 4; /* 32K byte uchar size */
|
|
|
+ idx = (u16) (offset / window_size);
|
|
|
|
|
|
writel(0x01, mmio + PDC_GENERAL_CTLR);
|
|
|
readl(mmio + PDC_GENERAL_CTLR);
|
|
@@ -947,19 +947,19 @@ static void pdc20621_get_from_dimm(struct ata_probe_ent *pe, void *psource,
|
|
|
|
|
|
offset -= (idx * window_size);
|
|
|
idx++;
|
|
|
- dist = ((long) (window_size - (offset + size))) >= 0 ? size :
|
|
|
+ dist = ((long) (window_size - (offset + size))) >= 0 ? size :
|
|
|
(long) (window_size - offset);
|
|
|
- memcpy_fromio((char *) psource, (char *) (dimm_mmio + offset / 4),
|
|
|
+ memcpy_fromio((char *) psource, (char *) (dimm_mmio + offset / 4),
|
|
|
dist);
|
|
|
|
|
|
- psource += dist;
|
|
|
+ psource += dist;
|
|
|
size -= dist;
|
|
|
for (; (long) size >= (long) window_size ;) {
|
|
|
writel(0x01, mmio + PDC_GENERAL_CTLR);
|
|
|
readl(mmio + PDC_GENERAL_CTLR);
|
|
|
writel(((idx) << page_mask), mmio + PDC_DIMM_WINDOW_CTLR);
|
|
|
readl(mmio + PDC_DIMM_WINDOW_CTLR);
|
|
|
- memcpy_fromio((char *) psource, (char *) (dimm_mmio),
|
|
|
+ memcpy_fromio((char *) psource, (char *) (dimm_mmio),
|
|
|
window_size / 4);
|
|
|
psource += window_size;
|
|
|
size -= window_size;
|
|
@@ -971,14 +971,14 @@ static void pdc20621_get_from_dimm(struct ata_probe_ent *pe, void *psource,
|
|
|
readl(mmio + PDC_GENERAL_CTLR);
|
|
|
writel(((idx) << page_mask), mmio + PDC_DIMM_WINDOW_CTLR);
|
|
|
readl(mmio + PDC_DIMM_WINDOW_CTLR);
|
|
|
- memcpy_fromio((char *) psource, (char *) (dimm_mmio),
|
|
|
+ memcpy_fromio((char *) psource, (char *) (dimm_mmio),
|
|
|
size / 4);
|
|
|
}
|
|
|
}
|
|
|
#endif
|
|
|
|
|
|
|
|
|
-static void pdc20621_put_to_dimm(struct ata_probe_ent *pe, void *psource,
|
|
|
+static void pdc20621_put_to_dimm(struct ata_probe_ent *pe, void *psource,
|
|
|
u32 offset, u32 size)
|
|
|
{
|
|
|
u32 window_size;
|
|
@@ -989,16 +989,16 @@ static void pdc20621_put_to_dimm(struct ata_probe_ent *pe, void *psource,
|
|
|
struct pdc_host_priv *hpriv = pe->private_data;
|
|
|
void *dimm_mmio = hpriv->dimm_mmio;
|
|
|
|
|
|
- /* hard-code chip #0 */
|
|
|
+ /* hard-code chip #0 */
|
|
|
mmio += PDC_CHIP0_OFS;
|
|
|
|
|
|
- page_mask = 0x00;
|
|
|
- window_size = 0x2000 * 4; /* 32K byte uchar size */
|
|
|
+ page_mask = 0x00;
|
|
|
+ window_size = 0x2000 * 4; /* 32K byte uchar size */
|
|
|
idx = (u16) (offset / window_size);
|
|
|
|
|
|
writel(((idx) << page_mask), mmio + PDC_DIMM_WINDOW_CTLR);
|
|
|
readl(mmio + PDC_DIMM_WINDOW_CTLR);
|
|
|
- offset -= (idx * window_size);
|
|
|
+ offset -= (idx * window_size);
|
|
|
idx++;
|
|
|
dist = ((long)(s32)(window_size - (offset + size))) >= 0 ? size :
|
|
|
(long) (window_size - offset);
|
|
@@ -1006,12 +1006,12 @@ static void pdc20621_put_to_dimm(struct ata_probe_ent *pe, void *psource,
|
|
|
writel(0x01, mmio + PDC_GENERAL_CTLR);
|
|
|
readl(mmio + PDC_GENERAL_CTLR);
|
|
|
|
|
|
- psource += dist;
|
|
|
+ psource += dist;
|
|
|
size -= dist;
|
|
|
for (; (long) size >= (long) window_size ;) {
|
|
|
writel(((idx) << page_mask), mmio + PDC_DIMM_WINDOW_CTLR);
|
|
|
readl(mmio + PDC_DIMM_WINDOW_CTLR);
|
|
|
- memcpy_toio((char *) (dimm_mmio), (char *) psource,
|
|
|
+ memcpy_toio((char *) (dimm_mmio), (char *) psource,
|
|
|
window_size / 4);
|
|
|
writel(0x01, mmio + PDC_GENERAL_CTLR);
|
|
|
readl(mmio + PDC_GENERAL_CTLR);
|
|
@@ -1019,7 +1019,7 @@ static void pdc20621_put_to_dimm(struct ata_probe_ent *pe, void *psource,
|
|
|
size -= window_size;
|
|
|
idx ++;
|
|
|
}
|
|
|
-
|
|
|
+
|
|
|
if (size) {
|
|
|
writel(((idx) << page_mask), mmio + PDC_DIMM_WINDOW_CTLR);
|
|
|
readl(mmio + PDC_DIMM_WINDOW_CTLR);
|
|
@@ -1030,12 +1030,12 @@ static void pdc20621_put_to_dimm(struct ata_probe_ent *pe, void *psource,
|
|
|
}
|
|
|
|
|
|
|
|
|
-static unsigned int pdc20621_i2c_read(struct ata_probe_ent *pe, u32 device,
|
|
|
+static unsigned int pdc20621_i2c_read(struct ata_probe_ent *pe, u32 device,
|
|
|
u32 subaddr, u32 *pdata)
|
|
|
{
|
|
|
void *mmio = pe->mmio_base;
|
|
|
u32 i2creg = 0;
|
|
|
- u32 status;
|
|
|
+ u32 status;
|
|
|
u32 count =0;
|
|
|
|
|
|
/* hard-code chip #0 */
|
|
@@ -1049,7 +1049,7 @@ static unsigned int pdc20621_i2c_read(struct ata_probe_ent *pe, u32 device,
|
|
|
readl(mmio + PDC_I2C_ADDR_DATA_OFFSET);
|
|
|
|
|
|
/* Write Control to perform read operation, mask int */
|
|
|
- writel(PDC_I2C_READ | PDC_I2C_START | PDC_I2C_MASK_INT,
|
|
|
+ writel(PDC_I2C_READ | PDC_I2C_START | PDC_I2C_MASK_INT,
|
|
|
mmio + PDC_I2C_CONTROL_OFFSET);
|
|
|
|
|
|
for (count = 0; count <= 1000; count ++) {
|
|
@@ -1062,26 +1062,26 @@ static unsigned int pdc20621_i2c_read(struct ata_probe_ent *pe, u32 device,
|
|
|
}
|
|
|
|
|
|
*pdata = (status >> 8) & 0x000000ff;
|
|
|
- return 1;
|
|
|
+ return 1;
|
|
|
}
|
|
|
|
|
|
|
|
|
static int pdc20621_detect_dimm(struct ata_probe_ent *pe)
|
|
|
{
|
|
|
u32 data=0 ;
|
|
|
- if (pdc20621_i2c_read(pe, PDC_DIMM0_SPD_DEV_ADDRESS,
|
|
|
+ if (pdc20621_i2c_read(pe, PDC_DIMM0_SPD_DEV_ADDRESS,
|
|
|
PDC_DIMM_SPD_SYSTEM_FREQ, &data)) {
|
|
|
if (data == 100)
|
|
|
return 100;
|
|
|
} else
|
|
|
return 0;
|
|
|
-
|
|
|
+
|
|
|
if (pdc20621_i2c_read(pe, PDC_DIMM0_SPD_DEV_ADDRESS, 9, &data)) {
|
|
|
- if(data <= 0x75)
|
|
|
+ if(data <= 0x75)
|
|
|
return 133;
|
|
|
} else
|
|
|
return 0;
|
|
|
-
|
|
|
+
|
|
|
return 0;
|
|
|
}
|
|
|
|
|
@@ -1091,15 +1091,15 @@ static int pdc20621_prog_dimm0(struct ata_probe_ent *pe)
|
|
|
u32 spd0[50];
|
|
|
u32 data = 0;
|
|
|
int size, i;
|
|
|
- u8 bdimmsize;
|
|
|
+ u8 bdimmsize;
|
|
|
void *mmio = pe->mmio_base;
|
|
|
static const struct {
|
|
|
unsigned int reg;
|
|
|
unsigned int ofs;
|
|
|
} pdc_i2c_read_data [] = {
|
|
|
- { PDC_DIMM_SPD_TYPE, 11 },
|
|
|
+ { PDC_DIMM_SPD_TYPE, 11 },
|
|
|
{ PDC_DIMM_SPD_FRESH_RATE, 12 },
|
|
|
- { PDC_DIMM_SPD_COLUMN_NUM, 4 },
|
|
|
+ { PDC_DIMM_SPD_COLUMN_NUM, 4 },
|
|
|
{ PDC_DIMM_SPD_ATTRIBUTE, 21 },
|
|
|
{ PDC_DIMM_SPD_ROW_NUM, 3 },
|
|
|
{ PDC_DIMM_SPD_BANK_NUM, 17 },
|
|
@@ -1108,7 +1108,7 @@ static int pdc20621_prog_dimm0(struct ata_probe_ent *pe)
|
|
|
{ PDC_DIMM_SPD_ROW_ACTIVE_DELAY, 28 },
|
|
|
{ PDC_DIMM_SPD_RAS_CAS_DELAY, 29 },
|
|
|
{ PDC_DIMM_SPD_ACTIVE_PRECHARGE, 30 },
|
|
|
- { PDC_DIMM_SPD_CAS_LATENCY, 18 },
|
|
|
+ { PDC_DIMM_SPD_CAS_LATENCY, 18 },
|
|
|
};
|
|
|
|
|
|
/* hard-code chip #0 */
|
|
@@ -1116,17 +1116,17 @@ static int pdc20621_prog_dimm0(struct ata_probe_ent *pe)
|
|
|
|
|
|
for(i=0; i<ARRAY_SIZE(pdc_i2c_read_data); i++)
|
|
|
pdc20621_i2c_read(pe, PDC_DIMM0_SPD_DEV_ADDRESS,
|
|
|
- pdc_i2c_read_data[i].reg,
|
|
|
+ pdc_i2c_read_data[i].reg,
|
|
|
&spd0[pdc_i2c_read_data[i].ofs]);
|
|
|
-
|
|
|
+
|
|
|
data |= (spd0[4] - 8) | ((spd0[21] != 0) << 3) | ((spd0[3]-11) << 4);
|
|
|
- data |= ((spd0[17] / 4) << 6) | ((spd0[5] / 2) << 7) |
|
|
|
+ data |= ((spd0[17] / 4) << 6) | ((spd0[5] / 2) << 7) |
|
|
|
((((spd0[27] + 9) / 10) - 1) << 8) ;
|
|
|
- data |= (((((spd0[29] > spd0[28])
|
|
|
- ? spd0[29] : spd0[28]) + 9) / 10) - 1) << 10;
|
|
|
+ data |= (((((spd0[29] > spd0[28])
|
|
|
+ ? spd0[29] : spd0[28]) + 9) / 10) - 1) << 10;
|
|
|
data |= ((spd0[30] - spd0[29] + 9) / 10 - 2) << 12;
|
|
|
-
|
|
|
- if (spd0[18] & 0x08)
|
|
|
+
|
|
|
+ if (spd0[18] & 0x08)
|
|
|
data |= ((0x03) << 14);
|
|
|
else if (spd0[18] & 0x04)
|
|
|
data |= ((0x02) << 14);
|
|
@@ -1135,7 +1135,7 @@ static int pdc20621_prog_dimm0(struct ata_probe_ent *pe)
|
|
|
else
|
|
|
data |= (0 << 14);
|
|
|
|
|
|
- /*
|
|
|
+ /*
|
|
|
Calculate the size of bDIMMSize (power of 2) and
|
|
|
merge the DIMM size by program start/end address.
|
|
|
*/
|
|
@@ -1145,9 +1145,9 @@ static int pdc20621_prog_dimm0(struct ata_probe_ent *pe)
|
|
|
data |= (((size / 16) - 1) << 16);
|
|
|
data |= (0 << 23);
|
|
|
data |= 8;
|
|
|
- writel(data, mmio + PDC_DIMM0_CONTROL_OFFSET);
|
|
|
+ writel(data, mmio + PDC_DIMM0_CONTROL_OFFSET);
|
|
|
readl(mmio + PDC_DIMM0_CONTROL_OFFSET);
|
|
|
- return size;
|
|
|
+ return size;
|
|
|
}
|
|
|
|
|
|
|
|
@@ -1167,12 +1167,12 @@ static unsigned int pdc20621_prog_dimm_global(struct ata_probe_ent *pe)
|
|
|
Refresh Enable (bit 17)
|
|
|
*/
|
|
|
|
|
|
- data = 0x022259F1;
|
|
|
+ data = 0x022259F1;
|
|
|
writel(data, mmio + PDC_SDRAM_CONTROL_OFFSET);
|
|
|
readl(mmio + PDC_SDRAM_CONTROL_OFFSET);
|
|
|
|
|
|
/* Turn on for ECC */
|
|
|
- pdc20621_i2c_read(pe, PDC_DIMM0_SPD_DEV_ADDRESS,
|
|
|
+ pdc20621_i2c_read(pe, PDC_DIMM0_SPD_DEV_ADDRESS,
|
|
|
PDC_DIMM_SPD_TYPE, &spd0);
|
|
|
if (spd0 == 0x02) {
|
|
|
data |= (0x01 << 16);
|
|
@@ -1186,22 +1186,22 @@ static unsigned int pdc20621_prog_dimm_global(struct ata_probe_ent *pe)
|
|
|
data |= (1<<19);
|
|
|
writel(data, mmio + PDC_SDRAM_CONTROL_OFFSET);
|
|
|
|
|
|
- error = 1;
|
|
|
+ error = 1;
|
|
|
for (i = 1; i <= 10; i++) { /* polling ~5 secs */
|
|
|
data = readl(mmio + PDC_SDRAM_CONTROL_OFFSET);
|
|
|
if (!(data & (1<<19))) {
|
|
|
error = 0;
|
|
|
- break;
|
|
|
+ break;
|
|
|
}
|
|
|
msleep(i*100);
|
|
|
}
|
|
|
return error;
|
|
|
}
|
|
|
-
|
|
|
+
|
|
|
|
|
|
static unsigned int pdc20621_dimm_init(struct ata_probe_ent *pe)
|
|
|
{
|
|
|
- int speed, size, length;
|
|
|
+ int speed, size, length;
|
|
|
u32 addr,spd0,pci_status;
|
|
|
u32 tmp=0;
|
|
|
u32 time_period=0;
|
|
@@ -1228,7 +1228,7 @@ static unsigned int pdc20621_dimm_init(struct ata_probe_ent *pe)
|
|
|
/* Wait 3 seconds */
|
|
|
msleep(3000);
|
|
|
|
|
|
- /*
|
|
|
+ /*
|
|
|
When timer is enabled, counter is decreased every internal
|
|
|
clock cycle.
|
|
|
*/
|
|
@@ -1236,24 +1236,24 @@ static unsigned int pdc20621_dimm_init(struct ata_probe_ent *pe)
|
|
|
tcount = readl(mmio + PDC_TIME_COUNTER);
|
|
|
VPRINTK("Time Counter Register (0x44): 0x%x\n", tcount);
|
|
|
|
|
|
- /*
|
|
|
+ /*
|
|
|
If SX4 is on PCI-X bus, after 3 seconds, the timer counter
|
|
|
register should be >= (0xffffffff - 3x10^8).
|
|
|
*/
|
|
|
if(tcount >= PCI_X_TCOUNT) {
|
|
|
ticks = (time_period - tcount);
|
|
|
VPRINTK("Num counters 0x%x (%d)\n", ticks, ticks);
|
|
|
-
|
|
|
+
|
|
|
clock = (ticks / 300000);
|
|
|
VPRINTK("10 * Internal clk = 0x%x (%d)\n", clock, clock);
|
|
|
-
|
|
|
+
|
|
|
clock = (clock * 33);
|
|
|
VPRINTK("10 * Internal clk * 33 = 0x%x (%d)\n", clock, clock);
|
|
|
|
|
|
/* PLL F Param (bit 22:16) */
|
|
|
fparam = (1400000 / clock) - 2;
|
|
|
VPRINTK("PLL F Param: 0x%x (%d)\n", fparam, fparam);
|
|
|
-
|
|
|
+
|
|
|
/* OD param = 0x2 (bit 31:30), R param = 0x5 (bit 29:25) */
|
|
|
pci_status = (0x8a001824 | (fparam << 16));
|
|
|
} else
|
|
@@ -1264,21 +1264,21 @@ static unsigned int pdc20621_dimm_init(struct ata_probe_ent *pe)
|
|
|
writel(pci_status, mmio + PDC_CTL_STATUS);
|
|
|
readl(mmio + PDC_CTL_STATUS);
|
|
|
|
|
|
- /*
|
|
|
+ /*
|
|
|
Read SPD of DIMM by I2C interface,
|
|
|
and program the DIMM Module Controller.
|
|
|
*/
|
|
|
if (!(speed = pdc20621_detect_dimm(pe))) {
|
|
|
- printk(KERN_ERR "Detect Local DIMM Fail\n");
|
|
|
+ printk(KERN_ERR "Detect Local DIMM Fail\n");
|
|
|
return 1; /* DIMM error */
|
|
|
}
|
|
|
VPRINTK("Local DIMM Speed = %d\n", speed);
|
|
|
|
|
|
- /* Programming DIMM0 Module Control Register (index_CID0:80h) */
|
|
|
+ /* Programming DIMM0 Module Control Register (index_CID0:80h) */
|
|
|
size = pdc20621_prog_dimm0(pe);
|
|
|
VPRINTK("Local DIMM Size = %dMB\n",size);
|
|
|
|
|
|
- /* Programming DIMM Module Global Control Register (index_CID0:88h) */
|
|
|
+ /* Programming DIMM Module Global Control Register (index_CID0:88h) */
|
|
|
if (pdc20621_prog_dimm_global(pe)) {
|
|
|
printk(KERN_ERR "Programming DIMM Module Global Control Register Fail\n");
|
|
|
return 1;
|
|
@@ -1297,30 +1297,30 @@ static unsigned int pdc20621_dimm_init(struct ata_probe_ent *pe)
|
|
|
|
|
|
pdc20621_put_to_dimm(pe, (void *) test_parttern1, 0x10040, 40);
|
|
|
pdc20621_get_from_dimm(pe, (void *) test_parttern2, 0x40, 40);
|
|
|
- printk(KERN_ERR "%x, %x, %s\n", test_parttern2[0],
|
|
|
+ printk(KERN_ERR "%x, %x, %s\n", test_parttern2[0],
|
|
|
test_parttern2[1], &(test_parttern2[2]));
|
|
|
- pdc20621_get_from_dimm(pe, (void *) test_parttern2, 0x10040,
|
|
|
+ pdc20621_get_from_dimm(pe, (void *) test_parttern2, 0x10040,
|
|
|
40);
|
|
|
- printk(KERN_ERR "%x, %x, %s\n", test_parttern2[0],
|
|
|
+ printk(KERN_ERR "%x, %x, %s\n", test_parttern2[0],
|
|
|
test_parttern2[1], &(test_parttern2[2]));
|
|
|
|
|
|
pdc20621_put_to_dimm(pe, (void *) test_parttern1, 0x40, 40);
|
|
|
pdc20621_get_from_dimm(pe, (void *) test_parttern2, 0x40, 40);
|
|
|
- printk(KERN_ERR "%x, %x, %s\n", test_parttern2[0],
|
|
|
+ printk(KERN_ERR "%x, %x, %s\n", test_parttern2[0],
|
|
|
test_parttern2[1], &(test_parttern2[2]));
|
|
|
}
|
|
|
#endif
|
|
|
|
|
|
/* ECC initiliazation. */
|
|
|
|
|
|
- pdc20621_i2c_read(pe, PDC_DIMM0_SPD_DEV_ADDRESS,
|
|
|
+ pdc20621_i2c_read(pe, PDC_DIMM0_SPD_DEV_ADDRESS,
|
|
|
PDC_DIMM_SPD_TYPE, &spd0);
|
|
|
if (spd0 == 0x02) {
|
|
|
VPRINTK("Start ECC initialization\n");
|
|
|
addr = 0;
|
|
|
length = size * 1024 * 1024;
|
|
|
while (addr < length) {
|
|
|
- pdc20621_put_to_dimm(pe, (void *) &tmp, addr,
|
|
|
+ pdc20621_put_to_dimm(pe, (void *) &tmp, addr,
|
|
|
sizeof(u32));
|
|
|
addr += sizeof(u32);
|
|
|
}
|