Skip to content

Commit

Permalink
usb: typec: intel_pmc_mux: Add new ACPI ID for Lunar Lake IOM device
Browse files Browse the repository at this point in the history
[ Upstream commit e032368 ]

Intel Lunar Lake IOM has a different IOM port status offset and size
than Intel MTL.

Intel Lunar Lake is the first platform to extend IOM port status
from 32bit to 64bit by adding DDI port number into IOM port status.

Added IOM_PORT_STATUS_REGS macro for using platform specific IOM port
status offset and size.

Reviewed-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
Acked-by: Heikki Krogerus <heikki.krogerus@linux.intel.com>
Signed-off-by: Madhu M <madhu.m@intel.com>
Link: https://lore.kernel.org/r/20230704080509.14251-1-madhu.m@intel.com
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Signed-off-by: Sasha Levin <sashal@kernel.org>
  • Loading branch information
madhum031 authored and gregkh committed Sep 23, 2023
1 parent d3f372e commit 2651ac9
Showing 1 changed file with 20 additions and 5 deletions.
25 changes: 20 additions & 5 deletions drivers/usb/typec/mux/intel_pmc_mux.c
Expand Up @@ -117,6 +117,16 @@ enum {
IOM_PORT_STATUS_DHPD_HPD_STATUS_SHIFT) & \
IOM_PORT_STATUS_DHPD_HPD_STATUS_ASSERT)

/* IOM port status register */
#define IOM_PORT_STATUS_REGS(_offset_, _size_) ((_offset_) | (_size_))
#define IOM_PORT_STATUS_REGS_SZ_MASK BIT(0)
#define IOM_PORT_STATUS_REGS_SZ_4 0
#define IOM_PORT_STATUS_REGS_SZ_8 1
#define IOM_PORT_STATUS_REGS_OFFSET(_d_) \
((_d_) & ~IOM_PORT_STATUS_REGS_SZ_MASK)
#define IOM_PORT_STATUS_REGS_SIZE(_d_) \
(4 << ((_d_) & IOM_PORT_STATUS_REGS_SZ_MASK))

struct pmc_usb;

struct pmc_usb_port {
Expand Down Expand Up @@ -145,6 +155,7 @@ struct pmc_usb {
struct acpi_device *iom_adev;
void __iomem *iom_base;
u32 iom_port_status_offset;
u8 iom_port_status_size;

struct dentry *dentry;
};
Expand All @@ -160,7 +171,7 @@ static void update_port_status(struct pmc_usb_port *port)

port->iom_status = readl(port->pmc->iom_base +
port->pmc->iom_port_status_offset +
port_num * sizeof(u32));
port_num * port->pmc->iom_port_status_size);
}

static int sbu_orientation(struct pmc_usb_port *port)
Expand Down Expand Up @@ -589,13 +600,16 @@ static int pmc_usb_register_port(struct pmc_usb *pmc, int index,
/* IOM ACPI IDs and IOM_PORT_STATUS_OFFSET */
static const struct acpi_device_id iom_acpi_ids[] = {
/* TigerLake */
{ "INTC1072", 0x560, },
{ "INTC1072", IOM_PORT_STATUS_REGS(0x560, IOM_PORT_STATUS_REGS_SZ_4) },

/* AlderLake */
{ "INTC1079", 0x160, },
{ "INTC1079", IOM_PORT_STATUS_REGS(0x160, IOM_PORT_STATUS_REGS_SZ_4) },

/* Meteor Lake */
{ "INTC107A", 0x160, },
{ "INTC107A", IOM_PORT_STATUS_REGS(0x160, IOM_PORT_STATUS_REGS_SZ_4) },

/* Lunar Lake */
{ "INTC10EA", IOM_PORT_STATUS_REGS(0x150, IOM_PORT_STATUS_REGS_SZ_8) },
{}
};

Expand All @@ -615,7 +629,8 @@ static int pmc_usb_probe_iom(struct pmc_usb *pmc)
if (!adev)
return -ENODEV;

pmc->iom_port_status_offset = (u32)dev_id->driver_data;
pmc->iom_port_status_offset = IOM_PORT_STATUS_REGS_OFFSET(dev_id->driver_data);
pmc->iom_port_status_size = IOM_PORT_STATUS_REGS_SIZE(dev_id->driver_data);

INIT_LIST_HEAD(&resource_list);
ret = acpi_dev_get_memory_resources(adev, &resource_list);
Expand Down

0 comments on commit 2651ac9

Please sign in to comment.