@@ -54,12 +54,6 @@ struct intel_vsec_header {
5454 u32 offset ;
5555};
5656
57- /* Platform specific data */
58- struct intel_vsec_platform_info {
59- struct intel_vsec_header * * capabilities ;
60- unsigned long quirks ;
61- };
62-
6357enum intel_vsec_id {
6458 VSEC_ID_TELEMETRY = 2 ,
6559 VSEC_ID_WATCHER = 3 ,
@@ -169,10 +163,11 @@ static int intel_vsec_add_aux(struct pci_dev *pdev, struct intel_vsec_device *in
169163}
170164
171165static int intel_vsec_add_dev (struct pci_dev * pdev , struct intel_vsec_header * header ,
172- unsigned long quirks )
166+ struct intel_vsec_platform_info * info )
173167{
174168 struct intel_vsec_device * intel_vsec_dev ;
175169 struct resource * res , * tmp ;
170+ unsigned long quirks = info -> quirks ;
176171 int i ;
177172
178173 if (!intel_vsec_allowed (header -> id ) || intel_vsec_disabled (header -> id , quirks ))
@@ -216,7 +211,7 @@ static int intel_vsec_add_dev(struct pci_dev *pdev, struct intel_vsec_header *he
216211 intel_vsec_dev -> pcidev = pdev ;
217212 intel_vsec_dev -> resource = res ;
218213 intel_vsec_dev -> num_resources = header -> num_entries ;
219- intel_vsec_dev -> quirks = quirks ;
214+ intel_vsec_dev -> info = info ;
220215
221216 if (header -> id == VSEC_ID_SDSI )
222217 intel_vsec_dev -> ida = & intel_vsec_sdsi_ida ;
@@ -226,14 +221,15 @@ static int intel_vsec_add_dev(struct pci_dev *pdev, struct intel_vsec_header *he
226221 return intel_vsec_add_aux (pdev , intel_vsec_dev , intel_vsec_name (header -> id ));
227222}
228223
229- static bool intel_vsec_walk_header (struct pci_dev * pdev , unsigned long quirks ,
230- struct intel_vsec_header * * header )
224+ static bool intel_vsec_walk_header (struct pci_dev * pdev ,
225+ struct intel_vsec_platform_info * info )
231226{
227+ struct intel_vsec_header * * header = info -> capabilities ;
232228 bool have_devices = false;
233229 int ret ;
234230
235231 for ( ; * header ; header ++ ) {
236- ret = intel_vsec_add_dev (pdev , * header , quirks );
232+ ret = intel_vsec_add_dev (pdev , * header , info );
237233 if (ret )
238234 dev_info (& pdev -> dev , "Could not add device for DVSEC id %d\n" ,
239235 (* header )-> id );
@@ -244,7 +240,8 @@ static bool intel_vsec_walk_header(struct pci_dev *pdev, unsigned long quirks,
244240 return have_devices ;
245241}
246242
247- static bool intel_vsec_walk_dvsec (struct pci_dev * pdev , unsigned long quirks )
243+ static bool intel_vsec_walk_dvsec (struct pci_dev * pdev ,
244+ struct intel_vsec_platform_info * info )
248245{
249246 bool have_devices = false;
250247 int pos = 0 ;
@@ -283,7 +280,7 @@ static bool intel_vsec_walk_dvsec(struct pci_dev *pdev, unsigned long quirks)
283280 pci_read_config_dword (pdev , pos + PCI_DVSEC_HEADER2 , & hdr );
284281 header .id = PCI_DVSEC_HEADER2_ID (hdr );
285282
286- ret = intel_vsec_add_dev (pdev , & header , quirks );
283+ ret = intel_vsec_add_dev (pdev , & header , info );
287284 if (ret )
288285 continue ;
289286
@@ -293,7 +290,8 @@ static bool intel_vsec_walk_dvsec(struct pci_dev *pdev, unsigned long quirks)
293290 return have_devices ;
294291}
295292
296- static bool intel_vsec_walk_vsec (struct pci_dev * pdev , unsigned long quirks )
293+ static bool intel_vsec_walk_vsec (struct pci_dev * pdev ,
294+ struct intel_vsec_platform_info * info )
297295{
298296 bool have_devices = false;
299297 int pos = 0 ;
@@ -327,7 +325,7 @@ static bool intel_vsec_walk_vsec(struct pci_dev *pdev, unsigned long quirks)
327325 header .tbir = INTEL_DVSEC_TABLE_BAR (table );
328326 header .offset = INTEL_DVSEC_TABLE_OFFSET (table );
329327
330- ret = intel_vsec_add_dev (pdev , & header , quirks );
328+ ret = intel_vsec_add_dev (pdev , & header , info );
331329 if (ret )
332330 continue ;
333331
@@ -341,25 +339,24 @@ static int intel_vsec_pci_probe(struct pci_dev *pdev, const struct pci_device_id
341339{
342340 struct intel_vsec_platform_info * info ;
343341 bool have_devices = false;
344- unsigned long quirks = 0 ;
345342 int ret ;
346343
347344 ret = pcim_enable_device (pdev );
348345 if (ret )
349346 return ret ;
350347
351348 info = (struct intel_vsec_platform_info * )id -> driver_data ;
352- if (info )
353- quirks = info -> quirks ;
349+ if (! info )
350+ return - EINVAL ;
354351
355- if (intel_vsec_walk_dvsec (pdev , quirks ))
352+ if (intel_vsec_walk_dvsec (pdev , info ))
356353 have_devices = true;
357354
358- if (intel_vsec_walk_vsec (pdev , quirks ))
355+ if (intel_vsec_walk_vsec (pdev , info ))
359356 have_devices = true;
360357
361358 if (info && (info -> quirks & VSEC_QUIRK_NO_DVSEC ) &&
362- intel_vsec_walk_header (pdev , quirks , info -> capabilities ))
359+ intel_vsec_walk_header (pdev , info ))
363360 have_devices = true;
364361
365362 if (!have_devices )
@@ -370,7 +367,8 @@ static int intel_vsec_pci_probe(struct pci_dev *pdev, const struct pci_device_id
370367
371368/* TGL info */
372369static const struct intel_vsec_platform_info tgl_info = {
373- .quirks = VSEC_QUIRK_NO_WATCHER | VSEC_QUIRK_NO_CRASHLOG | VSEC_QUIRK_TABLE_SHIFT ,
370+ .quirks = VSEC_QUIRK_NO_WATCHER | VSEC_QUIRK_NO_CRASHLOG |
371+ VSEC_QUIRK_TABLE_SHIFT | VSEC_QUIRK_EARLY_HW ,
374372};
375373
376374/* DG1 info */
@@ -390,7 +388,7 @@ static struct intel_vsec_header *dg1_capabilities[] = {
390388
391389static const struct intel_vsec_platform_info dg1_info = {
392390 .capabilities = dg1_capabilities ,
393- .quirks = VSEC_QUIRK_NO_DVSEC ,
391+ .quirks = VSEC_QUIRK_NO_DVSEC | VSEC_QUIRK_EARLY_HW ,
394392};
395393
396394#define PCI_DEVICE_ID_INTEL_VSEC_ADL 0x467d
@@ -400,7 +398,7 @@ static const struct intel_vsec_platform_info dg1_info = {
400398static const struct pci_device_id intel_vsec_pci_ids [] = {
401399 { PCI_DEVICE_DATA (INTEL , VSEC_ADL , & tgl_info ) },
402400 { PCI_DEVICE_DATA (INTEL , VSEC_DG1 , & dg1_info ) },
403- { PCI_DEVICE_DATA (INTEL , VSEC_OOBMSM , NULL ) },
401+ { PCI_DEVICE_DATA (INTEL , VSEC_OOBMSM , & ( struct intel_vsec_platform_info ) {} ) },
404402 { PCI_DEVICE_DATA (INTEL , VSEC_TGL , & tgl_info ) },
405403 { }
406404};
0 commit comments