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) | |||
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 | } |