[Skiboot] [PATCH v3] phb4: Activate shared PCI slot on witherspoon

Stewart Smith stewart at linux.vnet.ibm.com
Wed Jun 7 20:27:53 AEST 2017


Frederic Barrat <fbarrat at linux.vnet.ibm.com> writes:
> Witherspoon systems come with a 'shared' PCI slot: physically, it
> looks like a x16 slot, but it's actually two x8 slots connected to two
> PHBs of two different chips. Taking advantage of it requires some
> logic on the PCI adapter. Only the Mellanox CX5 adapter is known to
> support it at the time of this writing.
>
> This patch enables support for the shared slot on witherspoon if a x16
> adapter is detected. Each x8 slot has a presence bit, so both bits
> need to be set for the activation to take place. Slot sharing is
> activated through a gpio.
>
> Note that there's no easy way to be sure that the card is indeed a
> shared-slot compatible PCI adapter and not a normal x16 card. Plugging
> a normal x16 adapter on the shared slot should be avoided on
> witherspoon, as the link won't train on the second slot, resulting in
> a timeout and a longer boot time. Only the first slot is usable and
> the x16 adapter will end up using only half the lines.
>
> If the PCI card plugged on the physical slot is only x8 (or less),
> then the presence bit of the second slot is not set, so this patch
> does nothing. The x8 (or less) adapter should work like on any other
> physical slot.
>
> Signed-off-by: Frederic Barrat <fbarrat at linux.vnet.ibm.com>
> ---
> Changelog:
> v3: fix in case there's only one chip left (Mikey)
> v2: address comment from Ben and Mikey
>
>  core/pci.c                     |  3 ++
>  hw/phb4.c                      | 90 +++++++++++++++++++++++++++++++++++++++++-
>  include/platform.h             |  5 +++
>  include/skiboot.h              |  1 +
>  include/xscom-p9-regs.h        |  3 ++
>  platforms/astbmc/witherspoon.c |  6 +++
>  6 files changed, 107 insertions(+), 1 deletion(-)
>
> diff --git a/core/pci.c b/core/pci.c
> index 2d3c4f88..e5ec97e8 100644
> --- a/core/pci.c
> +++ b/core/pci.c
> @@ -1646,6 +1646,9 @@ void pci_init_slots(void)
>  	 */
>  	time_wait_ms(20);
>
> +	if (platform.pre_pci_fixup)
> +		platform.pre_pci_fixup();
> +
>  	prlog(PR_NOTICE, "PCI: Resetting PHBs...\n");
>  	pci_do_jobs(pci_reset_phb);
>
> diff --git a/hw/phb4.c b/hw/phb4.c
> index b53dadfb..ee8e03f7 100644
> --- a/hw/phb4.c
> +++ b/hw/phb4.c
> @@ -77,6 +77,94 @@ static void phb4_init_hw(struct phb4 *p, bool first_init);
>  #define PHBLOGCFG(p, fmt, a...) do {} while (0)
>  #endif
>
> +#define PHB4_PER_CHIP                        6 /* Max 6 PHBs per chip on p9 */
> +#define PHB4_SHARED_SLOT_IDX_WITHERSPOON     3
> +
> +static int phb4_get_opal_id(unsigned int chip_id, unsigned int index)
> +{
> +	return chip_id * PHB4_PER_CHIP + index;
> +}
> +
> +static void phb4_activate_shared_slot_witherspoon(struct proc_chip *chip)
> +{
> +	uint64_t val;

I moved things around a bit in preparation for merging this (will send
patch in a tic) so that all the platform specific code was over in
witherspoon.c rather than in the phb4 source.

Then, as if somebody heard me about to merge something, the one working
witherspoon I could find to test on has bricked itself in the middle of
running the test suite... so I'm a bit nervous about hitting merge today
until I dig into it tomorrow.

Thoughts on my revised patch appreciated though.

-- 
Stewart Smith
OPAL Architect, IBM.



More information about the Skiboot mailing list