- Updates to config.g so that it works more reliably and has initial support

for paths
- Renamed some configuration variables
  SMP -> CONFIG_SMP
  MAX_CPUS -> CONFIG_MAX_CPUS
  MAX_PHYSICAL_CPUS -> CONFIG_MAX_PHYSICAL_CPUS
- Removed some dead configuration variables
MAX_CPUS -> CONFIG_MAX_CPUS
MAX_PHYSICAL_CPUS -> CONFIG_MAX_PHYSICAL_CPUS
SMP -> CONFIG_SMP
FINAL_MAINBOARD_FIXUP
SIO_BASE
SIO_SYSTEM_CLK_INPUT
NO_KEYBOARD
USE_NORMAL_IMAGE
SERIAL_CONSOLE
USE_ELF_BOOT
ENABLE_FIXED_AND_VARIABLE_MTRRS
START_CPU_SEG
DISABLE_WATCHDOG
ENABLE_IOMMU
AMD8111_DEV

- Removed some assembly files that are no longer needed
killed src/southbridge/amd/amd8111/smbus.inc
killed src/southbrideg/amd/amd8111/cmos_boot_failover.inc
killed src/ram/ramtest.inc
- Updates to config.g so that it works more reliably and has initial support
  for paths
- Renamed some configuration variables
  SMP -> CONFIG_SMP
  MAX_CPUS -> CONFIG_MAX_CPUS
  MAX_PHYSICAL_CPUS -> CONFIG_MAX_PHYSICAL_CPUS
- Removed some dead configuration variables
MAX_CPUS -> CONFIG_MAX_CPUS
MAX_PHYSICAL_CPUS -> CONFIG_MAX_PHYSICAL_CPUS
SMP -> CONFIG_SMP
FINAL_MAINBOARD_FIXUP
SIO_BASE
SIO_SYSTEM_CLK_INPUT
NO_KEYBOARD
USE_NORMAL_IMAGE
SERIAL_CONSOLE
USE_ELF_BOOT
ENABLE_FIXED_AND_VARIABLE_MTRRS
START_CPU_SEG
DISABLE_WATCHDOG
ENABLE_IOMMU
AMD8111_DEV

- Removed some assembly files that are no longer needed
killed src/southbridge/amd/amd8111/smbus.inc
killed src/southbrideg/amd/amd8111/cmos_boot_failover.inc
killed src/ram/ramtest.inc
killed src/sdram/generic_dump_spd.inc
killed src/sdram/generic_dump_spd.inc

- Updated the arima/hdama to build with the new configuration system
- Updated config.g to list all of the variables with make echo


git-svn-id: svn://svn.coreboot.org/coreboot/trunk@1093 2b7e53f0-3cfb-0310-b3e9-8179ed1497e1
This commit is contained in:
Eric Biederman
2003-09-01 23:17:58 +00:00
parent 0e97fe3904
commit 9bdb460a97
38 changed files with 503 additions and 732 deletions

View File

