return ( ( msr.hi >> (54-32)) & 1);
}
-static inline unsigned get_initial_apicid(void)
+u32 get_initial_apicid(void)
{
return ((cpuid_ebx(1) >> 24) & 0xf);
}
printk(BIOS_DEBUG, "\n");
}
-static void allow_all_aps_stop(u32 bsp_apicid)
+void allow_all_aps_stop(u32 bsp_apicid)
{
/* Called by the BSP to indicate AP can stop */
- /* FIXME Do APs use this?
- Looks like wait_till_sysinfo_in_ram is used instead. */
+ /* FIXME Do APs use this? */
// allow aps to stop use 6 bits for state
lapic_write(LAPIC_MSG_REG, (bsp_apicid << 24) | 0x14);
}
#endif
- /* AP is ready, Wait for the BSP to get memory configured */
- /* FIXME: many cores spinning on node0 pci register seems to be bad.
- * Why do we need to wait? These APs are just going to go sit in a hlt.
- */
- //wait_till_sysinfo_in_ram();
-
+ /* AP is ready, configure MTRRs and go to sleep */
set_var_mtrr(0, 0x00000000, CONFIG_RAMTOP, MTRR_TYPE_WRBACK);
STOP_CAR_AND_CPU();
+
printk(BIOS_DEBUG,
"\nAP %02x should be halted but you are reading this....\n",
apicid);
printk(BIOS_DEBUG, " done\n");
}
+#ifdef UNUSED_CODE
static void cpuInitializeMCA(void)
{
/* Clears Machine Check Architecture (MCA) registers, which power on
}
}
}
+#endif
/**
* finalize_node_setup()
printk(BIOS_DEBUG, "\n");
}
-static void allow_all_aps_stop(u32 bsp_apicid)
+void allow_all_aps_stop(u32 bsp_apicid)
{
// allow aps to stop
return ( ( msr.hi >> (54-32)) & 1);
}
-static u32 get_initial_apicid(void)
+u32 get_initial_apicid(void)
{
return ((cpuid_ebx(1) >> 24) & 0xff);
}
return id;
}
+#ifdef UNUSED_CODE
static u32 get_core_num(void)
{
return (cpuid_ecx(0x80000008) & 0xff);
}
+#endif
static struct node_core_id get_node_core_id_x(void)
{
#else
void wait_all_other_cores_started(u32 bsp_apicid);
void wait_all_aps_started(u32 bsp_apicid);
+void allow_all_aps_stop(u32 bsp_apicid);
#endif
+u32 get_initial_apicid(void);
#endif /* CPU_AMD_QUADCORE_H */
#endif
-#ifndef __ROMCC__
+#ifdef __PRE_RAM__
void showallroutes(int level, device_t dev);
+
+void setup_resource_map_offset(const u32 *register_values, u32 max, u32
+ offset_pci_dev, u32 offset_io_base);
+
+void setup_resource_map_x_offset(const u32 *register_values, u32 max, u32
+ offset_pci_dev, u32 offset_io_base);
+
+void setup_resource_map_x(const u32 *register_values, u32 max);
#endif
#endif /* AMDFAM10_H */
//#include "../amdmct/mct/mctardk5.c"
#endif
-#include "../amdmct/mct/mct_fd.c"
-
#endif /* DDR2 */
int mctRead_SPD(u32 smaddr, u32 reg)
pci_write_config32(NODE_PCI(i, 0), HT_INIT_CONTROL, dword);
}
-
+#ifdef UNUSED_CODE
static u32 get_htic_bit(u8 i, u8 bit)
{
u32 dword;
if(get_htic_bit(0, 9)) return;
}
}
+#endif
static void set_sysinfo_in_ram(u32 val)
{
}
-static void setup_resource_map_offset(const u32 *register_values,
- u32 max, u32 offset_pci_dev,
- u32 offset_io_base)
+void setup_resource_map_offset(const u32 *register_values, u32 max, u32 offset_pci_dev, u32 offset_io_base)
{
u32 i;
// print_debug("setting up resource map offset....");
#define RES_PORT_IO_32 0x20
#define RES_MEM_IO 0x40
-static void setup_resource_map_x_offset(const u32 *register_values, u32 max,
- u32 offset_pci_dev, u32 offset_io_base)
+void setup_resource_map_x_offset(const u32 *register_values, u32 max, u32 offset_pci_dev, u32 offset_io_base)
{
u32 i;
print_debug("done.\n");
#endif
}
-static void setup_resource_map_x(const u32 *register_values, u32 max)
+
+void setup_resource_map_x(const u32 *register_values, u32 max)
{
u32 i;
void K8FECCInit(struct MCTStatStruc *pMCTstat, struct DCTStatStruc *pDCTstatA);
-unsigned amd_FD_support(void);
void amd_MCTInit(struct MCTStatStruc *pMCTstat, struct DCTStatStruc *pDCTstatA);
void K8FCPUMemTyping(struct MCTStatStruc *pMCTstat, struct DCTStatStruc *pDCTstatA);
+++ /dev/null
-/*
- * This file is part of the coreboot project.
- *
- * Copyright (C) 2007 Advanced Micro Devices, Inc.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; version 2 of the License.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
- */
-
-
-
-static u8 amd_FD_support(void)
-{
- return 1;
-}
*enabled = 0;
}
-
+#ifdef UNUSED_CODE
static u8 mctDoAxRdPtrInit_D(struct DCTStatStruc *pDCTstat, u8 *Rdtr)
{
u32 tmp;
}
return 0;
}
+#endif
void mct_AdjustScrub_D(struct DCTStatStruc *pDCTstat, u16 *scrub_request) {
return MaxValue;
}
-
-
+#ifdef UNUSED_CODE
static u8 mct_AdjustFinalDQSRcvValue_1Pass(u8 val_1p, u8 val_2p)
{
return (val_1p & 0xff) + ((val_2p & 0xff)<<8);
}
-
+#endif
u8 mct_SaveRcvEnDly_D_1Pass(struct DCTStatStruc *pDCTstat, u8 pass)
{
static void coreDelay (void);
+#if (CONFIG_DIMM_SUPPORT & 0x000F)==0x0005 /* AMD_FAM10_DDR3 */
/* Erratum 350 */
static void vErrata350(struct MCTStatStruc *pMCTstat, struct DCTStatStruc *pDCTstat)
{
coreDelay();
}
+#endif
static void mctHookBeforeAnyTraining(struct MCTStatStruc *pMCTstat, struct DCTStatStruc *pDCTstatA)
void amd8111_enable(device_t dev);
+#ifdef __PRE_RAM__
+void enable_fid_change_on_sb(unsigned sbbusn, unsigned sbdn);
+#endif
+
#endif /* AMD8111_H */
+#include "amd8111.h"
#include <reset.h>
/* by yhlu 2005.10 */
outb(0x0e, 0x0cf9); // make sure cf9 is enabled
}
-static void enable_fid_change_on_sb(unsigned sbbusn, unsigned sbdn)
+void enable_fid_change_on_sb(unsigned sbbusn, unsigned sbdn)
{
device_t dev;