Revision history   OpenPOWER Library

 9.1.1. Storage Segment Table Search

 When an effective to virtual translation is performed, the PSL first searches for a storage segment in the storage segment table that matches the effective segment ID (ESID) of the effective address being translated. The storage segment table is indexed with p-bits where p is a function of the segment table size (p = 8 + "the number of 1's in SSTP0[SegTableSize] field"). The search procedure is as follows:

  1. Translate the storage segment table pointer (SSTP0 || SSTP1) to a physical address:

    The translated pointer is called the segment table origin (STABORG). To enhance performance, the PSL can keep a cached copy of the STABORG. The lower p-bits of the STABORG are always 0's. If a matching page table entry cannot be found, a page fault is generated and the PSL_DSISR_An[ST] bit is set to a '1'.

    Note: The page table access for translating the segment table pointer is performed as if the PSL_SR[PR] = '0'. Read access to the segment table is always permitted.

  2. Primary Hash:

    1. Primary Hash for a 256 MB Segment Size

      The lower p bits of the STABORG are logically ORed with bits 43-p:35 of the effective address concatenated with '0000000' (STABORG[m-p:m-1] | (EA[43-p:35] || '0000000')); where m is the number of real address bits supported) to form the physical address of a group of eight SSTEs. Each of the eight SSTEs is searched to find a valid entry (V = '1', B = '00') that matches the ESID of the EA being translated (SSTE[ESID] = EA[0:35]). If a match is not found, a primary hash is performed for a 1 TB segment size.

    2. Primary Hash for a 1 TB Segment Size

      The lower p bits of the STABORG are logically ORed with bits 31-p:23 of the effective address concatenated with '0000000' (STABORG[m-p:m-1] | (EA[31-p:23] || '0000000')); where m is the number of real address bits supported) to form the physical address of a group of eight SSTEs. Each of the eight SSTEs is searched to find a valid entry (V = '1', B = '01') that matches the ESID of the EA being translated (SSTE[ESID] = EA[0:23]). If a match is not found, a secondary hash is performed for a 256 MB segment size if enabled (PSL_SR_An[SC] = '0'). If the secondary hash is disabled (PSL_SR_An[SC] = '1'), a segmentation fault is generated and the PSL_DSISR_An[DS] bit is set to a '1'.

  3. Secondary Hash:

    1. Secondary Hash for a 256 MB Segment Size

      The lower 12 bits of the STABORG are logically ORed with the one's complement of bits 43-p:35 of the effective address concatenated with '0000000' (STABORG[m-p:m-1] | (~(EA[43-p:35]) || '0000000')); where m is the number of real address bits supported) to form the physical address of a group of eight SSTEs. Each of the eight SSTEs is searched to find a valid entry (V = '1', B = '00') that matches the ESID of the EA being translated (SSTE[ESID] = EA[0:35]). If a match is not found, a secondary hash is performed for a 1 TB segment size.

    2. Secondary Hash for a 1 TB Segment Size

      The lower 12 bits of the STABORG are logically ORed with the one's complement of bits 31-p:23 of the effective address concatenated with '0000000' (STABORG[m-p:m-1] | (~(EA[31-p:23]) || '0000000')); where m is the number of real address bits supported) to form the physical address of a group of eight SSTEs. Each of the eight SSTEs is searched to find a valid entry (V = '1', B = '01') that matches the ESID of the EA being translated (SSTE[ESID] = EA[0:23]). If a match is not found, a segmentation fault is generated and the PSL_DSISR_An[DS] bit is set to a '1'.


loading table of contents...