@@ -4,6 +4,8 @@ import re
import string
import types
import traceback
warnings = 0
errors = 0
@@ -54,10 +56,7 @@ class stack:
return len(self.stack)
def __getitem__ (self, i):
try:
return self.stack[i]
except IndexError:
return 0
return self.stack[i]
def __iter__ (self):
return self.__stack_iter(self.stack)
@@ -618,6 +617,9 @@ class partobj:
# definitions for this part (only want to do it once)
self.done_types = 0
# Path to the device
self.path = ""
# If no instance name is supplied then generate
# a unique name
if (instance_name == 0):
@@ -637,8 +639,12 @@ class partobj:
# me as the child.
if (parent.children):
debug.info(debug.gencode, "add %s (%d) as sibling" % (parent.children.dir, parent.children.instance))
self.siblings = parent.children
parent.children = self
youngest = parent.children;
while(youngest.siblings):
youngest = youngest.siblings
youngest.siblings = self
else:
parent.children = self
else:
self.parent = self
@@ -656,10 +662,10 @@ class partobj:
print "%d: siblings %s" % (lvl, self.siblings.dir)
print "%d: initcode " % lvl
for i in self.initcode:
print " %s" % i
print "\t%s" % i
print "%d: registercode " % lvl
for f, v in self.registercode.items():
print " %s = %s" % (f, v)
print "\t%s = %s" % (f, v)
print "\n"
def gencode(self, file, pass_num):
@@ -681,7 +687,7 @@ class partobj:
if (self.registercode):
file.write("\t= {\n")
for f, v in self.registercode.items():
file.write( " .%s = %s,\n" % (f, v))
file.write( "\t.%s = %s,\n" % (f, v))
file.write("};\n")
else:
file.write(";")
@@ -690,33 +696,35 @@ class partobj:
file.write("struct chip %s = {\n" % self.instance_name)
else:
file.write("struct chip static_root = {\n")
file.write("/* %s %s */\n" % (self.part, self.dir))
file.write("\t/* %s %s */\n" % (self.part, self.dir))
if (self.path != ""):
file.write("\t.path = { %s\n\t},\n" % (self.path) );
if (self.siblings):
debug.info(debug.gencode, "gencode: siblings(%d)" \
% self.siblings.instance)
file.write(" .next = &%s,\n" \
file.write("\t.next = &%s,\n" \
% self.siblings.instance_name)
else:
file.write(" .next = 0,\n")
file.write("\t.next = 0,\n")
if (self.children):
debug.info(debug.gencode, "gencode: children(%d)" \
% self.children.instance)
file.write(" .children = &%s,\n" \
file.write("\t.children = &%s,\n" \
% self.children.instance_name)
else:
file.write(" .children = 0,\n")
file.write("\t.children = 0,\n")
if (self.chipconfig):
# set the pointer to the structure for all this
# type of part
file.write(" .control= &%s_control,\n" % \
file.write("\t.control= &%s_control,\n" % \
self.type_name )
# generate the pointer to the isntance
# of the chip struct
file.write(" .chip_info = (void *) &%s,\n" \
file.write("\t.chip_info = (void *) &%s,\n" \
% self.config_name)
else:
file.write(" .control= 0,\n")
file.write(" .chip_info= 0,\n")
file.write("\t.control= 0,\n")
file.write("\t.chip_info= 0,\n")
file.write("};\n")
def addinit(self, code):
@@ -734,6 +742,34 @@ class partobj:
value = dequote(value)
setdict(self.registercode, field, value)
def addpcipath(self, enable, channel, slot, function):
""" Add a relative pci style path from our parent to this device """
if (channel < 0):
fatal("Invalid channel")
if ((slot < 0) or (slot > 0x1f)):
fatal("Invalid device id")
if ((function < 0) or (function > 7)):
fatal("Invalid function")
self.path = "%s\n\t\t{ .channel = %d, .enable = %d, .path = {.type=DEVICE_PATH_PCI,.u={.pci={ .devfn = PCI_DEVFN(0x%x,%d) }}}}," % (self.path, channel, enable, slot, function)
def addpnppath(self, enable, channel, port, device):
""" Add a relative path to a pnp device hanging off our parent """
if (channel < 0):
fatal("Invalid channel")
if ((port < 0) or (port > 65536)):
fatal("Invalid port")
if ((device < 0) or (device > 0xff)):
fatal("Invalid device")
self.path = "%s\n\t\t{ .channel = %d, .enable = %d, .path={.type=DEVICE_PATH_PNP,.u={.pnp={ .port = 0x%x, .device = 0x%x }}}}," % (self.path, channel, enable, port, device)
def addi2cpath(self, enable, channel, device):
""" Add a relative path to a i2c device hanging off our parent """
if (channel < 0):
fatal("Invalid channel")
if ((device < 0) or (device > 0x7f)):
fatal("Invalid device")
self.path = "%s\n\t\t{ .channel = %d, .enable = %d, .path = {.type=DEVICE_PATH_I2C,.u={.i2c={ .device = 0x%x }}}}, " % (self.path, channel, enable, device)
def usesoption(self, name):
"""Declare option that can be used by this part"""
global global_options
@@ -1070,10 +1106,9 @@ def cpudir(path):
global cpu_type
if (cpu_type and (cpu_type != path)):
fatal("Two different CPU types: %s and %s" % (cpu_type, path))
if (not cpu_type):
srcdir = "/cpu/%s" % path
dodir(srcdir, "Config.lb")
cpu_type = path
srcdir = "/cpu/%s" % path
dodir(srcdir, "Config.lb")
cpu_type = path
def part(type, path, file, name):
global curimage, dirstack, partstack
@@ -1183,7 +1218,7 @@ def tohex(name):
def IsInt( str ):
""" Is the given string an integer?"""
try:
num = int(str)
num = long(str)
return 1
except ValueError:
return 0
@@ -1265,8 +1300,9 @@ parser Config:
token TARGET: 'target'
token USED: 'used'
token USES: 'uses'
token NUM: r'[0-9]+'
token XNUM: r'0x[0-9a-fA-F]+'
token NUM: '[0-9]+'
token HEX_NUM: '[0-9a-fA-F]+'
token HEX_PREFIX: '0x'
# Why is path separate? Because paths to resources have to at least
# have a slash, we thinks
token PATH: r'[a-zA-Z0-9_.][a-zA-Z0-9/_.]+[a-zA-Z0-9_.]+'
@@ -1277,6 +1313,12 @@ parser Config:
token DELEXPR: r'{([^}]+|\\.)*}'
token STR: r'"([^\\"]+|\\.)*"'
token RAWTEXT: r'.*'
token ON: 'on'
token OFF: 'off'
token PCI: 'pci'
token PNP: 'pnp'
token I2C: 'i2c'
rule expr: logical {{ l = logical }}
( "&&" logical {{ l = l and logical }}
@@ -1296,8 +1338,8 @@ parser Config:
)* {{ return v }}
# A term is a number, variable, or an expression surrounded by parentheses
rule term: NUM {{ return atoi(NUM) }}
| XNUM {{ return tohex(XNUM) }}
rule term: NUM {{ return long(NUM, 10) }}
| HEX_PREFIX HEX_NUM {{ return long(HEX_NUM, 16) }}
| ID {{ return lookup(ID) }}
| unop {{ return unop }}
| "\\(" expr "\\)" {{ return expr }}
@@ -1373,6 +1415,28 @@ parser Config:
rule register<<C>>: REGISTER field '=' STR {{ if (C): addregister(field, STR) }}
rule enable: {{ val = 1 }}
[ ( ON {{ val = 1 }}
| OFF {{ val = 0 }}
) ] {{ return val }}
rule pci<<C>>: PCI HEX_NUM {{ channel = int(HEX_NUM,16) }}
':' HEX_NUM {{ slot = int(HEX_NUM,16) }}
'.' HEX_NUM {{ function = int(HEX_NUM, 16) }}
enable
{{ if (C): partstack.tos().addpcipath(enable, channel, slot, function) }}
rule pnp<<C>>: PNP HEX_NUM {{ channel = int(HEX_NUM,16) }}
':' HEX_NUM {{ port = int(HEX_NUM,16) }}
'.' HEX_NUM {{ device = int(HEX_NUM, 16) }}
enable
{{ if (C): partstack.tos().addpnppath(enable, channel, port, device) }}
rule i2c<<C>>: I2C HEX_NUM {{ channel = int(HEX_NUM, 16) }}
':' HEX_NUM {{ device = int(HEX_NUM, 16) }}
enable
{{ if (C): partstatck.tos().addi2cpath(enable, channel, device) }}
rule prtval: expr {{ return str(expr) }}
| STR {{ return STR }}
@@ -1402,8 +1466,10 @@ parser Config:
| object<<C>> {{ return object }}
| option<<C>> {{ return option }}
| partdef<<C>> {{ return partdef }}
| prtstmt<<C>> {{ return prtstmt}}
| register<<C>> {{ return register}}
| prtstmt<<C>> {{ return prtstmt }}
| register<<C>> {{ return register }}
| pci<<C>> {{ return pci }}
| pnp<<C>> {{ return pnp }}
# ENTRY for parsing Config.lb file
rule cfgfile: (uses<<1>>)*
@@ -1560,7 +1626,7 @@ def writeimagemakefile(image):
# Instead, let make do the work of computing CPUFLAGS:
file.write("# Get the value of TOP, VARIABLES, and several other variables.\n")
file.write("include Makefile.settings\n\n")
file.write("# Function to create an item like -Di586 or -DMAX_CPUS='1' or -Ui686\n")
file.write("# Function to create an item like -Di586 or -DCONFIG_MAX_CPUS='1' or -Ui686\n")
file.write("D_item = $(if $(subst undefined,,$(origin $1)),-D$1$(if $($1),='$($1)',),-U$1)\n\n")
file.write("# Compute the value of CPUFLAGS here during make's first pass.\n")
file.write("CPUFLAGS := $(foreach _var_,$(VARIABLES),$(call D_item,$(_var_)))\n\n")
@@ -1688,7 +1754,8 @@ def writeimagemakefile(image):
#file.write("\tpython $(TOP)/util/config/NLBConfig.py %s $(TOP)\n"
# % top_config_file)
keys = image.getroot().uses_options.keys()
#keys = image.getroot().uses_options.keys()
keys = global_options_by_order
keys.sort()
file.write("\necho:\n")
for key in keys:
@@ -1791,6 +1858,7 @@ def writecode(image):
print "Creating", filename
file = safe_open(filename, 'w+')
file.write("#include <device/chip.h>\n")
file.write("#include <device/pci.h>\n")
for path in image.getconfigincludes().values():
file.write("#include \"%s\"\n" % path)
gencode(image.getroot(), file, 0)