mirror of
https://github.com/edk2-porting/linux-next.git
synced 2024-12-16 17:23:55 +08:00
can: kvaser_pciefd: the PWM generator is running at the bus frequency of the system.
The system clock frequency for the bus connected to the PCIe controller shall be used when calculating the frequency of the PWM, not the CAN system clock frequency. Signed-off-by: Christer Beskow <chbe@kvaser.com> Signed-off-by: Marc Kleine-Budde <mkl@pengutronix.de>
This commit is contained in:
parent
67538eb5c0
commit
ec44dd5790
@ -65,6 +65,7 @@ MODULE_DESCRIPTION("CAN driver for Kvaser CAN/PCIe devices");
|
||||
#define KVASER_PCIEFD_SYSID_BASE 0x1f020
|
||||
#define KVASER_PCIEFD_SYSID_VERSION_REG (KVASER_PCIEFD_SYSID_BASE + 0x8)
|
||||
#define KVASER_PCIEFD_SYSID_CANFREQ_REG (KVASER_PCIEFD_SYSID_BASE + 0xc)
|
||||
#define KVASER_PCIEFD_SYSID_BUSFREQ_REG (KVASER_PCIEFD_SYSID_BASE + 0x10)
|
||||
#define KVASER_PCIEFD_SYSID_BUILD_REG (KVASER_PCIEFD_SYSID_BASE + 0x14)
|
||||
/* Shared receive buffer registers */
|
||||
#define KVASER_PCIEFD_SRB_BASE 0x1f200
|
||||
@ -268,6 +269,7 @@ struct kvaser_pciefd {
|
||||
struct kvaser_pciefd_can *can[KVASER_PCIEFD_MAX_CAN_CHANNELS];
|
||||
void *dma_data[KVASER_PCIEFD_DMA_COUNT];
|
||||
u8 nr_channels;
|
||||
u32 bus_freq;
|
||||
u32 freq;
|
||||
u32 freq_to_ticks_div;
|
||||
};
|
||||
@ -666,7 +668,7 @@ static void kvaser_pciefd_pwm_start(struct kvaser_pciefd_can *can)
|
||||
spin_lock_irqsave(&can->lock, irq);
|
||||
|
||||
/* Set frequency to 500 KHz*/
|
||||
top = can->can.clock.freq / (2 * 500000) - 1;
|
||||
top = can->kv_pcie->bus_freq / (2 * 500000) - 1;
|
||||
|
||||
pwm_ctrl = top & 0xff;
|
||||
pwm_ctrl |= (top & 0xff) << KVASER_PCIEFD_KCAN_PWM_TOP_SHIFT;
|
||||
@ -1119,6 +1121,8 @@ static int kvaser_pciefd_setup_board(struct kvaser_pciefd *pcie)
|
||||
return -ENODEV;
|
||||
}
|
||||
|
||||
pcie->bus_freq = ioread32(pcie->reg_base +
|
||||
KVASER_PCIEFD_SYSID_BUSFREQ_REG);
|
||||
pcie->freq = ioread32(pcie->reg_base + KVASER_PCIEFD_SYSID_CANFREQ_REG);
|
||||
pcie->freq_to_ticks_div = pcie->freq / 1000000;
|
||||
if (pcie->freq_to_ticks_div == 0)
|
||||
|
Loading…
Reference in New Issue
Block a user