Re: CXL Boot to Bash - Section 2a (Drivers): CXL Decoder Programming

From: Gregory Price
Date: Wed Apr 02 2025 - 10:21:38 EST


On Wed, Apr 02, 2025 at 06:45:33AM +0000, Zhijian Li (Fujitsu) wrote:
> Hi Gregory,
>
>
> On 07/03/2025 07:56, Gregory Price wrote:
> > What if instead, we had two 256MB endpoints on the same host bridge?
> >
> > ```
> > CEDT
> > Subtable Type : 01 [CXL Fixed Memory Window Structure]
> > Reserved : 00
> > Length : 002C
> > Reserved : 00000000
> > Window base address : 0000000100000000 <- Memory Region
> > Window size : 0000000020000000 <- 512MB
> > Interleave Members (2^n) : 00 <- Not interleaved
> >
> > Memory Map:
> > [mem 0x0000000100000000-0x0000000120000000] usable <- SPA
> >
> > Decoders
> > decoder0.0
> > range=[0x100000000, 0x120000000]
> > |
> > decoder1.0
> > range=[0x100000000, 0x120000000]
> > / \
> > decoded2.0 decoder3.0
> > range=[0x100000000, 0x110000000] range=[0x110000000, 0x120000000]
> > ```
>
> It reminds me that during construct_region(), it requires decoder range in the
> switch/host-bridge is exact same with the endpoint decoder. see
> match_switch_decoder_by_range()
>
> If so, does following decoders make sense?
>
>
> Decoders
> decoder0.0
> range=[0x100000000, 0x120000000]
> |
> +------------+-----------+
> / \
> | Host-bridge contains |
> decoder1.0 2 decoders decoder1.1
> range=[0x100000000, 0x110000000] range=[0x110000000, 0x120000000]
> / \
> decoded2.0 decoder3.0
> range=[0x100000000, 0x110000000] range=[0x110000000, 0x120000000]
>

You are correct, i'll update this.