diff --git a/arch/sparc32/tree.fs b/arch/sparc32/tree.fs index debc7da..40ae84f 100644 --- a/arch/sparc32/tree.fs +++ b/arch/sparc32/tree.fs @@ -117,13 +117,6 @@ new-device h# 26 encode-int 0 encode-int encode+ " intr" property finish-device -" /iommu/sbus" find-device -new-device - " power-management" device-name - h# 5 encode-int h# 0a000000 encode-int encode+ h# 00000010 encode-int encode+ " reg" property -finish-device - - \ obio (on-board IO) " /" find-device new-device diff --git a/drivers/sbus.c b/drivers/sbus.c index 904b53c..ce9f5b1 100644 --- a/drivers/sbus.c +++ b/drivers/sbus.c @@ -20,6 +20,8 @@ #define SBUS_REGS 0x28 #define SBUS_SLOTS 16 +#define POWER_REGS 0x10 +#define POWER_OFFSET 0x0a000000 static void ob_sbus_node_init(unsigned long bus, unsigned long base) @@ -270,6 +272,30 @@ ob_tcx_init(unsigned int slot, unsigned long base) } } +static void +ob_power_init(unsigned int slot, unsigned long base) +{ + push_str("/iommu/sbus"); + fword("find-device"); + fword("new-device"); + + push_str("power-management"); + fword("device-name"); + + PUSH(slot); + fword("encode-int"); + PUSH(base); + fword("encode-int"); + fword("encode+"); + PUSH(POWER_REGS); + fword("encode-int"); + fword("encode+"); + push_str("reg"); + fword("property"); + + fword("finish-device"); +} + static void ob_macio_init(unsigned int slot, unsigned long base, unsigned long offset) { @@ -289,7 +315,7 @@ ob_macio_init(unsigned int slot, unsigned long base, unsigned long offset) //ob_bpp_init(base); // Power management - //ob_power_init(base); + ob_power_init(slot, POWER_OFFSET); } static void