Author: blueswirl Date: 2007-07-20 13:23:30 +0200 (Fri, 20 Jul 2007) New Revision: 166
Modified: openbios-devel/arch/sparc32/init.fs openbios-devel/arch/sparc32/romvec.c openbios-devel/drivers/iommu.c openbios-devel/drivers/obio.c Log: Fix mapping of a single byte area, fix reset and poweroff
Modified: openbios-devel/arch/sparc32/init.fs =================================================================== --- openbios-devel/arch/sparc32/init.fs 2007-07-11 19:48:31 UTC (rev 165) +++ openbios-devel/arch/sparc32/init.fs 2007-07-20 11:23:30 UTC (rev 166) @@ -52,12 +52,6 @@
device-end
-: sparc32-reset-all - h# 71f00000 1 iow! - ; - -' sparc32-reset-all to reset-all - : rmap@ ( virt -- rmentry ) drop 0 ;
Modified: openbios-devel/arch/sparc32/romvec.c =================================================================== --- openbios-devel/arch/sparc32/romvec.c 2007-07-11 19:48:31 UTC (rev 165) +++ openbios-devel/arch/sparc32/romvec.c 2007-07-20 11:23:30 UTC (rev 166) @@ -244,7 +244,7 @@
static void obp_reboot(char *str) { - extern volatile int *reset_reg; + extern volatile unsigned char *reset_reg;
printk("rebooting (%s)\n", str); *reset_reg = 1; @@ -254,7 +254,7 @@
static void obp_abort(void) { - extern volatile int *power_reg; + extern volatile unsigned char *power_reg;
printk("abort, power off\n"); *power_reg = 1; @@ -264,7 +264,7 @@
static void obp_halt(void) { - extern volatile int *power_reg; + extern volatile unsigned char *power_reg;
printk("halt, power off\n"); *power_reg = 1;
Modified: openbios-devel/drivers/iommu.c =================================================================== --- openbios-devel/drivers/iommu.c 2007-07-11 19:48:31 UTC (rev 165) +++ openbios-devel/drivers/iommu.c 2007-07-20 11:23:30 UTC (rev 166) @@ -195,7 +195,7 @@ unsigned int mva;
off = pa & (PAGE_SIZE - 1); - npages = (off + (size - 1) + (PAGE_SIZE - 1)) / PAGE_SIZE; + npages = (off + size - 1) / PAGE_SIZE + 1; pa &= ~(PAGE_SIZE - 1);
va = mem_alloc(&cio, npages * PAGE_SIZE, PAGE_SIZE);
Modified: openbios-devel/drivers/obio.c =================================================================== --- openbios-devel/drivers/obio.c 2007-07-11 19:48:31 UTC (rev 165) +++ openbios-devel/drivers/obio.c 2007-07-20 11:23:30 UTC (rev 166) @@ -812,9 +812,15 @@ fword("finish-device"); }
-volatile int *power_reg, *reset_reg; +volatile unsigned char *power_reg, *reset_reg;
static void +sparc32_reset_all(void) +{ + *reset_reg = 1; +} + +static void ob_power_init(uint64_t base, uint64_t offset, int intr) { ob_new_obio_device("power", NULL); @@ -824,6 +830,10 @@ // Not in device tree reset_reg = map_io(base + (uint64_t)SLAVIO_RESET, RESET_REGS);
+ bind_func("sparc32-reset-all", sparc32_reset_all); + push_str("' sparc32-reset-all to reset-all"); + fword("eval"); + ob_intr(intr);
fword("finish-device");