- 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:
parent
02fa3b2743
commit
98e619b1ce
|
@ -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
|
||||||
|
|
Loading…
Reference in New Issue