aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/platform/x86/intel_punit_ipc.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/platform/x86/intel_punit_ipc.c')
-rw-r--r--drivers/platform/x86/intel_punit_ipc.c48
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)
227 struct resource *res; 227 struct resource *res;
228 void __iomem *addr; 228 void __iomem *addr;
229 229
230 /*
231 * The following resources are required
232 * - BIOS_IPC BASE_DATA
233 * - BIOS_IPC BASE_IFACE
234 */
230 res = platform_get_resource(pdev, IORESOURCE_MEM, 0); 235 res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
231 addr = devm_ioremap_resource(&pdev->dev, res); 236 addr = devm_ioremap_resource(&pdev->dev, res);
232 if (IS_ERR(addr)) 237 if (IS_ERR(addr))
@@ -239,29 +244,40 @@ static int intel_punit_get_bars(struct platform_device *pdev)
239 return PTR_ERR(addr); 244 return PTR_ERR(addr);
240 punit_ipcdev->base[BIOS_IPC][BASE_IFACE] = addr; 245 punit_ipcdev->base[BIOS_IPC][BASE_IFACE] = addr;
241 246
247 /*
248 * The following resources are optional
249 * - ISPDRIVER_IPC BASE_DATA
250 * - ISPDRIVER_IPC BASE_IFACE
251 * - GTDRIVER_IPC BASE_DATA
252 * - GTDRIVER_IPC BASE_IFACE
253 */
242 res = platform_get_resource(pdev, IORESOURCE_MEM, 2); 254 res = platform_get_resource(pdev, IORESOURCE_MEM, 2);
243 addr = devm_ioremap_resource(&pdev->dev, res); 255 if (res) {
244 if (IS_ERR(addr)) 256 addr = devm_ioremap_resource(&pdev->dev, res);
245 return PTR_ERR(addr); 257 if (!IS_ERR(addr))
246 punit_ipcdev->base[ISPDRIVER_IPC][BASE_DATA] = addr; 258 punit_ipcdev->base[ISPDRIVER_IPC][BASE_DATA] = addr;
259 }
247 260
248 res = platform_get_resource(pdev, IORESOURCE_MEM, 3); 261 res = platform_get_resource(pdev, IORESOURCE_MEM, 3);
249 addr = devm_ioremap_resource(&pdev->dev, res); 262 if (res) {
250 if (IS_ERR(addr)) 263 addr = devm_ioremap_resource(&pdev->dev, res);
251 return PTR_ERR(addr); 264 if (!IS_ERR(addr))
252 punit_ipcdev->base[ISPDRIVER_IPC][BASE_IFACE] = addr; 265 punit_ipcdev->base[ISPDRIVER_IPC][BASE_IFACE] = addr;
266 }
253 267
254 res = platform_get_resource(pdev, IORESOURCE_MEM, 4); 268 res = platform_get_resource(pdev, IORESOURCE_MEM, 4);
255 addr = devm_ioremap_resource(&pdev->dev, res); 269 if (res) {
256 if (IS_ERR(addr)) 270 addr = devm_ioremap_resource(&pdev->dev, res);
257 return PTR_ERR(addr); 271 if (!IS_ERR(addr))
258 punit_ipcdev->base[GTDRIVER_IPC][BASE_DATA] = addr; 272 punit_ipcdev->base[GTDRIVER_IPC][BASE_DATA] = addr;
273 }
259 274
260 res = platform_get_resource(pdev, IORESOURCE_MEM, 5); 275 res = platform_get_resource(pdev, IORESOURCE_MEM, 5);
261 addr = devm_ioremap_resource(&pdev->dev, res); 276 if (res) {
262 if (IS_ERR(addr)) 277 addr = devm_ioremap_resource(&pdev->dev, res);
263 return PTR_ERR(addr); 278 if (!IS_ERR(addr))
264 punit_ipcdev->base[GTDRIVER_IPC][BASE_IFACE] = addr; 279 punit_ipcdev->base[GTDRIVER_IPC][BASE_IFACE] = addr;
280 }
265 281
266 return 0; 282 return 0;
267} 283}