Merge tag 'powerpc-4.3-1' of git://git.kernel.org/pub/scm/linux/kernel/git/powerpc/linux
Pull powerpc updates from Michael Ellerman: - support "hybrid" iommu/direct DMA ops for coherent_mask < dma_mask from Benjamin Herrenschmidt - EEH fixes for SRIOV from Gavin - introduce rtas_get_sensor_fast() for IRQ handlers from Thomas Huth - use hardware RNG for arch_get_random_seed_* not arch_get_random_* from Paul Mackerras - seccomp filter support from Michael Ellerman - opal_cec_reboot2() handling for HMIs & machine checks from Mahesh Salgaonkar - add powerpc timebase as a trace clock source from Naveen N. Rao - misc cleanups in the xmon, signal & SLB code from Anshuman Khandual - add an inline function to update POWER8 HID0 from Gautham R. Shenoy - fix pte_pagesize_index() crash on 4K w/64K hash from Michael Ellerman - drop support for 64K local store on 4K kernels from Michael Ellerman - move dma_get_required_mask() from pnv_phb to pci_controller_ops from Andrew Donnellan - initialize distance lookup table from drconf path from Nikunj A Dadhania - enable RTC class support from Vaibhav Jain - disable automatically blocked PCI config from Gavin Shan - add LEDs driver for PowerNV platform from Vasant Hegde - fix endianness issues in the HVSI driver from Laurent Dufour - kexec endian fixes from Samuel Mendoza-Jonas - fix corrupted pdn list from Gavin Shan - fix fenced PHB caused by eeh_slot_error_detail() from Gavin Shan - Freescale updates from Scott: Highlights include 32-bit memcpy/memset optimizations, checksum optimizations, 85xx config fragments and updates, device tree updates, e6500 fixes for non-SMP, and misc cleanup and minor fixes. - a ton of cxl updates & fixes: - add explicit precision specifiers from Rasmus Villemoes - use more common format specifier from Rasmus Villemoes - destroy cxl_adapter_idr on module_exit from Johannes Thumshirn - destroy afu->contexts_idr on release of an afu from Johannes Thumshirn - compile with -Werror from Daniel Axtens - EEH support from Daniel Axtens - plug irq_bitmap getting leaked in cxl_context from Vaibhav Jain - add alternate MMIO error handling from Ian Munsie - allow release of contexts which have been OPENED but not STARTED from Andrew Donnellan - remove use of macro DEFINE_PCI_DEVICE_TABLE from Vaishali Thakkar - release irqs if memory allocation fails from Vaibhav Jain - remove racy attempt to force EEH invocation in reset from Daniel Axtens - fix + cleanup error paths in cxl_dev_context_init from Ian Munsie - fix force unmapping mmaps of contexts allocated through the kernel api from Ian Munsie - set up and enable PSL Timebase from Philippe Bergheaud * tag 'powerpc-4.3-1' of git://git.kernel.org/pub/scm/linux/kernel/git/powerpc/linux: (140 commits) cxl: Set up and enable PSL Timebase cxl: Fix force unmapping mmaps of contexts allocated through the kernel api cxl: Fix + cleanup error paths in cxl_dev_context_init powerpc/eeh: Fix fenced PHB caused by eeh_slot_error_detail() powerpc/pseries: Cleanup on pci_dn_reconfig_notifier() powerpc/pseries: Fix corrupted pdn list powerpc/powernv: Enable LEDS support powerpc/iommu: Set default DMA offset in dma_dev_setup cxl: Remove racy attempt to force EEH invocation in reset cxl: Release irqs if memory allocation fails cxl: Remove use of macro DEFINE_PCI_DEVICE_TABLE powerpc/powernv: Fix mis-merge of OPAL support for LEDS driver powerpc/powernv: Reset HILE before kexec_sequence() powerpc/kexec: Reset secondary cpu endianness before kexec powerpc/hvsi: Fix endianness issues in the HVSI driver leds/powernv: Add driver for PowerNV platform powerpc/powernv: Create LED platform device powerpc/powernv: Add OPAL interfaces for accessing and modifying system LED states powerpc/powernv: Fix the log message when disabling VF cxl: Allow release of contexts which have been OPENED but not STARTED ...
This commit is contained in:
@@ -240,9 +240,9 @@ static void hvsi_recv_control(struct hvsi_struct *hp, uint8_t *packet,
|
||||
{
|
||||
struct hvsi_control *header = (struct hvsi_control *)packet;
|
||||
|
||||
switch (header->verb) {
|
||||
switch (be16_to_cpu(header->verb)) {
|
||||
case VSV_MODEM_CTL_UPDATE:
|
||||
if ((header->word & HVSI_TSCD) == 0) {
|
||||
if ((be32_to_cpu(header->word) & HVSI_TSCD) == 0) {
|
||||
/* CD went away; no more connection */
|
||||
pr_debug("hvsi%i: CD dropped\n", hp->index);
|
||||
hp->mctrl &= TIOCM_CD;
|
||||
@@ -267,6 +267,7 @@ static void hvsi_recv_control(struct hvsi_struct *hp, uint8_t *packet,
|
||||
static void hvsi_recv_response(struct hvsi_struct *hp, uint8_t *packet)
|
||||
{
|
||||
struct hvsi_query_response *resp = (struct hvsi_query_response *)packet;
|
||||
uint32_t mctrl_word;
|
||||
|
||||
switch (hp->state) {
|
||||
case HVSI_WAIT_FOR_VER_RESPONSE:
|
||||
@@ -274,9 +275,10 @@ static void hvsi_recv_response(struct hvsi_struct *hp, uint8_t *packet)
|
||||
break;
|
||||
case HVSI_WAIT_FOR_MCTRL_RESPONSE:
|
||||
hp->mctrl = 0;
|
||||
if (resp->u.mctrl_word & HVSI_TSDTR)
|
||||
mctrl_word = be32_to_cpu(resp->u.mctrl_word);
|
||||
if (mctrl_word & HVSI_TSDTR)
|
||||
hp->mctrl |= TIOCM_DTR;
|
||||
if (resp->u.mctrl_word & HVSI_TSCD)
|
||||
if (mctrl_word & HVSI_TSCD)
|
||||
hp->mctrl |= TIOCM_CD;
|
||||
__set_state(hp, HVSI_OPEN);
|
||||
break;
|
||||
@@ -295,10 +297,10 @@ static int hvsi_version_respond(struct hvsi_struct *hp, uint16_t query_seqno)
|
||||
|
||||
packet.hdr.type = VS_QUERY_RESPONSE_PACKET_HEADER;
|
||||
packet.hdr.len = sizeof(struct hvsi_query_response);
|
||||
packet.hdr.seqno = atomic_inc_return(&hp->seqno);
|
||||
packet.verb = VSV_SEND_VERSION_NUMBER;
|
||||
packet.hdr.seqno = cpu_to_be16(atomic_inc_return(&hp->seqno));
|
||||
packet.verb = cpu_to_be16(VSV_SEND_VERSION_NUMBER);
|
||||
packet.u.version = HVSI_VERSION;
|
||||
packet.query_seqno = query_seqno+1;
|
||||
packet.query_seqno = cpu_to_be16(query_seqno+1);
|
||||
|
||||
pr_debug("%s: sending %i bytes\n", __func__, packet.hdr.len);
|
||||
dbg_dump_hex((uint8_t*)&packet, packet.hdr.len);
|
||||
@@ -319,7 +321,7 @@ static void hvsi_recv_query(struct hvsi_struct *hp, uint8_t *packet)
|
||||
|
||||
switch (hp->state) {
|
||||
case HVSI_WAIT_FOR_VER_QUERY:
|
||||
hvsi_version_respond(hp, query->hdr.seqno);
|
||||
hvsi_version_respond(hp, be16_to_cpu(query->hdr.seqno));
|
||||
__set_state(hp, HVSI_OPEN);
|
||||
break;
|
||||
default:
|
||||
@@ -555,8 +557,8 @@ static int hvsi_query(struct hvsi_struct *hp, uint16_t verb)
|
||||
|
||||
packet.hdr.type = VS_QUERY_PACKET_HEADER;
|
||||
packet.hdr.len = sizeof(struct hvsi_query);
|
||||
packet.hdr.seqno = atomic_inc_return(&hp->seqno);
|
||||
packet.verb = verb;
|
||||
packet.hdr.seqno = cpu_to_be16(atomic_inc_return(&hp->seqno));
|
||||
packet.verb = cpu_to_be16(verb);
|
||||
|
||||
pr_debug("%s: sending %i bytes\n", __func__, packet.hdr.len);
|
||||
dbg_dump_hex((uint8_t*)&packet, packet.hdr.len);
|
||||
@@ -596,14 +598,14 @@ static int hvsi_set_mctrl(struct hvsi_struct *hp, uint16_t mctrl)
|
||||
struct hvsi_control packet __ALIGNED__;
|
||||
int wrote;
|
||||
|
||||
packet.hdr.type = VS_CONTROL_PACKET_HEADER,
|
||||
packet.hdr.seqno = atomic_inc_return(&hp->seqno);
|
||||
packet.hdr.type = VS_CONTROL_PACKET_HEADER;
|
||||
packet.hdr.seqno = cpu_to_be16(atomic_inc_return(&hp->seqno));
|
||||
packet.hdr.len = sizeof(struct hvsi_control);
|
||||
packet.verb = VSV_SET_MODEM_CTL;
|
||||
packet.mask = HVSI_TSDTR;
|
||||
packet.verb = cpu_to_be16(VSV_SET_MODEM_CTL);
|
||||
packet.mask = cpu_to_be32(HVSI_TSDTR);
|
||||
|
||||
if (mctrl & TIOCM_DTR)
|
||||
packet.word = HVSI_TSDTR;
|
||||
packet.word = cpu_to_be32(HVSI_TSDTR);
|
||||
|
||||
pr_debug("%s: sending %i bytes\n", __func__, packet.hdr.len);
|
||||
dbg_dump_hex((uint8_t*)&packet, packet.hdr.len);
|
||||
@@ -680,7 +682,7 @@ static int hvsi_put_chars(struct hvsi_struct *hp, const char *buf, int count)
|
||||
BUG_ON(count > HVSI_MAX_OUTGOING_DATA);
|
||||
|
||||
packet.hdr.type = VS_DATA_PACKET_HEADER;
|
||||
packet.hdr.seqno = atomic_inc_return(&hp->seqno);
|
||||
packet.hdr.seqno = cpu_to_be16(atomic_inc_return(&hp->seqno));
|
||||
packet.hdr.len = count + sizeof(struct hvsi_header);
|
||||
memcpy(&packet.data, buf, count);
|
||||
|
||||
@@ -697,9 +699,9 @@ static void hvsi_close_protocol(struct hvsi_struct *hp)
|
||||
struct hvsi_control packet __ALIGNED__;
|
||||
|
||||
packet.hdr.type = VS_CONTROL_PACKET_HEADER;
|
||||
packet.hdr.seqno = atomic_inc_return(&hp->seqno);
|
||||
packet.hdr.seqno = cpu_to_be16(atomic_inc_return(&hp->seqno));
|
||||
packet.hdr.len = 6;
|
||||
packet.verb = VSV_CLOSE_PROTOCOL;
|
||||
packet.verb = cpu_to_be16(VSV_CLOSE_PROTOCOL);
|
||||
|
||||
pr_debug("%s: sending %i bytes\n", __func__, packet.hdr.len);
|
||||
dbg_dump_hex((uint8_t*)&packet, packet.hdr.len);
|
||||
@@ -1180,7 +1182,7 @@ static int __init hvsi_console_init(void)
|
||||
/* search device tree for vty nodes */
|
||||
for_each_compatible_node(vty, "serial", "hvterm-protocol") {
|
||||
struct hvsi_struct *hp;
|
||||
const uint32_t *vtermno, *irq;
|
||||
const __be32 *vtermno, *irq;
|
||||
|
||||
vtermno = of_get_property(vty, "reg", NULL);
|
||||
irq = of_get_property(vty, "interrupts", NULL);
|
||||
@@ -1202,11 +1204,11 @@ static int __init hvsi_console_init(void)
|
||||
hp->index = hvsi_count;
|
||||
hp->inbuf_end = hp->inbuf;
|
||||
hp->state = HVSI_CLOSED;
|
||||
hp->vtermno = *vtermno;
|
||||
hp->virq = irq_create_mapping(NULL, irq[0]);
|
||||
hp->vtermno = be32_to_cpup(vtermno);
|
||||
hp->virq = irq_create_mapping(NULL, be32_to_cpup(irq));
|
||||
if (hp->virq == 0) {
|
||||
printk(KERN_ERR "%s: couldn't create irq mapping for 0x%x\n",
|
||||
__func__, irq[0]);
|
||||
__func__, be32_to_cpup(irq));
|
||||
tty_port_destroy(&hp->port);
|
||||
continue;
|
||||
}
|
||||
|
Reference in New Issue
Block a user