1. 20 May, 2020 40 commits
    • Mauro Carvalho Chehab's avatar
      media: atomisp: isp_mmu: don't use kmem_cache · 1985e938
      Mauro Carvalho Chehab authored
      Instead of using it only if system memory is below 2GB,
      don't use it at all. The problem is that the code there is not
      compatible anymore with modern Kernels:
      
      [  179.552797] virt_to_cache: Object is not a Slab page!
      [  179.552821] WARNING: CPU: 0 PID: 1414 at mm/slab.h:475 cache_from_obj+0xab/0xf0
      [  179.552824] Modules linked in: ccm(E) nft_fib_inet(E) nft_fib_ipv4(E) nft_fib_ipv6(E) nft_fib(E) nft_reject_inet(E) nf_reject_ipv4(E) nf_reject_ipv6(E) nft_reject(E) nft_ct(E) nft_chain_nat(E) ip6table_nat(E) ip6table_mangle(E) ip6table_raw(E) ip6table_security(E) iptable_nat(E) nf_nat(E) nf_conntrack(E) nf_defrag_ipv6(E) libcrc32c(E) nf_defrag_ipv4(E) iptable_mangle(E) iptable_raw(E) iptable_security(E) ip_set(E) nf_tables(E) nfnetlink(E) ip6table_filter(E) ip6_tables(E) iptable_filter(E) cmac(E) bnep(E) sunrpc(E) vfat(E) fat(E) mei_hdcp(E) snd_soc_sst_cht_bsw_rt5645(E) gpio_keys(E) intel_rapl_msr(E) intel_powerclamp(E) coretemp(E) kvm_intel(E) kvm(E) irqbypass(E) crct10dif_pclmul(E) crc32_pclmul(E) asus_nb_wmi(E) ath10k_pci(E) ghash_clmulni_intel(E) ath10k_core(E) intel_cstate(E) wdat_wdt(E) pcspkr(E) ath(E) mac80211(E) intel_chtdc_ti_pwrbtn(E) joydev(E) btusb(E) btrtl(E) btbcm(E) btintel(E) libarc4(E) bluetooth(E) cfg80211(E) ecdh_generic(E) ecc(E) mei_txe(E) mei(E) lpc_ich(E)
      [  179.552887]  hid_sensor_accel_3d(E) hid_sensor_gyro_3d(E) hid_sensor_trigger(E) hid_sensor_iio_common(E) industrialio_triggered_buffer(E) kfifo_buf(E) industrialio(E) atomisp_ov2680(CE) snd_soc_rt5645(E) snd_intel_sst_acpi(E) snd_soc_rl6231(E) snd_intel_sst_core(E) snd_soc_sst_atom_hifi2_platform(E) intel_hid(E) snd_soc_acpi_intel_match(E) spi_pxa2xx_platform(E) snd_soc_acpi(E) snd_soc_core(E) snd_compress(E) dw_dmac(E) snd_hdmi_lpe_audio(E) int3400_thermal(E) int3406_thermal(E) snd_seq(E) acpi_thermal_rel(E) int3403_thermal(E) atomisp(CE) snd_seq_device(E) snd_pcm(E) intel_int0002_vgpio(E) soc_button_array(E) acpi_pad(E) intel_xhci_usb_role_switch(E) snd_timer(E) videobuf_vmalloc(E) videobuf_core(E) snd(E) atomisp_gmin_platform(CE) soundcore(E) videodev(E) processor_thermal_device(E) intel_soc_dts_iosf(E) mc(E) intel_rapl_common(E) int340x_thermal_zone(E) ip_tables(E) hid_sensor_hub(E) intel_ishtp_loader(E) intel_ishtp_hid(E) mmc_block(E) hid_multitouch(E) crc32c_intel(E) i915(E)
      [  179.552936]  hid_asus(E) i2c_algo_bit(E) asus_wmi(E) sparse_keymap(E) rfkill(E) drm_kms_helper(E) intel_ish_ipc(E) intel_ishtp(E) drm(E) wmi(E) video(E) i2c_hid(E) pwm_lpss_platform(E) pwm_lpss(E) sdhci_acpi(E) sdhci(E) mmc_core(E) fuse(E)
      [  179.552961] CPU: 0 PID: 1414 Comm: v4l2grab Tainted: G         C  EL    5.7.0-rc2+ #42
      [  179.552963] Hardware name: ASUSTeK COMPUTER INC. T101HA/T101HA, BIOS T101HA.306 04/23/2019
      [  179.552968] RIP: 0010:cache_from_obj+0xab/0xf0
      [  179.552973] Code: c3 31 c0 80 3d 1c 38 72 01 00 75 f0 48 c7 c6 20 12 06 9f 48 c7 c7 10 f3 37 9f 48 89 04 24 c6 05 01 38 72 01 01 e8 2c 99 e0 ff <0f> 0b 48 8b 04 24 eb ca 48 8b 57 58 48 8b 48 58 48 c7 c6 30 12 06
      [  179.552976] RSP: 0018:ffffaf1f00c3fae0 EFLAGS: 00010282
      [  179.552980] RAX: 0000000000000029 RBX: 00000000000003ff RCX: 0000000000000007
      [  179.552983] RDX: 00000000fffffff8 RSI: 0000000000000082 RDI: ffff9cb6bbc19cc0
      [  179.552985] RBP: 0000000001000000 R08: 00000000000005a4 R09: ffffaf1f00c3f970
      [  179.552988] R10: 0000000000000005 R11: 0000000000000000 R12: ffffffffc0713da0
      [  179.552991] R13: ffff9cb5a7bb1000 R14: 0000000001000000 R15: ffff9cb5a7bb1000
      [  179.552995] FS:  0000000000000000(0000) GS:ffff9cb6bbc00000(0000) knlGS:0000000000000000
      [  179.552998] CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
      [  179.553000] CR2: 00007fe780544400 CR3: 000000002480a000 CR4: 00000000001006f0
      [  179.553003] Call Trace:
      [  179.553015]  kmem_cache_free+0x19/0x180
      [  179.553070]  mmu_l2_unmap+0xd1/0x100 [atomisp]
      [  179.553113]  ? __bo_merge+0x8f/0xa0 [atomisp]
      [  179.553155]  mmu_unmap+0xd0/0xf0 [atomisp]
      [  179.553198]  hmm_bo_unbind+0x62/0xb0 [atomisp]
      [  179.553240]  hmm_free+0x44/0x60 [atomisp]
      Signed-off-by: default avatarMauro Carvalho Chehab <mchehab+huawei@kernel.org>
      1985e938
    • Mauro Carvalho Chehab's avatar
      media: atomisp: add a notice about possible leak resources · c03496b3
      Mauro Carvalho Chehab authored
      Calling acpi_bus_get_device() may end allocating resources that
      aren't freed. So, add a notice about that, as, if those drivers
      get out of staging, we may need some changes.
      
      Fixes: 0d64e942 ("media: atomisp: Add some ACPI detection info")
      Signed-off-by: default avatarMauro Carvalho Chehab <mchehab+huawei@kernel.org>
      c03496b3
    • Mauro Carvalho Chehab's avatar
      media: atomisp: disable the dynamic and reserved pools · 814634b8
      Mauro Carvalho Chehab authored
      The memory management code for atomisp is complex: it has 2
      extra pools (plus some ION-specific code).
      
      The code for those extra pools are complex, and there are even
      some parts of code over there that were forked from some
      mm/ code, probably from Kernel 3.10.
      
      Let's just use a single one, in order to make the driver
      simpler.
      Signed-off-by: default avatarMauro Carvalho Chehab <mchehab+huawei@kernel.org>
      814634b8
    • Mauro Carvalho Chehab's avatar
      media: atomisp: turn on camera before setting it · eda1310b
      Mauro Carvalho Chehab authored
      Camera cannot be set on power off mode.
      Signed-off-by: default avatarMauro Carvalho Chehab <mchehab+huawei@kernel.org>
      eda1310b
    • Mauro Carvalho Chehab's avatar
      media: atomisp: simplify ov2680 array write logic · 1bc075cb
      Mauro Carvalho Chehab authored
      Instead of trying to send multiple bytes at the same time,
      just go one by one, like the upstream driver does.
      Signed-off-by: default avatarMauro Carvalho Chehab <mchehab+huawei@kernel.org>
      1bc075cb
    • Mauro Carvalho Chehab's avatar
      media: atomisp-ov2680: get rid of the type field · b0ac2383
      Mauro Carvalho Chehab authored
      This isn't really used, so get rid, in order to make the code
      simpler.
      Signed-off-by: default avatarMauro Carvalho Chehab <mchehab+huawei@kernel.org>
      b0ac2383
    • Mauro Carvalho Chehab's avatar
      media: atomisp: use read/write routines from mainstream · 4f78f084
      Mauro Carvalho Chehab authored
      There is an ov2680 driver mainstream. Use the read/write
      routines from it, as the ones inside this driver are
      generating some errors:
      
      	ov2680 i2c-OVTI2680:00: ov2680_i2c_write: i2c write reg=0x3086, value 0x00, error -121
      
      Maybe the code that changes from/to BE are not right.
      Signed-off-by: default avatarMauro Carvalho Chehab <mchehab+huawei@kernel.org>
      4f78f084
    • Mauro Carvalho Chehab's avatar
      media: atomisp: ov2680: improve debug messages · 5589ea07
      Mauro Carvalho Chehab authored
      Change some code at ov2680 for it to better report what's
      happening there at sensor's level.
      Signed-off-by: default avatarMauro Carvalho Chehab <mchehab+huawei@kernel.org>
      5589ea07
    • Mauro Carvalho Chehab's avatar
      media: atomisp: change the code to properly wait for sensor · 1d6e5c30
      Mauro Carvalho Chehab authored
      The sensor should finish its init before atomisp driver, as
      otherwise the atomisp driver won't be able to talk with it.
      
      So, we need to turn atomisp_gmin_platform into a module
      again, for it to not depend on atomisp driver to finish
      probing, and add some delay at atomisp to let the sensor
      driver to finish probing.
      
      Yeah, this is hacky. The real solution here would be to use
      the async framework, but for now, our goal is to make the
      driver to work. So, let's postpone such change to be done
      later.
      Signed-off-by: default avatarMauro Carvalho Chehab <mchehab+huawei@kernel.org>
      1d6e5c30
    • Mauro Carvalho Chehab's avatar
      media: atomisp: keep the ISP powered on when setting it · 95d1f398
      Mauro Carvalho Chehab authored
      The current code causes ISP2401 to power down and never return
      back to live, causing the driver to crash.
      
      Fix it by commenting out the bad code. It should be noticed that
      the Yocto Aero code has something similar to it.
      
      Maybe the issue is related to an ISP bug (or maybe PM is
      controlled on a different way for this hardware).
      Signed-off-by: default avatarMauro Carvalho Chehab <mchehab+huawei@kernel.org>
      95d1f398
    • Mauro Carvalho Chehab's avatar
      media: atomisp: fix the value for CamClk on Asus T101HA · 39c91e18
      Mauro Carvalho Chehab authored
      The value returned by BIOS is 1. Fix it at the driver,
      as it won't read this from EFI.
      Signed-off-by: default avatarMauro Carvalho Chehab <mchehab+huawei@kernel.org>
      39c91e18
    • Mauro Carvalho Chehab's avatar
      media: atomisp: fix a slab error due to a wrong free · 7f98b894
      Mauro Carvalho Chehab authored
      The mmu mapping logic uses a different logic depending on the
      RAM size: if it is lower than 2GB, it uses kmem_cache_zalloc(),
      but if memory is bigger than that, it uses its own way to
      allocate memory.
      
      Yet, when freeing, it uses kmem_cache_free() for any cases.
      
      On recent Kernels, slab tracks the memory allocated on it,
      with causes those warnings:
      
       virt_to_cache: Object is not a Slab page!
       WARNING: CPU: 0 PID: 758 at mm/slab.h:475 cache_from_obj+0xab/0xf0
       Modules linked in: snd_soc_sst_cht_bsw_rt5645(E) mei_hdcp(E) gpio_keys(E) intel_rapl_msr(E) intel_powerclamp(E) coretemp(E) kvm_intel(E) kvm(E) irqbypass(E) crct10dif_pclmul(E) crc32_pclmul(E) ghash_clmulni_intel(E) atomisp_ov2680(CE) intel_cstate(E) asus_nb_wmi(E) wdat_wdt(E) pcspkr(E) ath10k_pci(E) ath10k_core(E) intel_chtdc_ti_pwrbtn(E) ath(E) mac80211(E) btusb(E) joydev(E) btrtl(E) btbcm(E) btintel(E) bluetooth(E) libarc4(E) ecdh_generic(E) cfg80211(E) ecc(E) hid_sensor_gyro_3d(E) hid_sensor_accel_3d(E) hid_sensor_trigger(E) hid_sensor_iio_common(E) industrialio_triggered_buffer(E) kfifo_buf(E) industrialio(E) atomisp(CE) videobuf_vmalloc(E) videobuf_core(E) videodev(E) mc(E) snd_soc_rt5645(E) snd_soc_rl6231(E) snd_intel_sst_acpi(E) snd_intel_sst_core(E) snd_soc_sst_atom_hifi2_platform(E) snd_soc_acpi_intel_match(E) intel_hid(E) spi_pxa2xx_platform(E) snd_soc_acpi(E) snd_soc_core(E) snd_compress(E) dw_dmac(E) intel_xhci_usb_role_switch(E) int3406_thermal(E)
        snd_hdmi_lpe_audio(E) int3403_thermal(E) int3400_thermal(E) acpi_thermal_rel(E) snd_seq(E) intel_int0002_vgpio(E) soc_button_array(E) snd_seq_device(E) acpi_pad(E) snd_pcm(E) snd_timer(E) snd(E) soundcore(E) lpc_ich(E) mei_txe(E) mei(E) processor_thermal_device(E) intel_soc_dts_iosf(E) intel_rapl_common(E) int340x_thermal_zone(E) ip_tables(E) hid_sensor_hub(E) intel_ishtp_loader(E) intel_ishtp_hid(E) mmc_block(E) hid_multitouch(E) crc32c_intel(E) i915(E) i2c_algo_bit(E) drm_kms_helper(E) hid_asus(E) asus_wmi(E) sparse_keymap(E) rfkill(E) drm(E) intel_ish_ipc(E) intel_ishtp(E) wmi(E) video(E) i2c_hid(E) sdhci_acpi(E) sdhci(E) mmc_core(E) pwm_lpss_platform(E) pwm_lpss(E) fuse(E)
       CPU: 0 PID: 758 Comm: v4l_id Tainted: G         C  E     5.7.0-rc2+ #40
       Hardware name: ASUSTeK COMPUTER INC. T101HA/T101HA, BIOS T101HA.306 04/23/2019
       RIP: 0010:cache_from_obj+0xab/0xf0
       Code: c3 31 c0 80 3d 1c 38 72 01 00 75 f0 48 c7 c6 20 12 06 b5 48 c7 c7 10 f3 37 b5 48 89 04 24 c6 05 01 38 72 01 01 e8 2c 99 e0 ff <0f> 0b 48 8b 04 24 eb ca 48 8b 57 58 48 8b 48 58 48 c7 c6 30 12 06
       RSP: 0018:ffffb0a4c07cfb10 EFLAGS: 00010282
       RAX: 0000000000000029 RBX: 0000000000000048 RCX: 0000000000000000
       RDX: ffffa004fbca5b80 RSI: ffffa004fbc19cc8 RDI: ffffa004fbc19cc8
       RBP: 0000000000c49000 R08: 00000000000004f7 R09: 0000000000000001
       R10: 0000000000aaaaaa R11: ffffffffb50e0600 R12: ffffffffc0be0a00
       R13: ffffa003f2448000 R14: 0000000000c49000 R15: ffffa003f2448000
       FS:  00007f9060c9cb80(0000) GS:ffffa004fbc00000(0000) knlGS:0000000000000000
       CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
       CR2: 0000559fc55b8000 CR3: 0000000165b02000 CR4: 00000000001006f0
       Call Trace:
        kmem_cache_free+0x19/0x180
        mmu_l2_unmap+0xd1/0x100 [atomisp]
        mmu_unmap+0xd0/0xf0 [atomisp]
        hmm_bo_unbind+0x62/0xb0 [atomisp]
        hmm_free+0x44/0x60 [atomisp]
        ia_css_spctrl_unload_fw+0x30/0x50 [atomisp]
        ia_css_uninit+0x3a/0x90 [atomisp]
        atomisp_open+0x50b/0x5c0 [atomisp]
        v4l2_open+0x85/0xf0 [videodev]
        chrdev_open+0xdd/0x210
        ? cdev_device_add+0xc0/0xc0
        do_dentry_open+0x13a/0x380
        path_openat+0xa9a/0xfe0
        do_filp_open+0x75/0x100
        ? __check_object_size+0x12e/0x13c
        ? __alloc_fd+0x44/0x150
        do_sys_openat2+0x8a/0x130
        __x64_sys_openat+0x46/0x70
        do_syscall_64+0x5b/0xf0
        entry_SYSCALL_64_after_hwframe+0x44/0xa9
      
      Solve it by calling free_page() directly
      Signed-off-by: default avatarMauro Carvalho Chehab <mchehab+huawei@kernel.org>
      7f98b894
    • Mauro Carvalho Chehab's avatar
      media: atomisp: get rid of __bo_alloc() macro · 5f1e9dd5
      Mauro Carvalho Chehab authored
      Simplify the hmm_bo a little bit by removing this
      macro. This will avoid printing twice errors when
      allocations happen.
      Signed-off-by: default avatarMauro Carvalho Chehab <mchehab+huawei@kernel.org>
      5f1e9dd5
    • Mauro Carvalho Chehab's avatar
      media: atomisp: get rid of spmem_dump.c · 983e5aca
      Mauro Carvalho Chehab authored
      Those files seem to be firmware-dependent, probably being used
      by some debug interface.
      
      Well, their contents are not really used by atomisp, so let's
      just send them to the trash can, as it shouldn't have any
      usage upstream.
      Signed-off-by: default avatarMauro Carvalho Chehab <mchehab+huawei@kernel.org>
      983e5aca
    • Mauro Carvalho Chehab's avatar
      media: atomisp: fix an inverted logic · 3117ddda
      Mauro Carvalho Chehab authored
      When changing the IFs to select isp2401 at runtime, one of
      the conditions ended by being written wrong.
      
      Code double-checked on both Yocto Aero's driver version and
      against the previous code.
      Signed-off-by: default avatarMauro Carvalho Chehab <mchehab+huawei@kernel.org>
      3117ddda
    • Mauro Carvalho Chehab's avatar
      media: atomisp: remove a misplaced #endif · 1351ea6b
      Mauro Carvalho Chehab authored
      There is an endif in the middle of a comment at
      ia_css_xnr3.host.c. Remove it.
      Signed-off-by: default avatarMauro Carvalho Chehab <mchehab+huawei@kernel.org>
      1351ea6b
    • Mauro Carvalho Chehab's avatar
      media: atomisp: simplify the power down/up code · 0f441fd7
      Mauro Carvalho Chehab authored
      Use the version from intel_atomisp2_pm.c for power up/down,
      removing some code duplication and using just one kAPI call
      for modifying the ISPSSPM0 register.
      Signed-off-by: default avatarMauro Carvalho Chehab <mchehab+huawei@kernel.org>
      0f441fd7
    • Mauro Carvalho Chehab's avatar
      media: atomisp: use pcim_enable_device() again · a27b5811
      Mauro Carvalho Chehab authored
      Changing to pci_enable_device() didn't produce the expected
      result. It could also eventually led to problems when driver
      is removed, due to object lifetime issues. So, let's just
      return to the previous behavior.
      Suggested-by: default avatarAndy Shevchenko <andy.shevchenko@gmail.com>
      Signed-off-by: default avatarMauro Carvalho Chehab <mchehab+huawei@kernel.org>
      a27b5811
    • Mauro Carvalho Chehab's avatar
      media: atomisp: spctrl: be sure to zero .code_addr after free · 4877b19e
      Mauro Carvalho Chehab authored
      We need that to avoid trying to double-free the driver.
      Signed-off-by: default avatarMauro Carvalho Chehab <mchehab+huawei@kernel.org>
      4877b19e
    • Mauro Carvalho Chehab's avatar
      media: atomisp: add support for different PMIC configurations · b4dc4e13
      Mauro Carvalho Chehab authored
      This patch required lots of research and work. The existing
      atomisp driver at staging assumed that all Intel PMIC would
      be using regulators, but upstream didn't follow it. Instead,
      the intel_pmic.c driver added a hack, instead of using i2c_transfer,
      it writes I2C values directly via regmapped registers.
      
      Oh, well... At least, it provided a common API for doing that.
      
      The PMIC settings used here came from the driver at the
      yocto Aero distribution:
      
      	https://download.01.org/aero/deb/pool/main/l/linux-4.4.76-aero-1.3/
      
      The logic itself was re-written, in order to use the I2C address
      detected by the probing part.
      Signed-off-by: default avatarMauro Carvalho Chehab <mchehab+huawei@kernel.org>
      b4dc4e13
    • Mauro Carvalho Chehab's avatar
      media: atomisp: move atomisp_gmin_platform.c to pci/ dir · 0741bf66
      Mauro Carvalho Chehab authored
      The atomisp_gmin_platform.c is not a platform driver anymore,
      but it is, instead, part of the atomisp driver.
      
      Move it to be together with the driver. As a bonus, as the
      atomisp i2c drivers depends on its contents, probing them
      should load automatically the atomisp core. This should
      likely avoid some possible race conditions.
      Signed-off-by: default avatarMauro Carvalho Chehab <mchehab+huawei@kernel.org>
      0741bf66
    • Mauro Carvalho Chehab's avatar
      media: atomisp: detect the PMIC type · 93e24ec6
      Mauro Carvalho Chehab authored
      Sub-device's power management can be provided via different ways.
      
      Instead of hardcoding it, add a code that would be detecting it.
      
      This uses a code similar to what's found at the atomisp driver
      inside the Intel Aero repository:
      
      	https://github.com/intel-aero/meta-intel-aero.git
      
      (driver was removed on some commit, but it can be found on
      git history).
      Signed-off-by: default avatarMauro Carvalho Chehab <mchehab+huawei@kernel.org>
      93e24ec6
    • Mauro Carvalho Chehab's avatar
      media: atomisp: warn if unsupported subdevs are found · a79afb97
      Mauro Carvalho Chehab authored
      Right now, the driver supports just one VCM and just one
      flash device. Warn if more than one such devices were
      probed.
      Signed-off-by: default avatarMauro Carvalho Chehab <mchehab+huawei@kernel.org>
      a79afb97
    • Mauro Carvalho Chehab's avatar
      media: atomisp: reduce the risk of a race condition · 09d87466
      Mauro Carvalho Chehab authored
      This driver is really on bad shape. One of the problems
      is that, as soon as the I2C transfers start to happen, it
      timeouts detecting a camera:
      
      	ov2680 i2c-OVTI2680:00: ov2680_probe: ACPI detected it on bus ID=CAM1, HID=OVTI2680
      	atomisp-isp2 0000:00:03.0: no camera attached or fail to detect
      	ov2680 i2c-OVTI2680:00: gmin: initializing atomisp module subdev data using PMIC regulator
      	...
      
      The right fix here would be to use defer probe, but driver is
      still on too bad shape.
      Signed-off-by: default avatarMauro Carvalho Chehab <mchehab+huawei@kernel.org>
      09d87466
    • Mauro Carvalho Chehab's avatar
      media: atomisp: print the type of PMIC that will be used · d03f2e24
      Mauro Carvalho Chehab authored
      While the current code is hardcoded to just one specific
      type of PMIC, it can support several types. Those should
      be board-dependent. Instead of just printing a number,
      change the message to display what type of PMIC control
      is used at runtime.
      Signed-off-by: default avatarMauro Carvalho Chehab <mchehab+huawei@kernel.org>
      d03f2e24
    • Mauro Carvalho Chehab's avatar
      media: atomisp: better display DMI and EFI found entries · 85df8457
      Mauro Carvalho Chehab authored
      There are several device-specific data that are obtained
      either via DMI or EFI, with changes the driver's behavior.
      
      Display what has been detected, as such info may help
      identifying troubles at the driver.
      Signed-off-by: default avatarMauro Carvalho Chehab <mchehab+huawei@kernel.org>
      85df8457
    • Mauro Carvalho Chehab's avatar
      media: atomisp: Add some ACPI detection info · 0d64e942
      Mauro Carvalho Chehab authored
      When someone would report problems with a new device, we
      need to know the DMI product ID and the ACPI name for the
      detected sensor. So, print them at dmesg.
      Signed-off-by: default avatarMauro Carvalho Chehab <mchehab+huawei@kernel.org>
      0d64e942
    • Mauro Carvalho Chehab's avatar
      media: atomisp: add -dDEBUG when building this driver · 88a4711e
      Mauro Carvalho Chehab authored
      This driver still has lots of issues. Let's enable debug
      there inconditionally, as we need more information in order
      to address the pending issues.
      Signed-off-by: default avatarMauro Carvalho Chehab <mchehab+huawei@kernel.org>
      88a4711e
    • Mauro Carvalho Chehab's avatar
      media: atomisp: make dfs_config_merr_117a struct const · 99723116
      Mauro Carvalho Chehab authored
      This setting is used only for one of te Merryfield PCI IDs.
      
      As this is an ISP2400, we can just get rid of a version
      test, writing the right value directly inside the struct.
      Signed-off-by: default avatarMauro Carvalho Chehab <mchehab+huawei@kernel.org>
      99723116
    • Mauro Carvalho Chehab's avatar
      media: atomisp: free PCI resources when probing fail · 25bccb98
      Mauro Carvalho Chehab authored
      The atomisp probe error logic is incomplete. Add the missing
      bits to return the PCI device to its original state.
      Signed-off-by: default avatarMauro Carvalho Chehab <mchehab+huawei@kernel.org>
      25bccb98
    • Mauro Carvalho Chehab's avatar
      media: atomisp: relax firmware version detection criteria · 33c24f8f
      Mauro Carvalho Chehab authored
      As getting the exact version used by the driver is not easy,
      let's relax the version detection and hope for the best,
      producing just a warning.
      Signed-off-by: default avatarMauro Carvalho Chehab <mchehab+huawei@kernel.org>
      33c24f8f
    • Mauro Carvalho Chehab's avatar
      media: atomisp: improve device detection code · ca133c39
      Mauro Carvalho Chehab authored
      - Remove useless check if !dev at the probe function: if
        such function is called, the device is defined.
      - Cleanup the PCI ID table using macros.
      - Use the same macros at the version-dependent part of the
        atomisp_v4l2.c file;
      - Add print messages to help understand what model the
        driver detect;
      - If device is not valid, better explain why.
      Signed-off-by: default avatarMauro Carvalho Chehehab <mchehab+huawei@kernel.org>
      ca133c39
    • Mauro Carvalho Chehab's avatar
      media: atomisp: fix clock rate frequency setting · 9b7632e8
      Mauro Carvalho Chehab authored
      changeset d5426f4c ("media: staging: atomisp: use clock framework for camera clocks")
      removed a platform-specific code to set the clock rate, in favor of
      using the Kernel clock framework.
      
      However, instead of passing the frequency for clk_set_rate(),
      it is passing either 0 or 1.
      
      Looking at the original patchset, it seems that there are two
      possible configurations for the ISP:
      
      	0 - it will use a 25 MHz XTAL to provide the clock;
      	1 - it will use a PLL with is set to 19.2 MHz
      	    (only for the CHT version?)
      
      Eventually, different XTALs and/or PLL frequencies might
      be possible some day, so, re-implent the logic for it to be
      more generic.
      
      Fixes: d5426f4c ("media: staging: atomisp: use clock framework for camera clocks")
      Signed-off-by: default avatarMauro Carvalho Chehab <mchehab+huawei@kernel.org>
      9b7632e8
    • Mauro Carvalho Chehab's avatar
      media: atomisp: limit the name of the firmware file · f770e91a
      Mauro Carvalho Chehab authored
      The firmware header has 64 bytes. Properly limit it to such
      size.
      Signed-off-by: default avatarMauro Carvalho Chehab <mchehab+huawei@kernel.org>
      f770e91a
    • Mauro Carvalho Chehab's avatar
      media: atomisp: print a better message when fw version is wrong · 8568fe63
      Mauro Carvalho Chehab authored
      The printed message when a firmware version is wrong says nothing
      usefull:
      
      	atomisp-isp2 0000:00:03.0: Fw version check failed.
      	atomisp-isp2: probe of 0000:00:03.0 failed with error -22
      
      Print the expected and the received firmware version instead.
      
      In order to do that, the firmware functions will need at least
      a struct device pointer, so pass it.
      
      While writing this patch, it was noticed that some of the
      abstraction layers of this driver have functions that are never
      called, but use this interface. Get rid of them.
      Signed-off-by: default avatarMauro Carvalho Chehab <mchehab+huawei@kernel.org>
      8568fe63
    • Mauro Carvalho Chehab's avatar
      media: atomisp: disable the dummy PM driver is atomisp driver is built · 1ab70982
      Mauro Carvalho Chehab authored
      As the atomisp driver should already be handling the ISP
      PCI ID, there's no sense on keeping the dummy driver enabled
      in tis case.
      Signed-off-by: default avatarMauro Carvalho Chehab <mchehab+huawei@kernel.org>
      1ab70982
    • Mauro Carvalho Chehab's avatar
      media: atomisp: move ia_css_configure_sc() implementation · 32efca3d
      Mauro Carvalho Chehab authored
      With the changes, this function is now undefined if built
      for ISP2400. So, move its implementation to the file which
      calls it.
      Reported-by: default avatarFrancescodario Cuzzocrea <francescodario.cuzzocrea@mail.polimi.it>
      Signed-off-by: default avatarMauro Carvalho Chehab <mchehab+huawei@kernel.org>
      32efca3d
    • Mauro Carvalho Chehab's avatar
      media: atomisp: fix querycap initialization logic · 8ac17140
      Mauro Carvalho Chehab authored
      Some recent changes at V4L2 core changed the way querycap is handled.
      
      Due to that, this warning is generated:
      
      	WARNING: CPU: 1 PID: 503 at drivers/media/v4l2-core/v4l2-dev.c:885 __video_register_device+0x93e/0x1120 [videodev]
      
      as introduced by this commit:
      
      	commit 3c135050
      	Author: Hans Verkuil <hverkuil-cisco@xs4all.nl>
      	Date:   Tue Jul 23 04:21:25 2019 -0400
      
      	    media: v4l2-dev/ioctl: require non-zero device_caps, verify sane querycap results
      
      	    Now that all V4L2 drivers set device_caps in struct video_device, we can add
      	    a check for this to ensure all future drivers fill this in.
      
      The fix is simple: we just need to initialize dev_caps before
      registering the V4L2 dev.
      
      While here, solve other problems at VIDIOC_QUERYCAP ioctl.
      Reported-by: default avatarPatrik Gfeller <patrik.gfeller@gmail.com>
      Signed-off-by: default avatarMauro Carvalho Chehab <mchehab+huawei@kernel.org>
      8ac17140
    • Mauro Carvalho Chehab's avatar
      media: atomisp: use add_qos_request instead of update · ac378c94
      Mauro Carvalho Chehab authored
      It doesn't make senst to update a request that was not
      created. So, instead of using cpu_latency_qos_update_request(),
      let's use, instead cpu_latency_qos_add_request() at device
      probing code.
      
      This should fix this issue:
      
      [    9.691775] cpu_latency_qos_update_request called for unknown object
      [    9.695279] WARNING: CPU: 3 PID: 523 at kernel/power/qos.c:296 cpu_latency_qos_update_request+0x3a/0xb0
      [    9.698826] Modules linked in: snd_soc_acpi_intel_match snd_rawmidi snd_soc_acpi snd_soc_rl6231 snd_soc_core ath mac80211 snd_compress snd_hdmi_lpe_audio ac97_bus hid_sensor_accel_3d snd_pcm_dmaengine hid_sensor_gyro_3d hid_sensor_trigger industrialio_triggered_buffer kfifo_buf hid_sensor_iio_common processor_thermal_device industrialio cfg80211 snd_pcm snd_seq intel_rapl_common atomisp(C+) libarc4 intel_soc_dts_iosf cros_ec_ishtp intel_xhci_usb_role_switch mei_txe cros_ec videobuf_vmalloc mei roles atomisp_ov2680(C) videobuf_core snd_seq_device snd_timer spi_pxa2xx_platform videodev snd mc dw_dmac intel_hid dw_dmac_core 8250_dw soundcore int3406_thermal int3400_thermal intel_int0002_vgpio acpi_pad acpi_thermal_rel soc_button_array int3403_thermal int340x_thermal_zone mac_hid sch_fq_codel parport_pc ppdev lp parport ip_tables x_tables autofs4 hid_sensor_custom hid_sensor_hub intel_ishtp_loader intel_ishtp_hid crct10dif_pclmul crc32_pclmul ghash_clmulni_intel i915 mmc_block i2c_algo_bit
      [    9.698885]  aesni_intel crypto_simd drm_kms_helper cryptd syscopyarea sysfillrect glue_helper sysimgblt fb_sys_fops cec intel_ish_ipc drm lpc_ich intel_ishtp hid_asus intel_soc_pmic_chtdc_ti asus_wmi i2c_hid sparse_keymap sdhci_acpi wmi video sdhci hid_generic usbhid hid
      [    9.736699] CPU: 3 PID: 523 Comm: systemd-udevd Tainted: G         C        5.7.0-rc1+ #2
      [    9.741309] Hardware name: ASUSTeK COMPUTER INC. T101HA/T101HA, BIOS T101HA.305 01/24/2018
      [    9.745962] RIP: 0010:cpu_latency_qos_update_request+0x3a/0xb0
      [    9.750615] Code: 89 e5 41 55 41 54 41 89 f4 53 48 89 fb 48 81 7f 28 e0 7f c6 9e 74 1c 48 c7 c6 60 f3 65 9e 48 c7 c7 e8 a9 99 9e e8 b2 a6 f9 ff <0f> 0b 5b 41 5c 41 5d 5d c3 0f 1f 44 00 00 44 3b 23 74 ef 44 89 e2
      [    9.760065] RSP: 0018:ffffa865404f39c0 EFLAGS: 00010282
      [    9.764734] RAX: 0000000000000000 RBX: ffff9d2aefc84350 RCX: 0000000000000000
      [    9.769435] RDX: ffff9d2afbfa97c0 RSI: ffff9d2afbf99808 RDI: ffff9d2afbf99808
      [    9.774125] RBP: ffffa865404f39d8 R08: 0000000000000304 R09: 0000000000aaaaaa
      [    9.778804] R10: 0000000000000000 R11: 0000000000000001 R12: 00000000ffffffff
      [    9.783491] R13: ffff9d2afb4640b0 R14: ffffffffc07ecf20 R15: 0000000091000000
      [    9.788187] FS:  00007efe67ff8880(0000) GS:ffff9d2afbf80000(0000) knlGS:0000000000000000
      [    9.792864] CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
      [    9.797482] CR2: 00007ffc6424bdc8 CR3: 0000000178998000 CR4: 00000000001006e0
      [    9.802126] Call Trace:
      [    9.806775]  atomisp_pci_probe.cold.19+0x15f/0x116f [atomisp]
      [    9.811441]  local_pci_probe+0x47/0x80
      [    9.816085]  pci_device_probe+0xff/0x1b0
      [    9.820706]  really_probe+0x1c8/0x3e0
      [    9.825247]  driver_probe_device+0xd9/0x120
      [    9.829769]  device_driver_attach+0x58/0x60
      [    9.834294]  __driver_attach+0x8f/0x150
      [    9.838782]  ? device_driver_attach+0x60/0x60
      [    9.843205]  ? device_driver_attach+0x60/0x60
      [    9.847634]  bus_for_each_dev+0x79/0xc0
      [    9.852033]  ? kmem_cache_alloc_trace+0x167/0x230
      [    9.856462]  driver_attach+0x1e/0x20
      Reported-by: default avatarPatrik Gfeller <patrik.gfeller@gmail.com>
      Signed-off-by: default avatarMauro Carvalho Chehab <mchehab+huawei@kernel.org>
      ac378c94
    • Mauro Carvalho Chehab's avatar
      media: atomisp: remove some file duplication and do more dir renames · 0057131f
      Mauro Carvalho Chehab authored
      There are currently two identical copies of some files, one
      at css_2401_csi2p_system/ and another one at css_2401_system/.
      
      Get rid of one of them, moving the remaining files to the
      directory with the shortest name.
      
      While here, do more renames, in order to get smaller path
      names.
      Signed-off-by: default avatarMauro Carvalho Chehab <mchehab+huawei@kernel.org>
      0057131f