*** empty log message ***
git-svn-id: svn://svn.coreboot.org/coreboot/trunk@1370 2b7e53f0-3cfb-0310-b3e9-8179ed1497e1
This commit is contained in:
parent
bd8e17a8f1
commit
c34d5ca790
|
@ -49,7 +49,7 @@ sdram_dimm_to_bank_info(const char *data, sdram_dimm_info *dimm, int verbose)
|
||||||
if (csum != data[63])
|
if (csum != data[63])
|
||||||
{
|
{
|
||||||
if (verbose)
|
if (verbose)
|
||||||
printk_info("Broken checksum\n");
|
printk_info("Broken checksum 0x%x, should be 0x%x\n", data[63], csum);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -66,11 +66,19 @@ sizeram(void)
|
||||||
return &meminfo;
|
return &meminfo;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Configure the MPC107 with the most pessimistic settings. These
|
||||||
|
* are modified by reading the SPD EEPROM and adjusting accordingly.
|
||||||
|
* One thing to note. The SPD settings can be wrong, as
|
||||||
|
* was the case for my machine. I could only configure 32Mb out of
|
||||||
|
* 128Mb using these settings.
|
||||||
|
*/
|
||||||
void
|
void
|
||||||
mpc107_init(void)
|
mpc107_init(void)
|
||||||
{
|
{
|
||||||
uint16_t reg16;
|
uint16_t reg16;
|
||||||
uint32_t reg32;
|
uint32_t reg32;
|
||||||
|
uint32_t is32bits;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* PCI Cmd
|
* PCI Cmd
|
||||||
|
@ -93,6 +101,7 @@ mpc107_init(void)
|
||||||
* 0x00000800 enable MCP* assertion
|
* 0x00000800 enable MCP* assertion
|
||||||
* 0x00000400 enable TEA* assertion
|
* 0x00000400 enable TEA* assertion
|
||||||
* 0x00000200 enable data bus parking
|
* 0x00000200 enable data bus parking
|
||||||
|
* 0x00000080 restrict flash write width
|
||||||
* 0x00000040 enable PCI store gathering
|
* 0x00000040 enable PCI store gathering
|
||||||
* 0x00000010 enable loop-snoop
|
* 0x00000010 enable loop-snoop
|
||||||
* 0x00000008 enable address bus parking
|
* 0x00000008 enable address bus parking
|
||||||
|
@ -105,7 +114,7 @@ mpc107_init(void)
|
||||||
*/
|
*/
|
||||||
reg32 &= 0x11;
|
reg32 &= 0x11;
|
||||||
|
|
||||||
reg32 |= 0xff041a18;
|
reg32 |= 0xff041a98;
|
||||||
pci_ppc_write_config32(0, 0, 0xa8, reg32);
|
pci_ppc_write_config32(0, 0, 0xa8, reg32);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -123,13 +132,14 @@ mpc107_init(void)
|
||||||
* 0x00000008 addr phase wt states = 2
|
* 0x00000008 addr phase wt states = 2
|
||||||
* 0x0000000c addr phase wt states = 3
|
* 0x0000000c addr phase wt states = 3
|
||||||
*/
|
*/
|
||||||
|
reg32 = 0x04000000;
|
||||||
pci_ppc_write_config32(0, 0, 0xac, 0x04040004);
|
pci_ppc_write_config32(0, 0, 0xac, reg32);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* EUMBBAR
|
* EUMBBAR
|
||||||
*/
|
*/
|
||||||
pci_ppc_write_config32(0, 0, 0x78, 0xfc000000);
|
reg32 = 0xfc000000;
|
||||||
|
pci_ppc_write_config32(0, 0, 0x78, reg32);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* MCCR1 - Set MEMGO bit later!
|
* MCCR1 - Set MEMGO bit later!
|
||||||
|
@ -140,10 +150,12 @@ mpc107_init(void)
|
||||||
* 0x00020000 EDO/FP enable (else SDRAM)
|
* 0x00020000 EDO/FP enable (else SDRAM)
|
||||||
* 0x00010000 Parity check
|
* 0x00010000 Parity check
|
||||||
* 0x0000FFFF 16Mbit/2 bank SDRAM
|
* 0x0000FFFF 16Mbit/2 bank SDRAM
|
||||||
|
* 0x0000AAAA 256Mbit/4 bank SDRAM
|
||||||
* 0x00005555 64Mbit/2 bank SDRAM
|
* 0x00005555 64Mbit/2 bank SDRAM
|
||||||
* 0x00000000 64Mbit/4 bank SDRAM
|
* 0x00000000 64Mbit/4 bank SDRAM
|
||||||
*/
|
*/
|
||||||
reg32 = pci_ppc_read_config32(0, 0, 0xf0);
|
reg32 = pci_ppc_read_config32(0, 0, 0xf0);
|
||||||
|
is32bits = (reg32 & 0x00400000) == 0;
|
||||||
reg32 &= 0x00080000; /* Preserve MEMGO bit in case we're in RAM */
|
reg32 &= 0x00080000; /* Preserve MEMGO bit in case we're in RAM */
|
||||||
reg32 |= 0x75800000;
|
reg32 |= 0x75800000;
|
||||||
pci_ppc_write_config32(0, 0, 0xf0, reg32);
|
pci_ppc_write_config32(0, 0, 0xf0, reg32);
|
||||||
|
@ -158,14 +170,16 @@ mpc107_init(void)
|
||||||
* 0x00040000 SDRAM inline reads
|
* 0x00040000 SDRAM inline reads
|
||||||
* 0x00020000 ECC enable
|
* 0x00020000 ECC enable
|
||||||
* 0x00010000 EDO (else FP)
|
* 0x00010000 EDO (else FP)
|
||||||
* 0x000006b8 Refresh 33MHz bus
|
* 0x000004cc Refresh 33MHz bus (307 clocks)
|
||||||
* 0x0000035c Refresh 66MHz bus
|
* 0x00000cc4 Refresh 66MHz bus (817 clocks)
|
||||||
* 0x0000023c Refresh 100MHz bus
|
* 0x000010fc Refresh 83MHz bus (1087 clocks)
|
||||||
* 0x000001ac Refresh 133MHz bus
|
* 0x0000150c Refresh 100MHz bus (1347 clocks)
|
||||||
|
* 0x00001d2c Refresh 133MHz bus (1867 clocks)
|
||||||
* 0x00000002 Reserve a page
|
* 0x00000002 Reserve a page
|
||||||
* 0x00000001 RWM parity
|
* 0x00000001 RWM parity
|
||||||
*/
|
*/
|
||||||
pci_ppc_write_config32(0, 0, 0xf4, 0x0440023c);
|
reg32 = 0x044004cc;
|
||||||
|
pci_ppc_write_config32(0, 0, 0xf4, reg32);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* MCCR3
|
* MCCR3
|
||||||
|
@ -174,7 +188,8 @@ mpc107_init(void)
|
||||||
* 0x00400000 RDLAT = 4 clocks
|
* 0x00400000 RDLAT = 4 clocks
|
||||||
* 0x00300000 RDLAT = 3 clocks
|
* 0x00300000 RDLAT = 3 clocks
|
||||||
*/
|
*/
|
||||||
pci_ppc_write_config32(0, 0, 0xf8, 0x78400000);
|
reg32 = 0x78400000;
|
||||||
|
pci_ppc_write_config32(0, 0, 0xf8, reg32);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* MCCR4
|
* MCCR4
|
||||||
|
@ -190,13 +205,20 @@ mpc107_init(void)
|
||||||
* 0x00003000 CAS Latencey (CL=3)
|
* 0x00003000 CAS Latencey (CL=3)
|
||||||
* 0x00002000 CAS Latencey (CL=2)
|
* 0x00002000 CAS Latencey (CL=2)
|
||||||
* 0x00000200 Sequential wrap/4-beat burst
|
* 0x00000200 Sequential wrap/4-beat burst
|
||||||
|
* 0x00000300 Sequential wrap/8-beat burst
|
||||||
* 0x00000030 Reserve a page
|
* 0x00000030 Reserve a page
|
||||||
* 0x00000009 RWM parity
|
* 0x00000009 RWM parity
|
||||||
*/
|
*/
|
||||||
pci_ppc_write_config32(0, 0, 0xfc, 0x35323239);
|
reg32 = 0x35323239;
|
||||||
|
if (!is32bits)
|
||||||
|
reg32 |= 0x0300;
|
||||||
|
pci_ppc_write_config32(0, 0, 0xfc, reg32);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* MSAR1/MSAR2/MESAR1/MESAR2
|
* MSAR1/MSAR2/MESAR1/MESAR2
|
||||||
|
*
|
||||||
|
* Assume each memory block is 32Mb. This is
|
||||||
|
* most likely NOT correct.
|
||||||
*/
|
*/
|
||||||
pci_ppc_write_config32(0, 0, 0x80, 0x60402000);
|
pci_ppc_write_config32(0, 0, 0x80, 0x60402000);
|
||||||
pci_ppc_write_config32(0, 0, 0x84, 0xe0c0a080);
|
pci_ppc_write_config32(0, 0, 0x84, 0xe0c0a080);
|
||||||
|
@ -228,7 +250,7 @@ mpc107_init(void)
|
||||||
* 0x01 MemClk 20 ohms
|
* 0x01 MemClk 20 ohms
|
||||||
* 0x00 MemClk 40 ohms
|
* 0x00 MemClk 40 ohms
|
||||||
*/
|
*/
|
||||||
pci_ppc_write_config8(0, 0, 0x73, 0xc0);
|
pci_ppc_write_config8(0, 0, 0x73, 0xd1);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* CDCR
|
* CDCR
|
||||||
|
@ -244,15 +266,15 @@ mpc107_init(void)
|
||||||
* 0x0002 CPU_CLK1 disabled
|
* 0x0002 CPU_CLK1 disabled
|
||||||
* 0x0001 CPU_CLK2 disabled
|
* 0x0001 CPU_CLK2 disabled
|
||||||
*/
|
*/
|
||||||
pci_ppc_write_config16(0, 0, 0x74, 0xfc01);
|
pci_ppc_write_config16(0, 0, 0x74, 0xfd00);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* MDCR
|
* MICR
|
||||||
* 0x80 MCP 1=open-drain, 0=output
|
* 0x80 MCP 1=open-drain, 0=output
|
||||||
* 0x40 SRESET 1=open-drain, 0=output
|
* 0x40 SRESET 1=open-drain, 0=output
|
||||||
* 0x20 QACK 1=high-Z, 0=output
|
* 0x20 QACK 1=high-Z, 0=output
|
||||||
*/
|
*/
|
||||||
pci_ppc_write_config8(0, 0, 0x76, 0x60);
|
pci_ppc_write_config8(0, 0, 0x76, 0x40);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* MBEN
|
* MBEN
|
||||||
|
@ -286,7 +308,7 @@ mpc107_init(void)
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Configure memory settings.
|
* Configure real memory settings.
|
||||||
*/
|
*/
|
||||||
unsigned long
|
unsigned long
|
||||||
mpc107_config_memory(int no_banks, sdram_bank_info * bank, int for_real)
|
mpc107_config_memory(int no_banks, sdram_bank_info * bank, int for_real)
|
||||||
|
@ -678,12 +700,12 @@ mpc107_probe_dimms(int no_dimms, sdram_dimm_info *dimms, sdram_bank_info * bank)
|
||||||
for(dimm = 0; dimm < no_dimms; dimm++)
|
for(dimm = 0; dimm < no_dimms; dimm++)
|
||||||
{
|
{
|
||||||
dimms[dimm].number = dimm;
|
dimms[dimm].number = dimm;
|
||||||
dimms[dimm].bank1 = bank + dimm*2;
|
dimms[dimm].bank1 = bank + dimm*NUM_BANKS;
|
||||||
dimms[dimm].bank2 = bank + dimm*2 + 1;
|
dimms[dimm].bank2 = bank + dimm*NUM_BANKS + 1;
|
||||||
bank[dimm*2].size = 0;
|
bank[dimm*NUM_BANKS].size = 0;
|
||||||
bank[dimm*2+1].size = 0;
|
bank[dimm*NUM_BANKS+1].size = 0;
|
||||||
bank[dimm*2].number = 0;
|
bank[dimm*NUM_BANKS].number = 0;
|
||||||
bank[dimm*2+1].number = 1;
|
bank[dimm*NUM_BANKS+1].number = 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue