- Bump MAX_LINKS to 4 I have actually found an i2c bridge that needs this
- Fix the hdama Config.lb to not longer use the link keywords oops, and instead to have it nest everything properly. - Update config.g to not support the link keyword - update config.g to not support northbridge/southbridge/cpu/pmc noise words we can just use chip now. - Remove old link handling from the code - Detect and handle duplicate paths so we generate one device with multiple links git-svn-id: svn://svn.coreboot.org/coreboot/trunk@1685 2b7e53f0-3cfb-0310-b3e9-8179ed1497e1
This commit is contained in:
parent
858ac5c5cd
commit
04da1d35d1
|
@ -40,7 +40,7 @@ struct bus {
|
||||||
};
|
};
|
||||||
|
|
||||||
#define MAX_RESOURCES 12
|
#define MAX_RESOURCES 12
|
||||||
#define MAX_LINKS 3
|
#define MAX_LINKS 4
|
||||||
/*
|
/*
|
||||||
* There is one device structure for each slot-number/function-number
|
* There is one device structure for each slot-number/function-number
|
||||||
* combination:
|
* combination:
|
||||||
|
|
|
@ -181,37 +181,38 @@ chip northbridge/amd/amdk8
|
||||||
device pci 1.3 on
|
device pci 1.3 on
|
||||||
chip drivers/generic/generic
|
chip drivers/generic/generic
|
||||||
#phillips pca9545 smbus mux
|
#phillips pca9545 smbus mux
|
||||||
device i2c 70 on end
|
device i2c 70 on
|
||||||
# analog_devices adm1026
|
# analog_devices adm1026
|
||||||
chip drivers/generic/generic
|
chip drivers/generic/generic
|
||||||
device i2c 2c on end
|
device i2c 2c on end
|
||||||
end
|
end
|
||||||
|
end
|
||||||
device i2c 70 on end
|
device i2c 70 on end
|
||||||
device i2c 70 on end
|
device i2c 70 on end
|
||||||
device i2c 70 on end
|
device i2c 70 on end
|
||||||
end
|
end
|
||||||
chip drivers/generic/generic link 4 #dimm 0-0-0
|
chip drivers/generic/generic #dimm 0-0-0
|
||||||
device i2c 50 on end
|
device i2c 50 on end
|
||||||
end
|
end
|
||||||
chip drivers/generic/generic link 4 #dimm 0-0-1
|
chip drivers/generic/generic #dimm 0-0-1
|
||||||
device i2c 51 on end
|
device i2c 51 on end
|
||||||
end
|
end
|
||||||
chip drivers/generic/generic link 4 #dimm 0-1-0
|
chip drivers/generic/generic #dimm 0-1-0
|
||||||
device i2c 52 on end
|
device i2c 52 on end
|
||||||
end
|
end
|
||||||
chip drivers/generic/generic link 4 #dimm 0-1-1
|
chip drivers/generic/generic #dimm 0-1-1
|
||||||
device i2c 53 on end
|
device i2c 53 on end
|
||||||
end
|
end
|
||||||
chip drivers/generic/generic link 4 #dimm 1-0-0
|
chip drivers/generic/generic #dimm 1-0-0
|
||||||
device i2c 54 on end
|
device i2c 54 on end
|
||||||
end
|
end
|
||||||
chip drivers/generic/generic link 4 #dimm 1-0-1
|
chip drivers/generic/generic #dimm 1-0-1
|
||||||
device i2c 55 on end
|
device i2c 55 on end
|
||||||
end
|
end
|
||||||
chip drivers/generic/generic link 4 #dimm 1-1-0
|
chip drivers/generic/generic #dimm 1-1-0
|
||||||
device i2c 56 on end
|
device i2c 56 on end
|
||||||
end
|
end
|
||||||
chip drivers/generic/generic link 4 #dimm 1-1-1
|
chip drivers/generic/generic #dimm 1-1-1
|
||||||
device i2c 57 on end
|
device i2c 57 on end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -108,7 +108,7 @@ class debug_info:
|
||||||
print str
|
print str
|
||||||
|
|
||||||
global debug
|
global debug
|
||||||
debug = debug_info(debug_info.none)
|
debug = debug_info(debug_info.dumptree)
|
||||||
|
|
||||||
# -----------------------------------------------------------------------------
|
# -----------------------------------------------------------------------------
|
||||||
# Error Handling
|
# Error Handling
|
||||||
|
@ -571,7 +571,7 @@ class option_value:
|
||||||
|
|
||||||
class partobj:
|
class partobj:
|
||||||
"""A configuration part"""
|
"""A configuration part"""
|
||||||
def __init__ (self, image, dir, parent, part, type_name, instance_name, link, chip_or_device):
|
def __init__ (self, image, dir, parent, part, type_name, instance_name, chip_or_device):
|
||||||
debug.info(debug.object, "partobj dir %s parent %s part %s" \
|
debug.info(debug.object, "partobj dir %s parent %s part %s" \
|
||||||
% (dir, parent, part))
|
% (dir, parent, part))
|
||||||
|
|
||||||
|
@ -580,7 +580,9 @@ class partobj:
|
||||||
|
|
||||||
# links for static device tree
|
# links for static device tree
|
||||||
self.children = 0
|
self.children = 0
|
||||||
self.siblings = 0
|
self.prev_sibling = 0
|
||||||
|
self.next_sibling = 0
|
||||||
|
self.prev_device = 0
|
||||||
self.next_device = 0
|
self.next_device = 0
|
||||||
self.chip_or_device = chip_or_device
|
self.chip_or_device = chip_or_device
|
||||||
|
|
||||||
|
@ -627,10 +629,8 @@ class partobj:
|
||||||
# Enabled state of the device
|
# Enabled state of the device
|
||||||
self.enabled = 1
|
self.enabled = 1
|
||||||
|
|
||||||
# Link from parent device
|
# Flag if I am a dumplicate device
|
||||||
if ((link < 0) or (link > 16)):
|
self.dup = 0
|
||||||
fatal("Invalid link")
|
|
||||||
self.link = link
|
|
||||||
|
|
||||||
# If no instance name is supplied then generate
|
# If no instance name is supplied then generate
|
||||||
# a unique name
|
# a unique name
|
||||||
|
@ -647,6 +647,7 @@ class partobj:
|
||||||
if (self.chip_or_device == 'device'):
|
if (self.chip_or_device == 'device'):
|
||||||
if (image.last_device):
|
if (image.last_device):
|
||||||
image.last_device.next_device = self
|
image.last_device.next_device = self
|
||||||
|
self.prev_device = image.last_device
|
||||||
image.last_device = self
|
image.last_device = self
|
||||||
|
|
||||||
# Link this part into the tree
|
# Link this part into the tree
|
||||||
|
@ -658,31 +659,43 @@ class partobj:
|
||||||
if (parent.children):
|
if (parent.children):
|
||||||
debug.info(debug.gencode, "add %s (%d) as sibling" % (parent.children.dir, parent.children.instance))
|
debug.info(debug.gencode, "add %s (%d) as sibling" % (parent.children.dir, parent.children.instance))
|
||||||
youngest = parent.children
|
youngest = parent.children
|
||||||
while(youngest.siblings):
|
while(youngest.next_sibling):
|
||||||
youngest = youngest.siblings
|
youngest = youngest.next_sibling
|
||||||
youngest.siblings = self
|
youngest.next_sibling = self
|
||||||
|
self.prev_sibling = youngest
|
||||||
else:
|
else:
|
||||||
parent.children = self
|
parent.children = self
|
||||||
else:
|
else:
|
||||||
self.parent = self
|
self.parent = self
|
||||||
|
|
||||||
|
|
||||||
def info(self):
|
def info(self):
|
||||||
return "%s: %s" % (self.part, self.type)
|
return "%s: %s" % (self.part, self.type)
|
||||||
def type(self):
|
def type(self):
|
||||||
return self.chip_or_device
|
return self.chip_or_device
|
||||||
|
|
||||||
|
def readable_name(self):
|
||||||
|
name = ""
|
||||||
|
name = "%s_%d" % (self.type_name, self.instance)
|
||||||
|
if (self.chip_or_device == 'chip'):
|
||||||
|
name = "%s %s %s" % (name, self.part, self.dir)
|
||||||
|
else:
|
||||||
|
name = "%s %s" % (name, self.path)
|
||||||
|
return name
|
||||||
|
|
||||||
def dumpme(self, lvl):
|
def dumpme(self, lvl):
|
||||||
"""Dump information about this part for debugging"""
|
"""Dump information about this part for debugging"""
|
||||||
|
print "%d: %s" % (lvl, self.readable_name())
|
||||||
print "%d: part %s" % (lvl, self.part)
|
print "%d: part %s" % (lvl, self.part)
|
||||||
print "%d: instance %d" % (lvl, self.instance)
|
print "%d: instance %d" % (lvl, self.instance)
|
||||||
|
print "%d: chip_or_device %s" % (lvl, self.chip_or_device)
|
||||||
print "%d: dir %s" % (lvl,self.dir)
|
print "%d: dir %s" % (lvl,self.dir)
|
||||||
print "%d: type_name %s" % (lvl,self.type_name)
|
print "%d: type_name %s" % (lvl,self.type_name)
|
||||||
print "%d: parent %s" % (lvl,self.parent.part)
|
print "%d: parent: %s" % (lvl, self.parent.readable_name())
|
||||||
print "%d: parent dir %s" % (lvl,self.parent.dir)
|
|
||||||
if (self.children):
|
if (self.children):
|
||||||
print "%d: child %s" % (lvl, self.children.dir)
|
print "%d: child %s" % (lvl, self.children.readable_name())
|
||||||
if (self.siblings):
|
if (self.next_sibling):
|
||||||
print "%d: siblings %s" % (lvl, self.siblings.dir)
|
print "%d: siblings %s" % (lvl, self.next_sibling.readable_name())
|
||||||
print "%d: initcode " % lvl
|
print "%d: initcode " % lvl
|
||||||
for i in self.initcode:
|
for i in self.initcode:
|
||||||
print "\t%s" % i
|
print "\t%s" % i
|
||||||
|
@ -704,12 +717,15 @@ class partobj:
|
||||||
def firstparentdevice(self):
|
def firstparentdevice(self):
|
||||||
"""Find the first device in the parent link."""
|
"""Find the first device in the parent link."""
|
||||||
parent = self.parent
|
parent = self.parent
|
||||||
while (parent):
|
while (parent and (parent.parent != parent) and (parent.chip_or_device != 'device')):
|
||||||
if ((parent.parent == parent) or (parent.chip_or_device == 'device')):
|
parent = parent.parent
|
||||||
return parent
|
if ((parent.parent != parent) and (parent.chip_or_device != 'device')):
|
||||||
else:
|
parent = 0
|
||||||
parent = parent.parent
|
while(parent and (parent.dup == 1)):
|
||||||
fatal("Device %s has no device parent; this is a config file error" % self.type_name)
|
parent = parent.prev_sibling
|
||||||
|
if (not parent):
|
||||||
|
fatal("Device %s has no device parent; this is a config file error" % self.readable_name())
|
||||||
|
return parent
|
||||||
|
|
||||||
def firstparentchip(self):
|
def firstparentchip(self):
|
||||||
"""Find the first chip in the parent link."""
|
"""Find the first chip in the parent link."""
|
||||||
|
@ -719,13 +735,15 @@ class partobj:
|
||||||
return parent
|
return parent
|
||||||
else:
|
else:
|
||||||
parent = parent.parent
|
parent = parent.parent
|
||||||
fatal("Device %s has no chip parent; this is a config file error" % self.type_name)
|
fatal("Device %s has no chip parent; this is a config file error" % self.readable_name())
|
||||||
|
|
||||||
def firstsiblingdevice(self):
|
def firstsiblingdevice(self):
|
||||||
"""Find the first device in the sibling link."""
|
"""Find the first device in the sibling link."""
|
||||||
sibling = self.siblings
|
sibling = self.next_sibling
|
||||||
|
while(sibling and (sibling.path == self.path)):
|
||||||
|
sibling = sibling.next_sibling
|
||||||
if ((not sibling) and (self.parent.chip_or_device == 'chip')):
|
if ((not sibling) and (self.parent.chip_or_device == 'chip')):
|
||||||
sibling = self.parent.siblings
|
sibling = self.parent.next_sibling
|
||||||
while(sibling):
|
while(sibling):
|
||||||
if (sibling.chip_or_device == 'device'):
|
if (sibling.chip_or_device == 'device'):
|
||||||
return sibling
|
return sibling
|
||||||
|
@ -749,53 +767,44 @@ class partobj:
|
||||||
return
|
return
|
||||||
# This is pass the second, which is pass number 1
|
# This is pass the second, which is pass number 1
|
||||||
# this is really just a case statement ...
|
# this is really just a case statement ...
|
||||||
if ((self.instance) and (self.chip_or_device == 'chip') and (self.chipconfig)):
|
|
||||||
debug.info(debug.gencode, "gencode: chipconfig(%d)" % \
|
if (self.chip_or_device == 'chip'):
|
||||||
|
if (self.chipconfig):
|
||||||
|
debug.info(debug.gencode, "gencode: chipconfig(%d)" % \
|
||||||
self.instance)
|
self.instance)
|
||||||
file.write("struct %s_config %s" % (self.type_name ,\
|
file.write("struct %s_config %s" % (self.type_name ,\
|
||||||
self.chipinfo_name))
|
self.chipinfo_name))
|
||||||
if (self.registercode):
|
if (self.registercode):
|
||||||
file.write("\t= {\n")
|
file.write("\t= {\n")
|
||||||
for f, v in self.registercode.items():
|
for f, v in self.registercode.items():
|
||||||
file.write( "\t.%s = %s,\n" % (f, v))
|
file.write( "\t.%s = %s,\n" % (f, v))
|
||||||
|
file.write("};\n")
|
||||||
|
else:
|
||||||
|
file.write(";")
|
||||||
|
file.write("\n")
|
||||||
|
|
||||||
|
if (self.instance == 0):
|
||||||
|
self.instance_name = "dev_root"
|
||||||
|
file.write("struct device **last_dev_p = &%s.next;\n" % (self.image.last_device.instance_name))
|
||||||
|
file.write("struct device dev_root = {\n")
|
||||||
|
file.write("\t.ops = &default_dev_ops_root,\n")
|
||||||
|
file.write("\t.bus = &dev_root.link[0],\n")
|
||||||
|
file.write("\t.path = { .type = DEVICE_PATH_ROOT },\n")
|
||||||
|
file.write("\t.enabled = 1,\n\t.links = 1,\n")
|
||||||
|
file.write("\t.link = {\n\t\t[0] = {\n")
|
||||||
|
file.write("\t\t\t.dev=&dev_root,\n\t\t\t.link = 0,\n")
|
||||||
|
file.write("\t\t\t.children = &%s,\n" % self.firstchilddevice().instance_name)
|
||||||
|
file.write("\t\t},\n")
|
||||||
|
file.write("\t},\n")
|
||||||
|
if (self.chipconfig):
|
||||||
|
file.write("\t.chip_ops = &%s_ops,\n" % self.type_name)
|
||||||
|
file.write("\t.chip_info = &%s_info_%s,\n" % (self.type_name, self.instance))
|
||||||
|
file.write("\t.next = &%s,\n" % self.firstchilddevice().instance_name)
|
||||||
file.write("};\n")
|
file.write("};\n")
|
||||||
else:
|
|
||||||
file.write(";")
|
|
||||||
file.write("\n")
|
|
||||||
return
|
return
|
||||||
|
|
||||||
if (self.chipconfig):
|
# Don't print duplicate devices, just print their children
|
||||||
debug.info(debug.gencode, "gencode: chipconfig(%d)" % \
|
if (self.dup):
|
||||||
self.instance)
|
|
||||||
file.write("struct %s_config %s" % (self.type_name ,\
|
|
||||||
self.chipinfo_name))
|
|
||||||
if (self.registercode):
|
|
||||||
file.write("\t= {\n")
|
|
||||||
for f, v in self.registercode.items():
|
|
||||||
file.write( "\t.%s = %s,\n" % (f, v))
|
|
||||||
file.write("};\n")
|
|
||||||
else:
|
|
||||||
file.write(";")
|
|
||||||
file.write("\n")
|
|
||||||
|
|
||||||
if (self.instance == 0):
|
|
||||||
self.instance_name = "dev_root"
|
|
||||||
file.write("struct device **last_dev_p = &%s.next;\n" % (self.image.last_device.instance_name))
|
|
||||||
file.write("struct device dev_root = {\n")
|
|
||||||
file.write("\t.ops = &default_dev_ops_root,\n")
|
|
||||||
file.write("\t.bus = &dev_root.link[0],\n")
|
|
||||||
file.write("\t.path = { .type = DEVICE_PATH_ROOT },\n")
|
|
||||||
file.write("\t.enabled = 1,\n\t.links = 1,\n")
|
|
||||||
file.write("\t.link = {\n\t\t[0] = {\n")
|
|
||||||
file.write("\t\t\t.dev=&dev_root,\n\t\t\t.link = 0,\n")
|
|
||||||
file.write("\t\t\t.children = &%s,\n" % self.firstchilddevice().instance_name)
|
|
||||||
file.write("\t\t},\n")
|
|
||||||
file.write("\t},\n")
|
|
||||||
if (self.chipconfig):
|
|
||||||
file.write("\t.chip_ops = &%s_ops,\n" % self.type_name)
|
|
||||||
file.write("\t.chip_info = &%s_info_%s,\n" % (self.type_name, self.instance))
|
|
||||||
file.write("\t.next = &%s,\n" % self.firstchilddevice().instance_name)
|
|
||||||
file.write("};\n")
|
|
||||||
return
|
return
|
||||||
|
|
||||||
file.write("struct device %s = {\n" % self.instance_name)
|
file.write("struct device %s = {\n" % self.instance_name)
|
||||||
|
@ -806,13 +815,25 @@ class partobj:
|
||||||
if (self.resources):
|
if (self.resources):
|
||||||
file.write("\t.resources = %d,\n" % self.resources)
|
file.write("\t.resources = %d,\n" % self.resources)
|
||||||
file.write("\t.resource = {%s\n\t },\n" % self.resource)
|
file.write("\t.resource = {%s\n\t },\n" % self.resource)
|
||||||
file.write("\t.links = 1,\n")
|
file.write("\t.link = {\n");
|
||||||
file.write("\t.link = {\n\t\t[0] = {\n")
|
links = 0
|
||||||
file.write("\t\t\t.dev=&%s,\n\t\t\t.link = 0,\n" % self.instance_name)
|
bus = self
|
||||||
if (self.firstchilddevice()):
|
while(bus and (bus.path == self.path)):
|
||||||
file.write("\t\t\t.children = &%s,\n" % self.firstchilddevice().instance_name)
|
child = bus.firstchilddevice()
|
||||||
file.write("\t\t},\n")
|
if (child or (bus != self) or (bus.next_sibling and (bus.next_sibling.path == self.path))):
|
||||||
|
file.write("\t\t[%d] = {\n" % links)
|
||||||
|
file.write("\t\t\t.link = %d,\n" % links)
|
||||||
|
file.write("\t\t\t.dev = &%s,\n" % self.instance_name)
|
||||||
|
if (child):
|
||||||
|
file.write("\t\t\t.children = &%s,\n" %child.instance_name)
|
||||||
|
file.write("\t\t},\n")
|
||||||
|
links = links + 1
|
||||||
|
if (1):
|
||||||
|
bus = bus.next_sibling
|
||||||
|
else:
|
||||||
|
bus = 0
|
||||||
file.write("\t},\n")
|
file.write("\t},\n")
|
||||||
|
file.write("\t.links = %d,\n" % (links))
|
||||||
sibling = self.firstsiblingdevice();
|
sibling = self.firstsiblingdevice();
|
||||||
if (sibling):
|
if (sibling):
|
||||||
file.write("\t.sibling = &%s,\n" % sibling.instance_name)
|
file.write("\t.sibling = &%s,\n" % sibling.instance_name)
|
||||||
|
@ -825,40 +846,6 @@ class partobj:
|
||||||
file.write("};\n")
|
file.write("};\n")
|
||||||
return
|
return
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
file.write("\t/* %s %s */\n" % (self.part, self.dir))
|
|
||||||
file.write("\t.link = %d,\n" % (self.link))
|
|
||||||
# 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("\t.next = &%s,\n" \
|
|
||||||
% self.siblings.instance_name)
|
|
||||||
else:
|
|
||||||
file.write("\t.next = 0,\n")
|
|
||||||
if (self.children):
|
|
||||||
debug.info(debug.gencode, "gencode: children(%d)" \
|
|
||||||
% self.children.instance)
|
|
||||||
file.write("\t.children = &%s,\n" \
|
|
||||||
% self.children.instance_name)
|
|
||||||
else:
|
|
||||||
file.write("\t.children = 0,\n")
|
|
||||||
if (self.chipconfig):
|
|
||||||
# set the pointer to the structure for all this
|
|
||||||
# type of part
|
|
||||||
file.write("\t.control= &%s_control,\n" % \
|
|
||||||
self.type_name )
|
|
||||||
# generate the pointer to the isntance
|
|
||||||
# of the chip struct
|
|
||||||
file.write("\t.chip_info = (void *) &%s,\n" \
|
|
||||||
% self.chipinfo_name)
|
|
||||||
else:
|
|
||||||
file.write("\t.control= 0,\n")
|
|
||||||
file.write("\t.chip_info= 0,\n")
|
|
||||||
file.write("};\n")
|
|
||||||
|
|
||||||
def addinit(self, code):
|
def addinit(self, code):
|
||||||
"""Add init file to this part"""
|
"""Add init file to this part"""
|
||||||
self.initcode.append(code)
|
self.initcode.append(code)
|
||||||
|
@ -870,6 +857,8 @@ class partobj:
|
||||||
|
|
||||||
def addregister(self, field, value):
|
def addregister(self, field, value):
|
||||||
"""Register static initialization information"""
|
"""Register static initialization information"""
|
||||||
|
if (self.chip_or_device != 'chip'):
|
||||||
|
fatal("Only chips can have register values")
|
||||||
field = dequote(field)
|
field = dequote(field)
|
||||||
value = dequote(value)
|
value = dequote(value)
|
||||||
setdict(self.registercode, field, value)
|
setdict(self.registercode, field, value)
|
||||||
|
@ -889,13 +878,26 @@ class partobj:
|
||||||
self.resource = "%s\n\t\t{ .flags=%s, .index=0x%x, .base=0x%x}," % (self.resource, type, index, value)
|
self.resource = "%s\n\t\t{ .flags=%s, .index=0x%x, .base=0x%x}," % (self.resource, type, index, value)
|
||||||
self.resources = self.resources + 1
|
self.resources = self.resources + 1
|
||||||
|
|
||||||
|
def set_path(self, path):
|
||||||
|
self.path = path
|
||||||
|
if (self.prev_sibling and (self.prev_sibling.path == self.path)):
|
||||||
|
self.dup = 1
|
||||||
|
if (self.prev_device):
|
||||||
|
self.prev_device.next_device = self.next_device
|
||||||
|
if (self.next_device):
|
||||||
|
self.next_device.prev_device = self.prev_device
|
||||||
|
if (self.image.last_device == self):
|
||||||
|
self.image.last_device = self.prev_device
|
||||||
|
self.prev_device = 0
|
||||||
|
self.next_device = 0
|
||||||
|
|
||||||
def addpcipath(self, slot, function):
|
def addpcipath(self, slot, function):
|
||||||
""" Add a relative pci style path from our parent to this device """
|
""" Add a relative pci style path from our parent to this device """
|
||||||
if ((slot < 0) or (slot > 0x1f)):
|
if ((slot < 0) or (slot > 0x1f)):
|
||||||
fatal("Invalid device id")
|
fatal("Invalid device id")
|
||||||
if ((function < 0) or (function > 7)):
|
if ((function < 0) or (function > 7)):
|
||||||
fatal("Invalid function")
|
fatal("Invalid function")
|
||||||
self.path = ".type=DEVICE_PATH_PCI,.u={.pci={ .devfn = PCI_DEVFN(0x%x,%d)}}" % (slot, function)
|
self.set_path(".type=DEVICE_PATH_PCI,.u={.pci={ .devfn = PCI_DEVFN(0x%x,%d)}}" % (slot, function))
|
||||||
|
|
||||||
def addpnppath(self, port, device):
|
def addpnppath(self, port, device):
|
||||||
""" Add a relative path to a pnp device hanging off our parent """
|
""" Add a relative path to a pnp device hanging off our parent """
|
||||||
|
@ -903,31 +905,31 @@ class partobj:
|
||||||
fatal("Invalid port")
|
fatal("Invalid port")
|
||||||
if ((device < 0) or (device > 0xff)):
|
if ((device < 0) or (device > 0xff)):
|
||||||
fatal("Invalid device")
|
fatal("Invalid device")
|
||||||
self.path = ".type=DEVICE_PATH_PNP,.u={.pnp={ .port = 0x%x, .device = 0x%x }}" % (port, device)
|
self.set_path(".type=DEVICE_PATH_PNP,.u={.pnp={ .port = 0x%x, .device = 0x%x }}" % (port, device))
|
||||||
|
|
||||||
def addi2cpath(self, device):
|
def addi2cpath(self, 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 = ".type=DEVICE_PATH_I2C,.u={.i2c={ .device = 0x%x }}" % (device)
|
self.set_path(".type=DEVICE_PATH_I2C,.u={.i2c={ .device = 0x%x }}" % (device))
|
||||||
|
|
||||||
def addapicpath(self, apic_id):
|
def addapicpath(self, apic_id):
|
||||||
""" Add a relative path to a cpu device hanging off our parent """
|
""" Add a relative path to a cpu device hanging off our parent """
|
||||||
if ((apic_id < 0) or (apic_id > 255)):
|
if ((apic_id < 0) or (apic_id > 255)):
|
||||||
fatal("Invalid device")
|
fatal("Invalid device")
|
||||||
self.path = ".type=DEVICE_PATH_APIC,.u={.apic={ .apic_id = 0x%x }}" % (apic_id)
|
self.set_path(".type=DEVICE_PATH_APIC,.u={.apic={ .apic_id = 0x%x }}" % (apic_id))
|
||||||
|
|
||||||
def addpci_domainpath(self, pci_domain):
|
def addpci_domainpath(self, pci_domain):
|
||||||
""" Add a pci_domain number to a chip """
|
""" Add a pci_domain number to a chip """
|
||||||
if ((pci_domain < 0) or (pci_domain > 0xffff)):
|
if ((pci_domain < 0) or (pci_domain > 0xffff)):
|
||||||
fatal("Invalid pci_domain: 0x%x is out of the range 0 to 0xffff" % pci_domain)
|
fatal("Invalid pci_domain: 0x%x is out of the range 0 to 0xffff" % pci_domain)
|
||||||
self.path = ".type=DEVICE_PATH_PCI_DOMAIN,.u={.pci_domain={ .domain = 0x%x }}" % (pci_domain)
|
self.set_path(".type=DEVICE_PATH_PCI_DOMAIN,.u={.pci_domain={ .domain = 0x%x }}" % (pci_domain))
|
||||||
|
|
||||||
def addapic_clusterpath(self, cluster):
|
def addapic_clusterpath(self, cluster):
|
||||||
""" Add a pci_domain number to a chip """
|
""" Add a pci_domain number to a chip """
|
||||||
if ((cluster < 0) or (cluster > 15)):
|
if ((cluster < 0) or (cluster > 15)):
|
||||||
fatal("Invalid apic cluster: %d is out of the range 0 to ff" % cluster)
|
fatal("Invalid apic cluster: %d is out of the range 0 to ff" % cluster)
|
||||||
self.path = ".type=DEVICE_PATH_APIC_CLUSTER,.u={.apic_cluster={ .cluster = 0x%x }}" % (cluster)
|
self.set_path(".type=DEVICE_PATH_APIC_CLUSTER,.u={.apic_cluster={ .cluster = 0x%x }}" % (cluster))
|
||||||
|
|
||||||
def usesoption(self, name):
|
def usesoption(self, name):
|
||||||
"""Declare option that can be used by this part"""
|
"""Declare option that can be used by this part"""
|
||||||
|
@ -1302,7 +1304,7 @@ def mainboard():
|
||||||
fulldir = os.path.join(srcdir, partdir)
|
fulldir = os.path.join(srcdir, partdir)
|
||||||
type_name = flatten_name(partdir)
|
type_name = flatten_name(partdir)
|
||||||
newpart = partobj(curimage, fulldir, partstack.tos(), 'mainboard', \
|
newpart = partobj(curimage, fulldir, partstack.tos(), 'mainboard', \
|
||||||
type_name, 0, 0, 'chip')
|
type_name, 0, 'chip')
|
||||||
#print "Configuring PART %s" % (type)
|
#print "Configuring PART %s" % (type)
|
||||||
partstack.push(newpart)
|
partstack.push(newpart)
|
||||||
#print " new PART tos is now %s\n" %partstack.tos().info()
|
#print " new PART tos is now %s\n" %partstack.tos().info()
|
||||||
|
@ -1356,21 +1358,21 @@ def cpudir(path):
|
||||||
def devicepart(type):
|
def devicepart(type):
|
||||||
global curimage, dirstack, partstack
|
global curimage, dirstack, partstack
|
||||||
newpart = partobj(curimage, 0, partstack.tos(), type, \
|
newpart = partobj(curimage, 0, partstack.tos(), type, \
|
||||||
'', 0, 0, 'device')
|
'', 0, 'device')
|
||||||
#print "Configuring PART %s" % (type)
|
#print "Configuring PART %s" % (type)
|
||||||
partstack.push(newpart)
|
partstack.push(newpart)
|
||||||
#print " new PART tos is now %s\n" %partstack.tos().info()
|
#print " new PART tos is now %s\n" %partstack.tos().info()
|
||||||
# just push TOS, so that we can pop later.
|
# just push TOS, so that we can pop later.
|
||||||
dirstack.push(dirstack.tos())
|
dirstack.push(dirstack.tos())
|
||||||
|
|
||||||
def part(type, path, file, name, link):
|
def part(type, path, file, name):
|
||||||
global curimage, dirstack, partstack
|
global curimage, dirstack, partstack
|
||||||
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(partdir)
|
type_name = flatten_name(partdir)
|
||||||
newpart = partobj(curimage, fulldir, partstack.tos(), type, \
|
newpart = partobj(curimage, fulldir, partstack.tos(), type, \
|
||||||
type_name, name, link, 'chip')
|
type_name, name, 'chip')
|
||||||
#print "Configuring PART %s, path %s" % (type, path)
|
#print "Configuring PART %s, path %s" % (type, path)
|
||||||
partstack.push(newpart)
|
partstack.push(newpart)
|
||||||
#print " new PART tos is now %s\n" %partstack.tos().info()
|
#print " new PART tos is now %s\n" %partstack.tos().info()
|
||||||
|
@ -1441,7 +1443,7 @@ def setarch(my_arch):
|
||||||
print "SETTING ARCH %s\n" % my_arch
|
print "SETTING ARCH %s\n" % my_arch
|
||||||
curimage.setarch(my_arch)
|
curimage.setarch(my_arch)
|
||||||
setdefault('ARCH', my_arch, 1)
|
setdefault('ARCH', my_arch, 1)
|
||||||
part('arch', my_arch, 'Config.lb', 0, 0)
|
part('arch', my_arch, 'Config.lb', 0)
|
||||||
|
|
||||||
def doconfigfile(path, confdir, file, rule):
|
def doconfigfile(path, confdir, file, rule):
|
||||||
rname = os.path.join(confdir, file)
|
rname = os.path.join(confdir, file)
|
||||||
|
@ -1583,7 +1585,6 @@ parser Config:
|
||||||
token APIC: 'apic'
|
token APIC: 'apic'
|
||||||
token APIC_CLUSTER: 'apic_cluster'
|
token APIC_CLUSTER: 'apic_cluster'
|
||||||
token PCI_DOMAIN: 'pci_domain'
|
token PCI_DOMAIN: 'pci_domain'
|
||||||
token LINK: 'link'
|
|
||||||
|
|
||||||
|
|
||||||
rule expr: logical {{ l = logical }}
|
rule expr: logical {{ l = logical }}
|
||||||
|
@ -1621,18 +1622,19 @@ parser Config:
|
||||||
rule partid: ID {{ return ID }}
|
rule partid: ID {{ return ID }}
|
||||||
| PATH {{ return PATH }}
|
| PATH {{ return PATH }}
|
||||||
|
|
||||||
rule parttype: NORTHBRIDGE {{ return 'northbridge' }}
|
# rule parttype: NORTHBRIDGE {{ return 'northbridge' }}
|
||||||
| SUPERIO {{ return 'superio' }}
|
# | SUPERIO {{ return 'superio' }}
|
||||||
| PMC {{ return 'pmc' }}
|
# | PMC {{ return 'pmc' }}
|
||||||
| SOUTHBRIDGE {{ return 'southbridge' }}
|
# | SOUTHBRIDGE {{ return 'southbridge' }}
|
||||||
| CPU {{ return 'cpu' }}
|
# | CPU {{ return 'cpu' }}
|
||||||
| CHIP {{ return '' }}
|
# | CHIP {{ return '' }}
|
||||||
|
#
|
||||||
|
rule parttype: CHIP {{ return '' }}
|
||||||
|
|
||||||
rule partdef<<C>>: {{ name = 0 }} {{ link = 0 }}
|
rule partdef<<C>>: {{ name = 0 }}
|
||||||
parttype partid {{ if (parttype == 'cpu'): link = 1 }}
|
parttype partid
|
||||||
[ STR {{ name = dequote(STR) }}
|
[ STR {{ name = dequote(STR) }}
|
||||||
][ LINK NUM {{ link = long(NUM, 10) }}
|
] {{ if (C): part(parttype, partid, 'Config.lb', name) }}
|
||||||
] {{ if (C): part(parttype, partid, 'Config.lb', name, link) }}
|
|
||||||
partend<<C>>
|
partend<<C>>
|
||||||
|
|
||||||
rule arch<<C>>: ARCH ID {{ if (C): setarch(ID) }}
|
rule arch<<C>>: ARCH ID {{ if (C): setarch(ID) }}
|
||||||
|
@ -2166,15 +2168,20 @@ def dumptree(part, lvl):
|
||||||
# dump the siblings -- actually are there any? not sure
|
# dump the siblings -- actually are there any? not sure
|
||||||
# siblings are:
|
# siblings are:
|
||||||
debug.info(debug.dumptree, "DUMPTREE SIBLINGS are")
|
debug.info(debug.dumptree, "DUMPTREE SIBLINGS are")
|
||||||
kid = part.siblings
|
kid = part.next_sibling
|
||||||
while (kid):
|
while (kid):
|
||||||
kid.dumpme(lvl)
|
kid.dumpme(lvl)
|
||||||
kid = kid.siblings
|
kid = kid.next_sibling
|
||||||
# dump the kids
|
# dump the kids
|
||||||
debug.info(debug.dumptree, "DUMPTREE KIDS are")
|
debug.info(debug.dumptree, "DUMPTREE KIDS are")
|
||||||
#for kid in part.children:
|
#for kid in part.children:
|
||||||
if (part.children):
|
if (part.children):
|
||||||
dumptree(part.children, lvl+1)
|
dumptree(part.children, lvl+1)
|
||||||
|
kid = part.next_sibling
|
||||||
|
while (kid):
|
||||||
|
if (kid.children):
|
||||||
|
dumptree(kid.children, lvl + 1)
|
||||||
|
kid = kid.next_sibling
|
||||||
debug.info(debug.dumptree, "DONE DUMPTREE")
|
debug.info(debug.dumptree, "DONE DUMPTREE")
|
||||||
|
|
||||||
def writecode(image):
|
def writecode(image):
|
||||||
|
@ -2194,19 +2201,19 @@ def gencode(part, file, pass_num):
|
||||||
part.gencode(file, pass_num)
|
part.gencode(file, pass_num)
|
||||||
# dump the siblings -- actually are there any? not sure
|
# dump the siblings -- actually are there any? not sure
|
||||||
debug.info(debug.gencode, "GENCODE SIBLINGS are")
|
debug.info(debug.gencode, "GENCODE SIBLINGS are")
|
||||||
kid = part.siblings
|
kid = part.next_sibling
|
||||||
while (kid):
|
while (kid):
|
||||||
kid.gencode(file, pass_num)
|
kid.gencode(file, pass_num)
|
||||||
kid = kid.siblings
|
kid = kid.next_sibling
|
||||||
# now dump the children
|
# now dump the children
|
||||||
debug.info(debug.gencode, "GENCODE KIDS are")
|
debug.info(debug.gencode, "GENCODE KIDS are")
|
||||||
if (part.children):
|
if (part.children):
|
||||||
gencode(part.children, file, pass_num)
|
gencode(part.children, file, pass_num)
|
||||||
kid = part.siblings
|
kid = part.next_sibling
|
||||||
while (kid):
|
while (kid):
|
||||||
if (kid.children):
|
if (kid.children):
|
||||||
gencode(kid.children, file, pass_num)
|
gencode(kid.children, file, pass_num)
|
||||||
kid = kid.siblings
|
kid = kid.next_sibling
|
||||||
debug.info(debug.gencode, "DONE GENCODE")
|
debug.info(debug.gencode, "DONE GENCODE")
|
||||||
|
|
||||||
def verifyparse():
|
def verifyparse():
|
||||||
|
|
Loading…
Reference in New Issue