- Add chip and a few other bug fixes

git-svn-id: svn://svn.coreboot.org/coreboot/trunk@1656 2b7e53f0-3cfb-0310-b3e9-8179ed1497e1
This commit is contained in:
Eric Biederman 2004-10-14 16:25:01 +00:00
parent 02fa3b2743
commit 98e619b1ce
1 changed files with 52 additions and 39 deletions

View File

@ -164,11 +164,11 @@ def error(string):
global errors, loc global errors, loc
errors = errors + 1 errors = errors + 1
print "===> ERROR: %s" % string print "===> ERROR: %s" % string
print "%s" % loc
def fatal(string): def fatal(string):
"""Print error message and exit""" """Print error message and exit"""
error(string) error(string)
print "%s" % loc
exitiferrors() exitiferrors()
def warning(string): def warning(string):
@ -514,6 +514,11 @@ class option:
def getformat(self): def getformat(self):
return self.format return self.format
def setused(self):
if (self.exportable):
self.exported = 1
self.used = 1
def setwrite(self, part): def setwrite(self, part):
self.write.append(part) self.write.append(part)
@ -624,7 +629,7 @@ class partobj:
self.config_name = "%s_config" % self.instance_name self.config_name = "%s_config" % self.instance_name
# Link this part into the tree # Link this part into the tree
if (parent): if (parent and (part != 'arch')):
debug.info(debug.gencode, "add to parent") debug.info(debug.gencode, "add to parent")
self.parent = parent self.parent = parent
# add current child as my sibling, # add current child as my sibling,
@ -765,11 +770,17 @@ class partobj:
fatal("Invalid device") fatal("Invalid device")
self.path = "%s\n\t\t{ .enabled = %d, .path={.type=DEVICE_PATH_PNP,.u={.pnp={ .port = 0x%x, .device = 0x%x }}}" % (self.path, enable, port, device) self.path = "%s\n\t\t{ .enabled = %d, .path={.type=DEVICE_PATH_PNP,.u={.pnp={ .port = 0x%x, .device = 0x%x }}}" % (self.path, enable, port, device)
def addi2cpath(self, enabled, device): def addi2cpath(self, enable, device):
""" Add a relative path to a i2c device hanging off our parent """ """ Add a relative path to a i2c device hanging off our parent """
if ((device < 0) or (device > 0x7f)): if ((device < 0) or (device > 0x7f)):
fatal("Invalid device") fatal("Invalid device")
self.path = "%s\n\t\t{ .enabled = %d, .path = {.type=DEVICE_PATH_I2C,.u={.i2c={ .device = 0x%x }}} " % (self.path, enable, device) self.path = "%s\n\t\t{ .enabled = %d, .path = {.type=DEVICE_PATH_I2C,.u={.i2c={ .device = 0x%x }}} " % (self.path, enable, device)
def addapicpath(self, enable, apic_id):
""" Add a relative path to a cpu device hanging off our parent """
if ((apic_id < 0) or (apic_id > 255)):
fatal("Invalid device")
self.path = "%s\n\t\t{ .enabled = %d, .path = {.type=DEVICE_PATH_APIC,.u={.apic={ .apic_id = 0x%x }}} " % (self.path, enable, apic_id)
def usesoption(self, name): def usesoption(self, name):
@ -782,10 +793,7 @@ class partobj:
if (o1): if (o1):
return return
setdict(self.uses_options, name, o) setdict(self.uses_options, name, o)
exportoption(o, self.image.exported_options)
def exportoption(self, op):
"""Export option that is used by this part"""
exportoption(op, self.image.exported_options)
# ----------------------------------------------------------------------------- # -----------------------------------------------------------------------------
# statements # statements
@ -872,12 +880,6 @@ def getoption(name, image):
exitiferrors() exitiferrors()
return val return val
def exportoption(op, exported_options):
if (not op.isexportable()):
return
if (not op in exported_options):
exported_options.append(op)
def setoption(name, value, imp): def setoption(name, value, imp):
"""Set an option from within a configuration file. Normally this """Set an option from within a configuration file. Normally this
is only permitted in the target (top level) configuration file. is only permitted in the target (top level) configuration file.
@ -903,19 +905,19 @@ def setoption(name, value, imp):
if (v == 0): if (v == 0):
v = newoptionvalue(name, curimage) v = newoptionvalue(name, curimage)
v.setvalue(value) v.setvalue(value)
if (curpart):
curpart.exportoption(o) def exportoption(op, exported_options):
else: if (not op.isexportable()):
exportoption(o, global_exported_options) return
if (not op in exported_options):
exported_options.append(op)
def setdefault(name, value, isdef): def setdefault(name, value, isdef):
"""Set the default value of an option from within a configuration """Set the default value of an option from within a configuration
file. This is permitted from any configuration file, but will file. This is permitted from any configuration file, but will
result in a warning if the default is set more than once. result in a warning if the default is set more than once.
If 'isdef' is set, we're defining the option in Options.lb so If 'isdef' is set, we're defining the option in Options.lb so
there is no need for 'uses'. there is no need for 'uses'."""
Note also that changing an options default value will export
the option, if it is exportable."""
global loc, global_options, curimage global loc, global_options, curimage
@ -938,12 +940,6 @@ def setdefault(name, value, isdef):
if (v == 0): if (v == 0):
v = newoptionvalue(name, image) v = newoptionvalue(name, image)
v.setdefault(value) v.setdefault(value)
if (isdef):
return
if (curpart):
curpart.exportoption(o)
else:
exportoption(o, global_exported_options)
def setnodefault(name): def setnodefault(name):
global loc, global_options global loc, global_options
@ -1047,6 +1043,7 @@ def usesoption(name):
if (o1): if (o1):
return return
setdict(global_uses_options, name, o) setdict(global_uses_options, name, o)
exportoption(o, global_exported_options)
def validdef(name, defval): def validdef(name, defval):
global global_options global global_options
@ -1135,9 +1132,9 @@ def mainboard(path):
full_path = os.path.join(treetop, 'src', 'mainboard', path) full_path = os.path.join(treetop, 'src', 'mainboard', path)
vendor = re.sub("/.*", "", path) vendor = re.sub("/.*", "", path)
part_number = re.sub("[^/]*/", "", path) part_number = re.sub("[^/]*/", "", path)
setdefault('MAINBOARD', full_path, 1) setdefault('MAINBOARD', full_path, 0)
setdefault('MAINBOARD_VENDOR', vendor, 1) setdefault('MAINBOARD_VENDOR', vendor, 0)
setdefault('MAINBOARD_PART_NUMBER', part_number, 1) setdefault('MAINBOARD_PART_NUMBER', part_number, 0)
dodir('/config', 'Config.lb') dodir('/config', 'Config.lb')
part('mainboard', path, 'Config.lb', 0, 0) part('mainboard', path, 'Config.lb', 0, 0)
curimage.setroot(partstack.tos()) curimage.setroot(partstack.tos())
@ -1185,7 +1182,7 @@ def part(type, path, file, name, link):
partdir = os.path.join(type, path) partdir = os.path.join(type, path)
srcdir = os.path.join(treetop, 'src') srcdir = os.path.join(treetop, 'src')
fulldir = os.path.join(srcdir, partdir) fulldir = os.path.join(srcdir, partdir)
type_name = flatten_name(os.path.join(type, path)) type_name = flatten_name(partdir)
newpart = partobj(curimage, fulldir, partstack.tos(), type, \ newpart = partobj(curimage, fulldir, partstack.tos(), type, \
type_name, name, link) type_name, name, link)
print "Configuring PART %s, path %s" % (type, path) print "Configuring PART %s, path %s" % (type, path)
@ -1333,6 +1330,7 @@ parser Config:
token COMMENT: 'comment' token COMMENT: 'comment'
token CONFIG: 'config' token CONFIG: 'config'
token CPU: 'cpu' token CPU: 'cpu'
token CHIP: 'chip'
token DEFAULT: 'default' token DEFAULT: 'default'
token DEFINE: 'define' token DEFINE: 'define'
token DEPENDS: 'depends' token DEPENDS: 'depends'
@ -1392,6 +1390,7 @@ parser Config:
token PCI: 'pci' token PCI: 'pci'
token PNP: 'pnp' token PNP: 'pnp'
token I2C: 'i2c' token I2C: 'i2c'
token APIC: 'apic'
token LINK: 'link' token LINK: 'link'
@ -1435,9 +1434,10 @@ parser Config:
| PMC {{ return 'pmc' }} | PMC {{ return 'pmc' }}
| SOUTHBRIDGE {{ return 'southbridge' }} | SOUTHBRIDGE {{ return 'southbridge' }}
| CPU {{ return 'cpu' }} | CPU {{ return 'cpu' }}
| CHIP {{ return '' }}
rule partdef<<C>>: {{ name = 0 }} {{ link = 0 }} rule partdef<<C>>: {{ name = 0 }} {{ link = 0 }}
parttype partid parttype partid {{ if (parttype == 'cpu'): link = 1 }}
[ STR {{ name = dequote(STR) }} [ STR {{ name = dequote(STR) }}
][ LINK NUM {{ link = long(NUM, 10) }} ][ LINK NUM {{ link = long(NUM, 10) }}
] {{ if (C): part(parttype, partid, 'Config.lb', name, link) }} ] {{ if (C): part(parttype, partid, 'Config.lb', name, link) }}
@ -1530,9 +1530,20 @@ parser Config:
rule i2c<<C>>: I2C HEX_NUM {{ device = int(HEX_NUM, 16) }} rule i2c<<C>>: I2C HEX_NUM {{ device = int(HEX_NUM, 16) }}
enable enable
{{ if (C): partstatck.tos().addi2cpath(enable, device) }} {{ if (C): partstack.tos().addi2cpath(enable, device) }}
resources<<C>> resources<<C>>
rule apic<<C>>: APIC HEX_NUM {{ apic_id = int(HEX_NUM, 16) }}
enable
{{ if (C): partstack.tos().addapicpath(enable, apic_id) }}
resources<<C>>
rule dev_path<<C>>:
pci<<C>> {{ return pci }}
| pnp<<C>> {{ return pnp }}
| i2c<<C>> {{ return i2c }}
| apic<<C>> {{ return apic }}
rule prtval: expr {{ return str(expr) }} rule prtval: expr {{ return str(expr) }}
| STR {{ return STR }} | STR {{ return STR }}
@ -1566,8 +1577,7 @@ parser Config:
| partdef<<C>> {{ return partdef }} | partdef<<C>> {{ return partdef }}
| prtstmt<<C>> {{ return prtstmt }} | prtstmt<<C>> {{ return prtstmt }}
| register<<C>> {{ return register }} | register<<C>> {{ return register }}
| pci<<C>> {{ return pci }} | dev_path<<C>> {{ return dev_path }}
| pnp<<C>> {{ return pnp }}
# ENTRY for parsing Config.lb file # ENTRY for parsing Config.lb file
rule cfgfile: (uses<<1>>)* rule cfgfile: (uses<<1>>)*
@ -2000,8 +2010,11 @@ def verifyparse():
fatal("An init file must be specified") fatal("An init file must be specified")
for op in image.exported_options: for op in image.exported_options:
if (getoptionvalue(op.name, op, image) == 0 and getoptionvalue(op.name, op, 0) == 0): if (getoptionvalue(op.name, op, image) == 0 and getoptionvalue(op.name, op, 0) == 0):
error("Exported option %s has no value (check Options.lb)" % op.name) warning("Exported option %s has no value (check Options.lb)" % op.name);
exitiferrors() print("Verifing global options")
for op in global_exported_options:
if (getoptionvalue(op.name, op, 0) == 0):
notice("Exported option %s has no value (check Options.lb)" % op.name);
#============================================================================= #=============================================================================
# MAIN PROGRAM # MAIN PROGRAM