diff mbox series

[v4,10/11] ppc/pnv: Add a pca9554 I2C device to powernv10-rainier

Message ID 20231120235112.1951342-11-milesg@linux.vnet.ibm.com
State New
Headers show
Series Add powernv10 I2C devices and tests | expand

Commit Message

Glenn Miles Nov. 20, 2023, 11:51 p.m. UTC
For powernv10-rainier, the Power Hypervisor code expects to see a
pca9554 device connected to the 3rd PNV I2C engine on port 1 at I2C
address 0x25 (or left-justified address of 0x4A).  This is used by
the hypervisor code to detect if a "Cable Card" is present.

Signed-off-by: Glenn Miles <milesg@linux.vnet.ibm.com>
---

Changes from previous version:
  - Code moved from pnv_chip_power10_realize to pnv_rainier_i2c_init

 hw/misc/Kconfig     | 4 ++++
 hw/misc/meson.build | 1 +
 hw/ppc/Kconfig      | 1 +
 hw/ppc/pnv.c        | 6 ++++++
 4 files changed, 12 insertions(+)

Comments

Cédric Le Goater Nov. 21, 2023, 6:18 p.m. UTC | #1
On 11/21/23 00:51, Glenn Miles wrote:
> For powernv10-rainier, the Power Hypervisor code expects to see a
> pca9554 device connected to the 3rd PNV I2C engine on port 1 at I2C
> address 0x25 (or left-justified address of 0x4A).  This is used by
> the hypervisor code to detect if a "Cable Card" is present.
> 
> Signed-off-by: Glenn Miles <milesg@linux.vnet.ibm.com>


Reviewed-by: Cédric Le Goater <clg@kaod.org>

Thanks,

C.


> ---
> 
> Changes from previous version:
>    - Code moved from pnv_chip_power10_realize to pnv_rainier_i2c_init
> 
>   hw/misc/Kconfig     | 4 ++++
>   hw/misc/meson.build | 1 +
>   hw/ppc/Kconfig      | 1 +
>   hw/ppc/pnv.c        | 6 ++++++
>   4 files changed, 12 insertions(+)
> 
> diff --git a/hw/misc/Kconfig b/hw/misc/Kconfig
> index cc8a8c1418..c347a132c2 100644
> --- a/hw/misc/Kconfig
> +++ b/hw/misc/Kconfig
> @@ -34,6 +34,10 @@ config PCA9552
>       bool
>       depends on I2C
>   
> +config PCA9554
> +    bool
> +    depends on I2C
> +
>   config I2C_ECHO
>       bool
>       default y if TEST_DEVICES
> diff --git a/hw/misc/meson.build b/hw/misc/meson.build
> index 36c20d5637..c39410e4a7 100644
> --- a/hw/misc/meson.build
> +++ b/hw/misc/meson.build
> @@ -4,6 +4,7 @@ system_ss.add(when: 'CONFIG_FW_CFG_DMA', if_true: files('vmcoreinfo.c'))
>   system_ss.add(when: 'CONFIG_ISA_DEBUG', if_true: files('debugexit.c'))
>   system_ss.add(when: 'CONFIG_ISA_TESTDEV', if_true: files('pc-testdev.c'))
>   system_ss.add(when: 'CONFIG_PCA9552', if_true: files('pca9552.c'))
> +system_ss.add(when: 'CONFIG_PCA9554', if_true: files('pca9554.c'))
>   system_ss.add(when: 'CONFIG_PCI_TESTDEV', if_true: files('pci-testdev.c'))
>   system_ss.add(when: 'CONFIG_UNIMP', if_true: files('unimp.c'))
>   system_ss.add(when: 'CONFIG_EMPTY_SLOT', if_true: files('empty_slot.c'))
> diff --git a/hw/ppc/Kconfig b/hw/ppc/Kconfig
> index f77ca773cf..2302778265 100644
> --- a/hw/ppc/Kconfig
> +++ b/hw/ppc/Kconfig
> @@ -33,6 +33,7 @@ config POWERNV
>       select FDT_PPC
>       select PCI_POWERNV
>       select PCA9552
> +    select PCA9554
>   
>   config PPC405
>       bool
> diff --git a/hw/ppc/pnv.c b/hw/ppc/pnv.c
> index c29a136465..54ebef789e 100644
> --- a/hw/ppc/pnv.c
> +++ b/hw/ppc/pnv.c
> @@ -1918,6 +1918,12 @@ static void pnv_rainier_i2c_init(PnvMachineState *pnv)
>                                 qdev_get_gpio_in(DEVICE(hotplug), 8));
>           qdev_connect_gpio_out(DEVICE(hotplug), 4,
>                                 qdev_get_gpio_in(DEVICE(hotplug), 9));
> +
> +        /*
> +         * Add a PCA9554 I2C device for cable card presence detection
> +         * to engine 2, bus 1, address 0x25
> +         */
> +        i2c_slave_create_simple(chip10->i2c[2].busses[1], "pca9554", 0x25);
>       }
>   }
>
diff mbox series

