patch-2.4.21 linux-2.4.21/arch/ppc64/kernel/iSeries_setup.c
Next file: linux-2.4.21/arch/ppc64/kernel/idle.c
Previous file: linux-2.4.21/arch/ppc64/kernel/iSeries_pci.c
Back to the patch index
Back to the overall index
- Lines: 126
- Date:
2003-06-13 07:51:31.000000000 -0700
- Orig file:
linux-2.4.20/arch/ppc64/kernel/iSeries_setup.c
- Orig date:
2002-11-28 15:53:11.000000000 -0800
diff -urN linux-2.4.20/arch/ppc64/kernel/iSeries_setup.c linux-2.4.21/arch/ppc64/kernel/iSeries_setup.c
@@ -1,6 +1,4 @@
/*
- *
- *
* Copyright (c) 2000 Mike Corrigan <mikejc@us.ibm.com>
* Copyright (c) 1999-2000 Grant Erickson <grant@lcse.umn.edu>
*
@@ -431,7 +429,7 @@
u32 chunkBit;
u64 map;
struct MemoryBlock mb[32];
- unsigned long numMemoryBlocks, curBlock;
+ unsigned long numMemoryBlocks, curBlock, lock_shift;
/* Chunk size on iSeries is 256K bytes */
totalChunks = (u32)HvLpConfig_getMsChunks();
@@ -492,7 +490,15 @@
num_ptegs = hptSizePages * (PAGE_SIZE/(sizeof(HPTE)*HPTES_PER_GROUP));
htab_data.htab_num_ptegs = num_ptegs;
htab_data.htab_hash_mask = num_ptegs - 1;
+ naca->pftSize = __ilog2(num_ptegs << 7);
+ /*
+ * Calculate the number of bits to shift the pteg selector such that we
+ * use the high order 8 bits to select a page table lock.
+ */
+ asm ("cntlzd %0,%1" : "=r" (lock_shift) : "r" (htab_data.htab_hash_mask));
+ htab_data.htab_lock_shift = (64 - lock_shift) - 8;
+
/* The actual hashed page table is in the hypervisor, we have no direct access */
htab_data.htab = NULL;
@@ -550,15 +556,15 @@
* which should be equal to
* nextPhysChunk
*/
- naca->physicalMemorySize = chunk_to_addr(nextPhysChunk);
+ systemcfg->physicalMemorySize = chunk_to_addr(nextPhysChunk);
/* Bolt kernel mappings for all of memory */
- iSeries_bolt_kernel( 0, naca->physicalMemorySize );
+ iSeries_bolt_kernel(0, systemcfg->physicalMemorySize);
lmb_init();
- lmb_add( 0, naca->physicalMemorySize );
+ lmb_add(0, systemcfg->physicalMemorySize);
lmb_analyze(); /* ?? */
- lmb_reserve( 0, __pa(klimit));
+ lmb_reserve(0, __pa(klimit));
/*
* Hardcode to GP size. I am not sure where to get this info. DRENG
@@ -576,26 +582,24 @@
unsigned i,n;
unsigned procIx = get_paca()->xLpPaca.xDynHvPhysicalProcIndex;
- naca->iCacheL1LineSize = xIoHriProcessorVpd[procIx].xInstCacheOperandSize;
- naca->dCacheL1LineSize = xIoHriProcessorVpd[procIx].xDataCacheOperandSize;
- naca->iCacheL1LinesPerPage = PAGE_SIZE / naca->iCacheL1LineSize;
- naca->dCacheL1LinesPerPage = PAGE_SIZE / naca->dCacheL1LineSize;
- i = naca->iCacheL1LineSize;
+ systemcfg->iCacheL1Size = xIoHriProcessorVpd[procIx].xInstCacheSize * 1024;
+ systemcfg->iCacheL1LineSize = xIoHriProcessorVpd[procIx].xInstCacheOperandSize;
+ systemcfg->dCacheL1Size = xIoHriProcessorVpd[procIx].xDataL1CacheSizeKB * 1024;
+ systemcfg->dCacheL1LineSize = xIoHriProcessorVpd[procIx].xDataCacheOperandSize;
+ naca->iCacheL1LinesPerPage = PAGE_SIZE / systemcfg->iCacheL1LineSize;
+ naca->dCacheL1LinesPerPage = PAGE_SIZE / systemcfg->dCacheL1LineSize;
+
+ i = systemcfg->iCacheL1LineSize;
n = 0;
while ((i=(i/2))) ++n;
naca->iCacheL1LogLineSize = n;
- i = naca->dCacheL1LineSize;
+ i = systemcfg->dCacheL1LineSize;
n = 0;
while ((i=(i/2))) ++n;
naca->dCacheL1LogLineSize = n;
- printk( "D-cache line size = %d (log = %d)\n",
- (unsigned)naca->dCacheL1LineSize,
- (unsigned)naca->dCacheL1LogLineSize );
- printk( "I-cache line size = %d (log = %d)\n",
- (unsigned)naca->iCacheL1LineSize,
- (unsigned)naca->iCacheL1LogLineSize );
-
+ printk( "D-cache line size = %d\n", (unsigned)systemcfg->dCacheL1LineSize);
+ printk( "I-cache line size = %d\n", (unsigned)systemcfg->iCacheL1LineSize);
}
/*
@@ -637,6 +641,12 @@
void * eventStack;
unsigned procIx = get_paca()->xLpPaca.xDynHvPhysicalProcIndex;
+ /* Add an eye catcher and the systemcfg layout version number */
+ strcpy(systemcfg->eye_catcher, "SYSTEMCFG:PPC64");
+ systemcfg->version.major = SYSTEMCFG_MAJOR;
+ systemcfg->version.minor = SYSTEMCFG_MINOR;
+
+
/* Setup the Lp Event Queue */
/* Allocate a page for the Event Stack
@@ -685,8 +695,8 @@
printk("Time base frequency = %lu.%02lu\n",
tbFreqMhz,
tbFreqMhzHundreths );
- printk("Processor version = %x\n",
- xIoHriProcessorVpd[procIx].xPVR );
+ systemcfg->processor = xIoHriProcessorVpd[procIx].xPVR;
+ printk("Processor version = %x\n", systemcfg->processor);
}
@@ -715,9 +725,9 @@
seq_printf(m,"time base\t: %lu.%02luMHz\n",
tbFreqMhz, tbFreqMhzHundreths );
seq_printf(m,"i-cache\t\t: %d\n",
- naca->iCacheL1LineSize);
+ systemcfg->iCacheL1LineSize);
seq_printf(m,"d-cache\t\t: %d\n",
- naca->dCacheL1LineSize);
+ systemcfg->dCacheL1LineSize);
}
FUNET's LINUX-ADM group, linux-adm@nic.funet.fi
TCL-scripts by Sam Shen (who was at: slshen@lbl.gov)