diff options
Diffstat (limited to 'drivers/platform/x86/intel_punit_ipc.c')
| -rw-r--r-- | drivers/platform/x86/intel_punit_ipc.c | 48 | 
1 files changed, 32 insertions, 16 deletions
diff --git a/drivers/platform/x86/intel_punit_ipc.c b/drivers/platform/x86/intel_punit_ipc.c index bd875409a02d..a47a41fc10ad 100644 --- a/drivers/platform/x86/intel_punit_ipc.c +++ b/drivers/platform/x86/intel_punit_ipc.c @@ -227,6 +227,11 @@ static int intel_punit_get_bars(struct platform_device *pdev)  	struct resource *res;  	void __iomem *addr; +	/* +	 * The following resources are required +	 * - BIOS_IPC BASE_DATA +	 * - BIOS_IPC BASE_IFACE +	 */  	res = platform_get_resource(pdev, IORESOURCE_MEM, 0);  	addr = devm_ioremap_resource(&pdev->dev, res);  	if (IS_ERR(addr)) @@ -239,29 +244,40 @@ static int intel_punit_get_bars(struct platform_device *pdev)  		return PTR_ERR(addr);  	punit_ipcdev->base[BIOS_IPC][BASE_IFACE] = addr; +	/* +	 * The following resources are optional +	 * - ISPDRIVER_IPC BASE_DATA +	 * - ISPDRIVER_IPC BASE_IFACE +	 * - GTDRIVER_IPC BASE_DATA +	 * - GTDRIVER_IPC BASE_IFACE +	 */  	res = platform_get_resource(pdev, IORESOURCE_MEM, 2); -	addr = devm_ioremap_resource(&pdev->dev, res); -	if (IS_ERR(addr)) -		return PTR_ERR(addr); -	punit_ipcdev->base[ISPDRIVER_IPC][BASE_DATA] = addr; +	if (res) { +		addr = devm_ioremap_resource(&pdev->dev, res); +		if (!IS_ERR(addr)) +			punit_ipcdev->base[ISPDRIVER_IPC][BASE_DATA] = addr; +	}  	res = platform_get_resource(pdev, IORESOURCE_MEM, 3); -	addr = devm_ioremap_resource(&pdev->dev, res); -	if (IS_ERR(addr)) -		return PTR_ERR(addr); -	punit_ipcdev->base[ISPDRIVER_IPC][BASE_IFACE] = addr; +	if (res) { +		addr = devm_ioremap_resource(&pdev->dev, res); +		if (!IS_ERR(addr)) +			punit_ipcdev->base[ISPDRIVER_IPC][BASE_IFACE] = addr; +	}  	res = platform_get_resource(pdev, IORESOURCE_MEM, 4); -	addr = devm_ioremap_resource(&pdev->dev, res); -	if (IS_ERR(addr)) -		return PTR_ERR(addr); -	punit_ipcdev->base[GTDRIVER_IPC][BASE_DATA] = addr; +	if (res) { +		addr = devm_ioremap_resource(&pdev->dev, res); +		if (!IS_ERR(addr)) +			punit_ipcdev->base[GTDRIVER_IPC][BASE_DATA] = addr; +	}  	res = platform_get_resource(pdev, IORESOURCE_MEM, 5); -	addr = devm_ioremap_resource(&pdev->dev, res); -	if (IS_ERR(addr)) -		return PTR_ERR(addr); -	punit_ipcdev->base[GTDRIVER_IPC][BASE_IFACE] = addr; +	if (res) { +		addr = devm_ioremap_resource(&pdev->dev, res); +		if (!IS_ERR(addr)) +			punit_ipcdev->base[GTDRIVER_IPC][BASE_IFACE] = addr; +	}  	return 0;  }  | 
