[LinuxBIOS] RAM detection for Intel 430FX
Peter Stuge
peter at stuge.se
Fri Aug 10 00:30:49 CEST 2007
On Fri, Aug 10, 2007 at 12:09:36AM +0200, popkonserve wrote:
> /*
> * This file is part of the LinuxBIOS project.
> *
> * Copyright (C)
Please add 2007 Holger Yourlastname
> static void initialize_row(const struct mem_controller* ctrl,
> const uint8_t u8_row) {
>
> uint8_t u8_DRAMSize = 0;
> uint8_t u8_DRAMType = 1;
>
> /* Initialize the current row to EDO and 32MB (maximum size) */
> u8_DRAMType <<= u8_row;
> u8_DRAMSize == SIMM_ROW_SIZE_MAX / SIMM_GRANULARITY;
Typo == instead of = ?
> pci_write_config8(ctrl->d0,
> ((uint8_t)e_DRAM_ROW_BOUNDARY_BASE) + u8_row,
> u8_DRAMSize);
..will always write 0 otherwise.
> pci_write_config8(ctrl->d0,
> ((uint8_t)e_DRAM_ROW_TYPE),
> u8_DRAMType);
Does this want to be a set_row_type() function?
> /* Enable EDO detection mode */
> u8_DRAMC = pci_read_config8(ctrl->d0,
> ((uint8_t)e_DRAM_CONTROL));
>
> u8_DRAMC |= ((uint8_t)e_DRAMC_EDO_DETECT);
> pci_write_config8(ctrl->d0,
> ((uint8_t)e_DRAM_CONTROL),
> u8_DRAMC);
Maybe also candidate for a separate function?
> static void detect_size(const struct mem_controller* ctrl,
[..]
> for(;;) {
[..]
> /* Quit if the size of the current row was detected or an error occured */
> if((u8_size_detected != 0) ||
> au8_DRAMSize[u8_row] == ((uint8_t)e_EMPTY)){
> break;
> }
> }
Please change the for() into do {} while(); to improve readability.
> /* Turn off cache (L1 & L2) */
Isn't there a function for this already? If not, should there be?
> /* Set size of DRAM to 0 for all rows */
> for(u8_row = 0; u8_row < SIMM_SOCKETS; u8_row++) {
> au8_DRAMSize[u8_row] = 0;
> pci_write_config8(ctrl->d0,
> ((uint8_t)e_DRAM_ROW_BOUNDARY_BASE) + u8_row,
> au8_DRAMSize);
> }
>
> /* Detect RAM presence and type in all rows */
> for(u8_row = 0; u8_row < SIMM_SOCKETS; u8_row++) {
>
All rows need to be zeroed first to make this reliable?
> /* Detect type of ram in the current row */
> detect_type(ctrl,
> au8_DRAMSize,
> &u8_DRAMType,
> u8_row);
>
> /* Check if any DRAM was found in this row */
> if(au8_DRAMSize[u8_row] == 0) {
> /* No DRAM found. Skip the rest. */
> continue;
> }
A bit unexpected to have detect_type() return meaningful data in a
Size parameter.
Maybe a return value from detect_type() would be nicer?
Looks good! :)
//Peter
More information about the coreboot
mailing list