Patch

diff --git a/hw/misc/Kconfig b/hw/misc/Kconfig
index cc8a8c1418..c347a132c2 100644
--- a/hw/misc/Kconfig
+++ b/hw/misc/Kconfig
@@ -34,6 +34,10 @@  config PCA9552
     bool
     depends on I2C
 
+config PCA9554
+    bool
+    depends on I2C
+
 config I2C_ECHO
     bool
     default y if TEST_DEVICES
diff --git a/hw/misc/meson.build b/hw/misc/meson.build
index 36c20d5637..c39410e4a7 100644
--- a/hw/misc/meson.build
+++ b/hw/misc/meson.build
@@ -4,6 +4,7 @@  system_ss.add(when: 'CONFIG_FW_CFG_DMA', if_true: files('vmcoreinfo.c'))
 system_ss.add(when: 'CONFIG_ISA_DEBUG', if_true: files('debugexit.c'))
 system_ss.add(when: 'CONFIG_ISA_TESTDEV', if_true: files('pc-testdev.c'))
 system_ss.add(when: 'CONFIG_PCA9552', if_true: files('pca9552.c'))
+system_ss.add(when: 'CONFIG_PCA9554', if_true: files('pca9554.c'))
 system_ss.add(when: 'CONFIG_PCI_TESTDEV', if_true: files('pci-testdev.c'))
 system_ss.add(when: 'CONFIG_UNIMP', if_true: files('unimp.c'))
 system_ss.add(when: 'CONFIG_EMPTY_SLOT', if_true: files('empty_slot.c'))
diff --git a/hw/ppc/Kconfig b/hw/ppc/Kconfig
index f77ca773cf..2302778265 100644
--- a/hw/ppc/Kconfig
+++ b/hw/ppc/Kconfig
@@ -33,6 +33,7 @@  config POWERNV
     select FDT_PPC
     select PCI_POWERNV
     select PCA9552
+    select PCA9554
 
 config PPC405
     bool
diff --git a/hw/ppc/pnv.c b/hw/ppc/pnv.c
index c29a136465..54ebef789e 100644
--- a/hw/ppc/pnv.c
+++ b/hw/ppc/pnv.c
@@ -1918,6 +1918,12 @@  static void pnv_rainier_i2c_init(PnvMachineState *pnv)
                               qdev_get_gpio_in(DEVICE(hotplug), 8));
         qdev_connect_gpio_out(DEVICE(hotplug), 4,
                               qdev_get_gpio_in(DEVICE(hotplug), 9));
+
+        /*
+         * Add a PCA9554 I2C device for cable card presence detection
+         * to engine 2, bus 1, address 0x25
+         */
+        i2c_slave_create_simple(chip10->i2c[2].busses[1], "pca9554", 0x25);
     }
 }