[Top] [All Lists]

Re: [P5600 && EVA memory caching question] PCI region

To: unlisted-recipients:; (no To-header on input)
Subject: Re: [P5600 && EVA memory caching question] PCI region
From: Yuri Frolov <>
Date: Thu, 21 Dec 2017 15:40:36 +0300
Dkim-signature: v=1; a=rsa-sha256; c=relaxed/relaxed;; s=20161025; h=subject:from:cc:references:message-id:date:user-agent:mime-version :in-reply-to:content-transfer-encoding:content-language; bh=t+stg/Y7tXjouPoF7541+XyaCF5xWgVhsyq4uxN7AEE=; b=C7y3xHHuaXMp+OihffxrBcmxJIXJnqDg11Wd5ucRoJjFYslEhkbBNLbpda3FloC1gu PMze1ig6cgc79ZowX3RkWM8IAFetFmHUCVCXrx2XUpPOiFca93wwd3DgccADY4mFVyIA EX+ldQRpA1WzbeHrVoVeo/1/78RjGbVSxT/u+yQNjl4lgvHcdZsgALwNWvrRVn9j9tLq 1UcEksS3cuj5sPCX4QgYAMtHnGjYLjIRs7z5ERQdhg2mEDTus+OfoAv1agNm6bXX9NlM gXZtBpJF0Klti2urdOdRjsN66IR0UDJXJXEw4canqO1uy5ecOv+wly6eJ8aGfC//UPrZ +oYg==
In-reply-to: <>
List-archive: <>
List-help: <>
List-id: linux-mips <>
List-owner: <>
List-post: <>
List-software: Ecartis version 1.0.0
List-subscribe: <>
List-unsubscribe: <>
Original-recipient: rfc822;
References: <> <> <> <> <> <> <>
User-agent: Mozilla/5.0 (X11; Linux x86_64; rv:52.0) Gecko/20100101 Thunderbird/52.3.0
> I'm looking at arch/mips/include/asm//mach-malta/kernel-entry-init.h and there is a definition for
> SegCtl2:

        /* SegCtl2 */
        li      t0, ((MIPS_SEGCFG_MUSUK << MIPS_SEGCFG_AM_SHIFT) |      \
                (6 << MIPS_SEGCFG_PA_SHIFT) |                           \
                (1 << MIPS_SEGCFG_EU_SHIFT)) |                          \
                (((MIPS_SEGCFG_MUSUK << MIPS_SEGCFG_AM_SHIFT) |         \
                (4 << MIPS_SEGCFG_PA_SHIFT) |                           \
                (1 << MIPS_SEGCFG_EU_SHIFT)) << 16)

it defines, that kernel logical addresses from the range 0x00000000 - 0x7fffffff are unmapped (no tlbs) and dictates, that in order to get a physical address for any logical addresses from 0x00000000 - 0x3fffffff range in kernel space, bits [31:29] of the logical address must be changed to 100, and (again in kernel space) for any logical addresses from 0x40000000 - 0x7fffffff range, bits [31:29] of the logical address must be changed to 110, right?

What physical addresses will logical addresses 0x00000000 and 0x20000000 be translated in kernel space?.. logical 0x00000000 --> physical 0x80000000, and logical 0x20000000 --> .... 0x80000000 too? Since we must to change bits [31:29], we have to change bit 29 ('1') in logical address 0x200000000 to '0' (since PA for this range is 100).

So, what physical addresses will all logical addresses which have '1' at 29 bit be translated, if we define PA as 100 and 110 in SegCtl2? It looks like there's no flat translation of logical addresses to physical addresses in kernel space, and this is obviously just not correct, there is something simple I've been overlooking.

Thank you,

The only way this scheme can work, is that 'these bits are used' phrase from Table 3.5 CFG (Segment Configuration) Field Description means not 'these bits substitute bits [31:29] in virtual address', but 'these bits are 'OR'-ed with bits [31:29] in virtual address.

<Prev in Thread] Current Thread [Next in Thread>